OpenGL ES深度帧缓冲区GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT

时间:2019-01-15 00:54:49

标签: opengl-es

我一直在尝试向我的OpenGL ES项目中添加阴影映射,但我刚刚发现我的帧缓冲区状态返回GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT

这是我创建帧缓冲区的代码:

//  create fbo
int[] fboPtr = new int[1];
GLES30.glGenFramebuffers(1, fboPtr, 0);
fbo = fboPtr[0];


//  use fbo
GLES30.glBindFramebuffer(GLES30.GL_FRAMEBUFFER, fbo);


//  create depthMap
int[] depthMapPtr = new int[1];
GLES30.glGenTextures(1, depthMapPtr, 0);
depthMap = depthMapPtr[0];


//  use depthMap
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, depthMap);

GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_DEPTH_COMPONENT, size, size,
        0, GLES30.GL_DEPTH_COMPONENT, GLES30.GL_FLOAT, null);

GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_NEAREST);
GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_NEAREST);
GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_REPEAT);
GLES30.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_REPEAT);

GLES30.glFramebufferTexture2D(GLES30.GL_FRAMEBUFFER, GLES30.GL_DEPTH_ATTACHMENT, GLES30.GL_TEXTURE_2D, depthMap, 0);


//  draw buffer
int[] buffer = {GLES30.GL_NONE};
GLES30.glDrawBuffers(1, buffer, 0);
GLES30.glReadBuffer(GLES30.GL_NONE);

int status = GLES30.glCheckFramebufferStatus(GLES30.GL_FRAMEBUFFER);

我已经绑定了纹理,所以我不知道是什么导致了错误。

1 个答案:

答案 0 :(得分:0)

您的internalFormat的{​​{1}}参数不合法。

https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml

您需要使用内部尺寸的深度格式。所以我认为这应该可行:

glTexImage2D

非主题:如果可以的话,请学习使用GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_DEPTH_COMPONENT32F, size, size, 0, GLES30.GL_DEPTH_COMPONENT, GLES30.GL_FLOAT, null); 扩展名-该扩展名可为您提供可读的错误消息,通常带有导致失败的确切原因。