C++ 阴影贴图。帧缓冲区错误36060

C++ 阴影贴图。帧缓冲区错误36060,c++,opengl,shadow-mapping,C++,Opengl,Shadow Mapping,我是在一个教程中做这件事的,我完全掌握了教程中的代码。但由于某种原因,它不起作用。所以我调试了一下,发现它有一个36060错误,据我所知,这个错误也被称为GL_FRAMEBUFFER_complete_READ_BUFFER,但我真的不明白为什么。我寻找答案,每个人都说没有;但即使这样,我也会犯同样的错误 bool ShadowMapFBO::Init(unsigned int WindowWidth, unsigned int WindowHeight) { // Create

我是在一个教程中做这件事的,我完全掌握了教程中的代码。但由于某种原因,它不起作用。所以我调试了一下,发现它有一个36060错误,据我所知,这个错误也被称为GL_FRAMEBUFFER_complete_READ_BUFFER,但我真的不明白为什么。我寻找答案,每个人都说没有;但即使这样,我也会犯同样的错误

    bool ShadowMapFBO::Init(unsigned int WindowWidth, unsigned int WindowHeight)
{
    // Create the FBO
    glGenFramebuffers(1, &m_fbo);    
    // Create the depth buffer
    glGenTextures(1, &m_shadowMap);
    glBindTexture(GL_TEXTURE_2D, m_shadowMap);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadowMap, 0);

    // Disable writes to the color buffer

    glDrawBuffer(GL_NONE);
    glReadBuffer(GL_NONE);
    GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);

    if (Status != GL_FRAMEBUFFER_COMPLETE) {
        printf("FB error, status: 0x%x\n", Status);
        return false;
    }

    return true;
}

编辑:看起来glReadBuffer根本不起作用,我不知道为什么。我尝试了glGetError,但没有出现错误

我解决了问题。似乎我必须添加glbindframebuffer gl_READ_FRAMEBUFFER,m_fbo;
如果你有一张nvidia视频卡,看起来你不需要它。我有一个intel集成视频卡,这就是它无法工作的原因。

您是否使用glGetError检查OpenGL错误?您正在禁用读取和写入。为什么?你使用的是什么OpenGL版本?此外,您可能还需要更改另一件事:GLTEXAGE2D中的internalformat参数应调整大小,即GL_DEPTH_COMPONENT16或其他调整大小的深度可渲染格式