Opengl не работает в visual studio

Обновлено: 04.07.2024

Скопируйте файлы из директории
C:\Programm Files\TaoFramework\lib
в папку
C:\Windows\System32

Итак, сейчас мы на основе тестового приложения проверим работоспособность библиотеки Tao: сначала мы подключим ее к проекту, затем проведем инициализацию библиотеки и инициализацию OpenGL и в качестве проверки визуализируем сферу с помощью библиотеки FreeGlut.

Сначала создайте новый проект, в качестве шаблона установив приложение Windows Forms. Назовите его Tao-OpenGL-Initialization-Test.

  1. Tao.OpenGL.dll - отвечает за реализация библиотеки OpenGL.
  2. Tao.FreeGlut.dll - отвечает за реализацию функций библиотеки Glut. Мы будем ее использовать для инициализации рендера , а так же для различных других целей.
  3. Tao.Platform.Windows.dll - отвечает за поддержку элементов непосредственно для визуализации на платформе Windows.
Теперь вернитесь к конструктору диалогового окна и перейдите к окну Toolbox (Панель элементов). Щелкните правой кнопкой на вкладке «Общие», и в раскрывшемся контекстном меню выберите пункт «Выбрать элементы» (Select elements), как показано на рисунке 5.
Рисунок 5. Выбор опции добавления элемента.
В открывшемся окне найдите элемент SimpleOpenGLControl и установите возле него галочку, как показано на рисунке 6. Затем нажмите ОК.
Рисунок 6. Подключения к панели элементов SimpleOpenGLControl, предназначенного для визуализации графики в окне.
Теперь данный элемент станет доступным для размещения на форме приложения. Перетащите элемент на форму и разместите так, как показано на рисунке 7. Справа от размещенного элемента установите 2 кнопки – «Визуализировать» и «Выйти».
Рисунок 7. Расположение элементов на форме.
Теперь выделите элемент simpleOpenGlControl1, расположенный на форме, и перейдите к его свойствам. Измените параметр name на значение "AnT". Далее во всех главах элементы simpleOpenGlControl мы будем называть AnT (рис. 8).
Рисунок 8. Переименовывание элемента.

Теперь нам необходимо инициализировать работу OpenGl.

Сначала мы в конструкторе класса должны инициализировать работу элемента AnT:

Снова перейдите к конструктору и сделайте двойной щелчок левой клавишей мыши на форме – создастся функция обработчик события загрузки формы.

В ней мы поместим код инициализации OpenGl. Подробное описание того, что делает этот код, мы рассмотрим в следующих главах, а сейчас мы только протестируем работу библиотек OpenGL и FreeGLUT.

На окне мы создали 2 кнопки. Обработчик кнопки выйти будет выглядеть следующим образом:

Обработчик кнопки «Визуализировать» будет содержать код, реализующий визуализацию сеточного каркаса сферы (за отрисовки трехмерной сферы будет отвечать библиотека FreeGLUT). Код, который будет размещен в данной функции, отвечает за разные технические аспекты визуализации, с которыми мы познакомимся в следующих главах.

Откомпилируйте и запустите приложение.

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

Примечание

Если у вас возникли проблемы с запуском приложений, обратите внимание на следующие нюансы:

Если вы используете ОС x64, первым делом попробуйте изменить тип проекта на x86. (Указать в Visual Studio).

Сергей Солонько: «System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — решается методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32.»

Clandestin: «У меня в Windows 7 копирование в C:\Windows\System32 не помогло. Зато помогло копирование непосредственно в папку C:\Windows.»

KsenoByte: «Предлагаю всем решение проблемы с SimpleOpenGLControl в Visual Studio 2010.

Для того чтобы добавить в Панель Элементов (Toolbox) элемент SimpleOpenGLControl, необходимо следующее:


1. Нажимаем правой кнопкой по вкладке «Общие» в Панели Элементов и выбираем «Выбор Элементов» (за тавтологию нижайше извиняюсь).
Рисунок 1. Панель элементов -> Выбор элементов.
2. В открывшемся окне обнаруживаем отсутствие SimpleOpenGLControl.

