如何模拟 GL_TEXTURE_EXTERNAL_OES 纹理?

How to emulate GL_TEXTURE_EXTERNAL_OES texture?

我有一个 OpenGL ES 2.0 QNX 应用程序,它使用相机输入,进行一些处理并将某些内容渲染到屏幕上。

我所有的着色器都从相机获取 GL_TEXTURE_EXTERNAL_OES 纹理作为输入,它的格式是 YUV422。

我想使用 png 格式的 RGB 图像在目标平台 (QNX) 上测试我的应用程序。

问题是:如何从 RGB 图像创建 GL_TEXTURE_EXTERNAL_OES 纹理来为我的应用程序模拟相机的输入?

回答自己的问题。

在 QNX 上从 RGB 缓冲区创建 GL_TEXTURE_EXTERNAL_OES 纹理的步骤。

1.Converting CPU

上的 RGB 到 YUV422 格式

2.Creating 像素图缓冲区使用 screen

EGLNativePixmapType pObjEglPixmap = ...

3.Binding 使用 EGLImageKHR 对象将像素映射到 GL_TEXTURE_EXTERNAL_OES 纹理

EGLImageKHR pObjTextureEglImage = eglCreateImageKHR(eglDisplay,
                                                    EGL_NO_CONTEXT,
                                                    EGL_NATIVE_PIXMAP_KHR,
                                                    pObjEglPixmap,
                                                    NULL);

GLuint pObjTextureId;
glGenTextures(1, &pObjTextureId);

glBindTexture(GL_TEXTURE_EXTERNAL_OES, pObjTextureId);

glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, 
                             (GLeglImageOES)pObjTextureEglImage);