GLSL 碎片着色器 - 仅适用于 nVidia,非标准代码



>编辑:对不起,堆栈溢出,但我是迟钝的。 frac(tex_offset) -> fract(tex_offset) ,它在 ATI 卡上工作正常,现在指定 #version 时也可以 nVidia 卡。这一定是为什么我认识的大多数程序员都没有多少头发了。

-

我正在为一个学校项目做一个游戏。这是一个垂直滚动器,因此所需的功能之一是滚动背景。我尝试了几种方法,但我最终写了一个简单的片段着色器(这是我第一次接触着色器编程,所以真的不知道我在做什么(:

uniform sampler2D tex;
uniform float tex_offset;
void main()
{
    vec2 coords = vec2(gl_TexCoord[0].s, gl_TexCoord[0].t - frac(tex_offset));
    gl_FragColor = texture2D(tex, coords);
}

我使用 SFML,所以我不会接触幕后的大部分内容,但我使用的纹理会传递给 tex 变量,并且tex_offset在我的游戏循环中通过总经过秒数乘以一个因子来生成,以控制滚动速度。

这似乎做了它应该做的事情;它在一个方向上无限滚动无缝重复纹理。它适用于我的笔记本电脑,也适用于我的家用计算机,两者都有 nVidia 卡。但是,当我们尝试使用ATI卡在组成员的计算机上运行它时,它什么也没做。我做了一些谷歌搜索,似乎nVidia卡也接受"非标准"GLSL代码,这可能解释了兼容性问题。我发现很难在 GLSL 上找到好的教程/解释,因为我挖掘的大部分内容都是来自 1.2-1.4 版,而且我显然使用的是版本 3(gl_FragColor,gl_TexCoord(中已弃用的语法。但是,当我尝试将#version设置为 120 或 140 或其他任何时,着色器也停止在我的 nVidia 计算机上工作。

因此,尝试将其表述为问题形式:此着色器代码有什么问题?有没有办法调试语法,如果可能的话,我该如何为我的 nVidia 卡打开"标准"模式?

frac(tex_offset)更改为 fract(tex_offset) ,并且在 ATI 卡上工作正常,现在指定 #version 时也可以使用 nVidia 卡。

最新更新