Как установить текущую версию OpenGL для Windows С++?

Я запускаю Windows 7 с Visual Studio 2010. Версия OpenGL включена (#include) - это версия 1.1, и я бы хотел работать с достаточно современной версией - своего рода версией 3 или 4.

Что мне нужно сделать, чтобы добраться до этого состояния? Страница SDG OpenGL в http://www.opengl.org/sdk/, кажется, говорит, что вам не разрешено загружать SDK и вики OpenGL в http://www.opengl.org/wiki/Getting_Started говорит, что у вас его уже есть, и если у вас его нет, он указывает вам сайты, на которых вы можете загружать DLL файлы производителей графических карт. Но, конечно, мне не нужно создавать другую версию игры, над которой я работаю, для каждой видеокарты, с которой я буду работать.

У StackOverflow также нет ничего, по крайней мере, не сформулированного таким образом, чтобы я мог следовать. Я просто хочу загрузить ссылку на установщик, который я могу запустить, что оставит меня с достаточно современным API OpenGL... Где я могу его получить?

Обновление: OpenGL, похоже, имеет идеосинкратическую идиому какого-то типа, которая не предполагает наличия SDK - то есть пакета .DLL,.lib и заголовков. Я использую DirectX, который делает. (Фактически, DirectX SDK даже содержит документацию!)

Ответ 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()

Теперь несколько советов: вам действительно нужно научиться читать документацию (а не просто ее обрезать). Все то, что я только что написал, указано в тех ссылках, которые вы указали.

Ответ 2

Позвольте мне ответить, указав ссылку, которую вы предоставили

Для большинства библиотек, с которыми вы знакомы, вы просто # включаете заголовочный файл, убедитесь, что библиотека связана с вашим проектом или makefile, и все это работает. OpenGL не работает. По причинам, которые в конечном счете не имеют отношения к этому обсуждению, вы должны вручную загружать функции через API-интерфейс, специфичный для платформы. Эта работа с шаблонами выполняется с различными библиотеками загрузки OpenGL; они делают этот процесс гладким. Вам настоятельно рекомендуется использовать один.

этот отрывок содержит удобную ссылку на страницу wiki под названием OpenGL Загрузка библиотеки

Ответ 3

Насколько я могу судить по работе в среде OpenTK (С#) и в структуре JOGL (Java), ваша версия OpenGL определяется вашей графической картой. Я знаю, что мой ноутбук поддерживает OpenGL 1.1 только на моем рабочем столе, он поддерживает самую последнюю версию.

Ноутбук имеет Intel IGP с I5 proc.

Рабочий стол имеет Radeon 6950HD.