Vulkan API (glNext) от Khronos Group. Проект Vulkan: OpenGL будет дополнять новый API

Введение

Если вы столкнулись с проблемой низкого FPS в DOOM и вам хочется ее исправить, то вы пришли как раз по адресу.
Магическая штука Vulkan API поднимает FPS в среднем на 15-25 кадров (зависит от конфигурации вашего компа), превращая некомфортные 20-30 FPS в совершенно играбельные 50-60.

ВНИМАНИЕ! ПРЕЖДЕ ЧЕМ ВЫПОЛНЯТЬ ДЕЙСТВИЯ, ОПИСАННЫЕ В РУКОВОДСТВЕ, НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО ВАШ КОМПЬЮТЕР СООТВЕТСТВУЕТ ХОТЯ БЫ МИНИМАЛЬНЫМ СИСТЕМНЫМ ТРЕБОВАНИЯМ!

Что такое Vulkan API?

Что это вообще за зверь и как ему удается так ощутимо повысить производительность?

Vulkan API - графический интерфес программирования, созданный для отображения 3D и 2D графики на ваших мониторчиках. Проще говоря, эта шняга использует ресурсы вашего компа для построения графики в играх. OpenGL и DirectX из той же оперы.

Почему он дает такой прирост к FPS? Я, конечно, могу начать вам рассказывать о супер-пупер технологиях, использующихся в нем, но для простоты просто скажу, что он использует компьютерное железно намного эффективнее, чем его предшественник OpenGL.

Как мне его включить?

Все очень просто, начнем с первого шага:

Шаг первый:

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

Шаг второй:

Запускаем сам DOOM. Заходим в Параметры>Расширенные и в пункте "Графический API" выбираем "Vulkan API" вместо "OpenGL". Перезапускаем игру.

Шаг третий:

Заходим в игру и радуемся повышению производительности!

ВАЖНО:

Повышение производительности очень сильно зависит от характеристик вашего компа. На моей конфигурации прирост составил аж 30 FPS, у кого-то может оказаться намного меньше, а кто-то вообще не почувствует разницы. Да и вообще, глупо ожидать от тостера хотя бы 30 FPS с Vulkan"ом, если он на минималках едва 10 выдает.

Игра не запускается после включения Vulcan API, что делать?

Причина один:

Вы не обновили драйвера, либо скачали не ту их версию. Перекачиваем более новую/стабильную версию.

Причина два:

Ваша видеокарта не может в Vulkan API. Такое тоже может случиться, но вероятность довольно мала. Если видеокарта подходит под минимальные требования - она точно может работать с Vulkan API. Если нет - откатываем игру к настройкам по умолчанию и мучаемся с OpenGL"ом

Как откатить игру обратно до OpenGL, если ничего не работает?

Если игра после перехода на Vulkan отказывается запускаться - вот способ перехода обратно на OpenGL:
Первым делом нужно зайти в папку сохранений, она находится по этому пути:
C:\Users\<имя_пользователя>\Saved Games\id Software\DOOM\base
Далее находим в ней файл DOOMConfig.local и открываем его блокнотом.
Ищем параметр r_renderapi и меняем в его значении 1 на 0 (1 - VulkanAPI, 0 - OpenGL)
Сохраняем файл и закрываем его. Теперь игра должна запуститься.

Огромное спасибо пользователю arikuto за найденную инструкцию!

Не забудьте оценить руководство или оставить свою критику/пожелания!

Это вообще разные вещи.
Нужно отличать изучение API , от изучения технологии . Если вы хотите выучить просто API, учите что угодно, ибо разницу заметите только, когда поймёте основы, базу .

