как показать изображение без SurfaceFlinger на Android

Как нарисовать что-то перед запуском Surfacefligner на Android?

В этой ситуации это какой-то традиционный Linux с устройством фреймбуфера, поэтому прямой доступ к фреймбуферу должен быть в порядке.

Как насчет использования HWComposer напрямую и как насчет использования egl напрямую?


person XYL    schedule 16.05.2014    source источник


Ответы (1)


Если SurfaceFlinger не запущен, вы можете просто открыть устройство фреймбуфера и записать в него (при условии, что вы используете устройство, которое имеет устройство фреймбуфера).

В качестве примера см. реализацию пользовательского интерфейса «восстановления». Ключевой файл там minui/graphics.c< /а>. Текущая реализация основана на libpixelflinger.

Использование OpenGL ES/EGL будет немного сложнее. Некоторые из ранних тестов GLES, такие как San Анджелес, используйте FramebufferWindow , но он использует довольно много фреймворка. (FWIW, ожидается, что в следующем выпуске FramebufferWindow будет объявлен устаревшим, а тесты OpenGL, которые их используют, будут заменены новой библиотекой, взаимодействующей с SurfaceFlinger.)

Обновление: вышел предстоящий выпуск, и вы можете увидеть замену FramebufferWindow ("WindowSurface") здесь.

Если SurfaceFlinger не запущен, вы можете напрямую обратиться к HardwareComposer, используя файл внутренний интерфейс. Есть несколько старых тестов Вот и тренируйтесь, но я не знаю, работают ли они до сих пор. Код в SurfaceFlinger, вероятно, является лучшим примером на данный момент. Только один процесс может одновременно открывать HardwareComposer, поэтому SurfaceFlinger не должен быть запущен.

person fadden    schedule 16.05.2014
comment
Спасибо за ответ. Я научился рисовать что-то напрямую через интерфейс HWC, без GLES, без FB. Это своего рода хак для подготовки данных для структуры HWC и вызова commit() для вывода растрового изображения на экран. - person XYL; 31.08.2015