如何使用Delphi XE5在Android上访问OpenGL渲染上下文?

前端之家收集整理的这篇文章主要介绍了如何使用Delphi XE5在Android上访问OpenGL渲染上下文?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用Delphi XE5开发应用程序时,如何在 Android设备上创建OpenGL渲染上下文?

基本上我不知道从哪里开始.还没有OpenGL的例子.

我期待的存在:

>某种类型的事件(Panel.OnRender)将提供一个可以调用OpenGL调用的现有上下文.
>可以放在表单设计器中的通用TOpenGLSurface控件
>在运行时在主窗体上创建上下文的方法.

从我迄今为止的研究中,TWindowManager.Render可以访问OpenGL调用,并使用它们来渲染弹出窗口.

编辑:将一个计时器添加到窗体并调用此过程将绿色填充屏幕,这意味着GL上下文已经存在:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0,1,0);
  glClear(GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
  eglSwapBuffers(TCustomAndroidContext.SharedDisplay,TCustomAndroidContext.SharedSurface);
end;

问题是 – 如何正确处理它,在受控环境中的定时器的cos渲染绝对是一个坏主意.

解决方法

新的细节显示,我将追加到这个答案.

尝试1

将一个计时器添加到表单并调用此过程将绿色填充屏幕,TCustomAndroidContext.SharedSurface); end;

当然,在控制环境下渲染定时器绝对是一个坏主意.应用程序在最小化/最大化时保持闪烁.

尝试2

我已经覆盖了TContextAndroid类(制作了一个Delphi单元的副本,并将其放在我的应用程序文件夹中).我可以将自定义代码注入DoEndScene方法,并且已经成功执行了它 – 对于这个测试只是一个简单的glClear(GL_COLOR_BUFFER_BIT);这已经用颜色填充了整个应用程序区域.这一次,应用程序没有闪烁,表现得像正常一样.

尝试3

这是代码,使其工作,并不看起来很黑客:

types
  TMyForm = class(TForm3D)
    procedure Form3DRender(Sender: TObject; Context: TContext3D);
  end;

implementation

//Event handler for TForm.OnRender
procedure TMyForm.Form3DRender(Sender: TObject; Context: TContext3D);
begin
  glClearColor(1,1);
  glClear(GL_COLOR_BUFFER_BIT);
end;

猜你在找的Delphi相关文章