2011-10-12 56 views
7

在以前的日子裏,我會創建一個TForm,在其上放置一個TMyPanel(帶有override WM_PAINT消息),並將其Handle傳遞給一堆WGL函數,這些函數可以找到兼容的pixelformat並創建渲染上下文。就像NeHe教程做的那樣。如何在Firemonkey應用程序中設置OpenGL1.4環境?

現在有FireMonkey應用程序。如何獲得在Win和iOS上工作的OpenGL 1.4渲染上下文?

編輯:一直試圖通過傳遞TForm.Handle(這是NativeUInt)使其工作。好消息 - 從OpenGL結束沒有錯誤,但壞消息 - 在TForm沒有輸出..我顯然在這裏缺少一些關鍵的一塊,有沒有人在Fi​​reMonkey應用程序中有一個工作的OpenGL?

回答

2

經過一番調查後,我在Windows平臺上的FireMonkey中創建了OpenGL上下文。我還沒有訪問iOS,但我相信在那裏也可以做些什麼。

解決方案:將FMX.Platform.Win添加到uses子句(可能需要將其包裝到iOS的IFDEF中)。現在我們可以用FmxHandleToHWND(Form1.Handle)得到有效的HWND。而已。在MacOS上,通過添加FMX.Platform.Win和通過H_WND := FmxHandleToObjC(AHandle);調用完成相同的操作。

2

Firemonkey提供了一個抽象層。

因此,在Windows上使用DirectX,在OSX和iOS上使用OpenGL/Quartz。 在windows上,它也有可能回退到GDI +

鑑於這一點必須考慮到渲染目標可能不總是OpenGL,即使在同一平臺上它可能也不總是相同的。

TCanvas在這個抽象層的一部分。

TCanvas有3個當前實現,您的應用程序可能正在使用其中的任何一種。

  • FMX.Canvas.D2D.pas - Direct2D的
  • FMX.Canvas.GDIP.pas - GDI +
  • FMX.Canvas.Mac.pas - 蘋果

平臺的實現細節通常隱藏在私有部分是不可訪問。

您還可以在FMX.Platform.pas其中隱藏實現細節和公佈,旨在對所有平臺上運行一個單一的API(包括但不限於)TPlatform

如果使用FMX.Platform.Win.pas你可以得到窗口辦理指定TFmxHandle

如果使用FMX.Platform.Mac.pas你可以得到IObjectiveC對於給定TFmxHandle

但是在IOS存在FMX_Platform_iOS.pas

沒有同等功能
+0

你的回答很好,但它不允許我實現我的目標。似乎TfmxHandle有什麼問題。 – Kromster

相關問題