我遇到了以下问题.我有两个着色器(完全不相关),它们会转换为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)不一样吗?
错误消息不言自明:OpenGL着色语言不使用C风格的强制转换.这不是C的东西; 它是一种看起来有点像C的单独语言.但它不使用C风格的强制语法.
启用GL_NV_gpu_shader5允许您这样做,因为一旦您将着色器声明为特定于NVIDIA的特定,NVIDIA就会喜欢使用OpenGL规范.它实际上不是NV_gpu_shader5扩展规范的功能.