# [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs



## Supermanitu (24. Mai 2014)

Hallo,
ich schreibe für mich eine kleine 2D-Engine, und habe ein Problem, wenn ich ein Objekt mit Textur rendere, habe ich keine Probleme. Sobald ich aber ein zweites hinzufüge, hat dieses die selbe Textur wie das erste, obwohl sie eine andere Textur-ID hat. Sobald ich die Zeile, wo das erste Objekt erzeugt wird auskommentiere (nichts sonst), ist es logischerweise weg und das zweite hat die Richtige Textur, sobald ich es wieder einkommentiere ist der Bug wieder da.
Weiß da jemand was? ???:L


----------



## Hestalon (24. Mai 2014)

Ich hatte das gleiche Problem mal gehabt. 
Liegt einfach daran, dass man OpenGL noch sagen muss welche Location zu welcher Textur gehört.


```
public Shader(String vertexPath, String fragmentPath, String[] attributes, String[] uniform, int textureCount) {
		VLog.info("Loading Shaderprogram: " + vertexPath + " " + fragmentPath);
		// Load the vertex shader
		vsId = loadShader(vertexPath, GL20.GL_VERTEX_SHADER);
		
		// Load the fragment shader
		fsId = loadShader(fragmentPath, GL20.GL_FRAGMENT_SHADER);		
		
		// Create a new shader program that links both shaders
		pId = GL20.glCreateProgram();
		GL20.glAttachShader(pId, vsId);
		GL20.glAttachShader(pId, fsId);
		
		attributeCount = attributes.length;
		for (int i = 0; i < attributes.length; i++) {
			GL20.glBindAttribLocation(pId, i, attributes[i]);
		}
		
		
		GL20.glLinkProgram(pId);
		if (GL20.glGetProgrami(pId, GL20.GL_LINK_STATUS) == GL11.GL_FALSE)
	    {
	      System.err.println(GL20.glGetProgramInfoLog(pId, 1024));
	      System.exit(1);
	    }
	    GL20.glValidateProgram(pId);
	    if (GL20.glGetProgrami(pId, GL20.GL_VALIDATE_STATUS) == GL11.GL_FALSE)
	    {
	      System.err.println(GL20.glGetProgramInfoLog(pId, 1024));
	      System.exit(1);
	    }
	    GL20.glDetachShader(pId, vsId);
	    GL20.glDetachShader(pId, fsId);
	    bind();
	    
	        for(int i = 0; i < textureCount; i++){
			System.out.println("texture search: " + "texture"+i);
			int sampler = GL20.glGetUniformLocation (pId, "texture"+i);
			System.out.println("sampler id: "+ sampler);
			GL20.glUniform1i (sampler, i);
		}
	    for(int i = 0; i< uniform.length;i++){
			addUniform(uniform[i]);
		}
		unbind();
	}
```

Hier drin ist das was ich meine markiert, ist der Construktor von allen Shadern die ich nutze.
Wie schön oder toll der Code ist ist jedem selbst überlassen 

Gruß


Edit: Markieren mag er nicht => vorletzte for-Schleife


----------



## Supermanitu (24. Mai 2014)

Das Verwirrt mich etwas, ich benutze überhaupt keine Shader. Meine Quads werden einfach mit glBegin und glEnd gezeichnet.
Die Textur wird mit glBind aktiviert.


----------



## Supermanitu (26. Mai 2014)

Ich hab den Fehler gefunden, beim Laden des Bildes wurden mit glBindTexture ein paar Einstellungen vorgenommen. Danach einfach ein glBindTexture(GL_TEXTURE_2D, 0) einfügen, und das Problem ist weg.


----------

