Проходы рендера
This commit is contained in:
parent
825fde662d
commit
4725603dee
|
@ -22,6 +22,7 @@ class Vulkan
|
|||
VkSwapchainKHR swapChain; // Список показа
|
||||
std::vector<VkImage> swapChainImages; // Изображения из списка показа
|
||||
std::vector<VkImageView> swapChainImageViews; // Информация об изображениях из списка показа
|
||||
VkRenderPass renderPass; // Проходы рендера
|
||||
|
||||
// Структура для хранения флагов
|
||||
struct
|
||||
|
@ -36,6 +37,7 @@ class Vulkan
|
|||
void createLogicalDevice(std::vector<const char*> &deviceExtensions); // Создание логического устройства
|
||||
void createWindowSurface(GLFWwindow* window); // Создание поверхности окна
|
||||
void createSwapchain(GLFWwindow* window); // Создание цепочки показа
|
||||
void createRenderpass(); // Создание проходов рендера
|
||||
};
|
||||
|
||||
#endif // VK_H
|
54
src/vk.cpp
54
src/vk.cpp
|
@ -16,11 +16,14 @@ void Vulkan::init(GLFWwindow* window)
|
|||
selectPhysicalDevice(deviceExtensions); // Выбор физического устройства
|
||||
createLogicalDevice(deviceExtensions); // Создание физического устройства
|
||||
createSwapchain(window); // Создание списка показа
|
||||
createRenderpass(); // Создание проходов рендера
|
||||
}
|
||||
|
||||
// завершение работы
|
||||
void Vulkan::destroy()
|
||||
{
|
||||
vkDestroyRenderPass(logicalDevice, renderPass, nullptr);
|
||||
|
||||
// Уничтожение информации о изображениях списка показа
|
||||
for (auto & imageView : swapChainImageViews)
|
||||
{
|
||||
|
@ -460,3 +463,54 @@ void Vulkan::createSwapchain(GLFWwindow* window)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Создание проходов рендера
|
||||
void Vulkan::createRenderpass()
|
||||
{
|
||||
// Информация о прикреплении
|
||||
VkAttachmentDescription colorAttachment{};
|
||||
colorAttachment.format = surface.selectedFormat.format;
|
||||
colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
colorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
|
||||
// Информация о выходном прикреплении
|
||||
VkAttachmentReference colorAttachmentRef{};
|
||||
colorAttachmentRef.attachment = 0;
|
||||
colorAttachmentRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
// Информация о подпроходе
|
||||
VkSubpassDescription subpass{};
|
||||
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpass.colorAttachmentCount = 1;
|
||||
subpass.pColorAttachments = &colorAttachmentRef;
|
||||
|
||||
// Зависимости подпрохода
|
||||
VkSubpassDependency dependency{};
|
||||
dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
|
||||
dependency.dstSubpass = 0;
|
||||
dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependency.srcAccessMask = 0;
|
||||
dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
|
||||
// Информация о создаваемом проходе рендера
|
||||
VkRenderPassCreateInfo renderPassInfo{};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
renderPassInfo.attachmentCount = 1;
|
||||
renderPassInfo.pAttachments = &colorAttachment;
|
||||
renderPassInfo.subpassCount = 1;
|
||||
renderPassInfo.pSubpasses = &subpass;
|
||||
renderPassInfo.dependencyCount = 1;
|
||||
renderPassInfo.pDependencies = &dependency;
|
||||
|
||||
// Создание проходов рендера
|
||||
if (vkCreateRenderPass(logicalDevice, &renderPassInfo, nullptr, &renderPass) != VK_SUCCESS)
|
||||
{
|
||||
throw std::runtime_error("Unable to create render pass");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue