Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es OpenGL ES深度帧缓冲区GL\U帧缓冲区\U不完整\U缺少\U附件_Opengl Es - Fatal编程技术网

Opengl es OpenGL ES深度帧缓冲区GL\U帧缓冲区\U不完整\U缺少\U附件

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

我一直在尝试向我的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(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()
状态吗?可能纹理创建不正确,因此附着过程失败。