OpenGL проектировался когда были другие архитектуры железа. Мультипроцессорность была только в теории, и считалась уделом суперкомпьютеров и ненужной для пользовательских ПК.
Можно привести аналогию: OpenGL == C++, Vulkan == асинхронный Assembler + hardware threads. Например, в C++ сейчас довольно много архитектурных косяков, которые пытаются решить новыми стандартами, объявляют какие вещи устаревшими, потому что они концептуально неверны и не подходят под современные реалии.
Но, при этом, вы можете всё то же самое написать на ассемблере, но нужно намного лучше понимать, как работает процессор и ОС, самому писать примитивы синхронизации, и т. п.

Для этих же целей и создавался вулкан. Для программирования на нём, нужно знать все тонкости железки, читать кучи пейперов от той же НВидии, исследовать, придумывать новые фичи для современных архитектур с нуля, которые изначально были придуманы в OpenGL, но для старого железа.
Т. е. на Вулкане нужно делать больше руками, больше оптимизировать. Вместо одного вызова функции OpenGL, на вулкане придётся несколько сотен строк написать. При этом, если вы не понимаете какой-то одной тонкости, вы сделаете менее эффективнее то, что изначально было хорошо реализовано в OpenGL. К тому же, OpenGL умеет выбрасывать ошибки, в случае, когда вы где-то накосячили. Вулкан же их не выбрасывает, он полагается на то, что вы уже знаете как этим пользоваться. Точно так же, как ассемблер просто меняет состояние регистров, у него нет понятия ошибки. Как интерпретировать эти регистры, зависит от того, насколько хорошо разработчик читал мануал к процессору.

В итоге, я бы ответил так:

Если вы будете заниматься графикой как наукой, дико задротить а-ля Кармак в студенчестве с его движками, что-то исследовать, писать какие-то гениальные алгоритмы, защищать на этом диссертации, публиковать их, рассказывать потом на конференции, как вы круто справились с какой-то насущной задачей, повысили производительность, то тогда учите Vulkan. Vulkan - это именно про графику как технологию, про производительность, про инжиниринг и архитектурный дизайн, а не про API и само программирование. С вулканом придётся больше сидеть с диаграммами, документациями и строить архитектуру, придумывать методы взаимодействия частей этой архитектуры, синхронизации состояний, нежели писать код.

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

Если хотите писать игры не мирового класса, то учите готовые движки, Unity или Unreal. Они уже поддерживают за вас Vulkan, продумали за вас API и архитектуру.

Относительно недавно вышел новый Vulkan API - можно сказать, наследник OpenGL, хотя основан Vulkan на API Mantle от AMD.
Конечно, развитие и поддержка OpenGL не прекратилось, а также в свет вышел и DirectX 12. Что там с DirectX 12 и почему его поставили только на Windows 10 - я, к сожалению (а может и к счастью) не знаю. Но вот кроссплатформенный Vulkan меня заинтересовал. В чём же особенности Vulkan и как правильно его использовать я постараюсь рассказать вам в этой статье.

Итак, для чего нужен Vulkan и где он может быть использован? В играх и приложениях, работающие с графикой? Конечно! Вычислять, как это делает CUDA или OpenCL? Без проблем. Обязательно ли для этого нам нужно окно или дисплей? Конечно нет, вы можете сами указать, куда транслировать ваш результат или не транслировать его вообще. Но обо всём по порядку.

Оформление API и основы

Пожалуй, стоит начать с самого простого. Так как над Vulkan API работали Khronous Group , синтаксис весьма похож на OpenGL. Во всём API есть префикс vk. К примеру функции (порой даже с очень длинными названиями) выглядят так: vkDoSomething(...), имена структур или хэндлов: VkSomething, а все константные выражения (макросы, макровызовы и элементы перечислений): VK_SOMETHING. Также, есть особый вид функций - команды, которым добавляется префикс Cmd: vkCmdJustDoIt(...).

Писать на Vulkan можно как на C, так и на C++. Но второй вариант даст, конечно же, больше удобства. Есть (и будут создаваться) порты на другие языки. Кто-то уже сделал порт на Delphi, кто-то желает (зачем?) порт на Python.

Итак, как же создать рендер контекст? Никак. Здесь его нет. Вместо это придумали другие вещи с другими названиями, которые даже будут напоминать DirectX.