3. Нажимаем кнопку «Обзор» и находим файл библиотеки C:\Program Files\TaoFramework\bin\Tao.Platform.Windows.dll.

Я только что установил Visual Studio 2012 сегодня, и мне было интересно, как вы можете установить GLUT и OpenGL на платформу?

OpenGL уже должен присутствовать - вероятно, это будет Freeglut/GLUT, который отсутствует.

GLUT сейчас очень устарел и не поддерживается активно, поэтому вам, безусловно, следует использовать Freeglut. Вам вообще не придется менять код, и становятся доступны несколько дополнительных функций.

Когда вы загрузите их, вы обнаружите, что в папке Freeglut есть три подпапки: - bin: она содержит файлы dll для времени выполнения - include: файлы заголовков для компиляции - lib: содержит библиотечные файлы для компиляции/компоновки

В инструкциях по установке обычно предлагается переместить эти файлы в папку visual studio и системную папку Windows. Лучше избегать этого, так как это делает ваш проект менее переносимым и делает его намного более сложным, если вам когда-либо потребуется изменить какую версию библиотеки. вы используете (старые проекты могут внезапно перестать работать и т. д.)

Вместо этого (извиняюсь за любые несоответствия, я основываю эти инструкции на VS2010) . - поместите папку freeglut где-нибудь еще, например. C:\dev - Откройте ваш проект в Visual Studio - Откройте свойства проекта - Должна быть вкладка для каталогов VC++, здесь вы должны добавить соответствующие папки include и lib, например : C:\dev\freeglut\include и C:\dev\freeglut\lib - (Почти) Последний шаг - убедиться, что файл opengl lib действительно связан во время компиляции. По-прежнему в свойствах проекта, раскройте меню компоновщика и откройте вкладку ввода. Для Additional Dependencies добавьте opengl32.lib (вы могли бы предположить, что это будет связано автоматически, просто добавив include GL/gl.h в ваш проект, но по некоторым причинам это не так)

На этом этапе ваш проект должен скомпилироваться. Чтобы на самом деле запустить его, вам также нужно скопировать файлы freeglut.dll в папку вашего проекта

Это инструкция по установке GLUT. Несвободная перенасыщенность

Сначала загрузите пакет GLUT 118 КБ из Здесь

Извлеките загруженный файл Zip и убедитесь, что вы найдете следующее

Если у вас 32-разрядная операционная система, поместите glut32.dll в C:\Windows\System32\ , если ваша операционная система 64-разрядная, поместите ее в C:\Windows\SysWOW64\(в системный каталог).

Поместите glut.h C:\Program Files\Microsoft Visual Studio 12\VC\include\GL\ (ПРИМЕЧАНИЕ: здесь 12 относится к вашей версии VS, это может быть 8 или 10)

Если вы не нашли VC и следующие каталоги . продолжайте создавать его.

Поместите glut32.lib в C:\Program Files\Microsoft Visual Studio 12\VC\lib\

Теперь откройте Visual Studio и

  1. В Visual C++ выберите Пустой проект (или уже существующий проект)
  2. Перейти к проекту -> Свойства. Выберите «Все настройки» в раскрывающемся меню «Конфигурация» в левом верхнем углу.
  3. Выберите Linker -> Input
  4. Теперь щелкните правой кнопкой мыши на «Дополнительная зависимость» на правой панели и нажмите «Изменить».

(ПРИМЕЧАНИЕ: каждый .lib в новой строке)

Вот и все . Вы успешно установили OpenGL. Продолжайте и запустите вашу программу.

Те же инструкции по установке применимы к файлам freeglut с файлами заголовков в папке GL, lib в папке lib и dll в папке System32.

OpenGL поставляется вместе с Visual Studio. Вам просто нужно установить пакет GLUT (нормально будет работать с freeglut), который можно найти в NuGet.

Откройте свое решение, нажмите TOOLS-> Диспетчер пакетов NuGet-> Консоль диспетчера пакетов, чтобы открыть консоль NuGet, введите Install-Package freeglut .

Для VS 2013 используйте пакет nupengl.core .

Для установки GLUT сообщества Microsoft Visual Studio 2017 -

