1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 14:20:04 -04:00

Fix wrong gamma in WebkitGTK (#888)

Closes https://github.com/emilk/egui/issues/794

Also refactor and improve VAO support detection

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
triangle drawer
2021-11-13 11:32:01 +00:00
committed by GitHub
parent 4d4c75c6f1
commit 008a971e73
11 changed files with 115 additions and 22 deletions

View File

@@ -1,8 +1,11 @@
use crate::web_sys::{WebGl2RenderingContext, WebGlRenderingContext};
#[cfg(not(target_arch = "wasm32"))]
use crate::web_sys::WebGl2RenderingContext;
use crate::web_sys::WebGlRenderingContext;
use crate::{canvas_element_or_die, console_error};
use egui::{ClippedMesh, Rgba, Texture};
use egui_glow::glow;
use epi::TextureAllocator;
use wasm_bindgen::JsCast;
use wasm_bindgen::JsValue;
use web_sys::HtmlCanvasElement;
@@ -16,9 +19,29 @@ pub(crate) struct WrappedGlowPainter {
impl WrappedGlowPainter {
pub fn new(canvas_id: &str) -> Self {
let canvas = canvas_element_or_die(canvas_id);
// detect WebKitGTK
//WebKitGTK currently support only webgl,so request webgl context.
// WebKitGTK use WebKit default unmasked vendor and renderer
// but safari use same vendor and renderer
// so exclude "Mac OS X" user-agent.
let gl = canvas
.get_context("webgl")
.unwrap()
.unwrap()
.dyn_into::<WebGlRenderingContext>()
.unwrap();
let user_agent = web_sys::window().unwrap().navigator().user_agent().unwrap();
let webkit_gtk_wr = if !user_agent.contains("Mac OS X")
&& crate::webgl1::detect_safari_and_webkit_gtk(&gl)
{
"#define WEBKITGTK_WORKAROUND"
} else {
""
};
let gl_ctx = init_glow_context_from_canvas(&canvas);
let dimension = [canvas.width() as i32, canvas.height() as i32];
let painter = egui_glow::Painter::new(&gl_ctx, Some(dimension))
let painter = egui_glow::Painter::new(&gl_ctx, Some(dimension), webkit_gtk_wr)
.map_err(|error| {
console_error(format!(
"some error occurred in initializing glow painter\n {}",
@@ -82,7 +105,6 @@ impl crate::Painter for WrappedGlowPainter {
}
pub fn init_glow_context_from_canvas(canvas: &HtmlCanvasElement) -> glow::Context {
use wasm_bindgen::JsCast;
let ctx = canvas.get_context("webgl2");
if let Ok(ctx) = ctx {
crate::console_log("webgl found");