This is my code.
GLhandleARB prg; //shader program
GLhandleARB vs, fs; //vertex shader and fragment shader
VBitmap *nmap, *cmap; //my texture loader
GLuint ntex, ctex; //gl texture handle
int init ()
{
… //initialize shaders
glLinkProgramARB (prg);
glGetObjectParameterivARB (prg, GL_OBJECT_LINK_STATUS_ARB, &linked);
glGetInfoLogARB (prg, 10000, &loglength, shaderlog); //linked successfully
glActiveTextureARB (GL_TEXTURE0_ARB);
glEnable (GL_TEXTURE_2D);
glActiveTextureARB (GL_TEXTURE1_ARB);
glEnable (GL_TEXTURE_2D);
nmap = new_map (0, 0);
load_map (nmap, "maps/normal.bmp");
glGenTextures (1, &ntex);
glBindTexture (GL_TEXTURE_2D, ntex);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, nmap->size_x, nmap->size_y, 0, GL_BGRA, GL_UNSIGNED_BYTE, nmap->data);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
cmap = new_map (0, 0);
load_map (cmap, "maps/color.bmp");
glGenTextures (1, &ctex);
glBindTexture (GL_TEXTURE_2D, ctex);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, cmap->size_x, cmap->size_y, 0, GL_BGRA, GL_UNSIGNED_BYTE, cmap->data);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glUseProgramObjectARB (prg);
//check gl error
//no error reported
GLERR ();
return 0;
}
int draw ()
{
glActiveTextureARB (GL_TEXTURE0_ARB);
glBindTexture (GL_TEXTURE_2D, ntex);
location = glGetUniformLocationARB (prg, “tex”);
glUniform1iARB (location, 0);
glActiveTextureARB (GL_TEXTURE1_ARB);
glBindTexture (GL_TEXTURE_2D, ctex);
location = glGetUniformLocationARB (prg, "ctex");
glUniform1iARB (location, 1);
//draw a quad
glTranslatef (0, 0, -5);
glBegin (GL_QUADS);
glNormal3f (0, 0, 1);
glTexCoord3f (0, 0, 0); glMultiTexCoord2f (GL_TEXTURE1_ARB, 0, 0); glVertex3f (-1, -1, 0);
glTexCoord3f (1, 0, 0); glMultiTexCoord2f (GL_TEXTURE1_ARB, 1, 0); glVertex3f (1, -1, 0);
glTexCoord3f (1, 1, 0); glMultiTexCoord2f (GL_TEXTURE1_ARB, 1, 1); glVertex3f (1, 1, 0);
glTexCoord3f (0, 1, 0); glMultiTexCoord2f (GL_TEXTURE1_ARB, 0, 1); glVertex3f (-1, 1, 0);
glEnd ();
//check gl error
//no error reported
GLERR ();
return 0;
}