diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 292e71cde377aae8de385738e2adbdb9abf48238..27e84ee5cdb062adc0e9f96cdfa7e761e6f24279 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -183,6 +183,7 @@ namespace vkcv const vk::ImageView imageView = m_swapchainImageViews[m_currentSwapchainImageIndex]; const vk::Pipeline pipeline = m_PipelineManager->getVkPipeline(pipelineHandle); const vk::PipelineLayout pipelineLayout = m_PipelineManager->getVkPipelineLayout(pipelineHandle); + const vkcv::PipelineConfig pipelineConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); const vk::Rect2D renderArea(vk::Offset2D(0, 0), vk::Extent2D(width, height)); const vk::Buffer vulkanIndexBuffer = m_BufferManager->getBuffer(indexBuffer); @@ -244,8 +245,12 @@ namespace vkcv cmdBuffer.beginRenderPass(beginInfo, subpassContents, {}); cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {}); - cmdBuffer.setViewport(0, 1, &dynamicViewport); - cmdBuffer.setScissor(0, 1, &dynamicScissor); + + if(pipelineConfig.m_Height == UINT32_MAX && pipelineConfig.m_Width == UINT32_MAX) + { + cmdBuffer.setViewport(0, 1, &dynamicViewport); + cmdBuffer.setScissor(0, 1, &dynamicScissor); + } for (uint32_t i = 0; i < vertexBufferBindings.size(); i++) { const auto &vertexBinding = vertexBufferBindings[i]; diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index 344e541c842b2c9fb2472fadee43a59b6f652ae4..16b08b7a5127769a19b7e0abe47b61f58406bafe 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -5,7 +5,8 @@ namespace vkcv PipelineManager::PipelineManager(vk::Device device) noexcept : m_Device{device}, - m_Pipelines{} + m_Pipelines{}, + m_Configs{} {} PipelineManager::~PipelineManager() noexcept @@ -258,6 +259,7 @@ namespace vkcv const uint64_t id = m_Pipelines.size(); m_Pipelines.push_back({ vkPipeline, vkPipelineLayout }); + m_Configs.push_back(config); return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); } @@ -304,5 +306,11 @@ namespace vkcv pipeline.m_layout = nullptr; } } - + + const PipelineConfig &PipelineManager::getPipelineConfig(const PipelineHandle &handle) const + { + const uint64_t id = handle.getId(); + return m_Configs.at(id); + } + } \ No newline at end of file diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index 950df0be2d8edf3037c93e8522215bfa740d033d..e243151f7248c07fa0287bb2eaf698e5080f7f61 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -18,6 +18,7 @@ namespace vkcv vk::Device m_Device; std::vector<Pipeline> m_Pipelines; + std::vector<PipelineConfig> m_Configs; void destroyPipelineById(uint64_t id); @@ -36,7 +37,11 @@ namespace vkcv [[nodiscard]] vk::Pipeline getVkPipeline(const PipelineHandle &handle) const; + [[nodiscard]] vk::PipelineLayout getVkPipelineLayout(const PipelineHandle &handle) const; + + [[nodiscard]] + const PipelineConfig &getPipelineConfig(const PipelineHandle &handle) const; }; }