渲染到OpenGL帧缓冲对象在某些ATI GPU上无法正常工作

时间:2014-04-22 23:48:39

标签: opengl framebuffer render-to-texture

我正在使用framebuffer对象来加速渲染 - 所有内容都渲染到附加到纹理的framebuffer对象,纹理渲染到窗口。每次改变场景的一部分时,它都会在帧缓冲对象中更新,因此不必一直渲染所有场景。

这很有效,但是在一些ATI卡上,看起来帧缓冲区大小不正确 - 看起来有某种512x512限制或其他东西。所有函数似乎都能正常工作,因此程序看不到任何差异,只是渲染了部分纹理。

我看到的唯一区别是这些GPU的最大纹理大小限制非常低--2048。

任何想法如何解决这个问题或者至少检测到帧缓冲对象无法正常工作?

这是代码(简化):

        glGenFramebuffers(1, &FrameBuffer);
        if (error != GL_NO_ERROR)
        {
            ...
        }
        else
        {
            glBindFramebuffer(GL_FRAMEBUFFER, FrameBuffer);
            glGenTextures(1, &FrameBufferTexture);
            if (glGetError() != GL_NO_ERROR)
            {
                ...
            }
            else
            { 
                glBindTexture(GL_TEXTURE_2D, FrameBufferTexture);
                glBindFramebuffer(GL_FRAMEBUFFER, FrameBuffer);

                glBindTexture( GL_TEXTURE_2D, FrameBufferTexture );
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, sz.X, sz.Y, 0,GL_RGB, GL_UNSIGNED_BYTE, 0);
                glBindTexture( GL_TEXTURE_2D, NULL );

                // Attach the texture to the framebuffer.
                glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, FrameBufferTexture, 0);

                // Set the list of draw buffers.
                GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
                glDrawBuffers(1, DrawBuffers);

                // Done!
                if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)

0 个答案:

没有答案
相关问题