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

渲染到OpenGL帧缓冲区对象在某些ATI GPU上无法正常工作,opengl,framebuffer,render-to-texture,Opengl,Framebuffer,Render To Texture,我使用帧缓冲区对象来加速渲染-所有内容都渲染到附加到纹理的帧缓冲区对象,纹理渲染到窗口。每次更改场景的一部分时,它都会在帧缓冲区对象中更新,因此不必一直渲染所有内容 这是可行的,但在某些ATI卡上,帧缓冲区大小似乎不正确-似乎存在某种512x512限制或其他限制。所有函数似乎都正常工作,因此程序看不到任何差异,但只渲染了部分纹理 我看到的唯一区别是,这些GPU的最大纹理大小限制非常低—2048 有没有办法解决这个问题,或者至少检测出帧缓冲区对象不能正常工作 这是简化的代码: gl

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

这是可行的,但在某些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)

仅渲染部分纹理?你确定你的视口设置正确吗?从截图上看是这样,但很难说,我没有这些电脑。它在99%的系统中工作,但在这些旧的ATI驱动程序中,由于某些原因,它不能工作。没有错误报告,什么都没有…你的平台是什么,如果是linux,请确保你安装了最新的驱动程序和mesa…恐怕没有,是Windows。似乎ATI总的来说是个问题…如果它是windows,请确保您使用的是最新ATI驱动程序中的gl libs。