Vulkan API — урок 0

Происхождение Vulkan

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

Со временем архитектура графических устройств развивалась, они стали предлагать все больше и больше возможностей разработчику. Каким-то образом вся эта новая функциональность была прих*$чена (наверно наиболее подходящее слово) к существующему API. В результате все этой вакханалии абстракция получилась чуть менее чем посредственная и теперь графические устройства через три колена должны догадываться, чего же хотел программист. Именно поэтому сейчас так часто выходит такое большое количество драйверов от производителей, что бы привести производительность игр в подобающий вид, и все это обходится ой как не дешево. Из-за сложности этих драйверов, разработчики приложений также должны иметь дело с разной реализацией одних и тех же фич у разных производителей, на подобии синтаксиса шейдеров. Кроме всего вышеперечисленного так же стоит принимать в расчет множество мобильных устройств, которые на данный момент имеют серьезные графические мощности и огромную долю рынка, но ограничены энергопотреблением и имеют свою определенную специфику. Ну а так же поддержка многопоточности, которой до недавнего времени не было вообще, и вся нагрузка ложилась на одно единственное ядро CPU.

Что бы решить все вышеперечисленные проблемы (и тонны не перечисленных), Vulkan был разработан с чистого листа. Множество возможностей нового API не будут требовать годы опыта в предыдущих системах, не будет тянуть за собой их старые болячки и позволит быстрее вникнуть в работу, особенно молодым специалистам как я.

Для начала определимся, что же нам понадобится:

  • Видеокарта и драйвер совместимые с Vulkan’ом (NVIDIA, AMD, Intel);
  • Базовые знания С++ (что такое ООП, RAII, Initializer list);
  • Чтолибонибудь для работы с С++11 (рекомендуется Visual Studio 2013+, GCC 4.8+);
  • Опыт работы с 3D графикой не обязателен, но было бы неплохо;

Перед началом изучения данной серии уроков не плохо было бы прочитать хорошую статью с хабра, даже если Вы не будете понимать 90%, все равно внимательно прочитайте данную статью, в дальнем будущем это вам поможет (а также прочтите комменты, там указаны также минусы Vulkan’a).

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

При особом желании Вы можете использовать С взамен С++, но тогда придется искать и изучать другие библиотеки линейной алгебры и всю структуру приложения придется выстраивать самостоятельно, ну а также думать какой аналог RAII использовать для организации логики и времени жизни ресурсов.

Для начала будет проведен краткий обзор Vulkan’a, как он работает и как с ним работать, как вывести простейшую фигуру на экран. Это будет первый шаг, описывающий основные моменты, способ сбора информации о системе, объяснение базовых элементов, для чего они нужны. Далее установим рабочую среду Vulkan SDK, GLM library для линейных алгебраических операций и GLFW для создания окна. Я буду все это делать на всеми так ненавистной/обожаемой Windows с участием Visual Studio, но вкратце упомяну как это можно будет сделать на Ubuntu Linux используя GCC.

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

Перед началом изучения уроков убедитесь, что понимаете что такое Функторы в языках программирования (нам только С++) и Лямбда-выражения, Шаблоны С++, std::function. Это все вы найдете на странице Что откуда качать и полезные ссылки.

Main Admin

One Comment

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *