【发布时间】:2018-01-13 10:46:04
【问题描述】:
我是 OpenGL/GLES 新手,使用以下代码从 EGLImageKHR 生成帧缓冲区时出现 Incomplete Missing Attachment 错误:
GLuint texture;
GLuint framebuffer;
EGLImageKHR image = eglCreateImageKHR(display,
EGL_NO_CONTEXT,
EGL_NATIVE_PIXMAP_KHR,
(EGLClientBuffer)&pixmap,
NULL);
assert(image != EGL_NO_IMAGE_KHR);
glGenTextures(1, &texture);
glGenTextures(1, &framebuffer);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, image);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_EXTERNAL_OES,
texture,
0);
glCheckFramebufferStatus(GL_FRAMEBUFFER);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
eglDestroyImageKHR(display,image);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
我在使用时得到了 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_EXTERNAL_OES,
texture,
0);
以及将纹理更改为 GL_TEXTURE_2D 时的 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
texture,
0);
图像和纹理正确,因为我可以正确显示。我不知道我在这里错过了什么。
【问题讨论】:
-
谢谢@Rabbid76,问题是我正在使用EGL扩展直接从相机显示UYVY图像的系统,没有颜色转换,所以如果我按照你的建议去做,它会从30fps 到 15fps 左右。这就是为什么我必须坚持使用 GL_TEXTURE_EXTERNAL_OES。
-
顺便说一句,即使在
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);之后,我也收到了 Incomplete Attachment 错误,这正常吗?
标签: c opengl-es-2.0 framebuffer