diff options
Diffstat (limited to 'alacritty/src/renderer')
-rw-r--r-- | alacritty/src/renderer/mod.rs | 18 | ||||
-rw-r--r-- | alacritty/src/renderer/text/gles2.rs | 7 |
2 files changed, 19 insertions, 6 deletions
diff --git a/alacritty/src/renderer/mod.rs b/alacritty/src/renderer/mod.rs index d8c6fb6d..fc6c357f 100644 --- a/alacritty/src/renderer/mod.rs +++ b/alacritty/src/renderer/mod.rs @@ -13,6 +13,7 @@ use alacritty_terminal::index::Point; use alacritty_terminal::term::cell::Flags; use alacritty_terminal::term::color::Rgb; +use crate::config::debug::RendererPreference; use crate::display::content::RenderableCell; use crate::display::SizeInfo; use crate::gl; @@ -87,7 +88,10 @@ impl Renderer { /// /// This will automatically pick between the GLES2 and GLSL3 renderer based on the GPU's /// supported OpenGL version. - pub fn new(context: &PossiblyCurrentContext) -> Result<Self, Error> { + pub fn new( + context: &PossiblyCurrentContext, + renderer_prefernce: Option<RendererPreference>, + ) -> Result<Self, Error> { // We need to load OpenGL functions once per instance, but only after we make our context // current due to WGL limitations. if !GL_FUNS_LOADED.swap(true, Ordering::Relaxed) { @@ -106,12 +110,20 @@ impl Renderer { info!("Running on {}", renderer); - let (text_renderer, rect_renderer) = if version.as_ref() >= "3.3" { + // Use the config option to enforce a particular renderer configuration. + let (use_glsl3, allow_dsb) = match renderer_prefernce { + Some(RendererPreference::Glsl3) => (true, true), + Some(RendererPreference::Gles2) => (false, true), + Some(RendererPreference::Gles2Pure) => (false, false), + None => (version.as_ref() >= "3.3", true), + }; + + let (text_renderer, rect_renderer) = if use_glsl3 { let text_renderer = TextRendererProvider::Glsl3(Glsl3Renderer::new()?); let rect_renderer = RectRenderer::new(ShaderVersion::Glsl3)?; (text_renderer, rect_renderer) } else { - let text_renderer = TextRendererProvider::Gles2(Gles2Renderer::new()?); + let text_renderer = TextRendererProvider::Gles2(Gles2Renderer::new(allow_dsb)?); let rect_renderer = RectRenderer::new(ShaderVersion::Gles2)?; (text_renderer, rect_renderer) }; diff --git a/alacritty/src/renderer/text/gles2.rs b/alacritty/src/renderer/text/gles2.rs index 29a80e98..2f537e5c 100644 --- a/alacritty/src/renderer/text/gles2.rs +++ b/alacritty/src/renderer/text/gles2.rs @@ -37,11 +37,12 @@ pub struct Gles2Renderer { } impl Gles2Renderer { - pub fn new() -> Result<Self, Error> { + pub fn new(allow_dsb: bool) -> Result<Self, Error> { info!("Using OpenGL ES 2.0 renderer"); - let dual_source_blending = GlExtensions::contains("GL_EXT_blend_func_extended") - || GlExtensions::contains("GL_ARB_blend_func_extended"); + let dual_source_blending = allow_dsb + && (GlExtensions::contains("GL_EXT_blend_func_extended") + || GlExtensions::contains("GL_ARB_blend_func_extended")); if dual_source_blending { info!("Using dual source blending"); |