Контекст OpenGL между APP и Surfaceflinger в Android

Как я знаю до сих пор, Surfaceflinger предоставляет поверхности APP для рендеринга, а затем объединяет все поверхности в окончательный экран. (Если какая-либо ошибка, пожалуйста, укажите Thx).

Первый вопрос: действительно ли поверхность, созданная Surfaceflinger, доступна для всех процессов. (память на поверхности находится в памяти GPU?)

Хотя, как я гуглил, невозможно разделить контекст openGL между процессами (здесь я имею в виду процесс APP и процесс Surfaceflinger). Я не уверен, если так, чтобы память GPU использовалась поверхностью?

Если ответ на мой первый вопрос - да, то есть ли какое-либо совместное использование ресурса openGL для Surfaceflinger, когда приложение отображается на поверхности? И как работали эти осколки, включая память о поверхности?

1 ответ

Решение

Есть разница между Android Surface и EGL Surface, Они тесно связаны, но это не одно и то же.

Поверхности EGL, созданные такими методами, как eglCreateWindowSurface(), могут быть связаны с контекстом EGL и использоваться в качестве целей для рендеринга. Они не могут быть разделены между процессами.

Поверхности Android - это просто оболочки для объектов BufferQueue, которые обеспечивают способ перемещения графических буферов по всей системе. Буфер, в который приложение выполняет рендеринг, может быть передан между приложением и SurfaceFlinger, но ни одно из состояний EGL не передается. Все, что SurfaceFlinger получает - это готовый продукт.

Система подробно описана в документе по графической архитектуре.

Другие вопросы по тегам