Create output render pass
This commit is contained in:
parent
2b39c6e15b
commit
b0005c250f
@ -16,6 +16,7 @@ namespace nf::cli::render {
|
||||
, m_device()
|
||||
, m_queueGraphics()
|
||||
, m_queuePresent()
|
||||
, m_renderPassOutput()
|
||||
{
|
||||
NFLog("Initializing render engine");
|
||||
m_window->setDisplay(m_display);
|
||||
@ -25,6 +26,7 @@ namespace nf::cli::render {
|
||||
createSurface(m_window->getHandle());
|
||||
pickPhysicalDevice();
|
||||
createDevice();
|
||||
createRenderPass();
|
||||
}
|
||||
|
||||
void RenderEngine::createInstance() {
|
||||
@ -159,7 +161,37 @@ namespace nf::cli::render {
|
||||
vkGetDeviceQueue(m_device, m_queueFIPresent, 0, &m_queuePresent);
|
||||
}
|
||||
|
||||
void RenderEngine::createRenderPass() {
|
||||
VkAttachmentDescription outputColorAttachment = {};
|
||||
outputColorAttachment.format = VK_FORMAT_R8G8B8A8_SRGB;
|
||||
outputColorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
outputColorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
outputColorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
outputColorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
outputColorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
outputColorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
outputColorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
|
||||
VkAttachmentReference outputColorAttachmentReference = {};
|
||||
outputColorAttachmentReference.attachment = 0;
|
||||
outputColorAttachmentReference.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkSubpassDescription subpassDescription = {};
|
||||
subpassDescription.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpassDescription.colorAttachmentCount = 1;
|
||||
subpassDescription.pColorAttachments = &outputColorAttachmentReference;
|
||||
|
||||
VkRenderPassCreateInfo renderPassCI = { VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO };
|
||||
renderPassCI.attachmentCount = 1;
|
||||
renderPassCI.pAttachments = &outputColorAttachment;
|
||||
renderPassCI.subpassCount = 1;
|
||||
renderPassCI.pSubpasses = &subpassDescription;
|
||||
if (vkCreateRenderPass(m_device, &renderPassCI, nullptr, &m_renderPassOutput) != VK_SUCCESS)
|
||||
NFError("Could not create Vulkan render pass");
|
||||
}
|
||||
|
||||
RenderEngine::~RenderEngine() {
|
||||
vkDestroyRenderPass(m_device, m_renderPassOutput, nullptr);
|
||||
vkDestroyDevice(m_device, nullptr);
|
||||
vkDestroySurfaceKHR(m_instance, m_surface, nullptr);
|
||||
vkDestroyInstance(m_instance, nullptr);
|
||||
|
@ -15,6 +15,7 @@ namespace nf::cli::render {
|
||||
void createSurface(HWND window);
|
||||
void pickPhysicalDevice();
|
||||
void createDevice();
|
||||
void createRenderPass();
|
||||
|
||||
std::shared_ptr<Window> m_window;
|
||||
DisplayConfig m_display;
|
||||
@ -25,5 +26,6 @@ namespace nf::cli::render {
|
||||
uint32_t m_queueFIGraphics, m_queueFIPresent;
|
||||
VkDevice m_device;
|
||||
VkQueue m_queueGraphics, m_queuePresent;
|
||||
VkRenderPass m_renderPassOutput;
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user