如何模拟GL_TEXTURE_EXTERNAL_OES纹理?

11

我有一个使用摄像头输入的OpenGL ES 2.0 QNX应用程序,进行一些处理并将某些内容呈现到屏幕上。

我所有的着色器都使用来自相机的GL_TEXTURE_EXTERNAL_OES纹理作为输入,其格式为YUV422。

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

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

1个回答

1

回答自己的问题。

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

1. 在CPU上将RGB转换为YUV422格式。

2. 使用screen创建像素图缓冲区。

EGLNativePixmapType pObjEglPixmap = ...

3. 使用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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接