glUseProgramObjectARB(currentProgramObject); // Setup samplers // int sampler1 = glGetUniformLocationARB(currentProgramObject, shaderParam); glActiveTextureARB(GL_TEXTURE0_ARB + imgUnit); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textureObject1); glUniform1iARB(sampler1, imgUnit); int sampler2 = glGetUniformLocationARB(currentProgramObject, shaderParam2); glActiveTextureARB(GL_TEXTURE0_ARB + nextImgUnit); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textureObject2); glUniform1iARB(sampler2, nextImgUnit); // Setup vertex format pointers // glEnableClientState(GL_VERTEX_ARRAY); glClientActiveTextureARB(GL_TEXTURE0 + 0); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glClientActiveTextureARB(GL_TEXTURE0 + 1); glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Bind vertex buffer // glBindBufferARB(GL_ARRAY_BUFFER_ARB, vertexBufferObject); glVertexPointer(vSize, vFormat, vSize, offset); glClientActiveTextureARB(GL_TEXTURE0 + 0); glTexCoordPointer(txSize, txFormat, txSz, offset); glClientActiveTextureARB(GL_TEXTURE0 + 1); glTexCoordPointer(txSize2, txFormat2, txSz2, offset); // Bind Index buffer // glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexBufferObject); // Render // glDrawElements(GL_TRIANGLES, indexCount, 2, offset); // Disable shader glUseProgramObjectARB(0); /////////////////////////////////////////////////////////////////////////////////// vertex program /////////////////////////////////////////////////////////////////////////////////// varying vec2 baseTexCoords; varying vec2 lmTexCoords; void main(void) { gl_Position = ftransform(); baseTexCoords = gl_MultiTexCoord0.xy; lmTexCoords = gl_MultiTexCoord1.xy; } ////////////////////////////////////////////////////////////////////////////// fragment program //////////////////////////////////////////////////////////////////////////// uniform sampler2D baseTex; uniform sampler2D lmTex; varying vec2 baseTexCoords; varying vec2 lmTexCoords; void main(void) { vec4 baseCol = texture2D(baseTex, baseTexCoords); vec4 lmCol = texture2D(lmTex, lmTexCoords); gl_FragColor = baseCol * lmCol; }