GLSurfaceView aktualisiert sich nicht automatisch

G

gurke1509

Neues Mitglied
1
Hallo Zusammen,

ich bin noch ein sehr unerfahrener Android-Programmierer und habe so meine liebe Müh und Not eine einfache 3D-Anwendung zu erstellen.

Das was bereits läuft:
Mein onCreate sieht wie folgt aus:
Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         view = new GLSurfaceView(this);
           view.setRenderer(new OpenGLRenderer());
           //view.setRenderMode(1); //RENDERMODE_WHEN_DIRTY:0, For RENDERMODE_CONTINOUSLY: 1
           setContentView(view);
           
           //Start the main program
           locationManager = (LocationManager)getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
           locationProvider = locationManager.getProvider("gps"); 
           locationListener = new LocationListener() {
               public void onLocationChanged(Location l) {
                   position = l;
               }
               public void onProviderDisabled(String provider) {}
               public void onProviderEnabled(String provider) {}
               public void onStatusChanged(String provider, int status, Bundle extras) {}
           };
           
           //while(true){}
           //main();
    }

Weiterhin ist
Code:
@Override
    protected void onPause() {
        super.onPause();
        view.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        view.onResume();
    }
gesetzt.
Mit Hilfe vom OpenGLRenderer werden drei Würfel erzeugt, die sich umeinander drehen. Das funktioniert auch prima. Jedoch, wenn ich das "while(true){}" auskommentiere, aktualisiert sich das GLSurfaceView nicht. Bedeutet, dass ich nur ein schwarzes Bild zu sehen bekomme. Wenn ich
Code:
view.setRenderMode(RENDERMODE_WHEN_DIRTY);
setze und dann ein
Code:
while(true) view.requestRender()
mache funktioniert dies ebenfalls nicht.

Entferne ich die Schleife, aktualisiert sich alles wieder automatisch und ich sehe rotierende Vierecke.

Hat jemand eine Ahnung, was ich falsch gemacht haben könnte?
 
Ich denke das Problem lässt sich lösen wenn du die while Schleife in einen Thread packst. Das problem ist das du eine Endlosschleife startest und dadurch die OnCreate Methode garnicht mehr verlässt, da keine Abbruchbeingung vorhanden ist.

versuch mal folgendes (alles nicht getestet):

Code:
Runnable foo = new Runnable(){

public void run(){
   while(true){};

}
};

Thread t = new Thread(foo);
t.start();

Sorry keine Ahnung wie man den Code im Editor hier einrückt.
Damit sollte deine Whileschleife parrallel laufen
 
Vielen Dank für den Hinweis. Das hatte ich auch bereits versucht, hatte aber keine Besserung gebracht. (Aber wie ich gerade sehe, lag es wohl eher daran, dass ich den neuen Thread falsch erstellt habe^^)

Ich habe das Problem aber nun so gelöst, dass die main-loop des Spiels, was ich programmiere immer genau einmal aufgerufen wird. Und zwar dann, wenn sich das GLSurface neu zeichnet und die Methode onDrawFrame aufgerufen wird. Somit ist es immer noch eine Schleife, aber jeder Schleifendurchlauf wird von onDrawFrame angestoßen.

Mit diesem Prinzip kann ich jetzt weiterarbeiten.

Aber nochmals danke für den Tipp.

Gruß
 

Ähnliche Themen

Laser5001
  • Laser5001
Antworten
2
Aufrufe
870
Laser5001
Laser5001
G
Antworten
5
Aufrufe
858
jogimuc
J
SaniMatthias
Antworten
19
Aufrufe
871
swa00
swa00
Zurück
Oben Unten