2011-10-12 11 views
7

W dawnych czasach tworzyłem TForm, umieszczałem na nim TMyPanel (z overriden WM_PAINT message) i przekazywałem jego Handle do garść funkcji WGL, które znajdują zgodny format pikseli i tworzą kontekst renderowania. Tak samo zrobiły tutoriale NeHe.Jak skonfigurować środowisko OpenGL1.4 w aplikacji Firemonkey?

Teraz pojawia się aplikacja FireMonkey. Jak uzyskać kontekst renderowania OpenGL 1.4 działający na Win i iOS?

EDYCJA: Próbowałem go uruchomić, przekazując TForm.Handle (który jest NativeUInt). Dobra wiadomość - nie ma błędów z OpenGL, ale złe wieści - nie ma też wyjścia na TFormie. Oczywiście brakuje tu jakiegoś krytycznego elementu, czy ktoś ma działającą OpenGL w aplikacji FireMonkey?

Odpowiedz

2

Po pewnych badaniach udało mi się stworzyć kontekst OpenGL w FireMonkey na platformie Windows. Nie mam jeszcze dostępu do systemu iOS, ale jestem pewien, że można tam również coś zrobić.

Do rozwiązania: dodaj klauzulę FMX.Platform.Win do uses (może być konieczne zapakowanie jej w IFDEF dla iOS). Teraz możemy użyć FmxHandleToHWND(Form1.Handle), aby uzyskać poprawny HWND. To jest to. W systemie MacOS to samo dzieje się poprzez dodanie FMX.Platform.Win i wywołanie H_WND := FmxHandleToObjC(AHandle);.

2

Firemonkey zapewnia warstwę abstrakcji.

Tak więc w Windows korzystasz z DirectX oraz na OS X i iOS używając OpenGL/Quartz. W przypadku okien możliwe jest również powrót do GDI +

Biorąc to pod uwagę, należy wziąć pod uwagę, że miejsce docelowe renderowania nie zawsze może być OpenGL i nie zawsze może być takie samo, nawet na tej samej platformie.

TCanvas w części tej warstwy abstrakcji.

Dostępne są 3 bieżące implementacje TCanvas, aplikacja może używać dowolnego z nich.

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

Dane wdrożeniowe platformy są zwykle ukryte w sekcjach prywatnych nie są dostępne.

Masz również TPlatform w FMX.Platform.pas, który ukrywa szczegóły implementacji i publikuje pojedynczy interfejs API (ograniczony w zakresie), który został zaprojektowany do pracy na wszystkich platformach.

Jeśli używasz FMX.Platform.Win.pas można dostać okna uchwyt dla danego TFmxHandle

Jeśli używasz FMX.Platform.Mac.pas można uzyskać IObjectiveC dla danego TFmxHandle

Jednak na IOS nie ma odpowiednika funkcji w FMX_Platform_iOS.pas

+0

Twoja odpowiedź jest dobra, ale jeszcze nie pozwolił mi osiągnąć mojego celu. Wygląda na to, że coś jest nie tak z tym TfmxHandle. – Kromster

Powiązane problemy