Контекст 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 получает - это готовый продукт.
Система подробно описана в документе по графической архитектуре.