Если вы хотите, чтобы в вашем приложении было несколько одновременно видимых представлений OpenGL в форме CAEAGLLayers, важно помнить следующее:
[EAGLContext setCurrentContext:oglContext]
изменит контекст не только для представления, которое выполняется в данный момент, но и для всех представлений EAGL вашего приложения. Это может проявиться в создании других представлений, которые работали для замораживания, поскольку вызовы OpenGL теперь переходят к последнему представлению, которое выполняло [EAGLContext setCurrentContext:oglContext]
.
Чтобы обойти это, вы должны вызывать [EAGLContext setCurrentContext:oglContext]
каждый раз, когда вызывается экземпляр вашего представления, прежде чем делать какие-либо вызовы OpenGL.
В моем приложении я устанавливаю контекст только один раз, в представлении initWithFrame
. Это работало хорошо в течение многих лет. Как только я создал второй экземпляр этого представления, первое представление перестало обновляться. Теперь я устанавливаю контекст в своих вызовах обновления, прежде чем делать какие-либо вызовы CVOpenGLES.