Fix issue with resizing viewport
This commit is contained in:
@@ -32,8 +32,14 @@ namespace openVulkanoCpp::Vulkan
|
||||
this->device = context->device->device;
|
||||
this->shader = shader;
|
||||
this->owner = owner;
|
||||
this->context = context;
|
||||
shaderModuleVertex = context->device->CreateShaderModule(shader->vertexShaderName + ".vert.spv");
|
||||
shaderModuleFragment = context->device->CreateShaderModule(shader->fragmentShaderName + ".frag.spv");
|
||||
BuildPipeline();
|
||||
}
|
||||
|
||||
void VulkanShader::BuildPipeline()
|
||||
{
|
||||
std::vector<vk::PipelineShaderStageCreateInfo> shaderStageCreateInfos(2);
|
||||
shaderStageCreateInfos[0] = { {}, vk::ShaderStageFlagBits::eVertex, shaderModuleVertex, "main" };
|
||||
shaderStageCreateInfos[1] = { {}, vk::ShaderStageFlagBits::eFragment, shaderModuleFragment, "main" };
|
||||
@@ -47,9 +53,7 @@ namespace openVulkanoCpp::Vulkan
|
||||
attributeDescriptions.emplace_back(4, 0, vk::Format::eR32G32B32Sfloat, offsetof(Vertex, textureCoordinates));
|
||||
attributeDescriptions.emplace_back(5, 0, vk::Format::eR32G32B32A32Sfloat, offsetof(Vertex, color));
|
||||
|
||||
auto viewport = context->swapChain.GetFullscreenViewport();
|
||||
auto scissor = context->swapChain.GetFullscreenScissor();
|
||||
vk::PipelineViewportStateCreateInfo viewportStateCreateInfo = { {}, 1, &viewport, 1, &scissor };
|
||||
vk::PipelineViewportStateCreateInfo viewportStateCreateInfo = { {}, 1, &context->swapChain.GetFullscreenViewport(), 1, &context->swapChain.GetFullscreenScissor() };
|
||||
vk::PipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo = { {}, 1, &vertexBindDesc,
|
||||
static_cast<uint32_t>(attributeDescriptions.size()), attributeDescriptions.data() };
|
||||
vk::PipelineInputAssemblyStateCreateInfo inputAssembly = { {}, ToVkTopology(shader->topology), 0 };
|
||||
@@ -69,7 +73,12 @@ namespace openVulkanoCpp::Vulkan
|
||||
vk::GraphicsPipelineCreateInfo pipelineCreateInfo = { {}, static_cast<uint32_t>(shaderStageCreateInfos.size()), shaderStageCreateInfos.data(), &pipelineVertexInputStateCreateInfo, &inputAssembly,
|
||||
nullptr, &viewportStateCreateInfo, &rasterizer, &msaa, &depth, &colorInfo, nullptr, context->pipeline.pipelineLayout, context->swapChainRenderPass.renderPass };
|
||||
pipeline = this->device.createGraphicsPipeline({}, pipelineCreateInfo).value;
|
||||
}
|
||||
|
||||
void VulkanShader::Resize()
|
||||
{
|
||||
device.destroyPipeline(pipeline);
|
||||
BuildPipeline();
|
||||
}
|
||||
|
||||
void VulkanShader::Record(vk::CommandBuffer& cmdBuffer, uint32_t bufferId)
|
||||
|
||||
@@ -23,15 +23,21 @@ namespace openVulkanoCpp::Vulkan
|
||||
vk::ShaderModule shaderModuleVertex, shaderModuleFragment;
|
||||
vk::Pipeline pipeline;
|
||||
IShaderOwner* owner;
|
||||
Context* context;
|
||||
|
||||
VulkanShader() = default;
|
||||
~VulkanShader() override { if (shader) VulkanShader::Close(); }
|
||||
|
||||
void Init(Context* context, Scene::Shader* shader, IShaderOwner* owner);
|
||||
|
||||
void Resize();
|
||||
|
||||
void Record(vk::CommandBuffer& cmdBuffer, uint32_t bufferId) override;
|
||||
|
||||
void Close() override;
|
||||
|
||||
private:
|
||||
void BuildPipeline();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user