[英]Share an EGLImage Between Different Applications / Processes on Embedded Linux / ARM
我目前正在不具有任何窗口系統的嵌入式Linux / ARM平台上以C ++設計一些EGL 1.4 / OpenGL ES 2.0應用程序。
基本上,我想在獨立的應用程序之間共享紋理/渲染緩沖區-讓我們將其稱為應用程序“ A”和應用程序“ B”。
為此,我首先想到了使用glReadPixels()
(從應用程序A)在共享內存中的緩沖區中下載渲染緩沖區,然后從應用程序B中打開此共享內存,並使用glTexImage2D()
或glTexSubImage2D()
上傳緩沖區。
經過一些初步測試,結果證明這是一種效率低下/緩慢的方法。 因此,我決定使用平台的EGL / GLES擴展(由eglQueryString()
和glGetString()
)包括:
我現在的目標是在應用程序A中創建一個EGLImage
(例如,從GL紋理使用EGLImageKHR sharedEglImage = eglCreateImageKHR(dpy, ctx, EGL_GL_TEXTURE_2D_KHR, textureId, imageAttributes)
),然后與應用程序B共享這個非常共享的sharedEglImage
,以便可以將其映射為使用glEGLImageTargetTexture2DOES()
獲得應用B自己的GL紋理之一的像素數據。
然而,像大多數EGL / GL抽象一樣, EGLImage
是不透明的結構(即只是void*
),將其映射到共享內存以在進程之間共享是沒有意義的。 因此,我的問題是:
有沒有一種方法可以跨獨立進程共享EGLImage?
謝謝 !
在Android上,您將需要使用Gralloc 。 Gralloc分配的內存可在各個進程之間共享,因為這是Surface Flinger所使用的。
這確實帶有巨大的健康警告,這些警告是這些API專用於平台,並且可能無法在設備或版本之間移植。
編輯:該鏈接是一個實現,可能不會有很大幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.