Загрузите заголовочные файлы, файлы DLL и lib для glutdlls37beta (ссылка на здесь )

Вставьте glut.h в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\\include\GL Создайте папку GL, если ее еще нет. может отличаться.

Вставьте glut.lib в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\\lib\x64 . Вставьте glut32.lib в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\\lib\x86 . может отличаться.

Вставьте glut32.dll в C:\Windows\System32 . Вставьте glut.dll и glut32.dll в C:\Windows\SysWOW64 .

Следуйте ответу Vishwanath gowda k далее . Перейдите в Проект -> Свойства (опция Все настройки) -> Линкер -> Ввод -> Дополнительные зависимости-> Изменить (стрелка вниз на правом конце) Тип -> opengl32.lib glu32.lib glut32.lib Нажмите Ok-> apply.

Загрузите библиотеку GLUT. На первом этапе скопируйте файл glut32.dll и вставьте его в папку C:\Windows\System32. На втором шаге скопируйте файл glut.h и вставьте его в папку C:\Program Files\Microsoft Visual Studio\VC\include, а на третьем шаге скопируйте glut32. .lib и вставьте его в папку c:\Program Files\Microsoft Visual Studio\VC\lib. Теперь вы можете создать проект консольного приложения на Visual C++ и включить заголовочный файл glut.h, затем вы можете написать код для проекта GLUT . Если вы используете машину с 64-битным Windows, тогда библиотека путей и библиотек может отличаться, но процесс аналогичный.

Для простого и удобного способа сделать это сначала загрузите предварительно упакованный выпуск freeglut из здесь . Затем прочитайте его Readme.txt.

Я скопировал некоторые важные части этого пакета здесь:

. Создайте на своем компьютере папку, доступную для чтения всем пользователям, например, «C:\Program Files\Common Files\MSVC\freeglut \» в типичной системе Windows. Скопируйте папки «lib \» и «include \» из этого Zip-архива в это место . freeglut DLL можно поместить в ту же папку, что и ваше приложение .

. Откройте свойства проекта и выберите «Все конфигурации» (это необходимо, чтобы убедиться, что наши изменения применяются как к отладочной, так и к выпускной сборкам). Откройте раздел «Общие» в разделе «C/C++» и настройте папку «include \», которую вы создали выше, как «Дополнительный каталог включения». Если у вас есть более одного пакета GLUT, который содержит файл «glut.h», важно убедиться, что папка включения freeglut отображается над всеми остальными папками включения GLUT . Откройте раздел «Общие» в разделе «Линкер» и настройте папку «lib \», которую вы создали выше, как «каталог дополнительных библиотек» .

Загрузите и установите Visual C++ Express.

Установка для Windows 32 бит:

(a) Скопируйте все файлы из папки include/GL и вставьте в папку C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\gl.

(b) Скопируйте все файлы из папки lib и вставьте в папку C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib.

(c) Скопируйте freeglut.dll и вставьте в папку C:\windows\system32.

nate/glut/glut-3.7.6-bin.Zip . и развернул файлы в папках . \gl и . \lib\win8\um\x32 и dll в% system%/windows соответственно .. Надеюсь, что это решит проблему .

Используйте NupenGL Nuget package . Он активно обновляется и работает с VS 2013 и 2015, а пакет Freeglut Nuget работает только с более ранними версиями Visual Studio (по состоянию на 14.10.2015).

инструкция для Vs2012

Чтобы установить FreeGLUT

Извлеките сжатый файл freeglut-MSVC.Zip в папку freeglut

Внутри папки freeglut:

На 32-битных версиях windows

скопируйте все файлы в папке include/GL в C:\Program Files\Windows Kits\8.0\Include\um\gl

скопируйте все файлы в папке lib в C:\Program Files\Windows Kits\8.0\Lib\win8\um\ (примечание: lib\freeglut.lib в папке входит в x86)

скопировать freeglut.dll в C:\windows\system32

На 64-битных версиях Windows: (не уверен на 100%, но попробуйте)

скопируйте все файлы в папке include/GL в C:\Program Files (x86)\Windows Kits\8.0\Include\um\gl

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

