我想为两者使用一个着色器,彩色矩形和/或呈现纹理的矩形。这是我的方法:
precision mediump float;
uniform vec4 u_color;
uniform sampler2D u_image;
varying vec2 v_texCoord;
void main(void) {
vec4 texCol = texture2D(u_image, v_texCoord);
gl_FragColor = texCol * u_color;
}
但我一无所获。我的错误在哪里?
答案 0 :(得分:1)
如果您没有为采样器指定有效纹理,则texture2D
调用将返回透明黑色 - vec4(0.0, 0.0, 0.0, 0.0)
。乘以该值将再次产生黑色。
使用一个只有一个纯白色纹素的纹理,而不是尝试使用“无纹理”。这将导致乘法产生u_color
。
或者,您只需在两个着色器程序之间切换,一个用于无纹理几何,另一个用于纹理几何。切换程序(gl.useProgram
)并不是非常昂贵。