Using textures in a shader
Texture coordinates are exposed to the shader code in the same way that we have any other vertex attribute; no surprises here. We'll want to include a two-element vector attribute in our vertex shader that will map to our texture coordinates:
attribute vec2 aVertexTextureCoords;
Additionally, we will also want to add a new uniform to the fragment shader that uses a type we haven't seen before: sampler2D
. The sampler2D
uniform is what allows us to access the texture data in the shader.
uniform sampler2D uSampler;
In the past, when we've used uniforms, we have always set them to the value that we want them to be in the shader, such as a light color. Samplers work a little differently, however. The following shows how to associate a texture with a specific sampler uniform:
gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, texture); gl.uniform1i(Program.uSampler, 0);
So what's going on here? First off, we are changing the active texture index with gl.activeTexture...