【问题标题】:OpenGL ES depth framebuffer GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENTOpenGL ES 深度帧缓冲 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
【发布时间】:2019-01-15 00:54:48
【问题描述】:

我一直在尝试将阴影映射添加到我的 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);

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

【问题讨论】:

  • 您可以在glTexImage2D 通话后检查glGetError() 的状态吗?可能纹理创建不正确,因此附加过程失败。

标签: opengl-es


【解决方案1】:

glTexImage2DinternalFormat 参数不合法。

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

您需要使用大小合适的内部格式来获得深度。所以我认为这应该可行:

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

题外话:如果可以的话,学习使用KHR_debug 扩展 - 它会为您提供可读的错误消息,通常会给出失败的确切原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多