【问题标题】:How to emulate GL_TEXTURE_EXTERNAL_OES texture?如何模拟 GL_TEXTURE_EXTERNAL_OES 纹理?
【发布时间】:2019-01-01 04:15:16
【问题描述】:
我有一个 OpenGL ES 2.0 QNX 应用程序,它使用相机输入、进行一些处理并将某些内容呈现到屏幕上。
我所有的着色器都从相机获取 GL_TEXTURE_EXTERNAL_OES 纹理作为输入,它的格式是 YUV422。
我想在目标平台 (QNX) 上使用 png 格式的 RGB 图像测试我的应用程序。
问题是:如何从 RGB 图像创建 GL_TEXTURE_EXTERNAL_OES 纹理以模拟我的应用程序的相机输入?
【问题讨论】:
标签:
opengl-es
textures
opengl-es-2.0
yuv
qnx
【解决方案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);