Skip to main content
added 248 characters in body
Source Link
Ali1S232
  • 8.7k
  • 2
  • 42
  • 60

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

here are some screen shots showing what is happening :

  1. The image rendered Using above codes The image rendered Using above codes
  2. The image rendered when I change textures passed to samples The image rendered when I change textures passed to samples

I'm expecting to see green objects from the first picture with red objects hanging from the top.

after testing lots of things I've figured out glUniform1i is not working as expected, Though I'm not sure what is wrong with it. Here is the code:

glUniform1i(textureLocation, GL_TEXTURE0); 
glUniform1i(guideLocation, GL_TEXTURE1); 

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

here are some screen shots showing what is happening :

  1. The image rendered Using above codes The image rendered Using above codes
  2. The image rendered when I change textures passed to samples The image rendered when I change textures passed to samples

I'm expecting to see green objects from the first picture with red objects hanging from the top.

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

here are some screen shots showing what is happening :

  1. The image rendered Using above codes The image rendered Using above codes
  2. The image rendered when I change textures passed to samples The image rendered when I change textures passed to samples

I'm expecting to see green objects from the first picture with red objects hanging from the top.

after testing lots of things I've figured out glUniform1i is not working as expected, Though I'm not sure what is wrong with it. Here is the code:

glUniform1i(textureLocation, GL_TEXTURE0); 
glUniform1i(guideLocation, GL_TEXTURE1); 
Tweeted twitter.com/#!/StackGameDev/status/258811249742184448
edited tags
Link
Nicol Bolas
  • 26.1k
  • 3
  • 78
  • 104
added some images
Source Link
Ali1S232
  • 8.7k
  • 2
  • 42
  • 60

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

here are some screen shots showing what is happening :

  1. The image rendered Using above codes The image rendered Using above codes
  2. The image rendered when I change textures passed to samples The image rendered when I change textures passed to samples

I'm expecting to see green objects from the first picture with red objects hanging from the top.

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

I've got a simple shader to test multitextureing the problem is both samplers are using same image as their reference.

the shader code is basically just this :

vec4 mid = texture2D(u_texture,v_texCoord);
float g = texture2D(u_guide,v_guideCoord);
gl_FragColor = vec4(g , mid.g,0,1);

and this is how I'm calling draw function :

int last_State;
glGetIntegerv(GL_ACTIVE_TEXTURE, &last_State);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, getTexture()->getName());
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, mGuideTexture->getName());

ccGLEnableVertexAttribs( kCCVertexAttribFlag_TexCoords |kCCVertexAttribFlag_Position);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

I've already check mGuideTexture->getName() and getTexture()->getName() are returning correct textures. but looking at the result I can tell, both samplers are reading from getTexture()->getName().

here are some screen shots showing what is happening :

  1. The image rendered Using above codes The image rendered Using above codes
  2. The image rendered when I change textures passed to samples The image rendered when I change textures passed to samples

I'm expecting to see green objects from the first picture with red objects hanging from the top.

Source Link
Ali1S232
  • 8.7k
  • 2
  • 42
  • 60
Loading