# Invalid operation (1282)



## Pommes9485 (3. Feb 2013)

Guten Tag,

sobald ich zwei Texturen lade, funktioniert das Spiel nicht mehr, wobei das früher noch ging, allerdings nur bei mir, nicht bei meinem Kumpel.

Die gesamte Meldung ist :

```
Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
	at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
	at org.lwjgl.opengl.GL11.glEnd(GL11.java:708)
	at Welt.render(Welt.java:745)
	at MainFrame.render(MainFrame.java:102)
	at MainFrame.<init>(MainFrame.java:60)
	at MainFrame.main(MainFrame.java:162)
```
Der Code zum Texturen Laden :

```
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import org.lwjgl.opengl.GL11;
import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;
import org.newdawn.slick.util.ResourceLoader;


public class TextureManager
{
	int anzahl = 4;
	Texture[] texture = new Texture[anzahl+1];
	public TextureManager()
	{
		loadTextures();
	}
	private void loadTextures()  
    {
		for(int i=1; i<=anzahl; i++)
		{
			File tmp = new File("tex/"+i+".jpg");
			if(tmp.exists())
			{
				try
				{
					texture[i] = TextureLoader.getTexture("JPG",    ResourceLoader.getResourceAsStream(tmp.getAbsolutePath()));
                                         GL11.glBindTexture(GL11.GL_TEXTURE_2D,0);
				}
				catch(IOException a){a.printStackTrace();}
        	}
        	else
        	{
                System.out.println("Textur nicht gefunden, Programm wird geschlossen.");
                System.exit(0);
            }
		}
    }
	public Texture getTextureTyp(int typ)
	{
		return texture[typ];
	}
	public Texture getTextureTyp(String typ)
	{
		return (Texture) textu.get(typ);
	}
}
```

Zum Binden benutze ich dann einfach texture.bind().

Wir haben einen Objectloader geschrieben, welcher keine Probleme mit den Texturen hat und diese problemlos darstellt.

Die dargestellten Objekte sind in diesem Beispiel Blöcke.
Woran könnte es liegen ?


----------



## JCODA (3. Feb 2013)

Was steht denn so ca. bei  Welt.render(Welt.java:745) ?
(am besten die gesamte Methode render() in Welt)

Oder andere Idee: Du lädst die Texturen, bevor du überhaupt ein OpenGL-Context erzeugt hast. Also zuerst Display createn, danach Texturen laden.


----------



## Pommes9485 (3. Feb 2013)

JCODA hat gesagt.:


> Was steht denn so ca. bei  Welt.render(Welt.java:745) ?
> (am besten die gesamte Methode render() in Welt)
> 
> Oder andere Idee: Du lädst die Texturen, bevor du überhaupt ein OpenGL-Context erzeugt hast. Also zuerst Display createn, danach Texturen laden.



Also, die Render Methode, welche ich dort einführe sieht so aus :

