Allow shader to define the depth compare operator
This commit is contained in:
@@ -25,6 +25,7 @@ namespace OpenVulkano::Scene
|
|||||||
m_shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/background");
|
m_shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/background");
|
||||||
m_shader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
m_shader.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||||
m_shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
m_shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||||
|
m_shader.depthCompareOp = CompareOp::LESS_OR_EQUAL;
|
||||||
SetShader(&m_shader);
|
SetShader(&m_shader);
|
||||||
m_intrinsicsBuffer.Init(sizeof(Math::CameraIntrinsicWithResolution), &FALLBACK_INTRINSICS);
|
m_intrinsicsBuffer.Init(sizeof(Math::CameraIntrinsicWithResolution), &FALLBACK_INTRINSICS);
|
||||||
m_intrinsicsBuffer.updateFrequency = UpdateFrequency::Always;
|
m_intrinsicsBuffer.updateFrequency = UpdateFrequency::Always;
|
||||||
|
|||||||
@@ -40,6 +40,18 @@ namespace OpenVulkano::Scene
|
|||||||
PATCH_LIST
|
PATCH_LIST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class CompareOp : uint32_t
|
||||||
|
{
|
||||||
|
NEVER = 0,
|
||||||
|
LESS = 1,
|
||||||
|
EQUAL = 2,
|
||||||
|
LESS_OR_EQUAL = 3,
|
||||||
|
GREATER = 4,
|
||||||
|
NOT_EQUAL = 5,
|
||||||
|
GREATER_OR_EQUAL = 6,
|
||||||
|
ALWAYS = 7
|
||||||
|
};
|
||||||
|
|
||||||
struct ShaderProgram
|
struct ShaderProgram
|
||||||
{
|
{
|
||||||
ShaderProgramType type;
|
ShaderProgramType type;
|
||||||
@@ -77,6 +89,7 @@ namespace OpenVulkano::Scene
|
|||||||
Topology topology = Topology::TRIANGLE_LIST;
|
Topology topology = Topology::TRIANGLE_LIST;
|
||||||
CullMode cullMode = CullMode::BACK;
|
CullMode cullMode = CullMode::BACK;
|
||||||
ICloseable* renderShader = nullptr;
|
ICloseable* renderShader = nullptr;
|
||||||
|
CompareOp depthCompareOp = CompareOp::LESS;
|
||||||
bool alphaBlend = false; // TODO allow fine control over blending
|
bool alphaBlend = false; // TODO allow fine control over blending
|
||||||
bool depthTest = true;
|
bool depthTest = true;
|
||||||
bool depthWrite = true;
|
bool depthWrite = true;
|
||||||
|
|||||||
@@ -27,10 +27,9 @@ layout(set = 2, binding = 0) uniform RealCameraData
|
|||||||
layout(location = 0) out vec2 textureCoordinates;
|
layout(location = 0) out vec2 textureCoordinates;
|
||||||
layout(location = 1) out float scaleOut;
|
layout(location = 1) out float scaleOut;
|
||||||
|
|
||||||
const float FLOAT_MAX_LESS_THAN_1 = 0.999999940395355224609;
|
|
||||||
// Background plane positions are in clipped space
|
// Background plane positions are in clipped space
|
||||||
const vec4 PLANE[4] = vec4[](
|
const vec4 PLANE[4] = vec4[](
|
||||||
vec4(1, -1, FLOAT_MAX_LESS_THAN_1, 1), vec4(-1, -1, FLOAT_MAX_LESS_THAN_1, 1), vec4(1, 1, FLOAT_MAX_LESS_THAN_1, 1), vec4(-1, 1, FLOAT_MAX_LESS_THAN_1, 1)
|
vec4(1, -1, 1, 1), vec4(-1, -1, 1, 1), vec4(1, 1, 1, 1), vec4(-1, 1, 1, 1)
|
||||||
);
|
);
|
||||||
const vec2 TEX_COORDS[4] = vec2[](
|
const vec2 TEX_COORDS[4] = vec2[](
|
||||||
vec2(1, 0), vec2(0, 0), vec2(1, 1), vec2(0, 1)
|
vec2(1, 0), vec2(0, 0), vec2(1, 1), vec2(0, 1)
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace OpenVulkano::Vulkan
|
|||||||
vk::PipelineRasterizationStateCreateInfo rasterizer = {};
|
vk::PipelineRasterizationStateCreateInfo rasterizer = {};
|
||||||
rasterizer.cullMode = static_cast<vk::CullModeFlagBits>(shader->cullMode);
|
rasterizer.cullMode = static_cast<vk::CullModeFlagBits>(shader->cullMode);
|
||||||
vk::PipelineMultisampleStateCreateInfo msaa = {};
|
vk::PipelineMultisampleStateCreateInfo msaa = {};
|
||||||
vk::PipelineDepthStencilStateCreateInfo depth = { {}, shader->depthTest, shader->depthWrite, vk::CompareOp::eLess };
|
vk::PipelineDepthStencilStateCreateInfo depth = { {}, shader->depthTest, shader->depthWrite, static_cast<vk::CompareOp>(shader->depthCompareOp) };
|
||||||
depth.maxDepthBounds = 1;
|
depth.maxDepthBounds = 1;
|
||||||
vk::PipelineColorBlendAttachmentState colorBlendAttachment = {};
|
vk::PipelineColorBlendAttachmentState colorBlendAttachment = {};
|
||||||
colorBlendAttachment.colorWriteMask = vk::ColorComponentFlagBits::eA | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eR;
|
colorBlendAttachment.colorWriteMask = vk::ColorComponentFlagBits::eA | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eR;
|
||||||
|
|||||||
Reference in New Issue
Block a user