- [EAGLContext renderbufferStorage: from Drawable:] Wird das zweite Mal nicht ausgeführt?

8

Ich entwickle eine iOS openGL ES-Anwendung.

Ich mache die üblichen EAGLView / ES2Render-Sachen.

Beim Start ist die Erstellung von Frambuffer mit dem folgenden Code erfolgreich:

%Vor%

Bald darauf wird UIView 's -layoutSubviews aufgerufen und ich führe -resizeFromLayer: :

aus %Vor%

Nichts von dem, was ich tue, ist etwas Besonderes. Ich habe einen separaten Framebuffer, um Szenenübergänge zu rendern, mit zwei Texturen, die an Farbe und Tiefe angehängt werden.

Beim zweiten Aufruf von -renderbufferStorage:fromDrawable: ( -layoutSubviews - & gt; resizeFromLayer: ) schlägt es immer fehl (gibt NO zurück); Das Aufrufen von glGetError() davor hat keinen Fehler zur Folge, aber es wird direkt nach der Rückgabe GL_INVALID_OPERATION aufgerufen. Wenn ich dies ignoriere und fortfahre, erhält glGetRenderbufferParameteriv() immer noch die richtige Breite und Höhe (640 bzw. 1136 auf einem iPhone 5), aber glCheckFramebufferStatus() gibt GL_FRAMEBUFFER_UNSUPPORTED zurück.

Alternativ habe ich das obige resizeFromLayer: übersprungen und es mit folgendem ersetzt:

%Vor%

... aber der gleiche Fehler bleibt bestehen ( -renderStorage:fromDrawable: scheitert; diesmal in -createFramebuffers ).

Im Moment gebe ich nur YES zurück (meine App unterstützt nur Porträt, so dass keine Änderung der Bildschirmgröße tatsächlich passiert), aber ich möchte es wirklich beheben, weil ich eines Tages Landschaft usw. unterstützen muss. .

    
Nicolas Miari 20.08.2013, 03:39
quelle

2 Antworten

1

Ein möglicher Grund dafür, dass renderbufferStorage:fromDrawable: fehlschlägt, ist, dass _mainContext nicht der aktuelle Kontext zu dieser Zeit ist. Auch wenn es scheint, dass kein anderer Kontext den "aktuellen" Status hätte stehlen können, empfehle ich, [EAGLContext setCurrentContext:_mainContext] vor jedem gl oder EAGL Code aufzurufen, der mit Objekten arbeitet, die diesem Kontext zugeordnet sind (zB zu Beginn des resizeFromLayer: Methode).

    
Jaysen Marais 31.01.2015, 10:17
quelle
1

Ein anderer möglicher Grund ist, dass die Größe Ihrer Ebene zu groß ist. Stellen Sie außerdem sicher, dass Sie jedes Mal einen neuen Framebuffer und Renderpuffer verwenden. Und du hast deine alten zerstört, bevor du neue erzeugst.

Sie können sie so löschen

%Vor%     
thedeveloper3124 05.02.2018 23:03
quelle