5

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

我正在 GeForce Go 6150 上的 Gentoo Linux nVidia Drivers 195.36.31 中编写 SDL/OpenGL 程序。

4

2 回答 2

10

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

于 2010-11-06T08:20:13.623 回答
5

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

但是,GL 状态由所有二进制开关 (glEnable)、混合、深度测试模式等设置组成。每一个都有其默认设置,这些设置在OpenGL 规范中进行了描述,您可以确定它们会在上下文创建时强制执行。

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

于 2010-11-13T13:14:18.023 回答