OpenGL:无法写入framebuffer

时间:2015-10-14 22:50:01

标签: c++ opengl

我已经挣扎了一段时间,没有任何积极的结果。我之前也实现了具有多个渲染目标的帧缓冲器,没有任何问题,但是现在由于某种原因它不会工作。

这是初始化代码:

   // LOAD TEXTURE 1
        glGenTextures(1, &m_Texture1);
        glBindTexture(GL_TEXTURE_2D, m_Texture1);
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

        // LOAD TEXTURE 2
        glGenTextures(1, &m_Texture2);
        glBindTexture(GL_TEXTURE_2D, m_Texture2);
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, size.x, size.y, 0, GL_RGB, GL_FLOAT, NULL);


        // LOAD TEXTURE 3
        glGenTextures(1, &m_Texture3);
        glBindTexture(GL_TEXTURE_2D, m_Texture3);
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F_ARB, size.x, size.y, 0, GL_RGB, GL_FLOAT, NULL);



        // Load FBO
        glGenFramebuffers(1, &m_fbo);
        glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_fbo);
        glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_Texture1, 0);
        glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, m_Texture2, 0);
        glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, m_Texture3, 0);

        glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);

绘图:

glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_fbo);

        /// Draw the buffers, 3 color textures
        GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT };
        glDrawBuffers(3, buffers);

        /// Clear all the buffers
        GLfloat color1[] = { 1.0f, 1.0, 0.0, 1.0 };
        GLfloat color2[] = { 0.0f, 1.0, 0.0, 1.0 };
        GLfloat color3[] = { 0.0f, 0.0, 1.0, 1.0 };
        glClearBufferfv(GL_COLOR, 0, color1);
        glClearBufferfv(GL_COLOR, 1, color2);
        glClearBufferfv(GL_COLOR, 2, color3);

        glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);

我使用gDEBugger来调试缓冲区等,如果我不对,3个纹理应该是黄色,绿色和蓝色?但由于某种原因,它们是黑色的......

0 个答案:

没有答案