дальнейшее чтение
- Шрейнер, Дэйв; Продавцы, Грэм; и другие. (30 марта 2013 г.). Руководство по программированию OpenGL: официальное руководство по изучению OpenGL . Версия 4.3 (8-е изд.). Эддисон-Уэсли. ISBN 978-0-321-77303-6.
- Продавцы, Грэм; Райт, Ричард С .; Хэмель, Николас (31 июля 2013 г.). OpenGL SuperBible: подробное руководство и справочник (6-е изд.). Эддисон-Уэсли. ISBN 978-0-321-90294-8.
- Рост, Рэнди Дж. (30 июля 2009 г.). OpenGL Shading Language (3-е изд.). Эддисон-Уэсли. ISBN 978-0-321-63763-5.
- Совет по обзору архитектуры OpenGL ; Шрейнер, Дэйв (2004). Справочное руководство OpenGL: официальный справочный документ по OpenGL . Версия 1.4. Эддисон-Уэсли. ISBN 0-321-17383-X.
- Совет по обзору архитектуры OpenGL ; Шрейнер, Дэйв; и другие. (2006). . Версия 2 (5-е изд.). Эддисон-Уэсли. ISBN 0-321-33573-2.
Минимальные системные требования Minecraft
Разработчики гарантируют, что Minecraft будет работать на ПК, соответствующем минимальным системным требованиям:
- CPU: Intel Core i3-3210 3.2 GHz / AMD A8-7600 APU 3.1 GHz или эквивалентный.
- RAM: 4GB
- Интегрированный видеоадаптер: Intel HD Graphics 4000 (Ivy Bridge) или AMD Radeon R5 (Kaveri line) с поддержкой OpenGL 4.4.
- Дискретный видеоадаптер: Nvidia GeForce 400 или AMD Radeon HD 7000 с поддержкой OpenGL 4.4.
Надо сказать, что тут ничего нового — такие требования указаны довольно давно, т.е. переход на более новую версию OpenGL вряд ли приведёт к проблемам у игроков.
Поэтому интереснее, как повлияет это обновление на игру.
Состояния в OpenGL
OpenGL сам по себе является большой системой состояний, которая содержит целый набор переменных, определяющих то, как OpenGL должен в текущий момент выполнять операции. Состояние OpenGL обычно называют контекстом OpenGL. При использовании OpenGL мы часто будем изменять его состояние, устанавливая некоторые параметры, манипулируя значениями из буфера, а затем выполняя рендеринг с использованием текущего контекста.
Например, если сейчас OpenGL рисует треугольники, а нам нужно линии, то мы изменяем состояние OpenGL, пересматривая некоторую переменную контекста, которая устанавливает способ рисования OpenGL. Как только мы изменим контекст, сообщив OpenGL, что он должен рисовать линии вместо треугольников, то все последующие команды рисования будут уже автоматически рисовать линии (а не треугольники).
При работе с OpenGL мы столкнемся с определенными функциями изменения состояния, которые изменяют контекст, и определенными функциями использования состояния, которые выполняют указанные операции, в зависимости от текущего состояния OpenGL.
Как обновить OpenGL на Windows 7 или в любой другой системе при помощи специализированных утилит?
Для владельцев чипов NVIDIA и Radeon задача может быть несколько упрощена. Как правило, для них в комплекте в предустановленном виде поставляются специальные управляющие программы вроде PhysX и Catalyst. Именно поэтому обновить драйвер OpenGL можно с их помощью.
Если по каким-либо причинам такие утилиты отсутствуют, следует их просто скачать и интегрировать в систему. При наличии постоянно активного интернет-подключения они пригодятся не только для настройки игр, а и для автоматического слежения за появлением новый версий необходимых драйверов, включая и OpenGL.
В принципе, если такой вариант пользователю не нравится, можно воспользоваться не менее интересными программами наподобие Driver Booster, которые без участия пользователя обновляют драйверы абсолютно для всех «железных» и программных устройств, установленных на компьютере или ноутбуке. Приложение в процессе сканирования системы само определит версию драйвера OpenGL. Как обновить его? Нужно всего лишь согласиться с предложением установки найденных апдейтов. По завершении процесса обновления в обязательном порядке потребуется полная перезагрузка.
Наконец, можно установить специальную утилиту под названием OpenGL Extensions Viewer, с помощью которой можно и узнать версию установленного пакета драйверов, и обновить его до последней версии.
Как использование OpenGL 3.2 повлияет на Minecraft Java Edition
Несмотря на то, что поддержка OpenGL 3.2 добавлена в Minecraft только сейчас — это далеко не самая новая спецификация. Она была опубликована ещё в 2009, а последняя версия — 4.6 в 2017г.
Разработчик игры Майкл Стойк (Searge) написал серию твитов о том, почему был сделан такой выбор, и что вообще изменится в игре благодаря обновлению графического движка. Основные моменты его рассказа приводятся ниже.
Майкл работал над обновлением Blaze3D (графический движок Minecraft) для использования OpenGL 3.2 почти целый год.
В декабре к работе подключился Феликс Джонс (Xilefian), который помогал писать шейдеры и исправлять ошибки.
Демонстрация работы карты освещения в обновлённом графическом движке Minecraft. Это обычные камни, просто текстуры отключены.
Переход от очень старой версии OpenGL, которой уже 16 лет, к чуть более новой, одиннадцатилетней, — это хороший компромисс между желанием поддерживать работу игры на старых компьютерах и улучшением движка, который обеспечит разработчиков большим контролем над рендерингом.
Использование OpenGL 3.2 позволит снизить нагрузку на центральный процессор и перераспределить часть работы на видеопроцессор.
Кроме этого, большинство современных средств разработки для видеопроцессоров рассчитано на более новые спецификации OpenGL; благодаря им разработчики могут буквально отследить, как именно был отрисован каждый отдельный пиксель на экране.
Обновлённый движок можно рассматривать, как базу для будущей работы, которая должна привести к улучшению производительности и упростить разработчикам добавление нового контента.
В настоящее время не планируется менять то, как выглядит игра.
Мне кажется, что последнее утверждение следует рассматривать скорее как «не планируется в Minecraft 1.17». Дело в том, что разработка многих элементов игры осуществляется схожим образом — сначала доступ к новым возможностям получают лишь разработчики, а потом она становится неотъемлемым элементом игры.
Так было со структурными блоками и наборами данных (датапаками) и так, похоже, будет с поддержкой шейдеров в ресурспаках.
По крайней мере, разработчики уже сделали пару ресурспаков, благодаря которым вода и листья приходят в движение, словно их шевелит лёгкий ветерок.
Так что можно ждать, во-первых, новых ресурспаков, которые используют эти возможности. А во-вторых, уверен, разработчики тоже не смогут удержаться и начнут использовать новые возможности графического обновлённого движка.
3 команды для проверки подключенных устройств
Так же, как вы можете составить список содержимого каталога с помощью одной команды, Linux позволяет перечислять устройства, подключенные к вашему компьютеру.
ls / dev / sda * отображает список разделов на SD-карте. Для Raspberry Pi с подключенным жестким диском замените sda * на hda *.
lsusb отображает все подключенные USB-устройства
Это очень важно для подключения жесткого диска или другого USB-оборудования, которое требует настройки
Если элемент указан здесь, вы сможете его настроить.
lsblk — это еще одна команда списка, которую вы можете использовать. Отображает информацию обо всех подключенных блочных устройствах (хранилище, которое читает и пишет в блоках).
Команды Raspberry Pi: вы используете Linux
Вы создали образ своей SD-карты и загрузили Raspberry Pi, а также работали с операционной системой Raspbian, обновленной и настроенной для оптимизации вашего Raspberry Pi.
Возможно, вы не поняли, что несмотря на рабочий стол в стиле Windows, Raspbian является дистрибутивом Linux. Для операционных систем Raspberry Pi доступно несколько операционных систем, которые , подавляющее большинство из которых Linux.
Это не попытка заставить людей использовать Linux скрытно! Вы можете установить Linux на огромный ассортимент устройств. Скорее, Raspberry Pi Foundation опирается на операционные системы Linux из-за их открытого исходного кода и универсальности. Хотя вы можете использовать операционную систему Linux без командной строки, в этом и заключается настоящая сила.
Хотите полный контроль над Raspberry Pi на Raspbian? Начните с запуска терминала LX или загрузки из командной строки.
Исправить ошибки OpenGL в Windows 10
OpenGL часто называют драйверами с открытым исходным кодом для графических процессоров, но это не совсем так. Это стандарт, и для него разрабатываются приложения. Существуют используемые библиотеки и соблюдаются спецификации. В некоторых случаях используются его реализации с открытым исходным кодом.
Если вы пытаетесь запускать приложения, игры или просто загружаетесь в систему и видите ошибки OpenGL, попробуйте следующие исправления.
1. Запустите сканирование SFC.
Первое, что вам нужно сделать для устранения ошибок OpenGL, — это запустить сканирование SFC. Если проблема в вашей ОС, она решит ее.
Откройте командную строку с правами администратора.Выполните эту команду: sfc / scannow.Подождите, пока команда завершится, и исправьте все обнаруженные ошибки.
2. Установите последние графические драйверы.
OpenGL не является драйвером, но он работает с графическими адаптерами и приложениями, требующими высокой обработки графики. Таким образом, если графические драйверы устарели, вы получить ошибки OpenGL.
Откройте диспетчер устройств.Разверните Display Adapters.Щелкните видеокарту правой кнопкой мыши и выберите «Обновить драйверы».Найдите в Интернете обновления драйверов и установите те, которые доступны.Повторите для графического процессора.После установки обновлений драйверов перезагрузите систему.
3. Удалите и переустановите приложение / игру.
Драйверы OpenGL относиться к конкретному приложению или игре. Вероятно, это означает, что файлы приложения повреждены или оно установлено неправильно. Простой способ исправить это — удалить и переустановить приложение / игру.
Откройте Панель управления.Перейдите в «Программы»> «Удалить программу».Выберите приложение / игру, которую хотите удалить.Щелкните кнопку Удалить.Установите приложение / игру еще раз.
Включить высокопроизводительные визуальные эффекты
Ошибки OpenGL быть вызвано тем, что ваша система работает с низким энергопотреблением или если в ней отключены визуальные эффекты.
Нажмите сочетание клавиш Win + R, чтобы открыть окно запуска. В поле «Выполнить» введите оболочку проводника ::: {BB06C0E4-D293-4f75-8A90-CB05B6477EEE} и нажмите «Ввод».Щелкните Дополнительные параметры системы в столбце слева.Перейдите на вкладку Advanced.Щелкните Параметры в разделе «Производительность».Выберите «Настроить» для достижения наилучшей производительности.Нажмите ОК и перезапустите систему.
Включить OpenGL в приложении
Возможно, приложение (или игра) поддерживает OpenGL, но имеет возможность отключить его. Версия Minecraft для Java — пример одной из таких игр. Проверьте приложение / игру, которая вызывает у вас проблемы, и посмотрите, сможете ли вы включить в нем OpenGL.
Способ 1: добавление OpenGL.DLL вручную
Несмотря на то, что каждый необходимый файл библиотеки динамической компоновки обычно включается вашим драйвером графического процессора, это не всегда так. Более того, вы могли по ошибке удалить opengl32.dll или opengl64.dll, что в конечном итоге вызовет ошибку GLFW 65542.
Если этот сценарий применим, один из способов решить проблему — вручную скопировать отсутствующий файл .DLL в папку Java и JRE, чтобы позволить Minecraft использовать OpenGL. Это исправление было подтверждено множеством пользователей, которые в настоящее время сталкиваются с ошибкой 65542 в Minecraft.
Чтобы вручную добавить файл OpenGL.dll в путь Java, следуйте инструкциям ниже:
-
-
- Откройте эту ссылку ( здесь ), загрузите файл Minecraft_OpenGL.zip и дождитесь завершения загрузки. После завершения загрузки извлеките содержимое архива с помощью такой утилиты, как 7zip или WinZip .
- После извлечения содержимого этой утилиты скопируйте файл, совместимый с архитектурой вашей ОС, в буфер обмена, щелкнув его правой кнопкой мыши и выбрав « Копировать» или « Вырезать» .
Примечание. Если вы не знаете, какую архитектуру ОС вы используете, щелкните правой кнопкой мыши « Мой компьютер» (этот компьютер) и выберите « Свойства» в контекстном меню. На экране « Свойства» проверьте список в разделе « Тип системы» — это архитектура вашей ОС.
- Затем перейдите в следующее место и вставьте файл opengl32.dll, который вы ранее скопировали в буфер обмена:
C: \ Program Files \ Java \ * Версия JRE * \ bin
Примечание. Имейте в виду, что * JRE Version * — это просто заполнитель. Вам нужно будет заменить его своей версией JRE. Кроме того, если вы установили среду Java в произвольном месте, перейдите туда.
- Когда вам будет предложено UAC (Контроль учетных записей пользователей) , нажмите Да, чтобы предоставить доступ администратора.
- После того, как файл opengl32.dll был скопирован в правильную среду, запустите Minecraft еще раз и посмотрите, устранена ли проблема.
Если проблема не устранена, перейдите к следующему потенциальному исправлению ниже.
-
Способ 3: переустановка драйверов видеокарты
Как выясняется, вы также столкнетесь с ошибкой GLFW Error 65542, если используете набор устаревших графических драйверов, которые не знают, как работать с версией OpenGL, которую использует Minecraft.
Однако, если у вас недавно были проблемы с вредоносными программами, эта проблема также может быть связана с проверкой безопасности, если операция в результате изолировала некоторые файлы, необходимые для запуска OpenGL.
Если вы не обновляли драйверы GPU в течение некоторого времени, вероятно, вы сможете исправить проблему, используя Диспетчер устройств и Программы и компоненты, чтобы удалить все, что связано с вашим GPU, а затем переустановить их с официальных каналов.
Если вы не совсем уверены, как это сделать, следуйте приведенным ниже инструкциям:
- Нажмите клавишу Win + R, чтобы открыть диалоговое окно «Выполнить». Затем введите devmgmt.msc и нажмите Enter, чтобы открыть диспетчер устройств. Если вам будет предложено UAC, нажмите Да, чтобы предоставить доступ администратора.Запуск диспетчера устройств
- Как только вы войдете в диспетчер устройств, разверните раскрывающееся меню, связанное с адаптерами дисплея, затем продолжите и удалите все графические драйверы, кликнув их правой кнопкой мыши и выбрав Удалить — сделайте это для каждой записи внутри адаптеров устройств. Если у вас есть как встроенный, так и выделенный графический процессор, удалите оба типа драйверов.
Примечание. После удаления экран может мерцать. Это происходит потому, что ваша ОС вернется к стандартным драйверам. - После удаления всех драйверов графического процессора из диспетчера устройств закройте утилиту диспетчера устройств.
- Еще раз нажмите клавишу Win + R, чтобы открыть другое диалоговое окно «Выполнить». Затем введите appwiz.cpl и нажмите Enter, чтобы открыть экран «Программы и компоненты».
- Зайдя в меню «Программы и компоненты», прокрутите список установленных приложений и начните удалять все, что связано с производителем вашего графического процессора (Nvidia AMD или Intel). Вы можете убедиться, что ничего не оставите, кликнув столбец «Издатель», чтобы расположить их один за другим. Просто щелкните правой кнопкой мыши каждый инструмент или драйвер, связанный с графическим процессором, а затем выберите Удалить в контекстном меню.
- На экране удаления следуйте инструкциям на экране, чтобы завершить процесс. После удаления всех соответствующих драйверов перезагрузите компьютер и дождитесь завершения следующего запуска.
- После завершения следующего запуска посетите страницу загрузки, связанную с вашим производителем графического процессора, и загрузите последнюю версию драйвера, доступную для вашей конкретной модели графического процессора:Страница загрузки NvidiaСтраница загрузки AMDСтраница загрузки графики Intel
- Загрузите и установите рекомендуемые драйверы в зависимости от модели вашей видеокарты, затем перезагрузите компьютер и запустите Minecraft после завершения следующего запуска, чтобы проверить, устранена ли проблема.
OpenGL: как простейшим способом?
Прежде всего, если при запуске игры или какого-то специфичного приложения система сообщает, что драйверы OpenGL нуждаются в обновлении, следует использовать самое стандартное решение.
Для активации процесса следует войти в стандартный «Диспетчер устройств», что можно сделать из «Панели управления», раздела администрирования компьютера или командой devmgmgt.msc через строку консоли «Выполнить», и найти там установленный видеоадаптер.
Апдейт можно запустить, используя одноименную команду в меню правого клика или в разделе свойств устройства. Если указать автоматический поиск, это может не дать результата, и система сообщит, что самый подходящий драйвер уже установлен. Поэтому желательно сначала обратиться на сайт производителя оборудования, выбрать свою модель графической карты, скачать самый новый драйвер, а при установке указать местоположение сохраненного дистрибутива.
Загрузка изображения в текстуру
В текстуру теперь нужно загрузить числа из . Это делается в несколько шагов.
Сперва привяжем эту текстуру, чтобы сделать её текущей.
Число пикселей в текстуре может отличаться от числа пикселей в отображаемом объекте. Поэтому
GPU придётся её растягивать или уменьшать. Скажем, что для этого нужно использовать алгоритм
ближайшего соседа. Но можно указать и другой. Например, билинейную интерполяцию
У нас число пикселей
будет совпадать, так что для нас это неважно
GPU умеет работать с текстурами только с размерами, равными степеням двойки. Если это не так, текстуру нужно
дополнить до ближайшего подходящего размера.
Теперь нужно выделить память в GPU для хранения текстуры нашего размера (H×W).
Здесь довольно много параметров, суть которых можно посмотреть в документации.
Главное, что делает команда — выделяет память под изображение указанного размера с пикселями в формате RGBA.
Осталось только загрузить в выделенную память наши данные.
Здесь и указывают уже на формат данных в . OpenGL сам выполнит
преобразование.
Не забудем выделить память и под вторую текстуру.
Будущее OpenGL
В июне 2018 года Apple прекратила поддержку API OpenGL на всех своих платформах ( iOS , macOS и tvOS ), настоятельно рекомендуя разработчикам использовать свой проприетарный Metal API , который был представлен в 2014 году.
Операционные системы Fuchsia и Stadia поддерживают только
Vulkan.
17 сентября 2021 года Valve удалила OpenGL из Dota 2
Все новые игры 2016 года на базе ID Tech 6 Игровой движок использует Vulkan
ID Tech 7 Game Engine поддерживает только
Vulkan
Atypical Games при поддержке Samsung взяли на себя задачу реализовать поддержку Vulkan в своем движке. В конце концов стало ясно, что реализация Vulkan фактически заменит OpenGL на всех платформах, кроме Apple.
Обновление DirectX
Однако обновление может и не дать желаемого положительного результата без апдейта платформы DirectX, которая является неким связующим мостом между железом и программным комплексом в плане мультимедиа.
Узнать установленную версию можно при помощи команды dxdiag, вводимой в меню «Выполнить». Загрузить новый дистрибутив можно с официального сайта поддержки Microsoft в разделе Downloads.
Как уже понятно, DirectX OpenGL обновить можно обычным стартом процесса инсталляции загруженного дистрибутива. Преимущество этого обновления состоит еще и в том, что в самом диалоговом окне DirectX можно провести ряд тестов, включая производительность DirectSound, ffdshow, Direct3D и т. д.
Создание
Сперва узнаем, текстуры какого размера вообще поддерживаются.
Про помощи функций семейства можно получить любые предельные значения, которые
определяются оборудованием. Впрочем, в простых случаях проверку делать не обязательно, так как
стандарт даёт минимальные гарантии. Скажем, для текстур гарантируется, оборудование будет
поддерживать размер не меньше 64×64.
Мой ноутбук выдал значение . Это значит, что я могу загружать текстуры размером 16384×16384.
Нам хватит с запасом.
С каждой текстурой связан некий объект, имеющий уникальный идентификатор (имя, если пользоваться
терминологией OpenGL). И перед началом работы с текстурой нужно этот объект создать.
Текстур нам понадобится две — одна с исходными данными, а вторую мы свяжем с фреймбуфером, чтобы
он записывал в неё результат.
Параметр 2 — это число создаваемых текстурных объектов. Текстуру будем использовать для
входа, а для выхода.
Массивы — это текстуры
Все данные, которые мы будем обрабатывать, мы будем хранить в виде текстур. Ведь что такое текстура? Это
изображение, то есть двумерный массив пикселей. (Если быть точным, то трёхмерный, учитывая три цветовых канала и
прозрачность.) По сути это матрица, а с ними нам и нужно работать.
Из этого следует важный вывод. Вершинный шейдер нам особо и не нужен. Однако без него конвейер работать не будет
и всё равно придётся какую-то заглушку ставить.
Использование текстур для хранения массивов накладывает серьёзные ограничения (которые становятся ещё более
серьёзными в урезанных ES-версиях OpenGL). Например, в OpenGL ES 2.0, который мы договорились использовать,
данные мы можем хранить максимум в виде четырёх байтов
(RGBA — красный зелёный, синий и прозрачность). Можно, конечно, выкрутиться, и как-то закодировать вещественное
число, но нужно помнить, что в шейдере эти байты будут обрабатываться независимо и придётся их декодировать
обратно. Впрочем, если мы решаем задачу цифровой обработки изображения, то это не проблема. Исходное изображение
очевидным образом используется как текстура.
У этой проблемы, конечно, есть решения. Одно из них — использовать расширения OpenGL. Как известно, у базового
OpenGL возможностей мало, но производители «железа» добавляют много новых. Все расширения зарегистрированы и
мы всегда можем проверить, поддерживает наше оборудование какое-то расширение или нет.
Скажем, есть расширение (и не одно), которое позволяет загружать текстуру как массив вещественных
чисел. Но увы, оно есть на настольных компьютерах и рассчитывать на то, что оно поддерживается мобильным
устройством, мы не можем.
Впрочем, уже в OpenGL ES 3.0 (не говоря уж о «взрослых» OpenGL, без ES) есть поддержка чисел с плавающей точкой
в текстурах.
Вершинный шейдер
Код вершинного шейдера можно хранить в отдельном файле. Но если код небольшой, то часто
его размещают в основной программе в виде строковой константы.
Рассмотрим код вершинного шейдера:
Его цель — задать координаты вершин помещая их в зарезервированную переменную .
Мы ничего особо вычислять не будем, а просто скопируем их из атрибута , который позже передадим шейдеру.
Заметьте, что нет никаких циклов. Этот код будет параллельно выполнен для каждой вершины.
Кроме определения координат вершин нам нужно сопоставить им координаты на текстуре. Тут уже придётся сделать
нехитрые вычисления. Дело в том, что диапазон координат вершин равен -1.0..1.0, а диапазон координат пикселей
текстуры (их называют текселями) — 0.0..1.0. Во второй строке функции выполняется преобразование координат.
Заметьте, что когда мы рисуем треугольник, мы задаём три вершины. Когда он растеризуется, фрагментов, конечно, будет больше трёх.
Координаты текстуры (как и другие varying-переменные) внутри треугольника будут интерполироваться между вершинами.
Так что нам не нужно будет думать какой тексель соответствует какому фрагменту.
Для вставки в главную программу оформим код в виде строковой константы.
10 команд для Raspberry Pi Информация об оборудовании
На ПК с Windows или Mac вы можете легко найти информацию об оборудовании, просмотрев Системную информацию или Об этом Mac. Чтобы узнать об оборудовании вашего Raspberry Pi , введите следующее:
cat / proc / cpuinfo
Это выведет информацию о процессоре устройства. Например, когда вы видите «BCM2708», это указывает на то, что Broadcom изготовил чип.
Запустите эти команды каталога proc, чтобы раскрыть другую информацию об оборудовании.
- cat / proc / meminfo отображает детали памяти Raspberry Pi.
- cat / proc / partitions показывает размер и количество разделов на вашей SD-карте или жестком диске.
- cat / proc / version показывает, какую версию Pi вы используете.
Используйте эти команды, чтобы оценить, на что способен ваш Raspberry Pi. Это не заканчивается там. Найдите дополнительную информацию, используя серию команд vcgencmd :
vcgencmd measure_temp показывает температуру процессора (жизненно важно, если вы беспокоитесь о потоке воздуха). vcgencmd get_mem arm && vcgencmd get_mem gpu покажет разделение памяти между процессором и графическим процессором, которое можно настроить на экране конфигурации
free -o -h отобразит доступную системную память.
top d1 проверяет нагрузку на ваш процессор, отображая детали для всех ядер.
df -h — отличный способ быстро проверить свободное место на диске Raspberry Pi.
uptime — это простая команда, которая отображает среднюю загрузку Raspberry Pi.
Заключительные слова
Используя инструмент Perf в системе Linux, можно создать подробный список статистики процессора и ядра. Во всем посте я описал метод установки инструмента Perf в системах Linux на базе Ubuntu и Red Hat. Позже я показал несколько основных команд Perf, чтобы начать с ним работать.
Пожалуйста, поделитесь им со своими друзьями и сообществом Linux, если вы найдете этот пост полезным и информативным. Вы сообщаете нам, какую версию инструментов вы используете в настоящее время в своей системе для отслеживания системной статистики. Напишите свое мнение об этом сообщении в разделе комментариев.
Связанные библиотеки
Самые ранние версии OpenGL были выпущены с сопутствующей библиотекой, называемой OpenGL Utility Library (GLU). Он предоставлял простые и полезные функции, которые вряд ли поддерживаются современным оборудованием, такие как тесселяция , создание MIP-карт и примитивных форм . Спецификация GLU последний раз обновлялась в 1998 году и зависит от функций OpenGL, которые сейчас не рекомендуются .
Наборы контекстных и оконных инструментов
Учитывая, что создание контекста OpenGL — довольно сложный процесс, и учитывая, что он варьируется в зависимости от операционных систем , автоматическое создание контекста OpenGL стало общей чертой нескольких библиотек разработки игр и пользовательского интерфейса , включая SDL , Allegro , SFML , FLTK , и Qt . Несколько библиотек были разработаны исключительно для создания окна с поддержкой OpenGL. Первой такой библиотекой была OpenGL Utility Toolkit (GLUT), позже замененная freeglut . GLFW — более новая альтернатива.
Эти наборы инструментов предназначены для создания окон OpenGL и управления ими, а также для управления вводом, но не более того.
-
- GLFW — кроссплатформенный обработчик окон и клавиатуры-мыши-джойстика; более игровой
- freeglut — кроссплатформенный обработчик окон и клавиатуры-мыши; его API — это надмножество GLUT API, и он более стабилен и актуален, чем GLUT.
- OpenGL Utility Toolkit (GLUT) — старый обработчик окон, больше не обслуживаемый.
Несколько «мультимедийных библиотек» могут создавать окна OpenGL, помимо ввода, звука и других задач, полезных для игровых приложений.
-
- Allegro 5 — кроссплатформенная мультимедийная библиотека с C API, ориентированная на разработку игр.
- Simple DirectMedia Layer (SDL) — кроссплатформенная мультимедийная библиотека с C API
- SFML — кроссплатформенная мультимедийная библиотека с C ++ API и множеством других привязок к таким языкам, как C #, Java, Haskell и Go.
Наборы инструментов для виджетов
-
- FLTK — небольшая кроссплатформенная библиотека виджетов C ++
- Qt — кроссплатформенный инструментарий виджетов C ++. Он предоставляет множество вспомогательных объектов OpenGL, которые даже абстрагируют разницу между настольным GL и OpenGL ES.
- wxWidgets — кроссплатформенный инструментарий виджетов C ++.
Библиотеки загрузки расширений
Учитывая высокую рабочую нагрузку, связанную с идентификацией и загрузкой расширений OpenGL, было разработано несколько библиотек, которые автоматически загружают все доступные расширения и функции. Примеры включают GLEE , GLEW и glbinding . Расширения также загружаются автоматически большинством языковых привязок, таких как JOGL и PyOpenGL .
Реализации
Mesa 3D — это реализация OpenGL с открытым исходным кодом . Он может выполнять чистый программный рендеринг, а также может использовать аппаратное ускорение на BSD , Linux и других платформах, используя преимущества инфраструктуры прямого рендеринга . Начиная с версии 20.0, он реализует версию 4.6 стандарта OpenGL.
Вычисления — это отрисовка
Процесс вычислений — это процесс отрисовки фрагментов в фреймбуфере. То есть, чтобы запустить шейдеры,
нам сначала нужно нарисовать что-то. Обычно это прямоугольник, на который наложена наша текстура. Но
так как основной примитив у нас треугольник, то вместо прямоугольника рисуем два прямоугольных треугольника.
После каждой команды отрисовки треугольников у нас конвейер будет проходить весь цикл вычислений. Да, этапов
там много, и кажется, что будет выполнено больше работы. Это так, но мы всё равно будем в выигрыше.
Задача
Попробуем решить следующую задачу. Пусть дана матрица размером H×W = 64×64. Выделим под неё память и заполним
суммами номеров строк и столбцов. Работать будем с однобайтовыми числами, так что от сумм будем
брать только младший байт. Заодно выделим память для результата.
Двумерный массив должен быть расположен в памяти одним блоком построчно. В C и C++ мы можем только
выделить память под одномерный массив. Но это не проблема. Просто вместо будем писать
. Первое слагаемое пропускает строчек от до , а второе — смещается в строке с
номером на позицию . Да, не очень удобно, но быстро привыкаешь.
Данные будут однобайтовыми, но вспомним, что в текстуре каждый пиксель имеет формат . Процессоры
архитектуры хранят целые числа в формате
little-endian,
поэтому если рассматривать эти
четыре байта как одно 4-байтовое число, то младшим байтом будет . Там и будем хранить наше значение.
Я буду писать на C++, но этот код будет легко портировать на C, заменив на ,
на , а на .
Здесь используется тип из , чтобы гарантировать, что элементы будут 32-битные, то есть 4-байтовые.
Фактически, это псевдоним для .
И сразу выведем младшие байты элементов массива на экран. Чтобы не загромождать терминал
выведем только верхний левый угол 8×8.
(Полный исходный код со всеми заголовочными файлами будет приведён в конце.)
В результате на экране появится следующее:
Создание контекста
Команды OpenGL, как уже было сказано, абстрактны и не привязаны к какому-то конкретному устройству.
Поэтому, чтобы они отправлялись на GPU, нужно создать контекст. Если мы пользуемся, например,
библиотекой GLUT, то она делает это за нас. Но она привязывает его к окну, а мы хотим создать
безоконное приложение.
Для создания безоконного контекста (offscreen context) можно воспользоваться библиотекой EGL,
которая для этого и предназначена.
Информация о дисплее, контексте и поверхности, на которой будет происходить отрисовка
будет храниться в следующих основных переменных.
Сперва получим информацию о текущем дисплее. На нём мы рисовать не будем, но это
нужно для создания контекста.
Инициализируем EGL.
Теперь создадим конфигурацию поверхности на которой будем рисовать. Это будет не
окно, а пиксельный буфер (pbuffer) в памяти. Укажем также глубину цвета и версию
OpenGL.
Нам также потребуются две вспомогательные переменные для хранения конфигурации.
Конфигурация задаётся в виде массива пар параметр — значение. Признак конца
конфигурации — .
Параметр очень важен! Если указать что-то кроме ,
то OpenGL ES 2.0 не будет работать как нужно.
Следующий шаг — создание поверхности на основе нашей конфигурации. Отображать на ней мы всё равно ничего не будем,
поэтому можно задать размеры равными 1×1.
Делаем OpenGL текущим API.
Наконец, создаём контекст и делаем его активным для текущего потока.
Параметр также очень важен. Если указать неверное значение,
то шейдеры просто не будут компилироваться.
В конце программы, когда контекст не нужен, удаляем его.
Для краткости я не обрабатывал ошибки. В реальных приложениях это, конечно же, стоит делать.
Код ошибки после последней команды можно получить с помощью функции .
Создание фреймбуфера
Раз мы не будем выводить изображение на экран, нам потребуется новый фреймбуфер (FBO, famebuffer object),
в который и будут записываться результаты. У каждого фреймбуфера есть уникальный номер,
который назначается ему при создании. Будем хранить его в переменной .
Параметр 1 во второй строке означает, что мы создаём один фреймбуфер. Команда
сразу после создания привязывает его (bind), то есть делает его текущим.