2

我创建了我的数组 this.kernel:它有 48 个元素,我想将它传递给我的片段着色器。

当我打电话时

 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_ERROR_XPC_BAD_CONVERT_JS:无法转换 JavaScript 参数

4

1 回答 1

3

this.kernel需要是长度为 48 (=3*16) 的 Float32Array。您不能使用 vec3 数组。

WebGL 中也不使用计数。该功能是(来自WebGL 规范

void uniform3fv(WebGLUniformLocation? location, Float32Array v);

示例用法:

gl.uniform3fv(gl.getUniformLocation(shaderProgram, "colors"), new Float32Array([0,1,2,3,4,5]));

在此处查看完整示例:http: //jsfiddle.net/mortennobel/URvtx/

于 2013-06-08T20:04:00.123 回答