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