К счастью, существует довольно много библиотек, которые обеспечивают необходимый нам функционал, при этом некоторые из них специально нацелены на работу с OpenGL. Эти библиотеки избавят нас от всей специфической работы, связанной с особенностями конкретной операционной системы. Наиболее популярными библиотеками являются: GLUT, SDL, SFML и GLFW. На этих уроках мы будем использовать библиотеку GLFW. Вы также можете использовать и любую другую библиотеку из предоставленного списка, т.к. установка и настройка для большинства из них аналогична установке и настройке GLFW.

Библиотека GLFW

Основное внимание на этом и следующем уроках уделяется изучению библиотеки GLFW, созданию корректного контекста OpenGL, а также простого окна, в котором мы и будем рисовать наши объекты. На этом уроке мы пошагово рассмотрим установку библиотеки GLFW, а также процесс сборки и компиляции программы в связке с GLFW.

Примечание: На момент написания данной статьи в качестве среды разработки мы будем использовать Microsoft Visual Studio 2019 (обратите внимание, что наши действия будут аналогичными и с более старыми версиями Visual Studio). Если же вы используете более старую версию Visual Studio (или вообще другую среду разработки), то можете быть спокойны, т.к. процесс установки и настройки GLFW аналогичен в большинстве IDE.

Сборка GLFW

Библиотеку GLFW можно скачать с официального сайта. Стоит отметить, что GLFW уже имеет предварительно скомпилированные бинарные и заголовочные файлы для Visual Studio 2010-2019, но для полноты картины их мы использовать не будем, а вместо этого вручную скомпилируем GLFW из исходного кода. Это делается для того, чтобы вы сами прочувствовали процесс компиляции библиотек с открытым исходным кодом, поскольку не каждая подобная библиотека будет предоставлять возможность скачать предварительно скомпилированные бинарные файлы. Итак, давайте загрузим пакет с исходным кодом.

Примечание: Мы будем собирать все библиотеки в формате 64-битных бинарных файлов, поэтому убедитесь, что скачиваете и используете именно 64-битные бинарные файлы.

После загрузки пакета с файлами исходного кода извлеките и откройте его содержимое. Нас интересуют следующие вещи:

библиотека, которая будет получена в результате компиляции;

Компиляция библиотек из исходного кода гарантирует, что полученная нами библиотека идеально подойдет для нашего процессора и операционной системы, в то время как предварительно скомпилированные бинарные файлы не всегда могут этим похвастаться (иногда они вообще недоступны для вашей системы). Однако проблема проектов, распространяющихся под эгидой открытого программного обеспечения, заключается в том, что не все используют одну и ту же IDE или систему сборки для разработки своего приложения, а это значит, что предоставленные файлы проекта/решения могут быть несовместимы с настройками IDE у других людей. Следовательно, каждый конечный пользователь должен настроить свой собственный проект/решение с учетом полученных *.с / *.cpp и *.h / *.hpp файлов, что почти всегда является довольно трудоемким и громоздким процессом. Но не спешите расстраиваться, для решения данной проблемы уже существует удобный инструмент сборки проектов под названием CMake.

CMake

CMake — это инструмент, который с использованием заранее определенных сценариев может из коллекции файлов исходного кода сгенерировать файлы проектов/решений под выбранную пользователем IDE (например, для Visual Studio, Code::Blocks или Eclipse). Он позволит нам из исходного пакета файлов GLFW создать файл проекта под среду разработки Visual Studio 2019, а затем данный файл мы сможем использовать для компиляции библиотеки. Но сначала нам нужно его скачать, а затем установить.

После установки CMake у вас будет 2 варианта:

запустить CMake из командной строки;

запустить CMake через графический интерфейс.

Поскольку мы не стремимся всё усложнять, то остановимся на варианте с использованием графического интерфейса. Для работы с CMake нам потребуется указать папку с файлами исходного кода проекта (в нашем случае glfw-3.3.2 ) и папку назначения для бинарных файлов. Для папки исходного кода мы собираемся выбрать корневую папку загруженного исходного пакета GLFW, а для папки сборки мы создадим новый каталог build :


