2012-04-02 6 views
1

Ich habe ein Android-Projekt mit zwei Aktivitäten. Einer ist meine Haupttätigkeit, mit einer GLSurfaceView, die von nativem Code aktualisiert wird. Die andere ist eine PurchaseActivity, die Google In-App Billing-Client öffnet, um Einkäufe zu tätigen. Einkäufe zu tätigen funktioniert gut.Wie kann der In-App Billing-Client den EGL-Kontext verlieren?

Das Problem, das ich in laufende bin ist, dass nach den PurchaseActivity beendet ist, ob es erfolgreich abgeschlossen wird, irrt oder aufgehoben wird, und schaltet zurück auf die Haupttätigkeit der EGL Kontext verschwindet und ich erhalten:

Aufruf von OpenGL ES API ohne aktuellen Kontext (angemeldet einmal pro Thread)

Danach werden die onSurfaceCreated() und onSurfaceChanged() Methoden erneut ausgelöst werden.

Ich fand this question ähnlich, aber meins läuft bereits in einer separaten Aktivität und wenn ich den finish() Anruf entferne, bleibt es einfach in der PurchaseActivity stecken.

Muss ich die Texturen nach einem In-App-Abrechnungsanruf wirklich neu laden? Es scheint, dass dies zu diesem Zeitpunkt nicht notwendig sein sollte, da die App nicht ausgesetzt wird.

Mein Renderer-Code ist ziemlich einfach, aber aus irgendeinem Grunde nach der Abrechnung Client-Fenster schließt, ist es eine neue Oberfläche löst und bläst meinen nativen Code auf:

public class GameRenderer implements GLSurfaceView.Renderer 
{ 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) 
    { } 

    public void onSurfaceChanged(GL10 gl, int width, int height) 
    { 
     BaseLib.setScreenSize(width, height); 
     BaseLib.init(); 
    } 

    public void onDrawFrame(GL10 gl) 
    { 
     BaseLib.render(); 
    } 
} 

Antwort

1

Sie diesen Thread gesehen?

Prevent onPause from trashing OpenGL Context

Ich würde Sie ein onPause bekommen erraten, wenn Sie Aktivitäten wechseln, die die GLSurfaceView sagt Ressourcen freizugeben.

Auf API 11+ gibt es einen Befehl setPreserveEGLContextOnPause, aber nicht sicher, ob das eine Lösung für Sie ist, wenn Sie niedrigere API-Ebenen als das Ziel haben möchten.

+0

Es stellte sich heraus, dass es eine Race-Bedingung in meinem Code an der Wurzel meines Problems war, aber das war auch hilfreich. –

Verwandte Themen