aboutsummaryrefslogtreecommitdiff
path: root/alacritty/src/renderer/rects.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2022-03-02 13:05:12 +0300
committerGitHub <noreply@github.com>2022-03-02 10:05:12 +0000
commit1880522b64d9a5276acea428705c011cbbf8c04c (patch)
tree2f8a662ee0b65fcf6d6fe831949cd2cf78cabdad /alacritty/src/renderer/rects.rs
parent00383ae967fef6216396c3acaf96a7002b013298 (diff)
downloadr-alacritty-1880522b64d9a5276acea428705c011cbbf8c04c.tar.gz
r-alacritty-1880522b64d9a5276acea428705c011cbbf8c04c.tar.bz2
r-alacritty-1880522b64d9a5276acea428705c011cbbf8c04c.zip
Add fallback GLES2 renderer
Currently Alacritty only works on hardware which supports OpenGL 3.3 or more, which can become problematic with older devices. This patch adds a new GLES2 renderer, since it is much more widely supported, especially on weaker hardware like phones or a Raspberry Pi. While the GLES2 renderer is slower than the OpenGL 3.3+ version, it is still significantly faster than software rendering. However because of this performance difference it is only used when necessary and there should be no difference for machines supporting OpenGL 3.3+. The two renderers are largely independent and separated in the `renderer/text/glsl3` and `renderer/text/gles2` modules. Separate shaders are also required for text rendering. The rectangle rendering for underlines and the visual bell works identically for both versions, but does have some version-specific shader code. Fixes #128. Co-authored-by: Christian Duerr <contact@christianduerr.com>
Diffstat (limited to 'alacritty/src/renderer/rects.rs')
-rw-r--r--alacritty/src/renderer/rects.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/alacritty/src/renderer/rects.rs b/alacritty/src/renderer/rects.rs
index 3c74b10b..8c600b6b 100644
--- a/alacritty/src/renderer/rects.rs
+++ b/alacritty/src/renderer/rects.rs
@@ -12,7 +12,7 @@ use alacritty_terminal::term::SizeInfo;
use crate::display::content::RenderableCell;
use crate::gl;
use crate::gl::types::*;
-use crate::renderer::shader::{ShaderError, ShaderProgram};
+use crate::renderer::shader::{ShaderError, ShaderProgram, ShaderVersion};
use crate::renderer::{self, cstr};
#[derive(Debug, Copy, Clone)]
@@ -252,10 +252,10 @@ pub struct RectRenderer {
}
impl RectRenderer {
- pub fn new() -> Result<Self, renderer::Error> {
+ pub fn new(shader_version: ShaderVersion) -> Result<Self, renderer::Error> {
let mut vao: GLuint = 0;
let mut vbo: GLuint = 0;
- let program = RectShaderProgram::new()?;
+ let program = RectShaderProgram::new(shader_version)?;
unsafe {
// Allocate buffers.
@@ -422,8 +422,8 @@ pub struct RectShaderProgram {
}
impl RectShaderProgram {
- pub fn new() -> Result<Self, ShaderError> {
- let program = ShaderProgram::new(RECT_SHADER_V, RECT_SHADER_F)?;
+ pub fn new(shader_version: ShaderVersion) -> Result<Self, ShaderError> {
+ let program = ShaderProgram::new(shader_version, RECT_SHADER_V, RECT_SHADER_F)?;
Ok(Self {
u_rect_kind: program.get_uniform_location(cstr!("rectKind"))?,