hotline-rs 0.3.2

A high-performance, hot-reload graphics engine.
Documentation
{
    textures: {
        single_directional_shadow_map: {
            width: 4096
            height: 4096
            format: D32f
            usage: ["ShaderResource", "DepthStencil"]
        }

        single_omni_shadow_map: {
            width: 2048
            height: 2048
            cubemap: true
            array_layers: 6
            format: D32f
            usage: ["ShaderResource", "DepthStencil"]
        }
    }

    sampler_states: {
        shadow_compare: {
            filter: Linear
            address_u: Clamp
            address_v: Clamp
            address_w: Clamp
            comparison: Less
        }
    }

    views: {
        single_directional_shadow_map: {
            depth_stencil: [
                "single_directional_shadow_map"
            ]
            clear_depth: 1.0
            viewport: [0.0, 0.0, 1.0, 1.0, 0.0, 1.0]
            camera: "single_shadow_map_camera"
        }

        single_omni_shadow_map: {
            depth_stencil: [
                "single_omni_shadow_map"
            ]
            clear_depth: 1.0
            viewport: [0.0, 0.0, 1.0, 1.0, 0.0, 1.0]
            camera: "omni_shadow_camera"
        }

        shadow_cam_debug: {
            render_target: [
                main_colour
            ]
            depth_stencil: [
                main_depth
            ]
            viewport: [0.0, 0.0, 1.0, 1.0, 0.0, 1.0]
            camera: single_shadow_map_camera
            clear_depth: null
            clear_colour: null
        }
    }

    pipelines: {
        depth_only_shadow: {
            vs: vs_depth_world_pos
            push_constants: [
                view_push_constants
                draw_push_constants
            ]
            depth_stencil_state: depth_test_less
            raster_state: cull_front
            topology: TriangleList
        }

        depth_only_omni_shadow: {
            vs: vs_depth_world_pos
            ps: ps_omni_shadow_depth
            push_constants: [
                view_push_constants
                draw_push_constants
                world_buffer_info
            ]
            depth_stencil_state: depth_test_less
            raster_state: cull_front
            topology: TriangleList
        }

        single_directional_shadow: {
            vs: vs_mesh
            ps: ps_single_directional_shadow
            push_constants: [
                "view_push_constants"
                "draw_push_constants"
                "world_buffer_info"
            ]
            depth_stencil_state: depth_test_less
            raster_state: cull_back
            topology: TriangleList
            static_samplers: {
                sampler_shadow_compare: shadow_compare
                sampler_clamp_point: clamp_point
            }
        }

        single_omni_shadow: {
            vs: vs_mesh
            ps: ps_single_omni_shadow
            push_constants: [
                "view_push_constants"
                "draw_push_constants"
                "world_buffer_info"
            ]
            depth_stencil_state: depth_test_less
            raster_state: cull_back
            topology: TriangleList
            static_samplers: {
                sampler_shadow_compare: shadow_compare
                sampler_clamp_point: clamp_point
            }
        }
    }

    render_graphs: {
        mesh_lit_single_shadow_map: {
            debug: {
                view: "main_view"
                pipelines: ["imdraw_3d"]
                function: "render_debug"
            }
            shadow: {
                view: "single_directional_shadow_map"
                pipelines: ["depth_only_shadow"]
                function: "render_meshes_bindless"
                depends_on: ["debug"]
            }
            meshes: {
                view: "main_view_no_clear"
                pipelines: ["single_directional_shadow"]
                function: "render_meshes_bindless"
                depends_on: ["shadow"]
                uses: [
                    [single_directional_shadow_map, Read]
                ]
            }
        }

        mesh_lit_omni_shadow_map: {
            debug: {
                view: "main_view"
                pipelines: ["imdraw_3d"]
                function: "render_debug"
            }
            omni_shadow: {
                view: "single_omni_shadow_map"
                cubemap: true
                pipelines: ["depth_only_omni_shadow"]
                function: "render_meshes_bindless"
                depends_on: ["debug"]
            }
            meshes: {
                view: "main_view_no_clear"
                pipelines: ["single_omni_shadow"]
                function: "render_meshes_bindless"
                depends_on: ["omni_shadow"]
                uses: [
                    [single_omni_shadow_map, Read]
                ]
            }
        }
    }
}