簡體   English   中英

在嵌入式Linux / ARM上的不同應用程序/進程之間共享EGLImage

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM