Как настроить среду OpenGL1.4 в приложении Firemonkey? - PullRequest
7 голосов
/ 12 октября 2011

В прежние времена я создавал TForm, помещал на него TMyPanel (с переопределенным сообщением WM_PAINT) и передавал его дескриптор куче функций WGL, которые находят совместимый пиксельный формат и создают контекст рендеринга. Так же, как это сделали учебники NeHe.

Теперь приходит приложение FireMonkey. Как получить контекст рендеринга OpenGL 1.4 там, который работает на Win и iOS?

РЕДАКТИРОВАТЬ: Попытка заставить его работать, передав TForm.Handle (который является NativeUInt). Хорошие новости - никаких ошибок со стороны OpenGL, но плохие новости - никаких выходных данных и по TForm ... Я, очевидно, упускаю какую-то критическую часть, есть ли у кого-нибудь работающий OpenGL в приложении FireMonkey?

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

После некоторых исследований мне удалось создать контекст OpenGL в FireMonkey на платформе Windows.У меня пока нет доступа к iOS, но я уверен, что там тоже можно что-то сделать.

К решению: добавьте предложение FMX.Platform.Win в uses (может потребоваться заключить его в IFDEF для iOS).Теперь мы можем использовать FmxHandleToHWND(Form1.Handle), чтобы получить HWND.Это оно.В MacOS то же самое делается путем добавления FMX.Platform.Win и вызова H_WND := FmxHandleToObjC(AHandle);.

2 голосов
/ 13 октября 2011

Firemonkey предоставляет уровень абстракции.

Таким образом, в Windows вы используете DirectX, а в OSX и iOS - OpenGL / Quartz.В окнах также возможно, что вещи вернутся к 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

...