错误编译着色器' [对象WebGLShader]':错误:0:82:' sqrt' :找不到匹配的重载函数

时间:2017-01-16 19:12:02

标签: glsl webgl glsles

我在GLSL(着色语言)中进行计算,如下所示

int N = 3;
  float sigma_H = 5
 for(int i = 0 ;i < 3 ; i++){
float sigma_H_i = sigma_H * sqrt(3) * pow(2,(N - (i + 1))) / sqrt(pow(4,N) - 1.0);
}

我得到的错误是

webgl-utils.js:66 *** Error compiling shader '[object WebGLShader]':ERROR: 0:82: 'sqrt' : no matching overloaded function found 
ERROR: 0:82: 'pow' : no matching overloaded function found 
ERROR: 0:82: 'pow' : no matching overloaded function found 

WARNING: 0:82: 'sqrt' : operation result is undefined for the values passed in 
ERROR: 0:104: '' : syntax error

我知道错误出现在下面的代码块中,因为只要我删除了以下行就可以正确编译

 float sigma_H_i = sigma_H * sqrt(3) * pow(2,(N - (i + 1))) / sqrt(pow(4,N) - 1.0);

可以任何人请告诉我为什么我得到这个错误,即没有动力功能,虽然我知道有&#39; pow()&#39;来自OpenGL Shading Language (GLSL) Quick Reference Guide

的GLSL中的函数

enter image description here

我正在使用Google Chrome浏览器

1 个答案:

答案 0 :(得分:3)

好吧,你的代码无效。根据GLSL ES规范:

  

当下面指定了内置函数时,输入参数(和相应的输出)   可以floatvec2vec3vec4 genType 用作参数。

您使用int调用它,并且GLSL不执行任何隐式转换(与C相反),因此正确的语法必须类似于

float sigma_H_i = sigma_H * sqrt(3.0) * pow(2.0,(float(N - (i + 1)))) / sqrt(pow(4.0,float(N)) - 1.0);