From 30830d4d905a16f2a9ef0c7412f01e9f8e176a00 Mon Sep 17 00:00:00 2001 From: Able Date: Sat, 2 Apr 2022 15:34:24 -0500 Subject: [PATCH] optimization and TexturedParticle work --- assets/shaders/particles/solid_color.frag | 5 ++- assets/shaders/particles/solid_color.vert | 8 ++-- .../shaders/particles/textured_particle.frag | 10 +++++ .../shaders/particles/textured_particle.vert | 12 +++++ src/main.rs | 45 ++++++++++++++----- src/particle_system.rs | 5 +++ 6 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 assets/shaders/particles/textured_particle.frag create mode 100644 assets/shaders/particles/textured_particle.vert diff --git a/assets/shaders/particles/solid_color.frag b/assets/shaders/particles/solid_color.frag index 2976003..7cadc63 100644 --- a/assets/shaders/particles/solid_color.frag +++ b/assets/shaders/particles/solid_color.frag @@ -2,8 +2,9 @@ out vec4 color; -in vec4 v_color; +uniform vec4 u_color; + void main() { - color = v_color; + color = u_color; } \ No newline at end of file diff --git a/assets/shaders/particles/solid_color.vert b/assets/shaders/particles/solid_color.vert index ef3cc15..82a4b6d 100644 --- a/assets/shaders/particles/solid_color.vert +++ b/assets/shaders/particles/solid_color.vert @@ -2,11 +2,13 @@ in vec3 position; -out vec4 v_color; +uniform uint type; -uniform vec4 color; void main() { - v_color = color; + // v_type = type; gl_Position = vec4(position, 1.0); + + + } \ No newline at end of file diff --git a/assets/shaders/particles/textured_particle.frag b/assets/shaders/particles/textured_particle.frag new file mode 100644 index 0000000..968b39f --- /dev/null +++ b/assets/shaders/particles/textured_particle.frag @@ -0,0 +1,10 @@ +#version 140 + +in vec2 v_tex_coords; +out vec4 color; + +uniform sampler2D tex; + +void main() { + color = texture(tex, v_tex_coords); +} \ No newline at end of file diff --git a/assets/shaders/particles/textured_particle.vert b/assets/shaders/particles/textured_particle.vert new file mode 100644 index 0000000..275eac1 --- /dev/null +++ b/assets/shaders/particles/textured_particle.vert @@ -0,0 +1,12 @@ +#version 140 + +in vec2 position; +in vec2 tex_coords; +out vec2 v_tex_coords; + +uniform mat4 matrix; + +void main() { + v_tex_coords = tex_coords; + gl_Position = matrix * vec4(position, 0.0, 1.0); +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 79eec06..b84e798 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,12 +9,8 @@ use glium::{ glutin::{self, event::KeyboardInput}, Surface, }; -use rand::Rng; -use crate::{ - config::PARTICLE_SCALE, - particle_system::{generate_particle_vertexs, Particle}, -}; +use crate::particle_system::{generate_particle_vertexs, Particle, ParticleType}; pub mod chunk; pub mod config; pub mod coordinates; @@ -51,14 +47,28 @@ pub fn bruh() { glium::Program::from_source(&display, vertex_shader_src, fragment_shader_src, None) .unwrap(); - let particles_vertex_shader_src = include_str!("../assets/shaders/particles/solid_color.vert"); - let particles_fragment_shader_src = + let solid_color_particles_vertex_shader_src = + include_str!("../assets/shaders/particles/solid_color.vert"); + let solid_color_particles_fragment_shader_src = include_str!("../assets/shaders/particles/solid_color.frag"); - let particles_program = glium::Program::from_source( + let solid_color_particles_program = glium::Program::from_source( &display, - particles_vertex_shader_src, - particles_fragment_shader_src, + solid_color_particles_vertex_shader_src, + solid_color_particles_fragment_shader_src, + None, + ) + .unwrap(); + + let textured_particles_vertex_shader_src = + include_str!("../assets/shaders/particles/textured_particle.vert"); + let textured_particles_fragment_shader_src = + include_str!("../assets/shaders/particles/textured_particle.frag"); + + let textured_particles_program = glium::Program::from_source( + &display, + textured_particles_vertex_shader_src, + textured_particles_fragment_shader_src, None, ) .unwrap(); @@ -178,14 +188,25 @@ pub fn bruh() { let indices = glium::index::NoIndices(glium::index::PrimitiveType::TrianglesList); let uniforms = uniform! { - color: particle_group_color, + u_color: particle_group_color, }; + let shader_to_use; + let ptype = ParticleType::SolidColor; + match ptype { + ParticleType::SolidColor => { + shader_to_use = &solid_color_particles_program; + } + ParticleType::Texture => { + shader_to_use = &textured_particles_program; + todo!("Texteured particles are not implemented yet"); + } + } target .draw( &vertex_buffer, &indices, - &particles_program, + &shader_to_use, &uniforms, &Default::default(), ) diff --git a/src/particle_system.rs b/src/particle_system.rs index 6585df1..ae0883a 100644 --- a/src/particle_system.rs +++ b/src/particle_system.rs @@ -2,6 +2,11 @@ use rand::Rng; use crate::{config::PARTICLE_SCALE, vertex}; +pub enum ParticleType { + SolidColor = 0, + Texture, +} + #[derive(Debug, Copy, Clone, Default)] pub struct Particle { pub position: [f32; 3],