diff options
author | oxalica <oxalicc@pm.me> | 2022-01-31 04:57:25 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-30 23:57:25 +0300 |
commit | d58dff18effc204d7fc9f05dac9d0b25be26ee1a (patch) | |
tree | 97bb02e294bbff11ddc58a47534b61ff9f7a61f2 /alacritty/src/renderer/rects.rs | |
parent | 5459492eaef9926419def7d85ad18b6c895a1568 (diff) | |
download | r-alacritty-d58dff18effc204d7fc9f05dac9d0b25be26ee1a.tar.gz r-alacritty-d58dff18effc204d7fc9f05dac9d0b25be26ee1a.tar.bz2 r-alacritty-d58dff18effc204d7fc9f05dac9d0b25be26ee1a.zip |
Clean up and abstract shader creation code
Co-authored-by: Christian Duerr <contact@christianduerr.com>
Diffstat (limited to 'alacritty/src/renderer/rects.rs')
-rw-r--r-- | alacritty/src/renderer/rects.rs | 42 |
1 files changed, 4 insertions, 38 deletions
diff --git a/alacritty/src/renderer/rects.rs b/alacritty/src/renderer/rects.rs index fafa7a78..2cf43a34 100644 --- a/alacritty/src/renderer/rects.rs +++ b/alacritty/src/renderer/rects.rs @@ -11,6 +11,7 @@ use alacritty_terminal::term::SizeInfo; use crate::display::content::RenderableCell; use crate::gl::types::*; +use crate::renderer::shader::ShaderProgram; use crate::{gl, renderer}; #[derive(Debug, Copy, Clone)] @@ -221,7 +222,7 @@ pub struct RectRenderer { vao: GLuint, vbo: GLuint, - program: RectShaderProgram, + program: ShaderProgram, vertices: Vec<Vertex>, } @@ -230,7 +231,7 @@ impl RectRenderer { pub fn new() -> Result<Self, renderer::Error> { let mut vao: GLuint = 0; let mut vbo: GLuint = 0; - let program = RectShaderProgram::new()?; + let program = ShaderProgram::new(RECT_SHADER_V, RECT_SHADER_F)?; unsafe { // Allocate buffers. @@ -283,7 +284,7 @@ impl RectRenderer { // Bind VBO only once for buffer data upload only. gl::BindBuffer(gl::ARRAY_BUFFER, self.vbo); - gl::UseProgram(self.program.id); + gl::UseProgram(self.program.id()); } let half_width = size_info.width() / 2.; @@ -352,38 +353,3 @@ impl Drop for RectRenderer { } } } - -/// Rectangle drawing program. -#[derive(Debug)] -pub struct RectShaderProgram { - /// Program id. - id: GLuint, -} - -impl RectShaderProgram { - pub fn new() -> Result<Self, renderer::ShaderCreationError> { - let vertex_shader = renderer::create_shader(gl::VERTEX_SHADER, RECT_SHADER_V)?; - let fragment_shader = renderer::create_shader(gl::FRAGMENT_SHADER, RECT_SHADER_F)?; - let program = renderer::create_program(vertex_shader, fragment_shader)?; - - unsafe { - gl::DeleteShader(fragment_shader); - gl::DeleteShader(vertex_shader); - gl::UseProgram(program); - } - - let shader = Self { id: program }; - - unsafe { gl::UseProgram(0) } - - Ok(shader) - } -} - -impl Drop for RectShaderProgram { - fn drop(&mut self) { - unsafe { - gl::DeleteProgram(self.id); - } - } -} |