Frage

Wenn die Größe eines GLKViews geändert wird, werden einige Operationen hinter den Kulissen für die Puffer und den Kontext dieses GLKViews ausgeführt. Während der Zeit, die für diese Operationen hinter den Kulissen benötigt wird, führt das Zeichnen auf den GLKView nicht zu korrekten Ergebnissen.

In meinem Szenario habe ich einen GLKView, für den setNeedsDisplay aktiviert ist. Wenn ich den Inhalt auf dem Bildschirm aktualisieren muss, rufe ich einfach -setNeedsDisplay auf GLKView. Ich verwende GLKView zum Zeichnen von Bildern. Wenn ich also ein Bild mit einer anderen Größe zeichnen muss, muss ich auch die Größe des GLKViews ändern.

Das Problem: Wenn ich die Größe des GLKView ändere und setNeedsDisplay in dieser Ansicht aufrufe, ist das Ergebnis auf dem Bildschirm nicht korrekt. Dies liegt daran, dass der GLKView nicht ausgeführt wird, um die durch die neue Größenänderung aufgerufenen Operationen hinter den Kulissen abzuschließen, bevor versucht wird, das neue Bild zu zeichnen

Ich habe eine Problemumgehung gefunden, indem ich Folgendes aufgerufen habe: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 statt nur setNeedsDisplay auf dem GLKView. Dies zwingt den Hauptthread grundsätzlich dazu, zu warten, bis alle openGL-Operationen hinter den Kulissen abgeschlossen sind, bevor setNeedsDisplay aufgerufen wird. Obwohl dies in Ordnung funktioniert, frage ich mich, ob es eine bessere Lösung gibt. Gibt es beispielsweise einen openGL-Aufruf, mit dem der Thread warten soll, bis alle openGL-Vorgänge abgeschlossen sind, bevor er fortfährt?

War es hilfreich?

Lösung

Die Lösung bestand darin, das CIContext-Objekt zurückzusetzen, nachdem die Größe des GLKView geändert wurde.
Vielen Dank für nichts, alle!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top