Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Настройка окружения OpenGL 1.4 в FireMonkey и получение контекста рендеринга на Windows и iOS

Delphi , Графика и Игры , OpenGL

В старые времена для создания OpenGL-рендеринга в приложениях Delphi мы бы создавали TForm, размещали на нем TMyPanel с переопределенным сообщением WM_PAINT и передавали его Handle в функции WGL для поиска совместимого формата пикселя и создания контекста рендеринга. В то время как FireMonkey приложение предлагает абстракцию, которая отличается от этого подхода. В этой статье мы рассмотрим, как получить контекст рендеринга OpenGL 1.4 в FireMonkey приложении, которое работает на Windows и iOS.

FireMonkey предоставляет слой абстракции, который на Windows использует DirectX, а на OSX и iOS использует OpenGL/Quartz. На Windows также возможно, что вещи могут упасть на GDI+. Из-за этого важно учитывать, что цель рендеринга может не всегда быть OpenGL, и она может не всегда быть одинаковой даже на одной и той же платформе.

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

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

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

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

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

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

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

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

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

Пример кода на Object Pascal (Delphi) для получения контекста рендеринга OpenGL в FireMonkey приложении на Windows:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FMX.Platform.Win;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
var
  hWnd: HWND;
begin
  hWnd := FmxHandleToHWND(Handle);
  // Здесь вы можете использовать hWnd для создания контекста рендеринга OpenGL
end;

end.

Обратите внимание, что для получения контекста рендеринга OpenGL в FireMonkey приложении на iOS может потребоваться другой подход, так как нет эквивалентной функции в FMX_Platform_iOS.pas.

Создано по материалам из источника по ссылке.

В данном тексте речь идет о процессе настройки окружения OpenGL 1.4 в FireMonkey и получении контекста рендеринга на Windows и iOS.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OpenGL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 19:03:19/0.0038361549377441/0