2

我一直在做一个项目,实验室计算机装有 ATI 系列 6700。该项目是 C++ 和 OpenGL,所以对于着色器,我使用 GLSL。它基本上是一个具有细节层次的行星,因此发送到着色器的多边形数量取决于相机位置,并且距离越近,多边形越多以获得更好的定义。请记住,我确实对细节水平进行了限制,否则当相机离得太近时,由于疯狂的细分,一切都会崩溃。

然而,当在实验室计算机上运行程序时,网格会出现奇怪的抽动(一些顶点出现在其他位置),最重要的是,当我靠得太近时,帧率会下降,最终整个画面都冻结了,我的两个屏幕都转动了黑色,当 Windows 再次可见时,会显示一条消息,说明驱动程序遇到问题并且必须恢复。

我尝试在具有 nvidia GT555M 的个人笔记本电脑上运行我的项目,但没有出现上述问题。没有抽搐,没有帧率下降,也没有崩溃。此外,当我在实验室计算机中禁用着色器时,程序不会崩溃,也不会出现抽搐,但帧率仍然下降。所有这些让我觉得这与 NVidia 和 ATI 解释和编译 GLSL 的方式有关。

首先,我应该说我只创建一个具有 17x17 顶点的 VBO,其中每个顶点只有 16 个字节,3 个浮点数用于位置,4 个字节用于性能填充。所以在创建 VBO 并绘制它时,我没有启用 COLOR、TEXTURE 或 NORMAL,因为只有关于顶点位置的信息。

然而,在 GPU 方面,我可能正在使用非标准的 GLSL 或类似的东西,因为我读过 ATI 卡只能使用标准化的 GLSL。所以这是我的顶点着色器和片段着色器:

http://pastebin.com/DE6ijidq http://pastebin.com/Q8xUAguw

请记住,C++ 所做的是创建 6 个 16 x 16 正方形的网格,每个网格用于立方体的一侧,但它们以原点为中心,因此在主体的第一行中,我相应地替换它们以创建立方体,然后我使用爆炸立方体技术使其成为一个球体并对其进行处理。我没有指定 GLSL 版本,而是使用了不同的变量,这可能是问题所在。有没有办法让它也与 ATI 卡兼容?我应该指定一个版本,如果是,是哪一个?我应该使用 in 和 out 变量,但是如何?我一直在 RenderMonkey 中测试我的着色器,由于某种原因它仍然使用变化。

4

0 回答 0