我正在尝试在片段着色器中设置两个纹理,但如果我尝试使用以下方法设置相应的统一变量,则会出现此错误:
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" +
答案 0 :(得分:13)
“当前程序的位置”表示活动着色器程序(gl.useProgram
)不是您从中获取统一位置的程序。
如果您只使用一个着色器程序,那么只需确保在初始化过程中gl.useProgram
执行gl.uniform…
。
如果您使用多个着色器程序,请确保在尝试设置统一值之前选择了正确的着色器程序。请注意,制服是程序特有的,它们会被程序记住,所以每次切换程序时都不必重新设置它们!