【发布时间】:2013-02-22 12:29:45
【问题描述】:
我正在为无符号整数纹理使用以下着色器来读取数据: 片段着色器:
代码:
#version 150
out uvec4 fragColor;
uniform uint factor;
void main()
{
uint temp=factor;
temp=temp/2;
fragColor = uvec4(temp,temp,temp,temp);
}
但我在驱动程序 A 上遇到错误:
“编译失败。 错误:0:7:'/':错误的操作数类型。不存在接受“uint”类型的左操作数和“const int”类型的右操作数的操作“/”(并且没有可接受的转换) 错误:1 个编译错误。没有生成代码。”
在驱动程序 B 上运行完美。驱动程序 A 有问题还是我的着色器有误?如果错了,我怎样才能达到同样的结果?
【问题讨论】:
-
着色器中带有
#version标签的部分在哪里?这些不是可选的。 -
如果你只是说会发生什么:uint temp = factor / 2;并省略 temp=temp/2; ?
-
@Nicol Bolas : 添加了 glsl 版本,还是同样的错误
-
刚刚发现4.0之前的GLSL规范确实如此。 GLSL 4.0 添加了从有符号到无符号的隐式转换。在语法和转换方面,AMD 似乎对所有着色器版本使用相同的编译器。
标签: opengl glsl opengl-3 fragment-shader