Opengl es OpenGL ES深度帧缓冲区GL\U帧缓冲区\U不完整\U缺少\U附件
我一直在尝试向我的OpenGL ES项目添加阴影映射,我刚刚发现我的帧缓冲区状态返回Opengl es OpenGL ES深度帧缓冲区GL\U帧缓冲区\U不完整\U缺少\U附件,opengl-es,Opengl Es,我一直在尝试向我的OpenGL ES项目添加阴影映射,我刚刚发现我的帧缓冲区状态返回GL\u framebuffer\u complete\u MISSING\u ATTACHMENT 以下是我创建帧缓冲区的代码: // create fbo int[] fboPtr = new int[1]; GLES30.glGenFramebuffers(1, fboPtr, 0); fbo = fboPtr[0]; // use fbo GLES30.glBindFramebuffer(GLES
GL\u framebuffer\u complete\u MISSING\u 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);
我已经绑定了纹理,所以我不知道是什么导致了错误。您的
internalFormat
参数对于glTexImage2D
是不合法的
您需要为深度使用一个大小合适的内部格式。所以我认为这应该有效:
GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0, GLES30.GL_DEPTH_COMPONENT32F,
size, size, 0, GLES30.GL_DEPTH_COMPONENT, GLES30.GL_FLOAT, null);
非主题:如果可以,请学习使用
KHR\u debug
扩展-它提供可读的错误消息,通常带有失败的确切原因。在调用glTexImage2D
后,您能检查glGetError()
状态吗?可能纹理创建不正确,因此附着过程失败。