我試圖將我的JavaScript代碼中的制服變量傳遞給GSLS程序。但我得到這個警告,爲此,我期望的輸出不來了:GLSL程序錯誤 - WebGL
WebGL: INVALID_OPERATION: uniform3fv: location is not from current program
還有就是我如何從我的JavaScript代碼初始化均勻值:
var lights = {
direction: [1.0, 1.0, 1.0],
color: [0.0, 1.0, 1.0]
};
var u_LightColor = gl.getUniformLocation(program, 'u_LightColor');
var u_LightDirection = gl.getUniformLocation(program, 'u_LightDirection');
if (u_LightColor < 0) {
console.error("failed to get the storage location u_LightColor");
}
if (u_LightDirection < 0) {
console.error("failed to get the storage location u_LightDirection");
}
gl.uniform3fv(u_LightColor, lights.color);
gl.uniform3fv(u_LightDirection, lights.direction);
我的片段着色器代碼像這樣:
precision mediump float;
uniform vec3 u_LightColor;
uniform vec3 u_LightDirection;
uniform sampler2D diffuseMap;
varying mediump vec3 color;
varying vec2 tCoord;
varying vec3 n;
void main(void) {
vec3 normal = normalize(n);
float nDotL = max(dot(normalize(vec3(-5.0, -0.0, -5.0)), normal), 0.0);
diffuseVal = (u_LightColor) * diffuseVal * nDotL;
gl_FragColor = vec4(diffuseVal, 1.0);
}
我不知道爲什麼我得到這個警告。儘管程序正在運行,但u_LightColor
或u_LightDirection
的值未傳遞到片段着色器中;結果輸出全部變暗。另外要指出的是,在其中使用uniformSetter函數傳遞數據的GLSL程序中,我還有其他uniform
變量;那些工作正常。
有人可以幫助我知道,爲什麼數據不在u_LightColor
或u_LightDirection
?
是的。這有幫助! – ikis 2014-11-02 00:34:07