aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/renderer/rects.rs
diff options
context:
space:
mode:
authoroxalica <oxalicc@pm.me>2022-01-31 04:57:25 +0800
committerGitHub <noreply@github.com>2022-01-30 23:57:25 +0300
commitd58dff18effc204d7fc9f05dac9d0b25be26ee1a (patch)
tree97bb02e294bbff11ddc58a47534b61ff9f7a61f2 /alacritty/src/renderer/rects.rs
parent5459492eaef9926419def7d85ad18b6c895a1568 (diff)
downloadr-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.rs42
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);
- }
- }
-}