Skip to main content
added clarification that i had actually read the post ;)
Source Link
user_123abc
  • 635
  • 5
  • 10

Are you positive that you've set GL_CLAMP_TO_EDGE for each individual texture? This is a part of individual texture state and it defaults to GL_REPEAT, so this needs to be done after binding with glBindTexture. I realize in the original post you literally say that you set it for each texture, but I'm wondering what the code actually looks like?

For example:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. 

This is not the same as:

glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

Are you positive that you've set GL_CLAMP_TO_EDGE for each individual texture? This is a part of individual texture state and it defaults to GL_REPEAT, so this needs to be done after binding with glBindTexture.

For example:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. 

This is not the same as:

glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

Are you positive that you've set GL_CLAMP_TO_EDGE for each individual texture? This is a part of individual texture state and it defaults to GL_REPEAT, so this needs to be done after binding with glBindTexture. I realize in the original post you literally say that you set it for each texture, but I'm wondering what the code actually looks like?

For example:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. 

This is not the same as:

glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
Source Link
user_123abc
  • 635
  • 5
  • 10

Are you positive that you've set GL_CLAMP_TO_EDGE for each individual texture? This is a part of individual texture state and it defaults to GL_REPEAT, so this needs to be done after binding with glBindTexture.

For example:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. 

This is not the same as:

glBindTexture(GL_TEXTURE_2D, tex1); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, tex2); //upload texture, etc. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);