Начало работы и основные понятия

Vulkan разделяет два понятия - это устройство (device ) и хост (host ). Устройство будет выполнять все команды, отправленные ему, а хост будет их отправлять. Фактически, наше приложение и есть хост - у Vulkan такая терминология.

Для работы с Vulkan нам понадобится хэндлы на его экземпляр (instance ), и может быть даже не один, а также на устройство (device ), опять же, не всегда может хватать одного.

Vulkan может быть легко загружен динамически. В SDK (разработали LunarG), если был объявлен макрос VK_NO_PROTOTYPES и загружать библиотеку Vulkan своими руками (не линковщиком, а определёнными средствами в коде), то прежде всего нужна будет функция vkGetInstanceProcAddr, с помощью которой можно узнать адреса основных функций Vulkan - те которые работают без экземпляра, включая функцию его создания, и функции, которые работают с экземпляром, включая функцию его разрушения и функцию создания устройства. После создания устройства можно получить функции, которые работают с ним (а также его дочерними хэндлами) через vkGetDeviceProcAddr.

Интересный факт: в Vulkan всегда нужно заполнить определённую структуру данными, чтобы создать какой-либо объект. И всё в Vulkan работает примерно таким образом: заранее подготовил - можно использовать часто и с высокой производительностью. В информацию об экземпляре можно также поместить информацию о вашем приложении, версии движка, версии используемого API и другую информацию.

Слои и расширения

В чистом Vulkan нет сильных проверок входящих данных на правильность. Ему сказали что-то сделать - он сделает. Даже если это приведёт к ошибке приложения, драйвера или видеокарты. Это сделали ради производительности. Тем не менее, можно без проблем подключить проверочные слои , а также расширения к экземпляру и/или устройству, если это необходимо.

Слои (layers)

В основном, предназначение слоёв - проверить входящие данные на ошибки и отслеживать работу Vulkan. Работают они очень просто: допустим, вызываем функцию, и попадает она в самый верхний слой, заданный при создании устройства или экземпляра ранее. Он всё проверяет на правильность, после этого передаёт вызов в следующий. И так будет, пока дело не дойдёт до ядра Vulkan. Конечно же, можно создать собственные слои. Например, Steam выпустила слой SteamOverlay (хотя и не знаю, что он вообще делает). Тем не менее, слои будут молчать, но не доведут до краха приложения. Как узнать, правильно ли всё сделано? Для этого есть специальное расширение!

Расширения (extensions)

Как следует из названия, они расширяют работу Vulkan дополнительным функционалом. Например, одно расширение (debug report) будет выводить ошибки (и не только) со всех слоёв. Для этого нужно будет указать необходимую Callback функцию, а что делать с информацией, поступившей в эту функцию - решать уже вам. Учтите, что это Callback и задержка может вам дорого обойтись, особенно если выводить всю полученную информацию прямиком в консоль. После обработки сообщения, можно указать, передавать ли вызов функции дальше (в следующий слой) или нет - так можно избежать критических ошибок, но постараться работать дальше с менее опасными ошибками.
Есть также и другие расширения, о некоторых я расскажу позже в этой статье.

Устройство

Vulkan разделяет понятия физического устройства и логического. Физическим устройством может быть ваша видеокарта (и не одна) или процессор, поддерживающий графику. Логическое устройство создаётся на основе физического: собирается информацию о физических устройствах, выбирается нужное, подготавливается другая необходимая информация и создаётся устройство. Может быть несколько логических устройств на основе одного физического, но вот объединять для единой работы физические устройства (пока?) нельзя.

Итак, что же за информацию мы собираем? Это, конечно же, поддерживаемые форматы, память, возможности и, конечно же, семейства очередей.

Очереди (queue) и семейства очередей (queue family)

