Open GL ES 2 - glFramebufferTexture2D with Incomplete Missing Attachment 错误
Open GL ES 2 - glFramebufferTexture2D with Incomplete Missing Attachment error
我是 OpenGL/GLES 的新手,当使用以下代码从 EGLImageKHR 生成帧缓冲区时,我遇到了附件丢失不完整错误:
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_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 将纹理更改为 GL_TEXTURE_2D 时:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
texture,
0);
图像和纹理是正确的,我可以正确显示。我不知道我在这里错过了什么。
我刚刚找到了答案,正如 Raspi 论坛中所解释的那样:
Can't render to render buffer
我们必须在这个函数中使用GL_TEXTURE_2D:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
texture,
0);
并且必须创建一个空纹理 GL_TEXTURE_2D 以在渲染之前将我们的帧缓冲区绑定到该纹理。 GL_TEXTURE_EXTERNAL_OES和GL_TEXTURE_2D是不同的材质,不能混用。
我是 OpenGL/GLES 的新手,当使用以下代码从 EGLImageKHR 生成帧缓冲区时,我遇到了附件丢失不完整错误:
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_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 将纹理更改为 GL_TEXTURE_2D 时:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
texture,
0);
图像和纹理是正确的,我可以正确显示。我不知道我在这里错过了什么。
我刚刚找到了答案,正如 Raspi 论坛中所解释的那样: Can't render to render buffer
我们必须在这个函数中使用GL_TEXTURE_2D:
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
texture,
0);
并且必须创建一个空纹理 GL_TEXTURE_2D 以在渲染之前将我们的帧缓冲区绑定到该纹理。 GL_TEXTURE_EXTERNAL_OES和GL_TEXTURE_2D是不同的材质,不能混用。