Как настроить среду OpenGL1.4 в приложении Firemonkey?

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

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

EDIT: пытался заставить его работать, передавая TForm.Handle (который является NativeUInt). Хорошие новости - никаких ошибок от OpenGL не заканчиваются, но плохие новости - нет вывода и на TForm. Я явно упускаю здесь какую-то важную часть, есть ли у кого-нибудь работающий OpenGL в приложении FireMonkey?


person Kromster    schedule 12.10.2011    source источник


Ответы (2)


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

Итак, в Windows вы используете DirectX, а в OSX и iOS — OpenGL/Quartz. В Windows также возможно вернуться к GDI+.

Учитывая это, необходимо учитывать, что местом назначения рендеринга не всегда может быть OpenGL, и он может не всегда быть одним и тем же даже на одной и той же платформе.

TCanvas в части этого уровня абстракции.

Существует 3 текущие реализации TCanvas, ваше приложение может использовать любую из них.

  • FMX.Canvas.D2D.pas - Директ2д
  • FMX.Canvas.GDIP.pas — GDI+
  • FMX.Canvas.Mac.pas - Мак

Детали реализации платформы обычно скрыты в приватных разделах и недоступны.

У вас также есть TPlatform в FMX.Platform.pas, который скрывает детали реализации и публикует единый API (ограниченный по объему), предназначенный для работы на всех платформах.

Если вы используете FMX.Platform.Win.pas, вы можете получить дескриптор окна для данного TFmxHandle

Если вы используете FMX.Platform.Mac.pas, вы можете получить IObjectiveC для данного TFmxHandle

Однако в IOS нет эквивалентной функции в FMX_Platform_iOS.pas

person Robert Love    schedule 13.10.2011
comment
Ваш ответ хорош, но пока он не позволил мне достичь моей цели. Похоже, что-то не так с этим TfmxHandle. - person Kromster; 18.10.2011

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

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

person Kromster    schedule 19.10.2011