Устройство может (или не может) делать следующие 4 вещи: рисовать графику, производить разные вычисления, копировать данные, а также работать с разреженной памятью (sparse memory management). Эти возможности представлены в виде семейств очередей: каждое семейство поддерживает определённые (может быть все сразу) возможности. И если идентичные семейства были разделены, Vulkan всё равно представит их как одно семейство, чтобы мы не так сильно страдали с кодом и выбирали нужное семейство.

После того, как вы выбрали нужное (или нужные) семейства, из них можно получить очереди. Очереди - это место, куда будут поступать команды для устройства (потом устройство их будет брать из очередей и выполнять). Очередей и семейств, кстати, не сильно много. У NVIDIA обычно 1 семейство со всеми возможностями на 16 очередей. После того, как вы закончили с подбором семейств и количеством очередей, можно создавать устройство.

Команды, их исполнение и синхронизация

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

Командный буфер бывает двух видов: первичный и вторичный. Первичный отправляется прямо в очередь. Вторичный же не может быть отправлен - он запускается в первичном. Записываются команды в таком же порядке, в каком были вызваны функции. В очередь они поступают в таком же порядке. А вот исполнятся они могут почти в «хаотичном» порядке. Чтобы не было полного хаоса в приложении разработчики Vulkan предусмотрели средства синхронизации.

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

Есть 4 примитива синхронизации: забор (fence), семафор (semaphore), событие (event) и барьер (barrier).

Забор самый простой метод синхронизации - он позволяет хосту ожидать выполнение определённых вещей. Например, завершения выполнения командного буфера. Но используется забор редко.

Семафор - способ синхронизации внутри устройства. Никак нельзя посмотреть его состояние или подождать его на хосте, нельзя также ждать его внутри командного буфера, но можем указать, какой семафор должен подать сигнал при завершении исполнения всех команд буфера, и какой семафор ждать перед тем, как начать выполнение команд в буфере. Только ждать будет не весь буфер, а его определённая стадия.

Стадии конвейера (pipeline stages) и зависимости исполнения

Как уже было сказано, не обязательно команды в очереди будут исполнятся по порядку. Если быть точнее, то последующие команды не будут ждать завершения предыдущих. Они могут выполнятся параллельно, или исполнение предыдущей команды может завершиться намного позже последующих. И это вполне нормально. Но некоторые команды зависят от исполнения других. Вы можете разделить их на два берега: «до» и «после», и также указать, какие стадии берега «до» должны обязательно выполнится (т.е. команды могут завершиться не полностью или не все), прежде чем начнут выполняться указанные стадии команд берега «после». Например, отрисовка изображения может приостановиться, чтобы сделать определённые вещи, а потом снова продолжить делать рисовать. Также может быть и цепочка зависимостей, но не будем уходить глубоко в леса Сибири Vulkan.

События - элемент «тонкой» настройки. Подать сигнал можно как с хоста, так и с устройства, ждать можно также и на устройстве, и на хосте. Событие определяет зависимость двух сетов команд (до и после) в командном буфере. И для события есть также специальная псевдо-стадия, которая позволяет ждать хост.

Барьер опять может быть использован только в устройстве, а ещё точнее - в командном буфере, объявляя зависимости первого и второго сета команд. Также можно дополнительно указать барьеры памяти, которые бывают трёх видов: глобальный барьер, барьер буфера и барьер изображения . Они не дадут ненароком прочитать данные, которые в данный момент записываются и/или наоборот, в зависимости от указанных параметров.

Конвейеры

Ниже показаны два конвейера Vulkan:

Т.е. в Vulkan есть два конвейера: графический и вычислительный . С помощью графического, мы, конечно же, можем рисовать, а вычислительный… вычислять. Что же ещё? Результаты вычислений могут потом отправится в графический конвейер. Так можно с лёгкостью сэкономить время на системе частиц, например.

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

Для конвейера можно создать кэш, который может быть использован (снова и снова) и в других конвейерах и даже после перезапуска приложения.

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

Наследование конвейеров

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

