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

7
在以前的日子里,我会创建一个TForm,在上面放置一个TMyPanel(重写了WM_PAINT消息),并将其句柄传递给一组WGL函数,找到兼容的像素格式并创建渲染上下文。就像NeHe教程一样。
现在出现了FireMonkey应用程序。如何在Win和iOS上获取OpenGL 1.4渲染上下文?
编辑:我试图通过传递TForm.Handle(NativeUInt)来使它工作。好消息是OpenGL没有发生错误,但坏消息是TForm上也没有输出.. 我显然缺少一些关键的东西,有人有一个在FireMonkey应用程序中工作的OpenGL吗?
2个回答

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

平台实现细节通常隐藏在私有部分中,不可访问。

您还可以在FMX.Platform.pas中使用TPlatform,它隐藏了实现细节并发布了一个单一的API(范围有限),旨在适用于所有平台。

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

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

但是,在IOS上,FMX_Platform_iOS.pas中没有相应的函数。


你的回答很好,但是它还没有帮助我实现我的目标。似乎那个TfmxHandle出了点问题。 - Kromster

2

经过一些调查,我已经成功在Windows平台上创建了FireMonkey中的OpenGL上下文。我目前还没有接触过iOS,但我相信在那里也可以做些什么。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接