enigma_3d/postprocessing/
grayscale.rs1use glium::framebuffer::SimpleFrameBuffer;
2use glium::glutin::surface::WindowSurface;
3use glium::{IndexBuffer, Surface, Texture2d, uniform, VertexBuffer};
4use glium::texture::DepthTexture2d;
5use crate::geometry::Vertex;
6use crate::{AppState, resources, shader};
7use crate::postprocessing::PostProcessingEffect;
8
9pub struct GrayScale {
10 program: glium::Program,
11}
12
13impl PostProcessingEffect for GrayScale {
14 fn render(&self, _app_state: &AppState, vertex_buffer: &VertexBuffer<Vertex>, index_buffer: &IndexBuffer<u32>, target: &mut SimpleFrameBuffer, source: &Texture2d, _depth_source: &DepthTexture2d, _buffer_textures: &Vec<Texture2d>) {
15 let uniforms = uniform! {
16 scene: source,
17 };
18
19 target.draw(
20 &*vertex_buffer,
21 &*index_buffer,
22 &self.program,
23 &uniforms,
24 &Default::default(),
25 ).unwrap();
26 }
27}
28
29impl GrayScale {
30 pub fn new(display: &glium::Display<WindowSurface>) -> Self {
31 let shader = shader::Shader::from_strings(resources::post_processing_vertex(), resources::post_processing_grayscale_fragment(), None);
32 let program = glium::Program::from_source(display, &shader.get_vertex_shader(), &shader.get_fragment_shader(), None).expect("Failed to compile shader program");
33 Self {
34 program,
35 }
36 }
37}