Generally, with blending, you need to call some functions beforehand:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
The first line activates blending in general. The second line corresponds to your t and i[/i].
The rest is easiest done in a shader:
#version 330
uniform sampler2D texture1;
uniform sampler2D texture2;
// can also be uniform
const float partOf1 = 0.5f;
in vec2 texCoord;
out vec4 color;
void main()
{
color = texture(texture1, texCoord) * vec4(1.0f, 1.0f, 1.0f, partOf1) + texture(texture2, texCoord) * vec4(1.0f, 1.0f, 1.0f, 1.0f - partOf1);
}
In the shader, you can do much more with the values than just [t, 1-t].
Without a shader, the solution would look like this:
const float partOf1 = 0.5f;
glBindTexture(GL_TEXTURE_2D, texture1);
glColor4f(1.0f, 1.0f, 1.0f, partOf1 );
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f( -1.0f, -1.0f, 0.0);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0);
glTexCoord2f(0.0f, 1.0f); glVertex3f( -1.0f, 1.0f, 0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, texture2);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f - partOf1);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f( -1.0f, -1.0f, 0.0);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0);
glTexCoord2f(0.0f, 1.0f); glVertex3f( -1.0f, 1.0f, 0.0);
glEnd();