From 44d93d3701f53d5521cb0c02df020a14f2e47366 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 23 Apr 2020 22:07:08 +0200 Subject: [PATCH] Fix iOS rendering (hopefully) by avoiding infinities --- emigui_wasm/src/webgl.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/emigui_wasm/src/webgl.rs b/emigui_wasm/src/webgl.rs index 2b92b89f..6a74beb2 100644 --- a/emigui_wasm/src/webgl.rs +++ b/emigui_wasm/src/webgl.rs @@ -4,7 +4,7 @@ use { web_sys::{WebGlBuffer, WebGlProgram, WebGlRenderingContext, WebGlShader, WebGlTexture}, }; -use emigui::{Color, Mesh, PaintBatches, Texture}; +use emigui::{vec2, Color, Mesh, PaintBatches, Pos2, Texture}; type Gl = WebGlRenderingContext; @@ -178,10 +178,12 @@ impl Painter { let u_screen_size_loc = gl .get_uniform_location(&self.program, "u_screen_size") .unwrap(); + let screen_size_pixels = vec2(self.canvas.width() as f32, self.canvas.height() as f32); + let screen_size_points = screen_size_pixels / pixels_per_point; gl.uniform2f( Some(&u_screen_size_loc), - self.canvas.width() as f32 / pixels_per_point, - self.canvas.height() as f32 / pixels_per_point, + screen_size_points.x, + screen_size_points.y, ); let u_tex_size_loc = gl @@ -211,12 +213,16 @@ impl Painter { gl.clear(Gl::COLOR_BUFFER_BIT); for (clip_rect, mesh) in batches { + // Avoid infinities in shader: + let clip_min = clip_rect.min().max(Pos2::default()); + let clip_max = clip_rect.max().min(Pos2::default() + screen_size_points); + gl.uniform4f( Some(&u_clip_rect_loc), - clip_rect.min().x, - clip_rect.min().y, - clip_rect.max().x, - clip_rect.max().y, + clip_min.x, + clip_min.y, + clip_max.x, + clip_max.y, ); for mesh in mesh.split_to_u16() {