Skip to content
Snippets Groups Projects
Select Git revision
  • a3f3c0037dec53d86d725e56c01407260ff24b1d
  • develop default protected
  • feature/webrtc
  • feature/mesh-based-reprojection
  • feature/linux-fixes
  • feature/dual-layer-reprojection
  • feature/frame-invalidation
  • feature/plot-script
  • bug/jittering
  • feature/indirect-sky
  • feature/depth-peeling-reprojection protected
  • master
12 results

dual_layer_reprojection.hpp

Blame
  • 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();