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

标签 android delphi opengl-es delphi-xe5

在使用 Delphi XE5 开发应用程序时,如何在 Android 设备上创建 OpenGL 渲染上下文?

基本上我不知道从哪里开始。目前还没有 OpenGL 示例。

我希望存在的东西:

  • 某种事件 (Panel.OnRender) 可以提供我可以在其中调用 OpenGL 调用的现有上下文。

  • 可以放置在窗体设计器中的通用 TOpenGLSurface 控件

  • 一种在运行时在主窗体上创建上下文的方法。

根据我目前的研究,TWindowManager.Render 可以访问 OpenGL 调用并使用它们来呈现弹出窗口。

编辑: 将计时器添加到表单并调用此过程会使屏幕充满绿色,这意味着 GL 上下文已经存在:

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

问题是 - 如何正确处理它,因为在受控环境中在 Timer 上渲染绝对不是一个好主意。

最佳答案

我将在新的详细信息显示时附加到此答案。

尝试 1

将计时器添加到表单并调用此过程会使屏幕充满绿色,这意味着 GL 上下文已经存在:

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

当然,在受控环境中在 Timer 上渲染绝对不是一个好主意。该应用程序在最小化/最大化时一直闪烁。


尝试 2

我已经覆盖了 TContextAndroid 类(制作了 Delphi 单元的副本并将其放入我的应用程序文件夹中)。我能够将自定义代码注入(inject) 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, 0, 1);
  glClear(GL_COLOR_BUFFER_BIT);
end;

关于android - 如何使用 Delphi XE5 在 Android 上访问 OpenGL 渲染上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18856428/

相关文章:

android - y 轴上的 OpenGL 反转

android - 禁用点击

Android - 如何在带有 ✔ 的按钮上设置文本颜色作为 Android M 上的文本

android - 如何以编程方式获取 Firebase 中的注册用户列表

c++ - 从另一个应用程序窗口获取焦点控件的句柄

delphi - 我可以即时更改控件布局吗?

opengl-es - WebGL/OpenGL : Rotate camera according to device orientation

android - PullToRefresharp 在设备上不起作用

delphi - 为什么 object 不默认为零?

ios - 如何处理IOS图像裁剪中的图像旋转问题