Проход отрисовки, графический конвейер и фреймбуфер

Итак, получаем следующую матрёшку:

Для того, чтобы можно было использовать команды отрисовки, нужен графический конвейер. В графическом конвейере необходимо указать проход отрисовки (Render Pass ), который содержит информацию о подпроходах (subpass ), их зависимостей друг от друга и прикреплениях (attachment ). Прикрепление - информация о изображении, которое будет использоваться во framebuffer"ах. Framebuffer создаётся специально для определённого прохода отрисовки. Чтобы начать проход, нужно указать как сам проход (а также, если нужно, подпроход), так и framebuffer. После начала прохода можно рисовать. Можно также переключаться между подпроходами. После того, как рисование завершено, можно завершить проход.

Управление памятью и ресурсы

Память в Vulkan распределяется хостом и только хостом (за исключением swapchain). Если изображение (или другие данные) нужно поместить в устройство - выделяется память. Сначала создаётся ресурс определённых размеров, затем запрашивается его требования к памяти, выделяется для него память, затем ресурс ассоциируется с участком этой памяти и только потом можно копировать в этот ресурс необходимые данные. Также, есть память, которая может быть непосредственно изменена с хоста (host visible), есть локальная память устройства (память видеокарты, например) ну и также другие виды памяти, по своему влияющие на скорость доступа к ним.

В Vulkan можно также написать своё распределение памяти хоста, настроив Callback функции. Но учтите, что требования к памяти, это не только её размер, но и выравнивание (alignment ).

Сами ресурсы бывают двух видов: буферы (buffers ) и изображения (images ). И те и другие разделяются по назначению, но если буфер - просто коллекция различных данных (вершинный, индексный или буфер констант), то изображение всегда имеет свой формат.

Наставление тем, кто пишет на Vulkan

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

Шейдеры

Vulkan поддерживает 6 видов шейдеров: вершинный , контроль тесселяции , анализ тесселяции , геометрический , фрагментный (он же пиксельный ) и вычислительный . Написать их можно на читаемом SPIR-V, а потом собрать в байт код, который в приложении мы запечатаем в модуль, т.е. создадим shader-модуль из этого кода. Конечно же, мы можем написать его на привычном GLSL и потом конвертировать в SPIR-V (транслятор уже есть). И, конечно же, вы можете написать свой транслятор и даже ассемблер - исходники и спецификации выложены в OpenSource, ничто не мешает написать вам сборщик для своего High Level SPIR-V. А может кто-то уже написал.
Байт код потом транслируется в команды, специфичные для каждой видеокарты, но делается это намного быстрее, чем из сырого GLSL кода. Подобная практика применяется и в DirectX - HLSL сначала преобразуются в байт код, и этот байт код может быть сохранён и потом использован, чтобы не компилировать шейдеры снова и снова.

Окна и дисплеи

А закончит эту статью рассказ о WSI (Window System Integration) и цепочке переключений (swapchain). Для того, чтобы выводить что-либо в окно или на экран - нужны специальные расширения.

Для окон это базовое расширение плоскости и расширение плоскости, специфичной для каждой из систем (win32, xlib, xcb, android, mir, wayland). Для дисплея (т.е. FullScreen) нужно расширение display, но в целом и то и другое используют расширение swapchain.

Цепочка переключений не связана с графическим конвейером, поэтому простой Clear Screen выходит без настройки всего этого. Всё достаточно просто. Есть определённый движок показа (presentation engine), в котором есть очередь изображений. Одно изображение показывается на экран, другие дожидаются своей очереди. Количество изображений мы также можем указать. Есть также несколько режимов, которые позволят дождаться сигнала вертикальной синхронизации.

