Как правильно реализовать класс 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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