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.AddDescriptorSetLayoutBinding(UniformBuffer::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
m_shader.AddDescriptorSetLayoutBinding(Texture::DESCRIPTOR_SET_LAYOUT_BINDING);
|
||||
m_shader.depthCompareOp = CompareOp::LESS_OR_EQUAL;
|
||||
SetShader(&m_shader);
|
||||
m_intrinsicsBuffer.Init(sizeof(Math::CameraIntrinsicWithResolution), &FALLBACK_INTRINSICS);
|
||||
m_intrinsicsBuffer.updateFrequency = UpdateFrequency::Always;
|
||||
|
||||
@@ -40,6 +40,18 @@ namespace OpenVulkano::Scene
|
||||
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
|
||||
{
|
||||
ShaderProgramType type;
|
||||
@@ -77,6 +89,7 @@ namespace OpenVulkano::Scene
|
||||
Topology topology = Topology::TRIANGLE_LIST;
|
||||
CullMode cullMode = CullMode::BACK;
|
||||
ICloseable* renderShader = nullptr;
|
||||
CompareOp depthCompareOp = CompareOp::LESS;
|
||||
bool alphaBlend = false; // TODO allow fine control over blending
|
||||
bool depthTest = true;
|
||||
bool depthWrite = true;
|
||||
|
||||
@@ -27,10 +27,9 @@ layout(set = 2, binding = 0) uniform RealCameraData
|
||||
layout(location = 0) out vec2 textureCoordinates;
|
||||
layout(location = 1) out float scaleOut;
|
||||
|
||||
const float FLOAT_MAX_LESS_THAN_1 = 0.999999940395355224609;
|
||||
// Background plane positions are in clipped space
|
||||
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[](
|
||||
vec2(1, 0), vec2(0, 0), vec2(1, 1), vec2(0, 1)
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace OpenVulkano::Vulkan
|
||||
vk::PipelineRasterizationStateCreateInfo rasterizer = {};
|
||||
rasterizer.cullMode = static_cast<vk::CullModeFlagBits>(shader->cullMode);
|
||||
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;
|
||||
vk::PipelineColorBlendAttachmentState colorBlendAttachment = {};
|
||||
colorBlendAttachment.colorWriteMask = vk::ColorComponentFlagBits::eA | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eR;
|
||||
|
||||
Reference in New Issue
Block a user