```
public void render()
	{
		
		GL11.glColor4f(1, 1, 1, 1);
		texture.bind();
        	//GL11.glBegin(GL11.GL_QUADS);
		//GL11.glBindTexture(GL11.GL_TEXTURE_2D,texture.getTextureID());
		//Oben
	
		GL11.glNormal3f(0,1,0);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x+r,y+r,z+r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x-r,y+r,z+r);
		GL11.glTexCoord2f(0,0);
		GL11.glVertex3f(x-r,y+r,z-r);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x+r,y+r,z-r);
		//Unten
		GL11.glNormal3f(0,-1,0);
		//GL11.glTexCoord2f(texturePoints.get(tmp[0][1]).x, texturePoints.get(tmp[0][1]).y);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x+r,y-r,z+r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x-r,y-r,z+r);
		GL11.glTexCoord2f(0,0);
		GL11.glVertex3f(x-r,y-r,z-r);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x+r,y-r,z-r);
		// Hinten
		GL11.glNormal3f(0,0,-1);
		//GL11.glTexCoord2f(texturePoints.get(tmp[0][1]).x, texturePoints.get(tmp[0][1]).y);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x-r,y+r,z-r);
		GL11.glTexCoord2f(0f,0f);
		GL11.glVertex3f(x+r,y+r,z-r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x+r,y-r,z-r);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x-r,y-r,z-r);
		//Vorne
		GL11.glNormal3f(0,0,1);
		//GL11.glTexCoord2f(texturePoints.get(tmp[0][1]).x, texturePoints.get(tmp[0][1]).y);
		GL11.glTexCoord2f(0f,0f);
		GL11.glVertex3f(x-r,y+r,z+r);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x+r,y+r,z+r);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x+r,y-r,z+r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x-r,y-r,z+r);
		//Links
		GL11.glNormal3f(-1,0,0);
		//GL11.glTexCoord2f(texturePoints.get(tmp[0][1]).x, texturePoints.get(tmp[0][1]).y);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x-r,y+r,z+r);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x-r,y-r,z+r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x-r,y-r,z-r);
		GL11.glTexCoord2f(0f,0f);
		GL11.glVertex3f(x-r,y+r,z-r);
		//Rechts
		GL11.glNormal3f(1,0,0);
		//GL11.glTexCoord2f(texturePoints.get(tmp[0][1]).x, texturePoints.get(tmp[0][1]).y);
		GL11.glTexCoord2f(0f,0f);
		GL11.glVertex3f(x+r,y+r,z+r);
		GL11.glTexCoord2f(0f,1f);
		GL11.glVertex3f(x+r,y-r,z+r);
		GL11.glTexCoord2f(1f,1f);
		GL11.glVertex3f(x+r,y-r,z-r);
		GL11.glTexCoord2f(1f,0f);
		GL11.glVertex3f(x+r,y+r,z-r);
		//GL11.glEnd();
		
	}
```
Wir kombinieren dabei eine DisplayList und normales rendern, damit die Welt statisch ist und Frames spart und der Rest variabel ist 

Daher sieht die Welt Render Methode so aus :

```
public void render()
	{
		GL11.glCallList(list);
		GL11.glBegin(GL11.GL_QUADS);
		for(int i=0;i<zWelt.size();i++)
		{
			zWelt.get(i).render();
		}
		GL11.glEnd();
	}
```

zWelt beinhaltet dabei die Blöcke, welche nicht  in der LIste sind..


----------



## Pommes9485 (5. Feb 2013)

Also, mittlerweile habe ich folgendes heraus gefunden :
-Fehler entsteht oft bei Shadern --> Habe ich nicht
-Wenn etwas falsches zwischen glBegin() und glEnd() ausgeführt wird --> ist bei uns NUR das texture.bind(), also sollte es daran nicht liegen
-die Methode glCheckError().. tjoa, ich dachte mal sie würde mit nähere Infos geben, aber das tut sie leider nicht, oder weiß jemand was darüber ?

Ich bin langsam mit meinem Latein am Ende


----------



## JCODA (5. Feb 2013)

Oh, ich wusste ich hatte etwas vergessen. 

Könntest du das Project zippen und hochladen bzw. mir zukommen lassen? Dann spiel ich ein bisschen damit rum und schau, ob ich etwas finde.


----------



## Pommes9485 (6. Feb 2013)

Zum aktuellen Stand : Der Fehler lag daran, dass wir die texture zwischen glbegin und glend benutzt haben. Nachdem wir das behoben haben, läuft es bei meinem freund und sogar bei mir auf dem Tablett , nicht aber auf meinem Rechner ... wir haben die gleichen lwjgl jar Dateien und exakt den gleichen Quellcode... ich habe also keine Ahnung was da los ist. 

Ich vermute es könnte an der Grafikkarte liegen, habe auch schon den neusten Treiber runtergeladen, was aber nicht geholfen hat ... ich habe die hd radeon 5770 ..hat jemand damit schon Erfahrung gemacht ?


----------

