将数组传递给着色器

时间:2013-06-08 18:21:40

标签: 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  count, const GLfloat * value);

感谢您的帮助

€:我将this.kernel转换为float32array但我仍然有这个错误。

€2:Chrome中的错误:参数不足

Firefox中的

:NS_ERROR_XPC_BAD_CONVERT_JS:无法转换JavaScript参数

1 个答案:

答案 0 :(得分:3)

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

此外,WebGL中不使用计数。该函数是(来自WebGL Specification

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/