在使用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;