После того, как мы прописали пути для исходной и целевой папок, нам нужно нажать кнопку Configure , чтобы CMake смог просмотреть исходные файлы GLFW и выбрать необходимые параметры для сборки.

В следующем окне необходимо задать используемую версию Visual Studio. Т.к. работать мы будем в Visual Studio 2019, то выбираем опцию "Visual Studio 16 2019" :


Далее CMake отобразит возможные варианты сборки библиотеки. Можно оставить значения по умолчанию и снова нажать кнопку Configure , чтобы сохранить настройки:



После установки параметров мы нажимаем кнопку "Generate" , в результате чего в папке build будут созданы необходимые файлы проекта.

Компиляция проекта

Теперь, зайдя в папку build , среди всего прочего можно увидеть файл с именем GLFW.sln , открываем его с помощью Visual Studio 2019:


Поскольку CMake сгенерировал файл проекта, который уже содержит соответствующие параметры конфигурации, нам остается лишь реализовать решение. При этом CMake должен был автоматически настроить вариант компилирования решения в виде 64-битной библиотеки. Благодаря этому мы получим скомпилированный файл библиотеки с именем glfw3.lib , который будет находиться в папке build/src/Debug .

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

Способ №1: Можно скопировать содержимое папки include проекта GLFW в соответствующую папку include вашей IDE или компилятора, а также скопировать полученный файл glfw3.lib в соответствующую папку /lib вашей IDE или компилятора. Данный способ вполне рабочий, но мы его не рекомендуем, так как новая установка IDE или компилятора приведет к тому, что вам заново придется подключать необходимые файлы.

Способ №2: Вы можете создать новую папку, которая будет содержать все заголовочные файлы и файлы из сторонних библиотек. На эту папку вы впоследствии сможете ссылаться из своей IDE или компилятора. Например, можно создать папку, в которой будут находиться папки Lib и Include . В них мы будем хранить все наши библиотечные и подключаемые файлы, которые собираемся использовать для наших OpenGL-проектов. Получается, что все сторонние библиотеки будут организованы в одном месте (и их можно будет совместно использовать на нескольких компьютерах). Однако, каждый раз при создании нового проекта, мы должны будем указывать IDE соответствующие пути к этим папкам.

Как только необходимые файлы будут сохранены в выбранном вами месте, мы сможем приступить к созданию нашего первого OpenGL-GLFW-проекта.

Наш первый проект

Для начала давайте откроем Visual Studio и создадим новый проект. Для этого нужно выбрать тип проекта "C++" , а далее — "Пустой проект" (не забудьте дать проекту подходящее имя):


Теперь у нас есть рабочее пространство для создания нашего самого первого OpenGL-приложения!

Линкинг проекта

Для того, чтобы наш проект мог использовать GLFW, нам нужно связать с ним полученную библиотеку. Это можно сделать, указав в настройках линкера, что мы хотим использовать библиотеку glfw3.lib , но проект пока не знает где её искать, т.к. все подобные файлы мы переместили в другую папку. Таким образом, сначала мы должны добавить эту папку в наш проект.

Для этого нажмите правой кнопкой мышки на имя проекта в "Обозреватель Решений" > "Свойства" . В появившемся окне выберите "Каталоги VC++" > "Каталоги библиотек" :


Здесь вы можете добавить свои собственные каталоги, чтобы проект знал, где искать необходимые файлы. Это можно сделать, вставив вручную путь до каталога или щелкнув по соответствующей строке и выбрав пункт <Изменить…> , в результате чего откроется следующее окно:


Здесь вы можете добавить столько дополнительных каталогов, сколько захотите, и с этого момента IDE при поиске файлов библиотек также будет просматривать и эти директории. Поэтому, как только вы подключите папку Lib из проекта GLFW, вы сможете использовать все файлы библиотек из этой папки. Аналогично обстоят дела и с добавлением папки Include для заголовочных файлов.

Поскольку для VS были указаны все необходимые файлы, то мы, наконец, можем связать GLFW с нашим проектом, перейдя в раздел "Компоновщик" > "Ввод" :


