mirror of
https://github.com/emilk/egui.git
synced 2026-09-03 23:30:04 -04:00
Add custom shader_version on glow renderer (#1993)
Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -4,7 +4,7 @@ All notable changes to the `egui_glow` integration will be noted in this file.
|
||||
|
||||
## Unreleased
|
||||
* Allow empty textures.
|
||||
|
||||
* Added `shader_version` variable on `EguiGlow::new` for easier cross compilling on different OpenGL | ES targets ([#1993](https://github.com/emilk/egui/pull/1993)).
|
||||
|
||||
## 0.19.0 - 2022-08-20
|
||||
* MSRV (Minimum Supported Rust Version) is now `1.61.0` ([#1846](https://github.com/emilk/egui/pull/1846)).
|
||||
|
||||
@@ -10,7 +10,7 @@ fn main() {
|
||||
let (gl_window, gl) = create_display(&event_loop);
|
||||
let gl = std::sync::Arc::new(gl);
|
||||
|
||||
let mut egui_glow = egui_glow::EguiGlow::new(&event_loop, gl.clone());
|
||||
let mut egui_glow = egui_glow::EguiGlow::new(&event_loop, gl.clone(), None);
|
||||
|
||||
event_loop.run(move |event, _, control_flow| {
|
||||
let mut redraw = || {
|
||||
|
||||
@@ -106,20 +106,20 @@ impl Painter {
|
||||
gl: Arc<glow::Context>,
|
||||
pp_fb_extent: Option<[i32; 2]>,
|
||||
shader_prefix: &str,
|
||||
shader_version: Option<ShaderVersion>,
|
||||
) -> Result<Painter, String> {
|
||||
crate::profile_function!();
|
||||
crate::check_for_gl_error_even_in_release!(&gl, "before Painter::new");
|
||||
|
||||
let max_texture_side = unsafe { gl.get_parameter_i32(glow::MAX_TEXTURE_SIZE) } as usize;
|
||||
|
||||
let shader_version = ShaderVersion::get(&gl);
|
||||
let is_webgl_1 = shader_version == ShaderVersion::Es100;
|
||||
let header = shader_version.version_declaration();
|
||||
let shader = shader_version.unwrap_or_else(|| ShaderVersion::get(&gl));
|
||||
let is_webgl_1 = shader == ShaderVersion::Es100;
|
||||
let header = shader.version_declaration();
|
||||
tracing::debug!("Shader header: {:?}.", header);
|
||||
let srgb_support = gl.supported_extensions().contains("EXT_sRGB");
|
||||
tracing::debug!("SRGB Support: {:?}.", srgb_support);
|
||||
|
||||
let (post_process, srgb_support_define) = match (shader_version, srgb_support) {
|
||||
let (post_process, srgb_support_define) = match (shader, srgb_support) {
|
||||
// WebGL2 support sRGB default
|
||||
(ShaderVersion::Es300, _) | (ShaderVersion::Es100, true) => unsafe {
|
||||
// Add sRGB support marker for fragment shader
|
||||
@@ -156,7 +156,7 @@ impl Painter {
|
||||
"{}\n{}\n{}\n{}",
|
||||
header,
|
||||
shader_prefix,
|
||||
if shader_version.is_new_shader_interface() {
|
||||
if shader.is_new_shader_interface() {
|
||||
"#define NEW_SHADER_INTERFACE\n"
|
||||
} else {
|
||||
""
|
||||
@@ -172,7 +172,7 @@ impl Painter {
|
||||
header,
|
||||
shader_prefix,
|
||||
srgb_support_define,
|
||||
if shader_version.is_new_shader_interface() {
|
||||
if shader.is_new_shader_interface() {
|
||||
"#define NEW_SHADER_INTERFACE\n"
|
||||
} else {
|
||||
""
|
||||
@@ -234,7 +234,7 @@ impl Painter {
|
||||
u_screen_size,
|
||||
u_sampler,
|
||||
is_webgl_1,
|
||||
is_embedded: matches!(shader_version, ShaderVersion::Es100 | ShaderVersion::Es300),
|
||||
is_embedded: matches!(shader, ShaderVersion::Es100 | ShaderVersion::Es300),
|
||||
vao,
|
||||
srgb_support,
|
||||
post_process,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::shader_version::ShaderVersion;
|
||||
pub use egui_winit;
|
||||
pub use egui_winit::EventResponse;
|
||||
|
||||
use egui_winit::winit;
|
||||
pub use egui_winit::EventResponse;
|
||||
|
||||
/// Use [`egui`] from a [`glow`] app based on [`winit`].
|
||||
pub struct EguiGlow {
|
||||
@@ -14,11 +14,13 @@ pub struct EguiGlow {
|
||||
}
|
||||
|
||||
impl EguiGlow {
|
||||
/// For automatic shader version detection set `shader_version` to `None`.
|
||||
pub fn new<E>(
|
||||
event_loop: &winit::event_loop::EventLoopWindowTarget<E>,
|
||||
gl: std::sync::Arc<glow::Context>,
|
||||
shader_version: Option<ShaderVersion>,
|
||||
) -> Self {
|
||||
let painter = crate::Painter::new(gl, None, "")
|
||||
let painter = crate::Painter::new(gl, None, "", shader_version)
|
||||
.map_err(|error| {
|
||||
tracing::error!("error occurred in initializing painter:\n{}", error);
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user