Как обновить драйверы directx opengl графического адаптера для windows 7

О OpenGL

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

Что такое OpenGL

OpenGL — это API. В Windows вы найдете библиотеку opengl32.dll, которая поможет вам реализовать этот API. Иногда, когда мы говорим об OpenGL, мы имеем в виду реализацию этого API.

API OpenGL описывает средства, с помощью которых вы можете взаимодействовать с видеокартой. Какие функции вам доступны, что эти функции ожидают на входе, как меняется контекст приложения и т. д. Определением API занимается некоммерческая группа Khronos, в состав которой входят такие компании, как AMD, Google, WARGAMING и т. д. Просто крупные игроки, которые заинтересованы в разработке этого API.

У Microsoft есть конкурирующий API — Microsoft DirectX. DirectX и OpenGL в основном пытаются сделать одно и то же — дать программистам доступ к видеокарте. В то время как OpenGL является кроссплатформенным, поэтому он работает в Windows, Linux и OSX, DirectX — только в Windows.

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

Помимо официальных реализаций, существует также реализация Mesa 3D с открытым исходным кодом. (В основном используется в Linux).

Версии и характеристики

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

Обновите драйверы видеокарты

Графические драйверы — это то, что делает функциональность вашей видеокарты доступной для вас. То есть то, что использует OpenGL. Поэтому стоит установить последние версии драйверов, которые обеспечивают новейшие функции (OpenGL).

В Windows нажмите клавишу windows + r (откроется окно «Выполнить») и введите команду dxdiag. В открывшемся окне на второй вкладке вы увидите, какая у вас видеокарта и какие версии драйверов. Затем просто зайдите на сайт производителя вашей видеокарты (вероятно, AMD, NVIDIA или Intel) и найдите последние обновления драйверов.

В Linux вы можете определить видеокарту с помощью команды lspciто есть, если вы ищете в Интернете больше руководств по OpenGL (или покупаете книги), чтобы не изучать ничего старше версии 3.x.

Однако небезынтересно, что OpenGL также разрешает доступ к более старым версиям API. Когда вы инициализируете OpenGL, вы можете (на самом деле должны) сказать себе, какую версию OpenGL вы хотите. (Если вы запросите новее, чем ваша видеокарта и драйверы, инициализация завершится ошибкой.)

Вы можете узнать поддерживаемую версию OpenGL в Linux с помощью команды glxinfo . (Эта программа является частью любого нормального дистрибутива).

Что интересно в этом выводе, так это строка «Строка версии основного профиля OpenGL: 4.1 (основной профиль) Mesa 17.2.5», в которой говорится, что я использую драйверы Mesa версии 17.2.5, которые могут дать мне OpenGL в 4.1, если я спрашиваю о профиле ядра версии 4.1 при инициализации контекста OpenGL.

Еще одна интересная строка — «Строка версии OpenGL: 3.0 Mesa 17.2.5», которая является версией OpenGL в режиме совместимости. Вы также можете запросить версию 3.0 Core Profile или ниже. Но если вам нужна более поздняя версия (4.1), вы должны запросить основной профиль.

Инициализация некоторой версии OpenGL в базовом профиле приведет к тому, что вы получите только эту версию OpenGL. С другой стороны, режим Compatibility позволяет использовать более старые (устаревшие) функции и различные расширения, не являющиеся частью Core Profile. По этой причине лучше использовать профиль Core, чтобы избежать устаревших функций. Режим совместимости удобен для старого программного обеспечения, в котором уже используются устаревшие функции, или когда вы хотите использовать некоторые функции, которых нет в основном профиле (и поэтому они могут быть доступны не во всех системах).

Читайте также:  Как узнать информацию компьютера windows 10

Моя версия Mesa 3D не поддерживает OpenGL 4.1 в совместимом режиме.

Для интереса я также покажу вывод на моем компьютере на работе (который использует дешевыйвидеокарта от Intel):

