Ответ 1
Прежде всего OpenGL - это не некоторая централизованно управляемая библиотека и реализация (в отличие от DirectX), поэтому вы не можете загрузить SDK , потому что это не то, как OpenGL работает. OpenGL - это всего лишь куча документов, которые описывают API, который предоставляют драйверы, и программы могут использовать. Однако фактическая реализация API работает в контексте операционной системы. И это немного затрудняет работу, если вы хотите, чтобы ваш API был независим от ОС. DirectX легко справляется, потому что он предназначен только для одной конкретной ОС. Эта ОС - Windows, и это означает, что DirectX может быть написан против частей базовой ОС. Это делает разработку SDK управляемой.
Итак, что же делает OpenGL? Ну, это требует, чтобы какая-то часть ОС была настолько щедра и делала ее доступной для программы. В самой простой форме (и в ретроспективе это было бы лучшим вариантом, потому что это спасло бы столько вопросов, как ваше), этот интерфейс обеспечил бы одну функцию: GetProcAddress
. Для каждой функции, найденной в спецификации OpenGL, вы могли бы получить указатель на фактическую вещь в вашем драйвере OpenGL с помощью этой функции. Но, ленив, как и большинство программистов, они проделали легкий путь и сказали: "Ну что ж, текущая спецификация OpenGL в версии 1.1, как насчет того, чтобы мы открыли все OpenGL-1.1 на поверхности библиотеки сопряжения. И все, что приходит после нас выставлять через расширения, которые должны быть загружены GetProcAddress
, ведь сколько новых функций будет...". Оказывается: много.
В любом случае, каждый компилятор, предлагающий поддержку ОС, должен предоставлять интерфейсные библиотеки для каждого API, к которому поставляется ОС. Для Windows это OpenGL-1.1. Если вам нужна фактическая ошибка в библиотеке интерфейса OpenGL, это будет означать обновление ОС. Но это не так сильно отличается от DirectX, где новые версии DirectX поставляются с обновлениями ОС. Просто Microsoft не видит причин поддерживать OpenGL. Таким образом, OpenGL-1.1 - это то, что видно на поверхности, и нам приходится иметь дело с ним. И поскольку он включен в то, что компиляторы не отправляют туда никаких оснований для предоставления фактического SDK для загрузки, потому что все необходимое уже находится прямо на вашей установке компилятора.
Итак, как получить эти функции из более поздних версий OpenGL? Хорошо: GetProcAddress
. Это официальный способ сделать это. И поскольку фактические данные зависят от рассматриваемой ОС, но OpenGL не зависит от ОС, просто не может быть окончательный OpenGL SDK. Официально, что вам нужно сделать:
- Загрузите заголовки OpenGL для более поздних версий из http://opengl.org/registry
- Для каждой функции, которую вы хотите использовать, определите переменную-указатель функции, чтобы ее удерживать
- Загрузите указатель на функцию
GetProcAddress
Конечно, если вы просто хотите использовать современный OpenGL, это довольно утомительно. Поэтому некоторые люди разработали сторонние инструменты, которые делают для вас этот поступок. И для всего, что касается вас как программиста, эти инструменты очень похожи на SDK. Самый популярный выбор до сих пор (но, к сожалению, он не полностью безаварийный, с точки зрения краев OpenGL) является GLEW. Использование GLEW довольно просто. Я рекомендую использовать его статически связанными:
- Загрузите GLEW из http://glew.sourceforge.net
- Поместите glew.c и glew.h вместе с исходными файлами ваших проектов.
- Добавить glew.c в список скомпилированных источников; убедитесь, что определение макроса препроцессора
GLEW_STATIC
настроено в глобальные флаги компилятора проектов. - Используйте
#include "glew.h"
вместо#include <GL/gl.h>
- Сразу после создания окна OpenGL в запросе программы
glewInit()
Теперь несколько советов: вам действительно нужно научиться читать документацию (а не просто ее обрезать). Все то, что я только что написал, указано в тех ссылках, которые вы указали.