2013-01-19 101 views
2

我試圖設置兩個紋理在我的片段着色器,但如果我嘗試設置與相應的統一變量正在此錯誤:的WebGL:INVALID_OPERATION:uniform1i:位置不是當前程序

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" + 

回答

11

「的位置不適合當前的程序」是指活性着色器程序(gl.useProgram)是不是你得到均勻的位置的程序從。

如果您只使用一個着色器程序,那麼只需確保在初始化時執行gl.useProgram然後再執行任何gl.uniform…

如果您正在使用多個着色器程序,請確保在嘗試設置統一值之前選擇了正確的着色器程序。請注意,校服是特定於程序的,他們會被程序記住,所以每次切換程序時都不必重新設置它們!