Google chrome 将数组传递到着色器
我创建了数组this.kernel:它有48个元素,我想把它传递给我的片段着色器 当我打电话时Google chrome 将数组传递到着色器,google-chrome,firefox,opengl-es,webgl,shader,Google Chrome,Firefox,Opengl Es,Webgl,Shader,我创建了数组this.kernel:它有48个元素,我想把它传递给我的片段着色器 当我打电话时 gl.uniform3fv(gl.getUniformLocation(this.program, "kernel"), 16, this.kernel); 内核在我的着色器中定义: uniform vec3 kernel[16]; 我因参数不足而出错。 我已经查阅了说明书等,但没有发现我的问题-- void glUniform3fv( GLint location, GLsizei c
gl.uniform3fv(gl.getUniformLocation(this.program, "kernel"), 16, this.kernel);
内核在我的着色器中定义:
uniform vec3 kernel[16];
我因参数不足而出错。
我已经查阅了说明书等,但没有发现我的问题--
void glUniform3fv( GLint location, GLsizei count, const GLfloat * value);
谢谢你的帮助
欧元:我将this.kernel转换为float32array,但仍有此错误
欧元2:Chrome错误:参数不足
在Firefox中:NS\u ERROR\u XPC\u BAD\u CONVERT\u JS:无法转换JavaScript参数您的
这个。内核
需要是长度为48(=3*16)的float32数组。不能使用矢量3数组
此外,在WebGL中不使用计数。函数是(从)
用法示例:
gl.uniform3fv(gl.getUniformLocation(shaderProgram, "colors"), new Float32Array([0,1,2,3,4,5]));
请参见此处的完整示例:
啊,好的。我将数组this.kernel更改为this.kernel=new Float32Array(this.kernel);长度正好是48。我只是想说清楚,我的着色器中的内核是一个vec3,仍然得到错误,参数不够。谢谢。我做了很多实验,但似乎我忘记了这个变化。
gl.uniform3fv(gl.getUniformLocation(shaderProgram, "colors"), new Float32Array([0,1,2,3,4,5]));