2015-06-25 4 views

ответ

1

Первое, что нужно понять, это то, что OpenGL - это просто спецификация набора методов взаимодействия с вашим GPU. Затем, если вы находитесь в Windows или Linux, ваш поставщик GPU предоставит драйвер, который поставляется с реализацией этой спецификации. Если вы находитесь на OSX, внедрение выполняется с вашей ОС.

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

Затем вам нужно получить доступ к методам OpenGL. В Windows у вас есть библиотека opengl32.dll​, которая дает доступ только к устаревшему OpenGL1.1! Если вы хотите использовать современный OpenGL, вам нужно получить указатели на функции, открытые драйвером. Для этого есть несколько библиотека загрузки. Я думаю, что наиболее распространенным является glew.

OpenGL позволяет разработчикам графического процессора предоставлять пользовательские расширения спецификации. Вы можете получить эти функции так же, как и обычные функции OpenGL. Еще раз, я бы рекомендовал использовать glew, который также является библиотекой расширения .

Тогда вам понадобится заголовок для создания прототипов для всех этих функций. Но glew также обрабатывает это на самом деле.

1

Для каждой поддержки OpenGL, определенной для конкретной операционной системы, только строго определенное подмножество или версия OpenGL определяется как строгое требование. Для Windows это OpenGL-1.1, для Linux в соответствии с LSB-4 это OpenGL-1.2 (и в соответствии с LSB-5 это OpenGL-2.1), а для MacOS-X каждый основной выпуск обычно помещает его в версию OpenGL, которая была в начале разработки конкретной версии OS-X (что объясняет задержку между версиями версий OpenGL и ее поддержкой в ​​OS-X).

Помимо самой версии, которая была закреплена в спецификациях OS ABI, ничто не должно быть доступно для программ. Это означает, что программа, работающая в Windows, может не ожидать, что что-либо, кроме OpenGL-1.1, будет поддерживаться. Или OpenGL-1.2 на Linux. Все, что выходит за рамки этих версий, является чисто факультативным, и доступность должна быть проверена во время выполнения, и все требуемые точки входа функции должны быть динамически разрешены во время выполнения.

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

+0

«Помимо самой версии, которая была закреплена в спецификациях OS ABI, ничего не должно быть доступно для программ». - что это значит? – anonymous

+0

Это было похоже на чтение из Шекспира. – anonymous

+0

@BROY: Это означает, что, например, с Windows-NT4.0 Microsoft решила: «OpenGL-1.1 - это то, что программы могут ожидать и работать, но просто OpenGL-1.1». Все, что выходит за рамки OpenGL-1.1 в Windows, не может быть заранее известно программисту.Код должен быть написан таким образом, что он проверяет, что еще реально доступно и пытается использовать его только тогда. – datenwolf

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