Intereting Posts
Программировать поворот с возможностью поворота или просмотра Разбиение большого текста на страницы в текстовом переключателе android Тестирование устройств Android с помощью Junit: тестирование сетевых / bluetooth-ресурсов UnsatisfiedLInkError Ссылка на FFMPEG с NDK ProgressBars и Espresso Android, Gradle. Как создать приложение и запустить тесты из тестового приложения Msgstr "эмулятор: предупреждение: открытие аудиовхода не удалось" отображается в консоли при запуске AVD Показ неопределенного прогресса в Школе Action Bar Двухсторонняя синхронизация файлов cookie между HttpURLConnection (java.net.CookieManager) и WebView (android.webkit.CookieManager) Как разработать мягкую клавиатуру для Android? Получить UID Linux для Android-приложения Как установить все приложение только в портретном режиме? Android 4.2.2 делает иконку и заголовок значка программы активным, как будто часть одной и той же кнопки Как предотвратить обратное проектирование файла APK Android для защиты кода? Лучший способ периодически выполнять действие – Обработчик?

Как получить доступ к контексту рендеринга OpenGL на Android с помощью Delphi XE5?

Как создать контекст рендеринга OpenGL на устройстве Android при разработке приложения с помощью Delphi XE5?

В основном я не знаю, с чего начать. Пока нет примеров OpenGL.

Я бы ожидал существования:

  • Некоторое событие (Panel.OnRender), которое предоставило бы существующий контекст, в котором я мог бы называть вызовы OpenGL.

  • Общий контроль над областью TOpenGLS, который можно разместить в дизайнере форм

  • Способ создания контекста в основной форме во время выполнения.

Из моих исследований до сих пор, что TWindowManager.Render имеет доступ к вызовам OpenGL и использует их для отображения всплывающих окон.

EDIT: добавление таймера в форму и вызов этой процедуры заполняет экран зеленым цветом, поэтому контекст GL уже существует:

 procedure TForm1.Timer1Timer(Sender: TObject); begin glClearColor(0, 1, 0, 0); glClear(GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT or GL_COLOR_BUFFER_BIT); eglSwapBuffers(TCustomAndroidContext.SharedDisplay, TCustomAndroidContext.SharedSurface); end; 

Вопрос в том, как правильно его обрабатывать, поскольку рендеринг на Timer в контролируемой среде определенно является плохим.

Solutions Collecting From Web of "Как получить доступ к контексту рендеринга OpenGL на Android с помощью Delphi XE5?"

Я собираюсь добавить этот ответ, когда появятся новые детали.

Попытка 1

Добавление таймера в форму и вызов этой процедуры заполняет экран зеленым цветом, поэтому контекст GL уже существует:

 procedure TForm1.Timer1Timer(Sender: TObject); begin glClearColor(0, 1, 0, 0); glClear(GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT or GL_COLOR_BUFFER_BIT); eglSwapBuffers(TCustomAndroidContext.SharedDisplay, TCustomAndroidContext.SharedSurface); end; 

Конечно, рендеринг по таймеру в контролируемой среде – определенно плохая идея. Приложение постоянно мерцало при минимизации / максимизации.


Попытка 2

Я переопределил класс TContextAndroid (сделал копию блока Delphi и поместил его в папку с моим приложением). Я смог ввести пользовательский код в метод DoEndScene и он успешно выполнил его – для этого теста просто простой glClear(GL_COLOR_BUFFER_BIT); , Это заполнило всю область приложения цветом. На этот раз приложение не мерцало и вел себя так же, как обычно.


Попытка 3

Вот код, который заставил его работать, и это не выглядит взломанным:

 types TMyForm = class(TForm3D) procedure Form3DRender(Sender: TObject; Context: TContext3D); end; implementation //Event handler for TForm.OnRender procedure TMyForm.Form3DRender(Sender: TObject; Context: TContext3D); begin glClearColor(1, 1, 0, 1); glClear(GL_COLOR_BUFFER_BIT); end;