Как правильно реализовать класс DepthBuffer для VulkanAPI на C++ ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Как правильно реализовать класс DepthBuffer для VulkanAPI на C++

Сообщение Anonymous »

Вопрос о реализации буферизации глубины в Vulkan для многослойных текстур
Я использую Vulkan с C++ на платформе Linux (Arch). Я следую учебному пособию по Vulkan, доступному на сайте vulkan-tutorial.com, но вместо того, чтобы копировать код построчно, я структурирую его на несколько классов, чтобы лучше понять каждую часть API и его обязанности. На данный момент я успешно реализовал руководство, включая Наложение текстур. Теперь я перехожу к буферизации глубины.
Код компилируется и выполняется без ошибок, но выходные данные не соответствуют моим ожиданиям. Вместо отображения двух квадратов — один наложен поверх другого — отображается только один текстурированный квадрат. Хотя возможно, что оба квадрата отображаются друг над другом, я считаю, что точно следовал инструкциям руководства по буферизации глубины.
Структура и настройка проекта
В main.cpp я создаю окно GLFW и определяю вершины и индексы, которые затем передаются в класс VulkanApplication. Этот основной класс определен в application.cpp и отвечает за:
  • Создание экземпляров общих указателей и управление ими для каждого соответствующего класса (например, GraphicsPipeline< /code>, DepthManager и т. д.) в его конструкторе.
  • Управление порядком разрушения в его деструкторе.
  • Обработка выполнения окна, Обновления универсального буферного объекта (UBO) и обработка цепочки обмена.
Для буферизации глубины я изменил createRenderPass и createFrameBuffers методы в классе GraphicsPipeline для включения вложений глубины, следуя руководству. Я также добавил отдельный класс DepthManager, созданный сразу после SwapChain и перед CommandBufferManager, который обрабатывает создание изображений глубины и просмотр изображений. Оба класса GraphicsPipeline и DepthManager находятся в файле Graphics.cpp.
Сводка проблем
Пока код компилируется и запускается успешно без ошибок, он отображает только один вращающийся текстурированный квадрат вместо двух квадратов, наложенных друг на друга, как ожидалось. Я подозреваю, что проблема может быть связана с моей реализацией буферизации глубины, но я не уверен, где мой код отличается от предполагаемого результата руководства.
Вопрос:
Как я могу правильно реализовать буферизацию глубины для этого варианта использования и какие аспекты моего кода могут вызывать этот непредвиденный результат?

Подробнее здесь: https://stackoverflow.com/questions/791 ... anapi-in-c

Вернуться в «C++»