Контекст OpenGL на iphone. Что он делает / как это работает?

Я давно пытаюсь понять OpenGL ES 2.0 на iPhone, я смог заставить его работать каким-то образом. Но кое-что я действительно не могу понять очень хорошо. Что такое контекст OpenGL? или для чего это нужно?

Я знаю, что opengl не будет работать без его создания. Но я хотел бы, чтобы кто-то сказал мне, что это такое.

Поскольку при работе с компонентами OpenGL вам даже нужно убедиться, что контекст EAGL является текущим. Поскольку у меня не было необходимости создавать других, я никогда не обращал внимания на то, чтобы убедиться, что это текущая.

Также я создаю только один и передаю его?

Должен ли я уничтожить его, если я перестану использовать OpenGL?

Почему я могу заставить указатель контекста от объекта (например, glkview) указывать на мой созданный контекст EAGL? Является ли это конкретным объектом?

Я знаю, что это может быть очень странный вопрос, но даже если я попытался найти ответ в google или здесь я не смог найти краткий ответ.

благодаря

Контекст OpenGL инкапсулирует все состояние экземпляра OpenGL. Таким образом, создание контекста – это способ инициализации OpenGL, а настройка контекста необходима для того, чтобы система могла понять имена, которые вы позже цитируете для текстур, буферов фреймов и т. Д. Поэтому очевидное использование нескольких контекстов – это просто инкапсуляция OpenGL, вместо того, чтобы позволить всему стать неявно глобальным.

OpenGL – очень модальный API, и, следовательно, prima facie небезопасен для потоковой обработки. Однако контексты ассоциируются только с одним потоком, а iOS – с общими группами, которые представляют собой коллекции контекстов, которые могут использовать одни и те же ресурсы (при условии небольшой ручной синхронизации). До сих пор наиболее распространенное использование множественных контекстов – позволить фону подготовить дорогостоящий ресурс (например, загрузку большой текстуры), не прерывая работу пользователя в основном потоке.

Вы должны уничтожить контекст, если вы закончите с ним, чтобы ресурсы были возвращены в систему. GLKView s использует контекст в init и раскрывает свой текущий контекст для получения и настройки через свойство context .