如何在Firemonkey应用程序中设置OpenGL1.4环境?
在较早的日子里,我会创建一个TForm,在其上放置一个TMyPanel(带有override WM_PAINT消息)并将其Handle传递给一堆WGL函数,这些函数可以找到兼容的像素格式并创建渲染上下文。 就像NeHe教程做的那样。
现在有FireMonkey应用程序。 如何获得在Win和iOS上工作的OpenGL 1.4渲染上下文?
编辑:一直试图通过传递TForm.Handle(这是NativeUInt)使其工作。 好消息 - 从OpenGL结束没有错误,但坏消息 - 在TForm没有输出..我显然在这里缺少一些关键的一块,有没有人在FireMonkey应用程序中有一个工作的OpenGL?
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
对于给定TFmxHandle
但是在IOS中, FMX_Platform_iOS.pas
没有等效的功能
经过一番调查后,我在Windows平台上的FireMonkey中创建了OpenGL上下文。 我还没有访问iOS,但我相信在那里也可以做些什么。
解决方案:将FMX.Platform.Win
添加到uses
子句(可能需要将其包装到iOS的IFDEF
)。 现在我们可以使用FmxHandleToHWND(Form1.Handle)
来获取有效的HWND
。 而已。 在MacOS上,通过添加FMX.Platform.Win
并通过H_WND := FmxHandleToObjC(AHandle);
呼叫。