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:
set shaders functionCode :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);
vertex shader:Code :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); }
fragment shader:Code :varying vec3 normal; void main() { normal = gl_NormalMatrix * gl_Normal ; gl_Position = ftransform(); gl_TexCoord[0] = gl_MultiTexCoord0; gl_TexCoord[1] = gl_MultiTexCoord1; }
Code :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...