Метод работы примерно таков: мы запрашиваем индекс свободного изображения, вызываем командный буфер, который скопирует результат из Framebuffer в это изображение, и отправляем команду о отправки изображения в очередь. Звучит легко, но с учётом того, что потребуется синхронизация - всё чуточку сложнее, так как единственное, чего ожидает хост - это индекс изображения, которое вскоре будет доступно. Командный буфер ждёт сигнала семафора, который будет свидетельствовать о доступности изображения, и потом сам подать сигнал через семафор о том, что выполнение буфера, в следствии и копирование, завершено. И изображение действительно поступит в очередь по сигналу последнего семафора. Всего два семафора: о доступности изображения для копирования и о доступности изображения для показа (т.е. о завершении копирования).

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

В этой статье я попытался рассказать о наиболее важных частях Vulkan API, но многое всё ещё не рассказано и это вы можете узнать сами. Стабильного вам FPS и приятного кодинга.

Опубликованно 06.11.2018 12:25

Видимо, многие пользователи, в частности, всех тех, кто предпочитает использовать компьютер для установки и шаг, что современные требовательные игры, знают, что в настройках графики можно использовать специальные средства для ускорения вывода изображения и улучшить качество изображения OpenGL или DirectX. Что лучше использовать для полного использования скрытых ресурсов компьютерной системы и добиться максимальной производительности? Этот вопрос довольно спорный, и ответить однозначно на пользу одной платформы, как правило, не представляется возможным, поскольку все зависит от целей, которые ставит перед собой пользователь или разработчик, а также от каждой конкретной ситуации, что отчасти может быть связано с "железной рукой" компьютера в виде графического ускорителя, поддержка программного обеспечения в виде драйверов и некоторые другие аспекты. Постарайтесь понять, что лучше OpenGL или DirectX, - ссылаясь на официальные источники информации, и на основе мнений пользователей и разработчиков программного обеспечения, которые можно заказать поддержку этих технологий. Что такое OpenGL и DirectX?

Начнем с того, что среди пользователей существует ошибочное мнение, что эти два, описаны компонент диаграммы двигателей. Отсюда возникают вопросы о том, какой двигатель лучше, OpenGL или DirectX?

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

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

В современных играх сложных текстур и оттенков человек мне динамичных сцен эта помощь очень нужна. Но проблема в том, что не все графические ускорители могут правильно использовать эту поддержку. В этом случае, все зависит от драйверов. Будь то карты, что является современным, но, что старый директор (drivers) вы не сможете использовать все те возможности, которые изначально были заявлены производителем. Тем не менее, в большинстве игр или программ для работы с мультимедиа (например, для обработки видео), очень часто, и придется выбирать, какой тип поддержки установить в настройках противопоставление с одной платформы на другую (в английском языке это, как правило, выглядит как "OpenGL vs DirectX"). Основные отличия DirectX и OpenGL

Что касается основных отличий, не вдаваясь в технические аспекты работы, сразу можно отметить, что платформа, совместимая с DirectX, - это эксклюзивные разработки корпорации Майкрософт, предназначенный для использования исключительно в системах Windows и на Xbox, и OpenGL это свободно распространяемую кроссплатформенную технологий, применимых в других операционных системах, в том числе на мобильных устройствах). Лицензией GNU, что позволяет любому желающему внести в компоненты этого API собственные изменения и дополнения по его улучшению, с целью повышения производительности одинаковые карты, а улучшения DirectX, что ожидать, по мере выхода новых версий платформы. В этом случае, даже с самых новых драйверов при использовании старых версий мост графические ускорители не дают заявленных производителем показателей. Основные преимущества и недостатки

Говоря о том, что лучше OpenGL или DirectX 11 (12), стоит отметить, что первая платформа предназначена только для графики, а вторая может использоваться в целом для все, что относится к мультимедиа (графика, в этом случае, отвечает за компонент Direct3D).

Кроме того, многие из экспертов отмечает, что в очень высокой степени выбор в пользу моста может зависеть от типа видеокарты. Но, если подходить к сравнению с открытым сознанием, считает, что в отношении охвата платформ выглядит лучше, OpenGL, DirectX, но выигрывает в плане того, что готов в программного продукта как класса Plug&Play. Тем не менее, не следует забывать, что набор инструментов DirectX последних версий, и уже доступна на OpenGL, а вот обратной поддержки нет. OpenGL или DirectX: что лучше для игр?

