Контекст OpenGL может делиться только объектами.И даже тогда объекты-контейнеры не могут быть общими.Контейнерные объекты - это объекты, основной целью которых является присоединение к ним других объектов.В частности, следующие объекты-контейнеры:
- объекты Framebuffer
- объекты массива вершин
- объекты преобразования обратной связи
- объекты программного конвейера
Все остальные объекты могут быть общими.
Совместное использование объектов - это контекстно-зависимая задача, обычно выполняемая как часть создания контекста или сразу после него.Однако, поскольку это делается для самого контекста, не может быть кроссплатформенной операцией.OpenGL определяет только поведение контекста, а не то, как манипулировать объектом контекста.Специфичные для платформы API, отвечающие за создание и управление контекстами, обрабатывают это: GLX, WGL, EGL и т. Д.
Как правило, это обрабатывается двумя способами.Один из способов заключается в том, чтобы функция создания контекста принимала другой контекст в качестве параметра;Вновь созданный контекст поделится всеми разделяемыми объектами с данным контекстом.wglCreateContextAttribsARB
- это функция создания контекста WGL, которая использует контекст для совместного использования с новым.
Другими способами является использование функции сразу после создания контекста.Эта функция принимает два контекста и разделяет объекты между ними.Однако вы должны использовать такую функцию сразу после создания контекста;Вы не хотите создавать объекты в контексте назначения, которые могут конфликтовать с теми, которые уже есть в источнике.WGL имеет более старую функцию, wglShareLists
, которая разделяет объекты между контекстами.Я знаю, что он говорит только о списках отображения, но он разделяет все разделяемые объекты.