# LibGdx, Loadingscreen & Opengl context



## Kekz (2. Mai 2015)

Hallo,
ich habe mal wieder ein Problem und brauche eure Hilfe 

Ich möchte zur laufzeit einige Texturen dynamisch erzeugen und das ganze hinter einen Loadingscreen verstecken.

Prinzipiel würde ich das ganze in 2 Threads aufteilen wollen, dass geht aber leider nicht da beide Threads den Opengl context bräuchten (Texturen zeichnen & Loadingscreen Rendern).

Also muss alles in einen Thread der beides erledigen muss.
Hierfür habe ich mir folgendes gedacht: 


```
@Override
public void render () {
        if(zeichneTextruen){
              zeichneTexturen=false;
              texturenZeichnen();
        }
        -> zeige Loadingscreen mit fortschritt%
}

public void texturenZeichnen() {
         for (int i = 0; i < anzahlTextruen; i++) {
               zeichneTextur(i);
               fortschritt = i in %;
               render(); //zeichne loadingscreen

         }

}
public void zeichneTextur(int i); {
               //mach was mit Opengl context
}
```

leider Funktioniert das so nicht da render() während des ladevorganges nie beendet wird und das Ladebild nie angezeigt wird.

Wie würdet ihr das lösen ? :idea:

Vielen Dank & mfg

Kekz


----------



## Major_Sauce (2. Mai 2015)

Morgen, 

zu deinem Problem kann ich nichts sagen, ich hätte nur eine Frage.
Hast du dir schon mal JavaFX angeschaut ?
Ist ne echt feine Sache und vor allem übernimmt es gleich das ganze rendern und benutzt auch die GPU.
Ist echt super, sogar 3D rendering ist implementiert und es wird direkt mit Java mitgeliefert.

mfg Major


----------



## InfectedBytes (3. Mai 2015)

du hast dir eine endlose rekursion gebaut. denn render() ruft texturenZeichnen auf, dieses wiederum ruft rendern() auf.
Außerdem wird erst auf den Bildschirm gezeichnet, wenn die render methode endgültig verlassen wurde und die kontrolle wieder bei LibGDX ist. 

Im Grunde willst du ein ähnliches Verhalten haben wie der AssetManager. 
Anstatt am anfang einmal alle Texturen zu erzeugen, erzeugst du jeden Frame nur eine handvoll davon. 
Ganz grob kann das dann ungefähr so aussehen:

```
private int textureIndex;
private int texturecount = 20;

private boolean loadTexture() {
  if(textureIndex==textureCount) return true; // alles geladen
  // lade/erzeuge ein paar texturen
  // ...
  textureIndex++;
 return textureIndex==textureCount;
}
public void render() {
  if(!loadTexture()) {
    //lade screen
  } else {
    //spiel screen
  }
}
```


----------



## Kekz (4. Mai 2015)

Ok Danke,
so habe ich das jetzt auch realisiert. Ich finde zwar diese lösung nicht unbedingt schön aber es funktioniert zumindest ^^

Vielen Dank für die Antworten
MFG
Keks


----------

