thank you, I didn’t search enough.
But this is what I do and the result is still the same…( the mix process is in two passes because I have only two texture units on my graphic card).
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnable(GL_TEXTURE_2D);
glBindBuffer( GL_ARRAY_BUFFER, vertexBuffer );
glVertexPointer( 3, GL_FLOAT, 0, NULL);
glBindBuffer( GL_ARRAY_BUFFER, normalBuffer );
glNormalPointer( GL_FLOAT, 0, NULL);
//TRactiveTextureReplace(terrainTexList[1].glID);//CHECK_GL;
for(int passe=0;passe<2;passe++)
{
if(passe==0)
{
glBlendFunc(GL_ONE, GL_ZERO);
glActiveTexture( GL_TEXTURE0_ARB );
glEnable( GL_TEXTURE_2D );
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer( GL_ARRAY_BUFFER, texCoordBuffer );
glTexCoordPointer(2, GL_FLOAT, 0, NULL);
glBindTexture( GL_TEXTURE_2D, terrainTexList[1].glID );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
glActiveTexture( GL_TEXTURE1_ARB );
glEnable( GL_TEXTURE_2D );
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer( GL_ARRAY_BUFFER, texCoordBuffer );
glTexCoordPointer(2, GL_FLOAT, 0, NULL);
glBindTexture( GL_TEXTURE_2D, terrainTexList[2].glID );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
}
if(passe==1)
{
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glActiveTexture( GL_TEXTURE0_ARB );
glEnable( GL_TEXTURE_2D );
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer( GL_ARRAY_BUFFER, texCoordBuffer );
glTexCoordPointer(2, GL_FLOAT, 0, NULL);
glBindTexture( GL_TEXTURE_2D, terrainTexList[0].glID );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
glActiveTexture(GL_TEXTURE1_ARB );
glEnable( GL_TEXTURE_2D );
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer( GL_ARRAY_BUFFER, texCoordBuffer );
glTexCoordPointer(2, GL_FLOAT, 0, NULL);
glBindTexture( GL_TEXTURE_2D, terrainTexList[2].glID );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB );
glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE );
glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_COLOR );
}
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, faceBuffer );
//glDrawRangeElements( GL_TRIANGLES, 0, 3*nbLODfaces-1, 3*nbLODfaces, GL_UNSIGNED_INT, NULL );
glDrawElements( GL_TRIANGLES, 3*nbLODfaces, GL_UNSIGNED_INT, NULL);
}
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glActiveTexture( GL_TEXTURE0_ARB );
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glActiveTexture( GL_TEXTURE1_ARB );
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
thank you.