7

在过去,我会创建一个 TForm,在其上放置一个 TMyPanel(带有覆盖的 WM_PAINT 消息)并将其句柄传递给一堆 WGL 函数,这些函数可以找到兼容的像素格式并创建渲染上下文。就像 NeHe 教程一样。

现在有了 FireMonkey 应用程序。如何获得适用于 Win 和 iOS 的 OpenGL 1.4 渲染上下文?

编辑:一直试图通过传递 TForm.Handle (即 NativeUInt)使其工作。好消息 - OpenGL 端没有错误,但坏消息 - TForm 上也没有输出。我显然在这里遗漏了一些关键部分,是否有人在 FireMonkey 应用程序中有工作的 OpenGL?

4

2 回答 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- 苹果电脑

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

您还可以TPlatformFMX.Platform.pas其中隐藏实现细节并发布旨在在所有平台上工作的单个 API(范围有限)。

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

如果您使用FMX.Platform.Mac.pas,您可以获得IObjectiveC给定的TFmxHandle

但是在 IOS 上没有等效的功能FMX_Platform_iOS.pas

于 2011-10-13T13:15:08.567 回答
2

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

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

于 2011-10-19T18:45:30.077 回答