Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GLSL C样式数字转换_Opengl_Glsl - Fatal编程技术网

Opengl GLSL C样式数字转换

Opengl GLSL C样式数字转换,opengl,glsl,Opengl,Glsl,我遇到了以下问题。我有两个着色器(完全无关),它们可以强制转换为int和float,但方式不同 着色器#1(int到float)的投射示例: 从着色器#2(浮点到整数)投射示例: 第一个着色器编译良好,但第二个着色器抛出错误: “OpenGL不允许C-syle强制转换” 除非启用扩展:#扩展GL_NV_gpu_着色器5:启用 (int)someFloat和铸造int(someFloat)不一样吗 有效,但不是名义上的。GLSL转换是通过直接调用构造函数来完成的,不允许类似C的类型转换。错误消息不

我遇到了以下问题。我有两个着色器(完全无关),它们可以强制转换为int和float,但方式不同

着色器#1(int到float)的投射示例:

从着色器#2(浮点到整数)投射示例:

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

“OpenGL不允许C-syle强制转换”

除非启用扩展:#扩展GL_NV_gpu_着色器5:启用


(int)someFloat和铸造int(someFloat)不一样吗

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

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

启用GL_NV_gpu_着色器5允许您这样做,因为一旦您声明着色器为特定于NVIDIA的着色器,NVIDIA喜欢随意使用OpenGL规范。它实际上不是一个函数

浮动也一样

 color = vec4(float(fragment_count) / float(MAX_FRAGMENTS));
  int abNumFrag=(int)imageLoad(abufferCounterImg, coords).r;
int abNumFrag=int(imageLoad(abufferCounterImg, coords).r);