Select Git revision
dual_layer_reprojection.hpp
dual_layer_reprojection.hpp 4.03 KiB
#pragma once
#include <memory>
#include "stereo_strategy.hpp"
enum DualLayerReprojectionOverlay : uint32_t
{
DUAL_LAYER_REPROJECTION_OVERLAY_COLOR,
DUAL_LAYER_REPROJECTION_OVERLAY_ENCODED_DEPTH
};
enum DualLayerReprojectionDepthEncoding : uint32_t
{
DUAL_LAYER_REPROJECTION_DEPTH_ENCODING_NONE,
DUAL_LAYER_REPROJECTION_DEPTH_ENCODING_LOW_HIGH_FREQUENCY,
DUAL_LAYER_REPROJECTION_DEPTH_ENCODING_LOW_HIGH_FREQUENCY_LINEAR,
DUAL_LAYER_REPROJECTION_DEPTH_ENCODING_BIT_PACKING
};
enum DualLayerReprojectionReprojectThreshold : uint32_t
{
DUAL_LAYER_REPROJECTION_REPROJECT_THRESHOLD_TEXTURE_COORDINATES,
DUAL_LAYER_REPROJECTION_REPROJECT_THRESHOLD_DEPTH_GRADIENT,
DUAL_LAYER_REPROJECTION_REPROJECT_THRESHOLD_DEPTH_GRADIENT_LINEAR,
DUAL_LAYER_REPROJECTION_REPROJECT_THRESHOLD_GEOMETRY
};
struct DualLayerReprojectionMetadata
{
DualLayerReprojectionDepthEncoding depth_encoding;
DualLayerReprojectionReprojectThreshold reproject_threshold;
glm::mat4 projection_matrix;
glm::mat4 head_eye_projection_matrix;
glm::uvec2 layer_resolution;
float layer_separation;
float slope_threshold;
float subdivision_threshold;
float depth_low_high_frequency_factor;
float debug_value;
bool wireframe;
bool performance_view;
};
class DualLayerReprojection : public StereoStrategy
{
public:
typedef std::shared_ptr<DualLayerReprojection> Ptr;
public:
DualLayerReprojection();
bool on_setup_remote() override;
bool on_create() override;
void on_destroy() override;
bool on_interface() override;
bool on_update(lava::delta delta_time) override;
bool on_render(VkCommandBuffer command_buffer, lava::index frame) override;
uint32_t get_remote_frame_id_count() const override;
EncoderFormat get_remote_frame_format(FrameId frame_id) const override;
glm::uvec2 get_remote_framebuffer_resolution() const override;
const char* get_name() const override;
private:
bool create_buffers();
bool create_samplers();
bool create_descriptors();
bool create_layer_pass();
bool create_layer_pipeline();