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

geo*_*gij 6 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" +
Run Code Online (Sandbox Code Playgroud)

Kev*_*eid 14

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

如果您只使用一个着色器程序,那么只需确保在初始化gl.useProgram之前执行任何操作gl.uniform….

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