【问题标题】:Pass array to shader将数组传递给着色器
【发布时间】:2013-06-09 20:29:14
【问题描述】:

我创建了我的数组 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 参数

【问题讨论】:

    标签: google-chrome firefox opengl-es webgl shader


    【解决方案1】:

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

    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/

    【讨论】:

    • 好吧。我将数组 this.kernel 更改为 this.kernel = new Float32Array(this.kernel);长度正好是 48 长。为了清楚起见,我的意思是我的着色器中的内核是 vec3 仍然收到错误没有足够的参数。
    • 谢谢。我尝试了很多,但似乎我忘记了这个变化。
    猜你喜欢
    • 2021-01-07
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2014-10-04
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多