I’m doing a multi texture operation that blends a certain amount of grey into a texture, then further tints the texture with another color. Note that the original texture has pre-multiplied alpha.
Here’s the code:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [texture_ name]);
GLfloat g[4] = { grey, grey, grey, grey };
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, g);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gTexID1);
GLfloat col[4] = { (float)color_.r/255.0, (float)color_.g/255.0, (float)color_.b/255.0, 1.0 };
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, col);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
The first part works just fine, but the second part has no effect whatsoever.
The texture name gTexID1 is really dummy since I use the constant color to tint the texture, I simply create it with a call to: glGenTextures(1, &gTexID1).
I have checked the value of the color of course, it’s not white.
I have shamelessly copied most of the code from here.
Any idea as to why this fails?
Even though it is a dummy texture, I believe it is not enough to call glGenTextures. You must also call glTexImage2D to give it a size. Also check if you get any error code from glGetError.