簡體   English   中英

打開GL ES 2 - glFramebufferTexture2D,其中包含不完整的丟失附件錯誤

[英]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_TEXTURE_2D時的GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:

glFramebufferTexture2D(GL_FRAMEBUFFER, 
                       GL_COLOR_ATTACHMENT0, 
                       GL_TEXTURE_2D, 
                       texture, 
                       0);

圖像和紋理是正確的,因為我可以正確顯示。 我不知道我在這里缺少什么。

我剛剛找到了答案,因為它在Raspi論壇中得到了解釋: 無法渲染到渲染緩沖區

我們必須在此函數中使用GL_TEXTURE_2D:

glFramebufferTexture2D(GL_FRAMEBUFFER, 
                   GL_COLOR_ATTACHMENT0, 
                   GL_TEXTURE_2D, 
                   texture, 
                   0);

並且必須創建一個空紋理GL_TEXTURE_2D以在渲染之前將我們的幀緩沖區綁定到該紋理。 GL_TEXTURE_EXTERNAL_OES和GL_TEXTURE_2D是不同的紋理,不能將它們混合在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM