Vulkan Learning — 2. Surface. Physical Device. Logical Device. Command Queues

Поверхность (Surface) Следующий шаг после создания Instance — создание поверхности (Surface). Vulkan использует абстракцию Surface для представления нативной оконной подсистемы имеющейся операционной системы. В каждой операционной системе имеется своя функция для создания поверхности и, соответственно, свое расширение (extension), частью которого является эта функция. Для Windows существует расширение VK_KHR_win32_surface. Однако поддержка поверхностей как таковых сама является расширением (поскольку не во всех случаях графику нужно выводить на экран — см. offscreen rendering) — VK_KHR_surface. // THE FOLLOWING IS PSEUDOCODE! // Field vk::SurfaceKHR Читать дальше …

Vulkan Learning — 1. Установка. Инициализация. Instance. Отладка

Недавно я завершил прохождение видеокурса по Vulkan, и спешу законспектировать информацию, пока она не выветрилась из моей дырявой головы. Литература Vulkan Tutorial LunarG Vulkan Samples Tutorial API without Secrets: Introduction to Vulkan by Pavel Lapinski Understanding Vulkan Objects Vulkan Guide Writing an efficient Vulkan renderer Samsung GameDev Resources Vulkan Specification Мой репозиторий для поделок на Vulkan Установка Vulkan SDK Скачивается с сайта LunarG. Кроссплатформенный SDK, переносим на разные платформы на уровне исходного кода (в коде присутствуют директивы условной компиляции). Включает Читать дальше …

C++ C# Python JavaScript PHP разговорник

Я давно программирую на C++ и C#. Python начал изучать недавно. С JavaScript у меня с давних пор было знакомство, но шапочное, поэтому стал изучать и его. И вот решил составить «разговорник» — удобная штука, чтобы легко было вспоминать материал. Эту необъятную заметку я буду пополнять по мере изучения языков. C++ C# Python 3 JavaScript PHP Расширение файлов .cpp, .h, .hpp .cs .py .js .php Исполняющая среда CPU + OS CLR (Common Language Runtime) Интерпретатор Python: CPython, IronPython, PyPy, Jython Читать дальше …

C++ и среды разработки

Предположим, мы хотим научиться программировать на C/C++. Для этого нам понадобятся следующие вещи: Написать простейший исходный код (программа HelloWorld) Скомпилировать исходный код в исполняемое приложение Запустить приложение (в том числе, в режиме отладки) В чем будем писать исходный код? Текстовый редактор. Сгодится любой текстовый редактор. Но желательно, с подсветкой синтаксиса. Я привык пользоваться Notepad++ (для справки: я — пользователь Windows). Другой редактор, которым я пользуюсь, но для программирования на платформе .NET, это — Visual Studio Code (или сокращенно — VSCode). Читать дальше …

Тест по программированию на C++ от GeekBrains (средний уровень)

Недавно я завис на портале geekbrains.ru, раздумывая, не поступить ли мне на курс по C++ или по Unity. Решил для развлечения тесты порешать по моим любимым языкам C/C++/C#. Несколько базовых тестов успешно прошел, а дальше забуксовал. И решил проработать проблемные вопросы, а в качестве стимула написать заметку в блог. Итак, поехали. Я немножко переформатировал фрагменты кода, чтобы он лучше воспринимался глазами. Ответы и пояснения иногда привожу прямо в исходном коде тестов в виде комментариев. 1. Что будет выведено на экран Читать дальше …

Опыт изучения OpenGL — Часть 9 — Uniform Variables & Uniform Blocks

В прошлых заметках речь шла о пространственных преобразованиях и соответствующих матрицах. Преобразования производятся над вершинами 3-хмерного объекта (модели) путем умножения координат вершин на матрицы. Заниматься этим умножением вершин на матрицы должен видеопроцессор, то есть шейдеры, а именно vertex shader. Почему именно видеопроцессор? Потому что вершин очень много, а у видеопроцессора много ядер, поэтому он может выполнить преобразование большого количества вершин гораздо эффективнее, чем это сделает CPU. Когда производится конкретное пространственное преобразование над некоторой моделью, все вершины этой модели умножаются на Читать дальше …

Опыт изучения OpenGL — Часть 8 — Vector maths API

В прошлой заметке я закончил теоретическую часть рассказа про пространственные преобразования в компьютерной графике. Теперь хочу сказать два слова про программирование всего этого на C++. Vector & Matrix Было довольно очевидно, из чего должен состоять API для векторной алгебры в моем проекте. Это должны были быть два класса: Vector и Matrix. Элементами вектора могут быть числа различных типов (скажем, int, float, double и пр.), поэтому очевидно, что классы Vector и Matrix должны были быть шаблонными (тип элемента матрицы/вектора должен быть Читать дальше …

Опыт изучения OpenGL — Часть 7 — Пространственные преобразования (продолжение)

В прошлой заметке мы рассмотрели преобразование перспективной проекции. В этой рассмотрим еще несколько вопросов, которые касаются в основном преобразований в пространствах model, world и camera. Смена базиса Для начала поговорим переходе от одной системы координат к другой. В 3-хмерном евклидовом пространстве существует т. н. базис, который состоит из трех векторов. Базис — это набор векторов, такой, что любой вектор можно представить в виде линейной комбинации базисных векторов. Коэффициенты в этой линейной комбинации называются координатами. Пусть есть две системы координат K Читать дальше …

Опыт изучения OpenGL — Часть 7 — Пространственные преобразования. Перспективная проекция.

В предыдущих заметках мы рисовали плоский треугольник на плоском экране. Трехмерный мир оказывается более разнообразен, чем плоский экран. Тут есть много о чем поговорить. Литература Jason McKesson — Learning Modern 3D Graphics Programming. Jason Gregory — Game Engine Architecture (2nd Edition). Пространства в 3d-играх World Space В трехмерных программах используется несколько координатных пространств. Одно из них называется мир (world space). В мире находятся объекты (в компьютерной игре это — персонажи, окружение и пр.) и камера. И камера, и объекты могут Читать дальше …

C++11 new features

Недавно посмотрел курс Advanced C++ Programming на портале caveofprogramming.com. Как обычно, решил некоторые вещи законспектировать, чтобы не забыть. Определение пользовательского типа внутри функции Ключевое слово auto Range-based for loop Вложенные классы Что должен уметь класс контейнера, чтобы быть «итерабельным» Лямбда-выражения std::function — General-purpose polymorphic function wrapper Шаблоны с произвольным числом аргументов (Variadic Templates) Rvalue reference Perfect forwarding Способы передачи параметров в функции std::bind static_assert Что осталось за кадром Литература Дэвид Вандервурд, Николаи Джосаттис, Дуглас Грегор — Шаблоны C++. Справочник разработчика. Читать дальше …