use crate::{
core::sstorage::ImmutableString,
renderer::framework::{
error::FrameworkError,
gpu_program::{GpuProgram, UniformLocation},
server::GraphicsServer,
},
};
pub struct MapShader {
pub program: Box<dyn GpuProgram>,
pub hdr_sampler: UniformLocation,
pub lum_sampler: UniformLocation,
pub bloom_sampler: UniformLocation,
pub color_map_sampler: UniformLocation,
pub uniform_buffer_binding: usize,
}
impl MapShader {
pub fn new(server: &dyn GraphicsServer) -> Result<Self, FrameworkError> {
let fragment_source = include_str!("../shaders/hdr_map.glsl");
let vertex_source = include_str!("../shaders/hdr_map_vs.glsl");
let program = server.create_program("HdrToLdrShader", vertex_source, fragment_source)?;
Ok(Self {
hdr_sampler: program.uniform_location(&ImmutableString::new("hdrSampler"))?,
lum_sampler: program.uniform_location(&ImmutableString::new("lumSampler"))?,
bloom_sampler: program.uniform_location(&ImmutableString::new("bloomSampler"))?,
color_map_sampler: program
.uniform_location(&ImmutableString::new("colorMapSampler"))?,
uniform_buffer_binding: program
.uniform_block_index(&ImmutableString::new("Uniforms"))?,
program,
})
}
}