【问题标题】:Fragment shader for unsigned integer textures无符号整数纹理的片段着色器
【发布时间】: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


【解决方案1】:

试试这个:

temp = temp / uint(2);

【讨论】:

    【解决方案2】:

    GLSL 不允许有符号整数和无符号整数之间的隐式转换,因此二进制操作数的两个操作数必须相同。使用:

    temp = temp / 2u;
    

    使用无符号整数常量。

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多