2011-10-12 30 views
7

En días anteriores, creaba un TForm, colocaba un TMyPanel (con el mensaje WM_PAINT modificado) y pasaba su Handle a un conjunto de funciones de WGL que encontraban un formato de píxeles compatible y creaban un contexto de representación. Al igual que los tutoriales de NeHe lo hicieron.¿Cómo configurar el entorno OpenGL1.4 en la aplicación Firemonkey?

Ahora viene la aplicación FireMonkey. ¿Cómo obtener el contexto de renderización de OpenGL 1.4 allí que está trabajando en Win e iOS?

EDIT: Intentando hacer que funcione al pasar TForm.Handle (que es NativeUInt). Buenas noticias: no hay errores desde el final de OpenGL, pero malas noticias. Tampoco hay salida en TForm. Obviamente me falta algo importante aquí, ¿alguien tiene un OpenGL en funcionamiento en la aplicación FireMonkey?

Respuesta

2

Después de algunas investigaciones, he logrado crear el contexto de OpenGL en FireMonkey en la plataforma de Windows. Todavía no tengo acceso a iOS, pero estoy seguro de que también se puede hacer algo allí.

Para la solución: agregue FMX.Platform.Win a la uses cláusula (puede que necesite encerrarlo en IFDEF para iOS). Ahora podemos usar FmxHandleToHWND(Form1.Handle) para obtener HWND válido. Eso es. En MacOS, lo mismo se hace agregando FMX.Platform.Win y llamando al H_WND := FmxHandleToObjC(AHandle);.

2

Firemonkey proporciona una capa de abstracción.

Por lo tanto, en Windows está usando DirectX y en OSX e iOS usando OpenGL/Quartz. En Windows también es posible que las cosas retrocedan a GDI +

Dado esto, debe tenerse en cuenta que el destino de la renderización puede no ser siempre OpenGL, y puede no ser siempre el mismo incluso en la misma plataforma.

TCanvas en parte de esta capa de abstracción.

Hay 3 implementaciones actuales de TCanvas, su aplicación puede estar utilizando cualquiera de estos.

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

Los detalles de la implementación de la plataforma suelen estar ocultas en las secciones privadas son no son accesibles.

También tiene TPlatform en FMX.Platform.pas que oculta los detalles de implementación y publica una única API (de alcance limitado) diseñada para funcionar en todas las plataformas.

Si utiliza FMX.Platform.Win.pas puede obtener las ventanas de manejar para un determinado TFmxHandle

Si utiliza FMX.Platform.Mac.pas se puede obtener el IObjectiveC para un determinado TFmxHandle

Sin embargo en IOS no hay una función equivalente en FMX_Platform_iOS.pas

+0

Tu respuesta es buena, pero aún no me ha permitido alcanzar mi objetivo. Parece que algo está mal con ese TfmxHandle. – Kromster

Cuestiones relacionadas