Tworzymy grę z elementami 2d wyświetlanymi z UIViews
nad widokiem OpenGL ES (w szczególności używamy GLKit's GLKView
) i mamy problemy z utrzymaniem optymalnej synchronizacji pozycji.Synchronizuj układ UIView z ramkami OpenGL
W widoku nadrzędnym layoutSubviews
, wyświetlamy na ekranie pozycje 3d na świecie i wykorzystujemy je jako lokalizacje dla kilku "markerów" w grze w postaci UIView
. Cała gra aktualizuje się tylko w odpowiedzi na poruszenie kamery przez użytkownika, a kamera wyświetla widok za każdym razem, gdy się porusza.
Wszystko działa dobrze, z tym że znaczniki wydają się z grubsza 1 klatką zsynchronizowane z renderowaniem 3d. Mówię szorstko, ponieważ (1) jest to oszacowanie! i (2) Zastanawiam się, czy istnieje potencjalnie problem z wielowątkowością: czy synchronizacja ze specjalnym odświeżaniem oddzwaniania nie jest zsynchronizowana ze specjalnym ekranem?
Czy istnieje sposób podpięcia układu widoku? Podpowiedzi tak, aby był on zsynchronizowany z aktualizacją widoku 3D?
Aktualizacja: Niesamowicie, nazywając layoutIfNeeded
natychmiast po setNeedsLayout
sprawia problemu gorzej! Prawdopodobnie 2 lub więcej klatek na zewnątrz. Naprawdę tego nie rozumiem!