В настоящее время я разрабатываю некоторые приложения EGL 1.4/OpenGL ES 2.0 на C++ на платформе Embedded Linux/ARM, которая не имеет оконной системы.
По сути, я хочу поделиться текстурами/буферами рендеринга между независимыми приложениями — назовем их приложением «А» и приложением «Б».
Для этого я сначала подумал о загрузке буфера рендеринга с помощью glReadPixels() (из приложения A) в буфер, который находится в общей памяти, а затем открыть эту общую память из приложения B и загрузить буфер с помощью glTexImage2D() или glTexSubImage2D() .
После некоторого первоначального тестирования выяснилось, что это довольно неэффективный/медленный метод. Поэтому я решил использовать расширения платформы EGL/GLES, которые (как возвращаются eglQueryString() и glGetString()) включают:
Моя цель теперь состоит в том, чтобы создать EGLImage в приложении A (например, из текстуры GL, используя EGLImageKHR sharedEglImage = eglCreateImageKHR(dpy, ctx, EGL_GL_TEXTURE_2D_KHR, textureId, imageAttributes) ), а затем поделиться этим самым sharedEglImage с приложением B, чтобы его можно было отобразить как пиксельные данные одной из собственных текстур GL приложения B, используя glEGLImageTargetTexture2DOES() .
Однако, как и большинство абстракций EGL/GL, EGLImage является непрозрачной структурой (то есть просто void* ), не имеет смысла сопоставлять ее с разделяемой памятью, чтобы совместно использовать ее между процессами. Отсюда мой вопрос:
Есть ли способ поделиться EGLImage между независимыми процессами?
Спасибо !