OpenGL缓冲区的状态如何在程序运行之间持续存在?

时间:2010-11-06 08:16:42

标签: c++ opengl sdl framebuffer

我正在编写一个引入辅助缓冲区的OpenGL程序,然后辅助缓冲区的内容在GL_RETURN-ed到Back缓冲区之前累积到累积缓冲区(基本上要合成到屏幕)。简而言之,我正在做一些运动模糊。然而奇怪的是,当我重新编译并重新运行我的程序时,我看到前一个程序中的辅助/累积缓冲区的内容运行。这根本不符合逻辑。我误解了什么,当程序重启时,OpenGL的状态是否应该完全重置?

我正在GeForoo Linux nVidia驱动程序195.36.31中使用GeForce Go 6150编写SDL / OpenGL程序。

2 个答案:

答案 0 :(得分:10)

不 - 你的GPU没有理由清除它的内存。在使用纹理之前清除(或初始化)纹理是你的责任。

答案 1 :(得分:5)

实际上, OpenGL状态被初始化为明确定义的值。

然而,GL状态包括所有二进制开关(glEnable),混合,深度测试模式等设置等。每个都有其默认设置,在OpenGL specs和你描述可以确定它们将在创建上下文时强制执行。

关键是,帧缓冲区(或纹理数据或顶点缓冲区或任何东西)不是所谓“GL状态”的一部分。 GL状态在您的驱动程序中“存在”。存储在GPU内存中的内容完全不同,在您要求驱动程序(通过GL调用)对其进行初始化之前,它是未初始化的。因此,如果你在启动时没有清除或初始化它,那么完全有可能在纹理存储器中或者甚至在帧缓冲区本身中保留先前运行的剩余部分。