Чтобы связать библиотеку, нам нужно указать для компоновщика её имя. Так как библиотека называется glfw3.lib , то мы добавляем название этого файла в раздел "Дополнительные зависимости" (вручную или же через пункт <Изменить…> ), и с этого момента при запуске процесса компиляции GLFW будет связан с нашим проектом. В дополнение к GLFW мы также должны добавить ссылки на библиотеку OpenGL, но данные действия будут отличаться, в зависимости от (вашей) используемой операционной системы:

Библиотека OpenGL в Windows. Если вы используете операционную систему Windows, то необходимый нам файл библиотеки OpenGL32.Lib , входящий в пакет Microsoft SDK, уже есть в составе Visual Studio и не требует отдельной установки. Поскольку мы используем компилятор VS и работаем в операционной системе Windows, то всё, что вам нужно сделать — это добавить название файла OpenGL32.Lib к общему списку параметров компоновщика.


Больше того, если зайти в папку C:\Program Files (x86)\Windows Kits\10\Lib\[Номер_версии_SDK]\um\x86\, то и там можно встретить файл OpenGL32.Lib:


Библиотека OpenGL в Linux. Если вы работаете в операционной системе Linux, то вам нужно подключить библиотеку libGL.so с помощью ключей –lGL , добавляемых к параметрам вашего компоновщика. Если вы не можете найти данную библиотеку, то вам, вероятно, необходимо установить любой из пакетов: Mesa, NVidia или AMD dev.

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

Сегодня мы узнаем всё (реально всё), что нужно, чтобы запустить программу на C/C++, использующую OpenGL на Windows. Прикреплённые проекты сделаны в Visual Studio 2019. В уроке мы рассмотрим полную инициализацию OpenGL.

Список библиотек я брал из вики для OpenGL. Для урока я выбрал наиболее простые варианты в настройке.

Первая программа на OpenGL 4.6

Версия 4.6, которую мы будем рассматривать вышла довольно давно (июль 2017). Поэтому, у вас не должно возникнуть проблем, но, на всякий случай, установите последнюю версию драйверов. Драйвера, поддерживающие OpenGL 4.6, для видеокарт AMD и NVidia вышли в 2018. Аппаратная поддержка доступна начиная c AMD Radeon HD 5000 (2009г.) и NVidia GeForce 400 (2010г.). Драйвера для встроенных адаптеров Intel вышли в первой половине 2019г. В случае, если ваша видеокарта не поддерживает четвёртую версию OpenGL, рекомендую обратить внимание на Mesa3D - это программная реализация OpenGL.

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

Начнём мы с загрузки OpenGL функций.

Загрузка функций OpenGL API

В спецификации OpenGL описываются множество разных функций. Например, самая первая OpenGL функция, которую мы будем использовать: glGenVertexArrays. Необходимо чтобы наша программа узнала, что такая функция существует. Для этого мы будем использовать одну из библиотек: GLEW или glatter.

В спецификации имена OpenGL функций выглядят так: GenVertexArrays, BindVertexArray, BeginQuery. В реальном коде к этим именам нужно добавлять префикс gl (зависит от библиотеки, в некоторых это не так): glGenVertexArrays, glBindVertexArray, glBeginQuery, glUseProgram.

GLEW (OpenGL Extension Wrangler)

Скачиваем GLEW (первый файл для Windows, на данный момент это glew-2.1.0-win32.zip). Распаковываем в любую папку. В настройках проекта добавляем папку include и lib (lib\Release\x64). Из папки bin\Release\x64 копируем файл glew32.dll в папку с нашим проектом.


В коде после создание контекста (об этом ниже) нужно вызвать функцию glewInit. Вот весь код, касающийся GLEW:

После вызова glewInit мы можем пользоваться функциями OpenGL.

По поводу имени библиотеки GLEW. GLEW расшифровывается как OpenGL Extension Wrangler. Wrangler - пастух. Соотвественно, название библиотеки можно понимать как: тот, кто управляет расширенями OpenGL. Про расширения мы будем говрить позже.

glatter


Теперь в коде осталось только включить заголовочный файл и можно вызывать OpenGL функции. Инициализировать ничего не надо (вызов функций можно делать только после создания OpenGL контекста):

