2015-02-18 3 views
1

Чтобы создать контекст OpenGL с профилем версией 3.2, мне нужно добавить атрибуты в формат пиксель при создании контекста:Изменения по умолчанию OpenGL контекста профиль версия

..., 
NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute) NSOpenGLProfileVersion3_2Core, 
..., 

Есть ли способ (переменная среды, глобальным переменная, функция для вызова до создания NSOpenGLPixelFormat ...), чтобы изменить версию профиля OpenGL по умолчанию, если не указаны такие атрибуты. По умолчанию используется старая версия OS X 10.10. Я пытаюсь интегрировать код, который опирается на новые функции OpenGL с каркасом (ROOT), который устанавливает контекст OpenGL и не дает возможности изменять параметры.

И есть ли способ изменить атрибуты формата пикселя контекста OpenGL после его настройки?

ответ

1

Пиксельные форматы, связанные с контекстами OpenGL (правильная терминология здесь «default framebuffer») всегда неизменяемы. Сам OpenGL не контролирует и не диктует это, это фактически API оконной системы (например, WGL, GLX, EGL, NSOpenGL), которые налагают это ограничение.

Единственный способ, который я вижу вокруг этой конкретной проблемы, - создать собственный экранный экран (core 3.2), который разделяет ресурсы с устаревшим (2.1) контекстом, созданным ROOT. Если OS X на самом деле позволяет вам использовать этот общий контекст (это, конечно, потому что два контекста, вероятно, считаются разными рендерерами), вы можете нарисовать объект renderbuffer в своем основном контексте, а затем blit, что renderbuffer в ваш устаревший контекст, используя glBlitFramebuffer (...).

Обратите внимание, что объекты Framebuffer не являются ресурсом, разделяющим контекст. В этом примере вы используете общий доступ к изображению (Renderbuffer или Texture), а это означает, что вам нужно будет поддерживать отдельные FBO с одинаковыми вложениями в обоих контекстах.

0
glutInitContextVersion (3, 3); 

может установить версию openGL на 3.3, вы можете изменить версию по своему усмотрению.

Смежные вопросы