如何在Firemonkey应用程序中设置OpenGL1.4环境?

时间:2011-10-12 18:11:25

标签: delphi opengl delphi-xe2 firemonkey

在旧时代,我将创建一个TForm,在其上放置一个TMyPanel(覆盖WM_PAINT消息)并将其Handle传递给一堆WGL函数,这些函数找到兼容的pixelformat并创建渲染上下文。就像NeHe教程一样。

现在有FireMonkey应用程序。如何在Win和iOS上运行OpenGL 1.4渲染上下文?

编辑:尝试通过传递TForm.Handle(即NativeUInt)来使其工作。好消息 - 没有来自OpenGL的错误,但坏消息 - 在TForm上也没有输出..我显然在这里缺少一些关键部分,是否有人在Fi​​reMonkey应用程序中有一个可用的OpenGL?

2 个答案:

答案 0 :(得分:2)

Firemonkey提供了一个抽象层。

所以在Windows上使用DirectX,在OSX和iOS上使用OpenGL / Quartz。 在Windows上,事情也可能回归到GDI +

鉴于此,必须考虑到渲染目的地可能并不总是OpenGL,即使在同一平台上也可能并不总是相同。

TCanvas在此抽象层的一部分。

目前有3个TCanvas的实现,您的应用程序可能正在使用其中任何一个。

  • FMX.Canvas.D2D.pas - Direct2d
  • FMX.Canvas.GDIP.pas - GDI +
  • FMX.Canvas.Mac.pas - Mac

平台实现细节通常隐藏在无法访问的私有部分中。

TPlatform中还有FMX.Platform.pas隐藏了实施细节,并发布了一个专为所有平台设计的API(范围有限)。

如果您使用FMX.Platform.Win.pas,则可以获取给定TFmxHandle

的窗口句柄

如果您使用FMX.Platform.Mac.pas,则可以获得给定IObjectiveC的{​​{1}}

但在IOS上,TFmxHandle

中没有等效功能

答案 1 :(得分:2)

经过一些调查后,我设法在Windows平台上的FireMonkey中创建了OpenGL上下文。我还没有访问iOS,但我确信也可以在那里完成。

解决方案:将FMX.Platform.Win添加到uses子句(可能需要将其包装到IFDEF的iOS中)。现在我们可以使用FmxHandleToHWND(Form1.Handle)来获得有效的HWND。而已。在MacOS上,通过添加FMX.Platform.WinH_WND := FmxHandleToObjC(AHandle);调用即可完成相同操作。