GLSL C风格数字演员

时间:2013-06-04 11:41:20

标签: opengl glsl

我遇到了以下问题。我有两个着色器(完全不相关),它们会转换为int并以不同的方式浮动。

从着色器#1(int到float)演示示例:

 color = vec4(float(fragment_count) / float(MAX_FRAGMENTS));

从Shader#2(float到int)演示示例:

  int abNumFrag=(int)imageLoad(abufferCounterImg, coords).r;

第一个着色器编译正常,但第二个着色器抛出错误:

“OpenGL不允许C-syle演员”

除非我启用扩展名:#extension GL_NV_gpu_shader5:enable

不是(int)someFloat与cast int(someFloat)相同吗?

3 个答案:

答案 0 :(得分:7)

错误消息不言自明:OpenGL着色语言不使用C风格的强制转换。这些东西不是 C ;它是一种看起来有点像C的独立语言。但它不使用C风格的强制语法。

启用GL_NV_gpu_shader5可以让你这样做,因为一旦你声明你的着色器是特定于NVIDIA的,那么NVIDIA喜欢对OpenGL规范采取自由。它实际上不是NV_gpu_shader5 extension specification的函数。

答案 1 :(得分:3)

实际上,但不是名义上的。 GLSL转换是通过直接调用构造函数完成的,不允许类似C语言的类型转换。

答案 2 :(得分:0)

int abNumFrag=int(imageLoad(abufferCounterImg, coords).r);

与float相同。