Если у вас тоже «дурацкая» графика, не отчаивайтесь, для вас тоже есть решение. Вы можете попытаться принудительно программно эмулировать функции OpenGL, установив системную переменную LIBGL_ALWAYS_SOFTWARE=1 .

Запустите программу следующим образом:

Второй вариант — установить Linux в Virtual Box. Это программное обеспечение будет эмулировать лучшую графику, чем на вашем компьютере, и OpenGL 3.3 будет работать на вас :-). Конечно, это будет медленно, но для простых примеров из моего туториала этого будет достаточно.

Вы можете загрузить и установить программу GLview в Windows, которая покажет вам, какие версии OpenGL поддерживает ваш компьютер.

Обратите внимание, что драйверы Windows (на той же машине, с которой выводится первая glxinfo) поддерживают даже OpenGL версии 4.4.

Вы также можете скачать программу GPU Caps Viewer, которая покажет вам информацию не только об OpenGL, но также об OpenCL и CUDA. (Это API-интерфейсы для некоторых распределенных вычислений с использованием графической карты, в этом руководстве нас ничего не интересует.)

OpenGL ES

OpenGL для встраиваемых систем (OpenGL ES или GLES) — это API, который используется на мобильных телефонах, планшетах и ​​других «встроенных» устройствах. Это подмножество функций из «полноценного» OpenGL.

Я не буду рассматривать OpenGL ES в этом руководстве. Но знайте, что как только вы изучите OpenGL, изучение OpenGL ES станет легкой задачей (на самом деле, это скорее вопрос разучивания :-).

WebGL

WebGL (библиотека веб-графики) — это API JavaScript для доступа к OpenGL ES. В предыдущих главах вы могли видеть исходный код JavaScript, который я использовал для 3D-графики в этих главах. Конечно, JavaScript — это другой язык программирования, чем C, но он все же может дать вам хотя бы общее представление о том, как работать с WebGL (и, следовательно, с OpenGL ES).

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

Вулкан

Vulkan — это новый API, выпущенный группой Khronos. Это низкоуровневый API, позволяющий писать даже более эффективные программы, чем OpenGL. С другой стороны, у этого есть недостаток, заключающийся в том, что на Vulkan сложнее писать программы.

Когда была выпущена первая версия Vulkan, в таблоидах можно было прочитать такие заголовки, как «Одна долгая эпоха заканчивается, Vulkan заменяет устаревший OpenGL». Что, конечно, ерунда.

Однако, согласно официальному заявлению Khronos Group, сложно оценить будущее развитие ИТ:

«Ключевым преимуществом Vulkan по сравнению с OpenGL является возможность параллельно генерировать работу графического процессора с использованием многих ядер ЦП, что делает Vulkan особенно полезным для разработчиков, привязанных к ЦП, устраняя узкие места в приложениях из различных областей, включая игры, автоматизированное проектирование. и мобильные приложения. Vulkan дополняет традиционные API OpenGL и OpenGL ES, обеспечивая более высокий уровень абстракции для доступа к функциям графического процессора, что может быть более удобным для многих разработчиков.

Khronos продолжит развивать OpenGL и OpenGL ES параллельно с Vulkan для удовлетворения потребностей рынка.

В этом есть большой смысл, поскольку разработка приложений в Vulkan более требовательна и, следовательно, дороже. И пока деньги правят миром…

Инициализировать контекст и окно

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

При инициализации контекста также создается окно, в которое будет записываться графический вывод. Однако способ создания этого окна зависит от среды, в которой запущено приложение (иначе оно создается в Windows, иначе в Linux и т. д.).

Они были созданы, чтобы облегчить работу разработчиковбиблиотеки, такие как FreeGLUT, GLFW или SDL.

Эти библиотеки заботятся о создании окон, а также о взаимодействии с клавиатурой или мышью, поскольку они также не являются частью OpenGL API (на самом деле они просто ориентированы на отрисовку пикселей).

