GLSL C风格数字演员

Mic*_* IV 0 opengl glsl

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

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

 color = vec4(float(fragment_count) / float(MAX_FRAGMENTS));
Run Code Online (Sandbox Code Playgroud)

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

  int abNumFrag=(int)imageLoad(abufferCounterImg, coords).r;
Run Code Online (Sandbox Code Playgroud)

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

"OpenGL不允许使用C-syle演员"

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

some(int)someFloat与cast int(someFloat)不一样吗?

Nic*_*las 7

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

启用GL_NV_gpu_shader5允许您这样做,因为一旦您将着色器声明为特定于NVIDIA的特定,NVIDIA就会喜欢使用OpenGL规范.它实际上不是NV_gpu_shader5扩展规范的功能.