#android #flutter #egl
#Android #flutter #egl
Вопрос:
Я использую виджет текстуры, отображающий его содержимое из собственного кода с использованием OpenGL ES. В машинном коде я вызываю ANativeWindow_fromSurface
и из этого создаю поверхность EGL. AIUI, что происходит:
ANativeWindow
Представляет сторону производителя очереди буфера.- Вызов
eglSwapBuffers
вызывает отправку текстуры в эту очередь. - Flutter получает текстуру и отображает ее с помощью Skia при
TextureLayer
рисовании. - Текстура масштабируется в соответствии с размером
TextureLayer
(масштабирование происходит вAndroidExternalTextureGL::Paint()
).
Я пытаюсь выяснить, как синхронизировать рендеринг OpenGL. Я думаю, что могу использовать choreographer для синхронизации с display vsync, но мне неясно, какую задержку вводит этот механизм bufferqueue-then-render-with-skia. Я не вижу никаких средств для явной синхронизации генерации текстур моего собственного кода с TextureLayer
их рисованием.
Масштабирование представляется особенно сложным аспектом. Я хотел бы полностью избежать этого, убедившись, что текстуры, генерируемые машинным кодом, всегда имеют правильный размер. Однако, похоже, нет никакой прямой связи между размером TextureLayer
и размером Surface / ANativeWindow. Я мог бы использовать SizeChangedLayoutNotifier (или один из различных альтернативных хаков) для обнаружения изменений размера и передачи их в машинный код, но я думаю, что это будет отставать как минимум на кадр, поэтому масштабирование все равно будет происходить при изменении размера.
Я обнаружил эту проблему, в которой говорится об аналогичных проблемах с изменением размера, но в контексте использования веб-представления OEM. Я не понимаю подробного предложения Hixie по этому вопросу, но, похоже, оно специфично для встраивания представлений OEM, поэтому я не думаю, что это поможет в моем случае.
Возможно, использование виджета текстуры здесь — неправильный подход. Похоже, он предназначен в основном для отображения таких вещей, как видео и превью камеры. Есть ли другой способ разместить изначально отображаемую интерактивную графику OpenGL во Flutter?
Комментарии:
1. Возможно, связано: проблема с флаттером: поддержка привязок OpenGL для iOS и Android #64882