Я не смог найти значение названия библиотеки glatter. Автор из Германии и там это слово есть - одна из форм слова "блестящий".

Другие библиотеки для загрузки OpenGL API

Существуют и другие библиотеки для загрузки OpenGL функций, но они требуют больше действий чем GLEW или glatter. Некоторые из этих вариантов: GL3W (использует скрипт на Python для генерациий заголовочных файлов OpenGL), glLoadGen (использует Lua скрипт), Galogen (командная утилита), Glad (приложение на Python или веб страница). В этих библиотеках используются дополнительные зависимости.

Кроме того, вы можете самостоятельно загрузить OpenGL функции, не используя вышеперечисленные библиотеки. В Windows для этого используется функция wglGetProcAddress. В качестве аргумента мы передаём имя функции (в виде строки char*), которую мы хотим получить, а возвращает она, соответственно, адрес этой функции. При таком способе вам нужно будет самостоятельно загружать каждую OpenGL функцию. wglGetProcAddress объявлена в wingdi.h, а для её использования необходимо подключить библиотеки Opengl32.lib, Opengl32.dll. Это информация для общего развития, в дальнейших уроках мы будем пользоваться только GLEW или glatter.

Теперь мы переходим к созданию контекста OpenGL.

Создание OpenGL контекста

Важно: При создании проекта для любой библиотеки выбирайте консольное приложение. Все библиотеки используют консольное приложение и самостоятельно создают окна. При этом, мы будем использовать следующую форму main:

freeglut требует аргументы arc и argv, а SDL2 требует именно этот вариант main. Для GLFW аргументы main не имеют значения.

Также, обратите внимание, в какой момент вызывается glewInit (после создания контекста).

Ещё одна ремарка: во всех случаях необходимо подключить библиотеку OpenGL32.lib. В ней определены самые старые функции OpenGL (ещё с первой версии), такие как, glClear, glClearColor. Архиктура не имеет значения, x86 и x64 должны использовать один и тот же файл.

