Begin work on RenderPipeline
This commit is contained in:
51
src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp
Normal file
51
src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright (C) 2016 Jérôme Leclercq
|
||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderPipeline.hpp>
|
||||
#include <Nazara/Core/ErrorFlags.hpp>
|
||||
#include <Nazara/VulkanRenderer/Utils.hpp>
|
||||
#include <cassert>
|
||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
VulkanRenderPipeline::VulkanRenderPipeline(Vk::DeviceHandle device, RenderPipelineInfo pipelineInfo) :
|
||||
m_device(std::move(device)),
|
||||
m_pipelineInfo(std::move(pipelineInfo))
|
||||
{
|
||||
}
|
||||
|
||||
VkPipelineDepthStencilStateCreateInfo VulkanRenderPipeline::BuildDepthStencilInfo(const RenderPipelineInfo& pipelineInfo)
|
||||
{
|
||||
VkPipelineDepthStencilStateCreateInfo createInfo = {};
|
||||
createInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
|
||||
createInfo.pNext = nullptr;
|
||||
createInfo.flags = 0U;
|
||||
createInfo.depthTestEnable = pipelineInfo.depthBuffer;
|
||||
createInfo.depthWriteEnable = pipelineInfo.depthWrite;
|
||||
createInfo.depthCompareOp = ToVulkan(pipelineInfo.depthCompare);
|
||||
createInfo.depthBoundsTestEnable = VK_FALSE;
|
||||
createInfo.stencilTestEnable = pipelineInfo.stencilTest;
|
||||
createInfo.front = BuildStencilOp(pipelineInfo, true);
|
||||
createInfo.back = BuildStencilOp(pipelineInfo, false);
|
||||
|
||||
return createInfo;
|
||||
}
|
||||
|
||||
VkStencilOpState VulkanRenderPipeline::BuildStencilOp(const RenderPipelineInfo& pipelineInfo, bool front)
|
||||
{
|
||||
const auto& pipelineStencil = (front) ? pipelineInfo.stencilFront : pipelineInfo.stencilBack;
|
||||
|
||||
VkStencilOpState stencilStates;
|
||||
stencilStates.compareMask = pipelineStencil.compareMask;
|
||||
stencilStates.compareOp = ToVulkan(pipelineStencil.compare);
|
||||
stencilStates.depthFailOp = ToVulkan(pipelineStencil.depthFail);
|
||||
stencilStates.failOp = ToVulkan(pipelineStencil.fail);
|
||||
stencilStates.passOp = ToVulkan(pipelineStencil.pass);
|
||||
stencilStates.reference = pipelineStencil.reference;
|
||||
stencilStates.writeMask = pipelineStencil.writeMask;
|
||||
|
||||
return stencilStates;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user