最大的OpenGL帧缓冲对象大小限制是多少?

6

我正在我的笔记本上开发一个OpenGL应用程序。当我尝试显示一张黑白的(相当大的)单色图片时,我的应用程序会显示很多黑白不可辨认的图案。我有一种预感,可能是因为我的旧Geforce Go 7950 GTX(512 MB)对我的应用程序来说太老了。我认为这个问题是由于帧缓冲对象大小限制引起的 - 有没有办法找出最大的FBO大小呢?


1
你可以使用gDebugger(免费)来调试这类问题。 - Ben Voigt
2个回答

9

在OpenGL中,framebuffer的大小没有最大限制。限制在于您可以附加到其中的最大纹理或渲染缓冲区。

然而,存在一个最大视口大小,可以使用GL_MAX_VIEWPORT_DIMS获取它,但根据OpenGL规范,视口会自动静默地被裁剪到最大尺寸,并不会导致故障。https://www.opengl.org/sdk/docs/man/html/glViewport.xhtml


作为一个大小的注意事项:GL_MAX_VIEWPORT_DIMS的值不必是POT(在桌面设备上通常是这样,但例如我在NVIDIA Tegra 3上得到了3839 x 3839),但在某些平台上(主要是移动设备上的OpenGL ES)使用NPOT纹理(甚至是非正方形POT纹理)可能会导致问题-因此,我建议获取比两者中较大的(最大H / W,例如对于T3,它将是2048)更接近的POT值,并将其用作正在创建的FBO的H&W的上限。这解决了我遇到的模糊的GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT错误。 - user719662

3
GLuint dims[2];
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, &dims[0]);

这将为您提供视口的最大宽度/高度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接