Что касается игр, то и здесь нельзя дать однозначного ответа. Так, например, очень часто можно встретить отзывы о том, что графические чипы из серии Radeon 9800 лучшие результаты в тестах показывают на базе DirectX, а карты GeForce серии 5XXX – при использовании OpenGL. Но DirectX представляет собой явное преимущество.

Потому что мост OpenGL изначально создавался для других платформ, с ним в Windows, вы можете получить все виды ошибок, и вот DirectX позволяет вполне приемлемой и наслаждайтесь игрой, даже на относительно устаревших компьютерах без каких-либо торможений (например, игра Age Of Empires).

Это и наоборот. Так, например, некоторые пользователи отмечают, что DOOM 3 на картах серии Radeon X1XXX с использованием OpenGL, просто "летает", и Half-Life 2, очень часто "тормозит". Но здесь, по-видимому, все зависит от драйверов.

Но, в конце концов, если игра поддерживает использование обеих технологий, то лучше увидеть, каким будет результат работы видеокарты при использовании каждого режима по отдельности. Само собой разумеется, что достижение оптимальной производительности и собственные платформы, и драйверы графических ускорителей должен быть обновлен до последней версии. Что лучше для BlueStacks: DirectX или OpenGL?

Довольно часто можно найти и вопросы, касающиеся использования одной из самых популярных эмуляторов для Android-систем под названием BlueStacks. Какую платформу вы предпочитаете в BlueStacks - OpenGL или DirectX? Увы, и здесь не возможно дать четкий ответ.

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

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

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

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

Прежде чем говорить о деталях и тонкостях Vulkan API, думаю нужно сказать несколько слов о том, что же это такое и с чем его едят. Если сравнивать Linux с Windows, то Vulkan(который, все еще находится в разработке) это Directx, набор библиотек, для улучшения быстродействия в основном в компьютерных играх. Как известно, на платформе Linux, можно запускать игры с помощью , PlayOnLinux или коммерческой версии . Но не все игрушки запустятся и будут работать как следует, а все из-за проклятого API Directx.

Забыл сказать, что для производительности в играх для.nix платформ используется OpenGL, аналогичное программное обеспечение, как Directx для Windows. Так вот, Vulkan API, как сообщают разработчики из компании Nvidia (которые, в свою очередь, так же заинтересованы в реализации этого проекта) Vulkan API, будет дополняться устаревшим OpenGL. В свою очередь, это означает, что менее ресурсозатратные объекты, будут обрабатываться именно с помощью OpenGL, а когда приходит время , то тут в дело будет вступать новый проект.

Преимущество Vulkan API

Почему же этот проект, поддерживают, очень солидные компании, среди которых, Intel, AMD, Nvidia и др. В чем же прелесть, нового API? Здесь нужно показать видео, которое наглядно покажет, что же он из себя представляет на практике...

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

Перспективы развития Vulkan API

К сожалению, точная дата выхода, пока неизвестна, также держатся в секрете какие, игры, получат поддержку нового API. В свою очередь, компания AMD (которая сейчас очень активно сотрудничает с разработчиками) намекнула, что они работают над новой игрой, которая будет использовать Vulkan API, либо какая-то игра будет портирована.

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

Дальнейшие новости о проекте Vulkan API, будут известны с 14 по 18 марта, во время конференции The Game Developers Conference (GDC).

Все мысли по поводу Вулкана, оставляем в комментариях. Очень интересно узнать, станет ли Linux, игровой платформой или же Windows, снова придумает, что-нибудь сверхъестественное.

Перевод, комментарии: alfabuster, специально для сайта

КАТЕГОРИИ

ПОПУЛЯРНЫЕ СТАТЬИ

© 2024 «kingad.ru» — УЗИ исследование органов человека