diff options
author | Kirill Chibisov <contact@kchibisov.com> | 2022-03-02 13:05:12 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-02 10:05:12 +0000 |
commit | 1880522b64d9a5276acea428705c011cbbf8c04c (patch) | |
tree | 2f8a662ee0b65fcf6d6fe831949cd2cf78cabdad /alacritty/src/renderer/rects.rs | |
parent | 00383ae967fef6216396c3acaf96a7002b013298 (diff) | |
download | r-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.rs | 10 |
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"))?, |