Como posso passar várias texturas para um único sombreador?

Estou usando freeglut, GLEWe diabo pararenderizar um bule texturizado usando um sombreador de vértice e fragmento. Tudo isso está funcionando bem no OpenGL 2.0 e GLSL 1.2 no Ubuntu 14.04.

Agora, quero aplicar um mapa de relevo ao bule de chá. Meu professor evidentemente não prepara seu próprio chá e, portanto, não sabe que eles deveriamsuave. Enfim, eu acheium tutorial bonito no mapeamento de solavancos da velha escola que inclui um shader de fragmento que começa:

uniform sampler2D DecalTex; //The texture
uniform sampler2D BumpTex; //The bump-map 

O que eles não mencionam équão para passar duas texturas para o shader em primeiro lugar.

Anteriormente eu

//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);

//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;

//Fragment shader
gl_FragColor = color * texture2D(DecalTex,gl_TexCoord[0].xy);

então agora eu

//OpenGL cpp file
glBindTexture(GL_TEXTURE_2D, textureHandle);
glBindTexture(GL_TEXTURE_2D, bumpHandle);

//Vertex shader
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1;

//Fragment shader
gl_FragColor = color * texture2D(BumpTex,gl_TexCoord[0].xy);
//no bump logic yet, just testing I can use texture 1 instead of texture 0

mas isso não funciona. A textura desaparece completamente (efetivamente o bule é branco). Eu tentei GL_TEXTURE_2D_ARRAY, glActiveTexture e algumas outras opções prováveis, mas infrutíferas.

Depois de examinar o conjunto comum de referências a OpenGL e GLSL, novos e antigos, cheguei à conclusão de que provavelmente precisoglGetUniformLocation. Como exatamente eu uso issono arquivo cpp do OpenGL passar as alças de textura já preenchidas para o shader de fragmento?

Como passar uma matriz de texturas com tamanhos diferentes para o GLSL?Passando várias texturas do OpenGL para o shader GLSLVárias texturas no GLSL - apenas uma funciona

(Este é o dever de casa, por favor, responda com o mínimo de fragmentos de código (se houver). Obrigado!)

Na falta disso, alguém tem uma malha de chá aconchegante?

questionAnswers(2)

yourAnswerToTheQuestion