WebGL:INVALID_OPERATION:uniform1i:不适用于当前程序的位置

时间:2013-01-19 11:09:47

标签: google-chrome webgl

我正在尝试在片段着色器中设置两个纹理,但如果我尝试使用以下方法设置相应的统一变量,则会出现此错误:

gl.uniform1i(getUniformLocation(program, "uTextureOne"), 0);gl.uniform1i(getUniformLocation(program, "uTextureTwo"), 1);

这是什么意思? (我正在使用Chrome)

我的着色器看起来像这样:

        "#ifdef GL_ES                       \r\n" +
        "precision mediump float;           \r\n" + 
        "#endif                             \r\n" +
        "uniform sampler2D uTextureOne;     \r\n" +
        "uniform sampler2D uTextureTwo;     \r\n" +
        "varying vec3 vOrgNormal;           \r\n" +
        "void main(void) {                  \r\n" +

1 个答案:

答案 0 :(得分:13)

“当前程序的位置”表示活动着色器程序(gl.useProgram)不是您从中获取统一位置的程序。

如果您只使用一个着色器程序,那么只需确保在初始化过程中gl.useProgram执行gl.uniform…

如果您使用多个着色器程序,请确保在尝试设置统一值之前选择了正确的着色器程序。请注意,制服是程序特有的,它们会被程序记住,所以每次切换程序时都不必重新设置它们!