Читайте также:  Как переподключиться к сети на windows

Библиотека загрузки OpenGL

Библиотека GLFW или FreeGLUT обеспечивает инициализацию контекста, создание окна и взаимодействие с устройствами ввода. Но остается одна проблема. Как получить доступ к функциям OpenGL?

Возможно, пора вспомнить о динамических библиотеках.

Библиотека загрузки OpenGL — это библиотека, которая позаботится о загрузке ссылок на функции OpenGL.

Например. библиотека windows opengl32.dll содержит только функции OpenGL версии 1.1. Более новая функция предоставляет вам драйверы видеокарты, как я описал выше. Поэтому вы должны динамически загружать функции из более новых версий OpenGL. То, как это делается, зависит от системы.

Вот почему были созданы такие библиотеки, как Glad или Glew, упрощающие загрузку ссылок на функции OpenGL.

Расширение OpenGL

Функции ядра OpenGL доступны везде, где поддерживается эта версия OpenGL. Однако помимо этих основных функций драйверы вашей видеокарты могут поддерживать и другие в виде расширений.

Использование таких расширений выглядит следующим образом. Привет, библиотека загрузки OpenGL, у тебя есть это расширение? Ага? Так что я буду использовать эти супер эффективные функции. Нет? Так что я буду использовать эти уродливые скучные функции из ядра, или я скажу пользователю nas… .

Вы также можете предположить, что у пользователя есть эти расширения. А если его нет, то он получит «несанкционированный доступ к памяти». Вы это знаете…

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

Имя расширения начинается с некоторых аббревиатур, которые говорят вам, что это за расширение.

ARB Расширение, официально одобренное Советом по обзору архитектуры OpenGL, который контролирует разработку OpenGL. Эти расширения часто попадают в базовый профиль EXT в новых версиях OpenGL. Расширения одобрены многими производителями драйверов OpenGL. HP Hewlett-Packard IBM International Business Machines KTX Kinetix, производитель 3D Studio Max. SGI Silicon Graphics SGIX Silicon Graphics (экспериментальная версия) SUN Sun Microsystems WIN Microsoft

См. список расширений, связанных выше, для их описания. Какие расширения определяют константы и функции, для чего они нужны и т. д. Но в этом уроке я не зайду так далеко.

Конвейер OpenGL и GLSL

Кто-то говорит, что OpenGL — это 3D-библиотека. Это связано с тем, что он используется для рисования 3D-сцен (в основном игр).

Кто-то говорит, что OpenGL — это 2D-библиотека. Это связано с тем, что OpenGL не может работать с 3D-объектами. OpenGL может отображать только точки, линии (многоугольники) и треугольники. Если вы хотите нарисовать сферу, вы должны аппроксимировать ее треугольниками (см. рисунок).

А кто-то говорит, что OpenGL — это библиотека 2.5D. Потому что он ничего не знает о 3D объектах, но координаты ему передаются в 3D и OpenGL может, например, отображать только те части треугольников, которые не закрыты другими треугольниками.

Теперь давайте посмотрим, как нарисовать такой треугольник. Пока только в теории.

Первое, что вам нужно сделать, это отправить координаты вершин треугольника в память видеокарты (буфер). (Вам нужно 3 для треугольника, 2 для линии и т. д.) Назовем эти вершины вершина .

Координаты вершины можно назвать данными вершины . Это некоторые данные, относящиеся кодин конкретный пик. Другой вершиной данных может быть, например, цвет.

Когда вы просите нарисовать такой треугольник, что-то начинает происходить. И это в порядке, определяемом так называемым графическим конвейером . Он определяет, как работать с данными, шаг за шагом.

Итак, первый шаг – заполнить буфер данными вершин.

Второй шаг — так называемый Вершинный шейдер . На этом шаге для каждой вершины (вершины) вычисляется glPosition (т.е. результирующая позиция вершины).