Приложения на всех библиотеках имеют одинаковую структуру:

  • Инициализация OpenGL
  • Инициализация GLEW
  • Главный цикл:
    • Проверка событий (нажатие клавиш клавиатуры/мышки. ) в очереди
    • Очистка буфера кадра (glClear, glClearColor)
    • Рендеринг кадра (именно здесь будут использоваться функции OpenGL, загруженные с помощью GLEW). В этом уроке этого не будет
    • Смена кадров (вывод буфера на экран). У нас есть две 2д картинки - фоновый буфер и основной. Основной буфер - это то, что пользователь видит на экране. Пока пользователь смотрит на основной буфер, мы рисуем в фоновом следующий кадр. Кода мы отрисовали кадр, мы меняем указатели буферов местами: фоновый становится основным и наоборот. Теперь пользователь видит новый кадр, а мы можем рисовать новый в фоновом буфере

    Скачиваем GLFW (Graphics Library Framework). Под заголовком Windows pre-compiled binaries выбираем 64-bit Windows binaries. Распаковываем. У меня это папка C:\prog\libs\glfw-3.3.2.bin.WIN64. Заголовочные файлы, как обычно в папке include, а библиотеки в lib-vc2019. Нужно скопировать glfw3.dll в папку с вашим проектом.


    Теперь полный код:

    В программе с GLFW мы используем следующие функции: glfwInit, glfwCreateWindow, glfwMakeContextCurrent, glfwWindowShouldClose, glfwGetKey, glfwSetWindowShouldClose, glfwSwapBuffers, glfwPollEvents, glfwTerminate.

    Сначала инициализируем GLFW, создаём окно и присваиваем ему контекст. При создании окна с помощью glfwCreateWindow мы указываем ширину/высоту окна и заголовок, остальные аргументы не важны. Затем инициализируем GLEW.

    В основном цикле мы проверяем, была ли нажата клавиша Escape, и если да, то устанавливливаем закрывающий флаг (его мы проверяем в условии цикла с помощью glfwWindowShouldClose). Обратите внимание, что для управления вводом GLFW определяет свои константы (GLFW_KEY_ESCAPE, GLFW_PRESS), их имена говорят сами за себя.

    Затем, в основном цикле мы очищаем буфер кадра, выводим содержимое на экран и проверяем события в очереди событий.

    После окончания основного цикла мы вызываем glfwTerminate.

    glClearColor задаёт цвет, которым будет заполняться фоновый буфер (это 2д картинка, в которой происходит рисование кадра) при очистке. glClear очищает фоновый буфер. Здесь мы очищаем только цвет - GL_COLOR_BUFFER_BIT. Ещё мы можем очищать буфер глубины, но об этом позже.

    glfwSwapBuffers выводит содержимое на экран. Имя функции - swap buffers - поменять буферы местами. В других библиотеках тоже есть подобная функция.

    Библиотека SDL (Simple DirectMedia Layer), помимо OpenGL, имеет возможности для работы с 2д графикой и звуком.

    Переходим. В разделе Development Libraries выбираем файл SDL2-devel-2.0.10-VC.zip. Распаковываем архив и настраиваем папки проекта.


    В SDL2 мы используем следующие функции: SDL_Init, SDL_CreateWindow, SDL_GL_CreateContext, SDL_PollEvent, SDL_GL_SwapWindow, SDL_GL_DeleteContext, SDL_DestroyWindow, SDL_Quit. Сначала мы инициализируем SDL, используя флаг SDL_INIT_EVERYTHING (everything - всё), который говорит, что мы хотим инициализировать все системы SDL: графику, звук, таймеры, устройства ввода. В нашем случае можно обойтись только SDL_INIT_VIDEO. После этого мы создаём окно и OpenGL контекст.

    В основном цикле мы проверяем очередь событий (SDL_PollEvent), очищаем буфер и выводим содержимое на экран с помощью смены кадров (SDL_GL_SwapWindow).

    Если произошло событие SDL_QUIT, мы заканчиваем цикл, изменяя переменную quit, затем удаляем контекст, окно, и освобождаем все ресурсы.

    freeglut

    Я упоминаю здесь freeglut (The Open-Source OpenGL Utility Toolkit) только для соотстветсвия с английской версией урока, который я писал несколько лет назад. На данный момент рекомендую использовать GLFW или SDL. freeglut больше подходит для Linux.

    FreeGLUT основывается на библиотеке GLUT, которая была создана в 1994г. (да и устарела GLUT уже как двадцать лет).

    Проходим по Ссылке и ищем там "Download freeglut 3.0.0 for MSVC" в разделе freeglut 3.0.0 MSVC Package. После распаковки архива указываем в своём проекте пути к заголовчным файлам и библиотеке. Также, необходимо скопировать freeglut.dll в папку с проектом.


    Здесь мы используем функции из freeglut: glutInit, glutInitWindowSize, glutCreateWindow, glutDisplayFunc, glutMainLoop, glutSwapBuffers. Собственно, инициализируем саму библиотеку, задаём размер окна и затем создаём его, указываем функцию, которая будет вызываться каждый кадр (displayFunc), запускаем основной цикл. В каждом кадре мы очищаем буфер и выводим содержимое буфера на экран с помощью glutSwapBuffers.

    Заключение

    В прикреплённом решении для Visual Studio 2019 есть три проекта для GLFW, SDL, freeglut. Везде используется GLEW. В данных проектах есть все нужные файлы: включаемые файлы и библиотеки, и они находятся в папках проектов. В следующих уроках вам нужно будет самостоятельно добавлять библиотеки. Я постраюсь поддерживать код для GLFW/SDL2 в связке с GLEW.

    Я бы, конечно, хотел добавить проекты для VSCode и Linux, но не уверен, что это кому-нибудь нужно, а на проверку и написание уходит много времени.

    Теперь, когда есть основа программы, версию OpenGL можно проверить с помощью функции glGetString:

    Значение можно посмотреть в отладчике или привести тип и вывести в консоль (все приложения GLFW, SDl2 и freeglut - консольные).

    За рамками урока, как обычно, осталась проверка возвращаемых значений разных функций. Если возникнут проблемы, пишите в комментарии (это позволит дополнить урок), отвечу, по возможности, быстро.

    Читайте также: