Hi!
First of all, I want you to know that I have searched the forum and founh solutions to similar problems, but somehow I couldn’t manage to make my program work.
I am trying to pass 2 textures to GLSL from C++, and there just add their color and display. I really cannot see what I’m doing wrong, so please help
Here is the code:
glGenTextures(1,&texName1);
glBindTexture(GL_TEXTURE_2D,texName1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,sizeX,sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,fileData1);
glBindTexture(GL_TEXTURE_2D,0);
glGenTextures(1,&texName2);
glBindTexture(GL_TEXTURE_2D,texName2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,sizeX2,sizeY2,0,GL_RGB,GL_UNSIGNED_BYTE,fileData2);
glBindTexture(GL_TEXTURE_2D,0);
set shaders function
void setShaders() {
char *vs = NULL,*fs = NULL;
GLint location1,location2;
v = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
f = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
vs = textFileRead("texture.vert");
fs = textFileRead("texture.frag");
const char * ff = fs;
const char * vv = vs;
glShaderSourceARB(v, 1, &vv,NULL);
glShaderSourceARB(f, 1, &ff,NULL);
free(vs);free(fs);
glCompileShaderARB(v);
glCompileShaderARB(f);
p = glCreateProgramObjectARB();
glAttachObjectARB(p,f);
glAttachObjectARB(p,v);
glLinkProgramARB(p);
location1=glGetUniformLocationARB(p,"texture1");
location2=glGetUniformLocationARB(p,"texture2");
glActiveTextureARB(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName1);
glEnable(GL_TEXTURE_2D);
glUniform1iARB(location1, 0);
glActiveTextureARB(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texName2);
glEnable(GL_TEXTURE_2D);
glUniform1iARB(location2, 1);
glUseProgramObjectARB(p);
}
vertex shader:
varying vec3 normal;
void main()
{
normal = gl_NormalMatrix * gl_Normal ;
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
}
fragment shader:
varying vec3 normal;
uniform sampler2D texture1;
uniform sampler2D texture2;
void main()
{
gl_FragColor = texture2D(texture1,gl_TexCoord[0])+texture2D(texture2,gl_TexCoord[1]);
}
this program displays just the data found under the fileData1 texture, and the fileData2 texture is just black. If I swap the two textures in the glTexImage2D functions, it will display only the second texture, so it’s not a problem related with reading texture data…