Error compiling shader '[object WebGLShader]':ERROR: 0:82: 'sqrt' : no matching overloaded function found

Error compiling shader '[object WebGLShader]':ERROR: 0:82: 'sqrt' : no matching overloaded function found

我正在用 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);

任何人都可以告诉我为什么我会收到没有 pow 函数的错误,虽然我知道 GLSL 中有 'pow()' 函数来自 OpenGL Shading Language (GLSL) Quick Reference Guide

我正在使用 Google Chrome 浏览器

嗯,您的代码无效。根据 GLSL ES 规范:

When the built-in functions are specified below, where the input arguments (and corresponding output) can be float, vec2, vec3, or vec4, genType is used as the argument.

您使用 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);