gpt4 book ai didi

c++ - 在嵌入式 Linux/ARM 上的不同应用程序/进程之间共享 EGLImage

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:03 25 4
gpt4 key购买 nike

我目前正在没有任何窗口系统的嵌入式 Linux/ARM 平台上用 C++ 设计一些 EGL 1.4/OpenGL ES 2.0 应用程序。

基本上,我想在独立的应用程序之间共享纹理/渲染缓冲区——我们称它们为应用程序“A”和应用程序“B”。

为此,我首先想到使用 glReadPixels()(来自应用程序 A)在共享内存中的缓冲区中下载渲染缓冲区,然后从应用程序 B 打开此共享内存并上传使用 glTexImage2D()glTexSubImage2D() 的缓冲区。

经过一些初步测试,事实证明这是一种非常低效/缓慢的方法。所以我决定使用该平台的 EGL/GLES 扩展(由 eglQueryString()glGetString() 返回)包括:

我现在的目标是在应用程序 A 中创建一个 EGLImage(例如,使用 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 是平台私有(private)的,可能无法在设备或版本之间移植。

编辑:链接指向一个实现,可能不会很有帮助。

关于c++ - 在嵌入式 Linux/ARM 上的不同应用程序/进程之间共享 EGLImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com