Multiple textures for multiple shaders

Started by Mihai_Ionut_Floares, January 09, 2021, 04:35:21

Previous topic - Next topic

Mihai_Ionut_Floares

I have these 2 fragment shaders:
Simple.fragment:
#version 330 core

in vec2 UV;

out vec4 color;

uniform sampler2D myTextureSamplerr;
void main(){
//use the texture
}


Unlit.fragment:
#version 330 core

in vec2 UV;

out vec4 color;

uniform sampler2D myTextureSamplerr;
void main(){
//use the texture
}

And that's how I load them:
public static int loadTexture(String imagepath) {
		Image image = new Image();
		IntBuffer width = BufferUtils.createIntBuffer(1);
	    IntBuffer height = BufferUtils.createIntBuffer(1);
	    IntBuffer comp = BufferUtils.createIntBuffer(1);
		
		ByteBuffer data = stbi_load(imagepath, width, height, comp, 4);
		
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
		
		
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width.get(), height.get(), 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
		id = glGenTextures();
		
		
		
			
		stbi_image_free(data);
		
		return id;
		
		
	}


How to send a texture to first shader and another to the unlit one? Because even if I call the loadTexture method with 1 texture for a lit object and with the 2nd texture for the unlit one the both objects will use the 2nd texture(last called)
I think the problem is this line: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width.get(), height.get(), 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
It searched for uniform sampler2D and give the image to all of them.