diff options
author | 2021-11-11 01:10:47 -0300 | |
---|---|---|
committer | 2022-01-19 17:40:17 -0300 | |
commit | e31566d430093fb084da2e7f4f4ed1b66326edef (patch) | |
tree | 328c599dd2d62a32e17e95e792c74054d822537e /glow/src/backend.rs | |
parent | afdf3e799a7610444208c9568a7cf7531d0c2ef3 (diff) | |
download | iced-e31566d430093fb084da2e7f4f4ed1b66326edef.tar.gz iced-e31566d430093fb084da2e7f4f4ed1b66326edef.tar.bz2 iced-e31566d430093fb084da2e7f4f4ed1b66326edef.zip |
Improve shader version selection
Diffstat (limited to 'glow/src/backend.rs')
-rw-r--r-- | glow/src/backend.rs | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/glow/src/backend.rs b/glow/src/backend.rs index 5ab7f922..69d04168 100644 --- a/glow/src/backend.rs +++ b/glow/src/backend.rs @@ -3,6 +3,7 @@ use crate::text; use crate::triangle; use crate::{Settings, Transformation, Viewport}; +use glow::HasContext; use iced_graphics::backend; use iced_graphics::font; use iced_graphics::{Layer, Primitive}; @@ -30,8 +31,60 @@ impl Backend { settings.text_multithreading, ); - let quad_pipeline = quad::Pipeline::new(gl); - let triangle_pipeline = triangle::Pipeline::new(gl); + let version = gl.version(); + let shader_version = match ( + version.major, + version.minor, + version.is_embedded, + ) { + // OpenGL 3.0+ + (3, 0 | 1 | 2, false) => ( + format!("#version 1{}0", version.minor + 3), + format!( + "#version 1{}0\n#define HIGHER_THAN_300 1", + version.minor + 3 + ), + ), + // OpenGL 3.3+ + (3 | 4, _, false) => ( + format!("#version {}{}0", version.major, version.minor), + format!( + "#version {}{}0\n#define HIGHER_THAN_300 1", + version.major, version.minor + ), + ), + // OpenGL ES 3.0+ + (3, _, true) => ( + format!("#version 3{}0 es", version.minor), + format!( + "#version 3{}0 es\n#define HIGHER_THAN_300 1", + version.minor + ), + ), + // OpenGL ES 2.0+ + (2, _, true) => ( + String::from( + "#version 100\n#define in attribute\n#define out varying", + ), + String::from("#version 100\n#define in varying"), + ), + // OpenGL 2.1 + (2, _, false) => ( + String::from( + "#version 120\n#define in attribute\n#define out varying", + ), + String::from("#version 120\n#define in varying"), + ), + // OpenGL 1.1+ + _ => panic!("Incompatible context version: {:?}", version), + }; + log::info!( + "Shader directive: {}", + shader_version.0.lines().next().unwrap() + ); + + let quad_pipeline = quad::Pipeline::new(gl, &shader_version); + let triangle_pipeline = triangle::Pipeline::new(gl, &shader_version); Self { quad_pipeline, |