2013-07-30 3 views
11

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

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

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

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

+2

«* вам не разрешено загружать SDK *« Это потому, что это не SDK. Они называют это «SDK», потому что они хотели присоединить людей к мысли, что OpenGL имеет реальный, официально поддерживаемый SDK. Это просто (плохо обновленный) захват-библиотеки библиотек, на которые ссылается веб-сайт. Страница «Начало работы» в вики объясняет, как это работает.Если вы хотите, чтобы приложения OpenGL работали в чужой системе, тогда * они * также должны были установить последние драйверы. Но это верно для любого графического приложения. –

+1

Вот что я пытаюсь понять. Что мне нужно для установки и #include, чтобы использовать OpenGL в актуальном состоянии? Где я могу получить opengl32.lib? Где я узнаю, какие файлы заголовков мне понадобятся, и где я их получу? Если у него нет SDK, как мы даже знаем, какие функции в нем и что они делают? – ExOttoyuhr

+3

«SDK» - просто причудливое имя для «библиотеки». «Где я могу получить opengl32.lib? *» На странице «Начало работы» было очень ясно: «Visual Studio и большинство компиляторов Windows поставляются с этой библиотекой». Это было предложение * после того, которое говорило вам, чтобы он ссылался на него. И часть под названием «Получение функций» объясняет ситуацию с заголовком. Пожалуйста, * прочитайте * страницы, с которыми вы связались; не просто сканировать их на определенные термины или искать «загрузить это». На самом деле пройдите и поймите, что он говорит. –

ответ

18

Прежде всего 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 довольно просто. Я рекомендую использовать его статически связаны между собой:

  1. Скачать GLEW от http://glew.sourceforge.net
  2. Место glew.c и glew.h вместе с вашими исходными проектами файлов.
  3. Добавьте glew.c в список скомпилированных источников; убедитесь, что определение макроса препроцессора GLEW_STATIC настроено в глобальные флаги компилятора ваших проектов.
  4. Использование #include "glew.h" вместо #include <GL/gl.h>
  5. Сразу после вы создали окно OpenGL в вашей программе вызова glewInit()

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

+0

Хороший ответ, но «я рекомендую использовать его статически связанными» - почему? –

+0

Если они хотят, чтобы их вики были прочитаны как Шекспир, они должны написать ее, как Шекспир; Я пытался прочесть, застрял на странных отказах, используя неопределенные условия, и сдался. Но спасибо за объяснение того, что на Земле происходит там - фон, который вы здесь предоставляете, не был в вики, по крайней мере, не в форме, распознаваемой не-инициатору, который наивно предположил, что API будет существовать. Однако из дальнейшего обсуждения я выяснил, что OpenGL не то, что я искал; Фактически, я смутил его с помощью SDL. – ExOttoyuhr

3

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

Ноутбук имеет Intel IGP с процессором I5.

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

+0

Я пытаюсь выяснить, что я делаю, чтобы # включить версию , которая более актуальна, чем 1,1 ... – ExOttoyuhr

+1

Извините, я неправильно понял ваш вопрос. Я думал, что вы беспокоитесь об этом, потому что инфраструктура сообщила, что она работает в gl 1.1, а не в том, что в библиотеке не было функций> 1.1. В зависимости от того, что вам нужно, вы можете рассмотреть оболочку, которая создает для вас окно с контекстом openGL. FreeGlut приходит на ум. http://freeglut.sourceforge.net/ – kicks

+0

Я хотел получить текущую версию файлов заголовков и библиотеки для OpenGL. Но я отказываюсь от этого; если это трудно сделать, я могу только представить себе, как будет работать с реальной библиотекой. – ExOttoyuhr

8

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

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

этот отрывок содержит удобную ссылку на вики-страницу под названием OpenGL Loading Library

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