Расчет выполняется программой, написанной на языке шейдеров OpenGL (GLSL). Это новый язык программирования, который вам придется выучить. Но не волнуйтесь, это просто и похоже на C.

Демонстрация GLSL в вершинном шейдере:

ядро #version 330
макет ( location = 0 ) в позиции vec3 ;
макет ( location = 1 ) в цвете vec3 ;

out vec3 ourColor ;

void main ( )
<
gl_Position = vec4 (позиция, 1.0f);
ourColor = цвет ;
>

Вот как определяется простая программа для вершинного шейдера. Он ничего не делает, кроме как берет позицию вектора, полученную в переменной position типа vec3, и передает ее глобальной переменной gl_Position типа vec4 (добавляет четвертую однородную координату w).

Читайте также:  Как сделать скриншот на компьютере если нет кнопки принтскрин

Затем он берет цвет, полученный в переменной color, и передает его (фрагментному шейдеру).

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

Итак. Мы вычислили позиции вершин и можем продолжить конвейер к следующему шагу. Это формасборка . Здесь OpenGL вычисляет треугольники (или линии, точки, в зависимости от того, что вы просили) из вершин. Он не может мешать этому шагу, поэтому с нашей точки зрения он не интересен (в отличие от точки зрения разработчиков OpenGL).

Следующим шагом в конвейере является геометрический шейдер . Вы все еще можете добавить еще несколько вершин на этом шаге. Это полезно, например, если вы аппроксимируете круг треугольниками. Когда пользователь сильно увеличивает масштаб, круг состоит из маленьких сегментов. Чтобы этого не произошло, вы можете добавить сюда больше вершин и сгладить кривую окружности. Однако в этом руководстве я не буду рассматривать гемометрический шейдер.

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

Следующий шаг Фрагментный шейдер . Это важный шаг, на котором вы снова будете использовать GLSL, на этот раз для вычисления цвета шейдера. Шейдеры снова рассчитываются параллельно, на этот раз для каждого шейдера. Это во много раз больше вычислений, чем для вершинных шейдеров. Вот почему еще более важно, чтобы шейдер Framgent был максимально простым. (Он должен учитывать только то, что вам действительно нужно учитывать для каждого дополнительного шейдера).

Пример GLSL в фрагментном шейдере:

ядро #version 330
in vec3 ourColor ;

void main ( )
<
color = vec4 (ourColor, 1.0);
>

В этом примере я ничего не делаю, а просто беру входной цвет ourColor , добавляю альфа-компонент (прозрачность 1.0 означает полную непрозрачность) и сохраняю его в выходной переменной color .

Последнийшаг проверка и смешивание . Здесь OpenGL позаботится о преобразовании шейдеров в пиксели. (В зависимости от положения, прозрачности и т. д. цвета шейдера так или иначе объединяются в результирующий пиксель). На этот шаг может повлиять настройка контекста, но вы больше не можете вмешиваться в него напрямую.

Подытоживая, графический конвейер в OpenGL выглядит примерно так:

  1. Загрузка данных вершин в буферы и настройка контекста OpenGL , что влияет на поведение различных шагов в pipelnie
  2. Вершинный шейдер вычисляет положение вершин (координаты) или положение текстур (изображений, отображаемых как текстуры объектов).
  3. Сборка формы собирает графические примитивы (треугольники, линии, точки) и передает их шейдеру геометрии
  4. Геометрический шейдер может добавлять дополнительные вершины
  5. Из полученных веттекстов методом растеризации создаются фрагменты
  6. Фрагментный шейдер
  7. применяется к каждому фрагменту

  8. Вычисляется результирующий цвет пикселя.

Части, выделенные жирным шрифтом, — это те, которые я опишу в следующих главах.

Вывод

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

Однако благодаря предыдущим главам у вас уже есть хорошая математическая и теоретическая база, так что худшее позади :-).

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

Поделиться с друзьями
ОС советы