0

私はチュートリアルからこれを行っており、チュートリアルのコードを正確に持っています。しかし、何らかの理由で機能していません。それでデバッグしたところ、36060エラーがあり、私が知る限りGL_FRAMEBUFFER_INCOMPLETE_READ_BUFFERとしても知られていることがわかりましたが、その理由はよくわかりません。私は答えを探しましたが、誰もが glReadBuffer(GL_NONE); について言いました。しかし、それでも同じエラーが発生します。

    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 を試しましたが、エラーは発生しませんでした

4

1 に答える 1

-1

問題を解決しました。glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo); を追加する必要があったようです。nvidia ビデオ カードを使用している場合は必要ないようです。私はインテル統合ビデオカードを持っていましたが、それが機能しなかった理由です。

于 2014-01-14T01:42:16.713 に答える