From 92777c634676ed0f3d51f9e221c1a81fedfbdd76 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 26 Feb 2019 13:48:35 -0800 Subject: [PATCH] Make rects rounded and optimize PNGs --- demo/common/src/lib.rs | 5 +- demo/common/src/ui.rs | 41 ++-- gl/src/debug.rs | 196 ++++++++++++++++++-- resources/textures/area-lut.png | Bin 7096 -> 5612 bytes resources/textures/debug-corner-fill.png | Bin 0 -> 263 bytes resources/textures/debug-corner-outline.png | Bin 0 -> 397 bytes resources/textures/debug-font.png | Bin 21373 -> 11814 bytes resources/textures/demo-bg-dark.png | Bin 1356 -> 780 bytes resources/textures/demo-bg-light.png | Bin 926 -> 448 bytes resources/textures/demo-effects.png | Bin 792 -> 420 bytes resources/textures/demo-open.png | Bin 546 -> 218 bytes resources/textures/demo-rotate.png | Bin 973 -> 528 bytes resources/textures/demo-screenshot.png | Bin 885 -> 414 bytes resources/textures/demo-zoom-in.png | Bin 879 -> 434 bytes resources/textures/demo-zoom-out.png | Bin 868 -> 429 bytes resources/textures/gamma-lut.png | Bin 388 -> 338 bytes 16 files changed, 202 insertions(+), 40 deletions(-) create mode 100644 resources/textures/debug-corner-fill.png create mode 100644 resources/textures/debug-corner-outline.png diff --git a/demo/common/src/lib.rs b/demo/common/src/lib.rs index b5266376..a5c62b55 100644 --- a/demo/common/src/lib.rs +++ b/demo/common/src/lib.rs @@ -685,10 +685,7 @@ impl Options { } fn load_scene(input_path: &Path) -> Scene { - let usvg = Tree::from_file(input_path, &UsvgOptions::default()).unwrap(); - let scene = Scene::from_tree(usvg); - println!("{} objects, {} paints", scene.objects.len(), scene.paints.len()); - scene + Scene::from_tree(Tree::from_file(input_path, &UsvgOptions::default()).unwrap()) } fn build_scene(scene: &Scene, build_options: BuildOptions, jobs: Option) -> BuiltScene { diff --git a/demo/common/src/ui.rs b/demo/common/src/ui.rs index bcfd5776..029e559d 100644 --- a/demo/common/src/ui.rs +++ b/demo/common/src/ui.rs @@ -12,12 +12,17 @@ use crate::Options; use nfd::Response; use pathfinder_geometry::basic::point::Point2DI32; use pathfinder_geometry::basic::rect::RectI32; -use pathfinder_gl::debug::{BUTTON_HEIGHT, BUTTON_TEXT_OFFSET, BUTTON_WIDTH, DebugUI, PADDING}; -use pathfinder_gl::debug::{TEXT_COLOR, WINDOW_COLOR}; +use pathfinder_gl::debug::{DebugUI, PADDING, TEXT_COLOR, WINDOW_COLOR}; use pathfinder_gl::device::{Device, Texture}; use std::f32::consts::PI; use std::path::PathBuf; +const ICON_SIZE: i32 = 48; + +const BUTTON_WIDTH: i32 = PADDING * 2 + ICON_SIZE; +const BUTTON_HEIGHT: i32 = PADDING * 2 + ICON_SIZE; +const BUTTON_TEXT_OFFSET: i32 = PADDING + 36; + const SWITCH_SIZE: i32 = SWITCH_HALF_SIZE * 2 + 1; const SWITCH_HALF_SIZE: i32 = 96; @@ -189,10 +194,10 @@ impl DemoUI { let bottom = debug_ui.framebuffer_size().y() - PADDING; let effects_panel_y = bottom - (BUTTON_HEIGHT + PADDING + EFFECTS_PANEL_HEIGHT); - debug_ui.draw_solid_rect(RectI32::new(Point2DI32::new(PADDING, effects_panel_y), - Point2DI32::new(EFFECTS_PANEL_WIDTH, - EFFECTS_PANEL_HEIGHT)), - WINDOW_COLOR); + debug_ui.draw_solid_rounded_rect(RectI32::new(Point2DI32::new(PADDING, effects_panel_y), + Point2DI32::new(EFFECTS_PANEL_WIDTH, + EFFECTS_PANEL_HEIGHT)), + WINDOW_COLOR); self.gamma_correction_effect_enabled = self.draw_effects_switch(debug_ui, @@ -228,10 +233,10 @@ impl DemoUI { let bottom = debug_ui.framebuffer_size().y() - PADDING; let rotate_panel_y = bottom - (BUTTON_HEIGHT + PADDING + ROTATE_PANEL_HEIGHT); - debug_ui.draw_solid_rect(RectI32::new(Point2DI32::new(ROTATE_PANEL_X, rotate_panel_y), - Point2DI32::new(ROTATE_PANEL_WIDTH, - ROTATE_PANEL_HEIGHT)), - WINDOW_COLOR); + let rotate_panel_origin = Point2DI32::new(ROTATE_PANEL_X, rotate_panel_y); + let rotate_panel_size = Point2DI32::new(ROTATE_PANEL_WIDTH, ROTATE_PANEL_HEIGHT); + debug_ui.draw_solid_rounded_rect(RectI32::new(rotate_panel_origin, rotate_panel_size), + WINDOW_COLOR); let (widget_x, widget_y) = (ROTATE_PANEL_X + PADDING, rotate_panel_y + PADDING); let widget_rect = RectI32::new(Point2DI32::new(widget_x, widget_y), @@ -262,8 +267,8 @@ impl DemoUI { texture: &Texture) -> bool { let button_rect = RectI32::new(origin, Point2DI32::new(BUTTON_WIDTH, BUTTON_HEIGHT)); - debug_ui.draw_solid_rect(button_rect, WINDOW_COLOR); - debug_ui.draw_rect_outline(button_rect, TEXT_COLOR); + debug_ui.draw_solid_rounded_rect(button_rect, WINDOW_COLOR); + debug_ui.draw_rounded_rect_outline(button_rect, TEXT_COLOR); debug_ui.draw_texture(origin + Point2DI32::new(PADDING, PADDING), texture, TEXT_COLOR); event.handle_mouse_down_in_rect(button_rect).is_some() } @@ -349,17 +354,17 @@ impl DemoUI { value = !value; } - debug_ui.draw_solid_rect(widget_rect, WINDOW_COLOR); - debug_ui.draw_rect_outline(widget_rect, TEXT_COLOR); + debug_ui.draw_solid_rounded_rect(widget_rect, WINDOW_COLOR); + debug_ui.draw_rounded_rect_outline(widget_rect, TEXT_COLOR); let highlight_size = Point2DI32::new(SWITCH_HALF_SIZE, BUTTON_HEIGHT); if !value { - debug_ui.draw_solid_rect(RectI32::new(origin, highlight_size), TEXT_COLOR); + debug_ui.draw_solid_rounded_rect(RectI32::new(origin, highlight_size), TEXT_COLOR); } else { let x_offset = SWITCH_HALF_SIZE + 1; - debug_ui.draw_solid_rect(RectI32::new(origin + Point2DI32::new(x_offset, 0), - highlight_size), - TEXT_COLOR); + debug_ui.draw_solid_rounded_rect(RectI32::new(origin + Point2DI32::new(x_offset, 0), + highlight_size), + TEXT_COLOR); } value diff --git a/gl/src/debug.rs b/gl/src/debug.rs index 909df35c..dabf285b 100644 --- a/gl/src/debug.rs +++ b/gl/src/debug.rs @@ -37,9 +37,6 @@ const DEBUG_TEXTURE_VERTEX_SIZE: GLint = 8; const DEBUG_SOLID_VERTEX_SIZE: GLint = 4; pub const PADDING: i32 = 12; -pub const BUTTON_WIDTH: i32 = PADDING * 2 + ICON_SIZE; -pub const BUTTON_HEIGHT: i32 = PADDING * 2 + ICON_SIZE; -pub const BUTTON_TEXT_OFFSET: i32 = PADDING + 36; pub static TEXT_COLOR: ColorU = ColorU { r: 255, g: 255, b: 255, a: 255 }; pub static WINDOW_COLOR: ColorU = ColorU { r: 0, g: 0, b: 0, a: 255 - 90 }; @@ -48,14 +45,18 @@ const PERF_WINDOW_WIDTH: i32 = 375; const PERF_WINDOW_HEIGHT: i32 = LINE_HEIGHT * 6 + PADDING + 2; const FONT_ASCENT: i32 = 28; const LINE_HEIGHT: i32 = 42; -const ICON_SIZE: i32 = 48; static INVERTED_TEXT_COLOR: ColorU = ColorU { r: 0, g: 0, b: 0, a: 255 }; static FONT_JSON_FILENAME: &'static str = "debug-font.json"; static FONT_PNG_NAME: &'static str = "debug-font"; -static QUAD_INDICES: [u32; 6] = [0, 1, 3, 1, 2, 3]; +static CORNER_FILL_PNG_NAME: &'static str = "debug-corner-fill"; +static CORNER_OUTLINE_PNG_NAME: &'static str = "debug-corner-outline"; + +static QUAD_INDICES: [u32; 6] = [0, 1, 3, 1, 2, 3]; +static RECT_LINE_INDICES: [u32; 8] = [0, 1, 1, 2, 2, 3, 3, 0]; +static OUTLINE_RECT_LINE_INDICES: [u32; 8] = [0, 1, 2, 3, 4, 5, 6, 7]; #[derive(Deserialize)] #[allow(dead_code)] @@ -99,7 +100,10 @@ pub struct DebugUI { font: DebugFont, solid_program: DebugSolidProgram, solid_vertex_array: DebugSolidVertexArray, + font_texture: Texture, + corner_fill_texture: Texture, + corner_outline_texture: Texture, cpu_samples: SampleBuffer, gpu_samples: SampleBuffer, @@ -113,20 +117,24 @@ impl DebugUI { let solid_program = DebugSolidProgram::new(device); let solid_vertex_array = DebugSolidVertexArray::new(&solid_program); - solid_vertex_array.index_buffer.upload(&QUAD_INDICES, - BufferTarget::Index, - BufferUploadMode::Static); let font_texture = device.create_texture_from_png(FONT_PNG_NAME); + let corner_fill_texture = device.create_texture_from_png(CORNER_FILL_PNG_NAME); + let corner_outline_texture = device.create_texture_from_png(CORNER_OUTLINE_PNG_NAME); DebugUI { framebuffer_size, + texture_program, texture_vertex_array, font, solid_program, solid_vertex_array, + font_texture, + corner_fill_texture, + corner_outline_texture, + cpu_samples: SampleBuffer::new(), gpu_samples: SampleBuffer::new(), } @@ -157,7 +165,7 @@ impl DebugUI { Point2DI32::new(self.framebuffer_size.x() - PADDING - PERF_WINDOW_WIDTH, bottom - PERF_WINDOW_HEIGHT), Point2DI32::new(PERF_WINDOW_WIDTH, PERF_WINDOW_HEIGHT)); - self.draw_solid_rect(window_rect, WINDOW_COLOR); + self.draw_solid_rounded_rect(window_rect, WINDOW_COLOR); let origin = window_rect.origin() + Point2DI32::new(PADDING, PADDING + FONT_ASCENT); let mean_cpu_sample = self.cpu_samples.mean(); @@ -171,6 +179,7 @@ impl DebugUI { self.draw_text(&format!("Fills: {}", mean_cpu_sample.stats.fill_count), origin + Point2DI32::new(0, LINE_HEIGHT * 3), false); + self.draw_text(&format!("CPU Time: {:.3} ms", duration_to_ms(mean_cpu_sample.elapsed)), origin + Point2DI32::new(0, LINE_HEIGHT * 4), false); @@ -196,12 +205,31 @@ impl DebugUI { DebugSolidVertex::new(rect.lower_right()), DebugSolidVertex::new(rect.lower_left()), ]; - self.solid_vertex_array - .vertex_buffer - .upload(&vertex_data, BufferTarget::Vertex, BufferUploadMode::Dynamic); + if filled { + self.draw_solid_rects_with_vertex_data(&vertex_data, &QUAD_INDICES, color, true); + } else { + self.draw_solid_rects_with_vertex_data(&vertex_data, &RECT_LINE_INDICES, color, false); + } + } + + fn draw_solid_rects_with_vertex_data(&self, + vertex_data: &[DebugSolidVertex], + index_data: &[u32], + color: ColorU, + filled: bool) { unsafe { gl::BindVertexArray(self.solid_vertex_array.gl_vertex_array); + } + + self.solid_vertex_array + .vertex_buffer + .upload(vertex_data, BufferTarget::Vertex, BufferUploadMode::Dynamic); + self.solid_vertex_array + .index_buffer + .upload(index_data, BufferTarget::Index, BufferUploadMode::Dynamic); + + unsafe { gl::UseProgram(self.solid_program.program.gl_program); gl::Uniform2f(self.solid_program.framebuffer_size_uniform.location, self.framebuffer_size.x() as GLfloat, @@ -210,11 +238,8 @@ impl DebugUI { gl::BlendEquation(gl::FUNC_ADD); gl::BlendFunc(gl::ONE, gl::ONE_MINUS_SRC_ALPHA); gl::Enable(gl::BLEND); - if filled { - gl::DrawElements(gl::TRIANGLES, 6, gl::UNSIGNED_INT, ptr::null()); - } else { - gl::DrawArrays(gl::LINE_LOOP, 0, 4); - } + let primitive = if filled { gl::TRIANGLES } else { gl::LINES }; + gl::DrawElements(primitive, index_data.len() as GLint, gl::UNSIGNED_INT, ptr::null()); gl::Disable(gl::BLEND); } } @@ -278,6 +303,120 @@ impl DebugUI { next } + pub fn draw_solid_rounded_rect(&self, rect: RectI32, color: ColorU) { + let corner_texture = self.corner_texture(true); + let corner_rects = CornerRects::new(rect, corner_texture); + self.draw_rounded_rect_corners(color, corner_texture, &corner_rects); + + let solid_rect_mid = RectI32::from_points(corner_rects.upper_left.upper_right(), + corner_rects.lower_right.lower_left()); + let solid_rect_left = RectI32::from_points(corner_rects.upper_left.lower_left(), + corner_rects.lower_left.upper_right()); + let solid_rect_right = RectI32::from_points(corner_rects.upper_right.lower_left(), + corner_rects.lower_right.upper_right()); + let vertex_data = vec![ + DebugSolidVertex::new(solid_rect_mid.origin()), + DebugSolidVertex::new(solid_rect_mid.upper_right()), + DebugSolidVertex::new(solid_rect_mid.lower_right()), + DebugSolidVertex::new(solid_rect_mid.lower_left()), + + DebugSolidVertex::new(solid_rect_left.origin()), + DebugSolidVertex::new(solid_rect_left.upper_right()), + DebugSolidVertex::new(solid_rect_left.lower_right()), + DebugSolidVertex::new(solid_rect_left.lower_left()), + + DebugSolidVertex::new(solid_rect_right.origin()), + DebugSolidVertex::new(solid_rect_right.upper_right()), + DebugSolidVertex::new(solid_rect_right.lower_right()), + DebugSolidVertex::new(solid_rect_right.lower_left()), + ]; + + let mut index_data = Vec::with_capacity(18); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 0)); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 4)); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 8)); + + self.draw_solid_rects_with_vertex_data(&vertex_data, &index_data[0..18], color, true); + } + + pub fn draw_rounded_rect_outline(&self, rect: RectI32, color: ColorU) { + let corner_texture = self.corner_texture(false); + let corner_rects = CornerRects::new(rect, corner_texture); + self.draw_rounded_rect_corners(color, corner_texture, &corner_rects); + + let vertex_data = vec![ + DebugSolidVertex::new(corner_rects.upper_left.upper_right()), + DebugSolidVertex::new(corner_rects.upper_right.origin()), + DebugSolidVertex::new(corner_rects.upper_right.lower_right()), + DebugSolidVertex::new(corner_rects.lower_right.upper_right()), + DebugSolidVertex::new(corner_rects.lower_left.lower_right()), + DebugSolidVertex::new(corner_rects.lower_right.lower_left()), + DebugSolidVertex::new(corner_rects.upper_left.lower_left()), + DebugSolidVertex::new(corner_rects.lower_left.origin()), + ]; + + let index_data = &OUTLINE_RECT_LINE_INDICES; + self.draw_solid_rects_with_vertex_data(&vertex_data, index_data, color, false); + } + + fn draw_rounded_rect_corners(&self, + color: ColorU, + texture: &Texture, + corner_rects: &CornerRects) { + let corner_size = texture.size; + let tex_coord_rect = RectI32::new(Point2DI32::default(), corner_size); + + let vertex_data = vec![ + DebugTextureVertex::new( + corner_rects.upper_left.origin(), tex_coord_rect.origin()), + DebugTextureVertex::new( + corner_rects.upper_left.upper_right(), tex_coord_rect.upper_right()), + DebugTextureVertex::new( + corner_rects.upper_left.lower_right(), tex_coord_rect.lower_right()), + DebugTextureVertex::new( + corner_rects.upper_left.lower_left(), tex_coord_rect.lower_left()), + + DebugTextureVertex::new( + corner_rects.upper_right.origin(), tex_coord_rect.lower_left()), + DebugTextureVertex::new( + corner_rects.upper_right.upper_right(), tex_coord_rect.origin()), + DebugTextureVertex::new( + corner_rects.upper_right.lower_right(), tex_coord_rect.upper_right()), + DebugTextureVertex::new( + corner_rects.upper_right.lower_left(), tex_coord_rect.lower_right()), + + DebugTextureVertex::new( + corner_rects.lower_left.origin(), tex_coord_rect.upper_right()), + DebugTextureVertex::new( + corner_rects.lower_left.upper_right(), tex_coord_rect.lower_right()), + DebugTextureVertex::new( + corner_rects.lower_left.lower_right(), tex_coord_rect.lower_left()), + DebugTextureVertex::new( + corner_rects.lower_left.lower_left(), tex_coord_rect.origin()), + + DebugTextureVertex::new( + corner_rects.lower_right.origin(), tex_coord_rect.lower_right()), + DebugTextureVertex::new( + corner_rects.lower_right.upper_right(), tex_coord_rect.lower_left()), + DebugTextureVertex::new( + corner_rects.lower_right.lower_right(), tex_coord_rect.origin()), + DebugTextureVertex::new( + corner_rects.lower_right.lower_left(), tex_coord_rect.upper_right()), + ]; + + let mut index_data = Vec::with_capacity(24); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 0)); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 4)); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 8)); + index_data.extend(QUAD_INDICES.iter().map(|&index| index + 12)); + + self.draw_texture_with_vertex_data(&vertex_data, &index_data, texture, color); + } + + fn corner_texture(&self, filled: bool) -> &Texture { + if filled { &self.corner_fill_texture } else { &self.corner_outline_texture } + } + fn draw_texture_with_vertex_data(&self, vertex_data: &[DebugTextureVertex], index_data: &[u32], @@ -441,8 +580,9 @@ impl DebugSolidProgram { } } -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Debug)] #[allow(dead_code)] +#[repr(C)] struct DebugTextureVertex { position_x: i16, position_y: i16, @@ -463,6 +603,7 @@ impl DebugTextureVertex { #[derive(Clone, Copy)] #[allow(dead_code)] +#[repr(C)] struct DebugSolidVertex { position_x: i16, position_y: i16, @@ -572,3 +713,22 @@ impl Div for GPUSample { fn duration_to_ms(time: Duration) -> f64 { time.as_secs() as f64 * 1000.0 + time.subsec_nanos() as f64 / 1000000.0 } + +struct CornerRects { + upper_left: RectI32, + upper_right: RectI32, + lower_left: RectI32, + lower_right: RectI32, +} + +impl CornerRects { + fn new(rect: RectI32, texture: &Texture) -> CornerRects { + let size = texture.size; + CornerRects { + upper_left: RectI32::new(rect.origin(), size), + upper_right: RectI32::new(rect.upper_right() - Point2DI32::new(size.x(), 0), size), + lower_left: RectI32::new(rect.lower_left() - Point2DI32::new(0, size.y()), size), + lower_right: RectI32::new(rect.lower_right() - size, size), + } + } +} diff --git a/resources/textures/area-lut.png b/resources/textures/area-lut.png index b54d669f1a205b4a26aad4172550a927f29a6000..a576cc57d04a16189d5a3399271a74b13debd6c8 100644 GIT binary patch literal 5612 zcmW-lc|6mP-+oT`TKePelp!%?S-&1SO5To935;90{{s84>SM(z**@(?EoO& z;%Gzlq))CKi#YemR2a_N+zBgx#LzvUdD$CFIC08x^wX+$!LQ@$2nlMV%3h20t=E4y zW;V8Nu#<((Vt0R9Ctuzbn60>REBi*0=5`9W?E!g996;GD+z@3fRbGW&^=#{4Xg(4~ zDDUf)40BsR9hA7tCiC)vt0(UM!iN6=6aaxIPN_yXrR*Rhj_C~YL_-p zoxb}-SpSS{a$w+m3IlY3H44t6t}v#WKvQs1Km2IwV_RZg9pjk;V`Wdw0mMQA1m7-H z<))m&N^MUHk`hGuj|GQ0kSOe^DmUc<*3iQtv#`gM&#qOalL* zU++T>3 zUqrpPXLbeOKjVX3;pvpAOlQxUBBllAWdDTX?x^r(Jvaz!FR$=2Kudw91~z5!)V7V# zlq&JzB5pIbxSHbwZP(T?64pbwZ)CsKz>~Ze+?>Jq%Rm@9s&cjlbE1lxhxONDeiy3v z6Pcp3Lqj(EpdM@WX*SrrD*9j*3j-Tf>n0_r`qU9M$me5^C4&FZ4ZH=#9YaOLBkt=! zF8I#PnM)NjgTTiE(9g#6FF|)XxwlqpPqRK{br_0O2bZ^Jb{e;u{L%*H+SpL+KG0!s zvFj4)6v_y>-aPCCM!4$je$k-ia6;jUW^|W4*;BN|Ef@R4Xz+0Ih)yWMO_=$Fvhd)Zzf0Zk;Q z4{ip#2BrqIW5b)UzPE2we^PHjw#9Rw+f4@1t1Zs25s0;LqwT$0SEYT~JO4enJVWjd zFhPvDfwwSylU9+vOdm|^+}9Z+M5A;EUD*9$nio$^e{v--Sa`QxV;Iw{`ZNc*d>zTsk8WwM}TtfnxPQrg%sU z%z$if=j*?ykL^1FCrV{)UK1l~=!J=vJ;M!xVCH?}NC)6clVsXm`H5EWCI?Xsb=?MBZ$J`FmRr zVmSA>=*UZ$HHGH)Ez*-xps+3OL2)6=H3EK(6B;=ZqWxz`dsFw?#EcN=dB64ZndLjS z&aZ};S~T7->1I*J6lA>pBdISf$&>Y<6fY*#!Gek=z@?z>gH)E*o+%fOg4`*~)b&{3 z_M5&|uIh{gh)-Tjb~hdbvA#Se`rC;Ft~YAWFxb(ANa>X4sL4ykb9#k)=3TLZRcVqL zRP7^RC~|$g>DaQqlxBsL+#_v$@;f}St-B1jJ^w?KdQakvKBlRH;co@Jg33f=&Vt_s z;!=nWP`iqziWiQ-5p(#xH;F0KDVZjcQ|<;nIweFD6DGP0Sv)KTOxVSDj-!qjDSLTH zg#W8VRFmmdstKjsh8J$247l%XT5&W7^c9kx^2J6Z-`>o+RG#Xj=>VrOD@M{SG6FYH ze6~KY)jifi9jodtRp+KFK4n*-la*ktxo~%f%!tD7tn1cUIZJiGt^;yCe&{RcYgbo$ z(LJj9QR;Kq_5OlRryXZ`#^FkBG4$c!rHjMTz`YO)``@s5?#ZtYG$@O1Ea%CI$R-9KkGGT^-h48k`Py`a01Yivff7PnA(+EapNGCLS5uF5&|v z@EAMbSr$2dSiIfpfh&V)8|j=XmaYEUkmZR-6i9MPO#9_^6~NEZF*T|xUvb=qj#*G4 z5uw4zV@`xV(;ygM0X;8SKBIAo3KTzxY>&7TlNF#2s@MJfhj=s1s{_5CzuapbWkFOs zY^kanTSKzZ*g0~sr$PUblA%Q8Cl8O$v7#VD*;x-)>J)6KjOsqrz=UdFAxutz93{ck zTc7TK0lxC+iCDC^^|rMX=ZVGedjBIEO3Hu+7%g<>C5~?hN_#L|F*(;-1b>g@`VjrZ z#NC6Vxi##=xqYR!>LsvPVen{Jtu*|&FtW3|DFVMZYu(K{Sh&xAlYs3rfxG{l2&PK) zv1_dQccz!B(JIdUGS;sRC>H`-zhPQ5&M3o2!CjYvDgXCxb1z3LZI(i@+F+xa?#h`5 z#>@^W!&0jncZT5BqSOsr&?FOB$f~ed_m}tb%xIPM(ir`5&5`oeeKuYcq-kYHM|;V5 zOE>2%o#?ZJ%2hdG1or`HIPuaqKwxUzcE!{2?9spN`QCeR%Jm|8-0GBiP4wP_Phal; zxt%$Fq4CwrbqmA-0rDRI3jTQed@Vx|(AJ%kY zPEsH_9X$CfwGT}>IOBOYPD_A>GVq(aKk50B2OOL2&zqM>lx zDqJQ7za74VfMrtsSvTC73vYp}oq%;fC`LY~6XwQMZtWyp_;6G+prPx!gpxNwQLcMb zz%Ev5>qUY*KUASF5zZ+w&gi{E(y4?iSwF}gvS**8v6y;sI<6)1#K_2j&5VX6Bmm#LC60tLF8sYzEjB#Pi}Lw5RyKY5isJM!t7 zT~&wJ4g8oaZDao!#% zgq1m^i+3_4t%feo<-9i{@afoMVMir(Sf2S;+glFBPv(lr>Gg+OgwJ2wdnGSDpx^U3 zxQKaF*=YP0k~Zy*QYzD1m2I6lh04Fh|1z?O;#<6t0xFr4q4bBtlv{x$YB+gx2 zUvdvtA3bbx;ZXFQuVqrRi7&I-VC%zb67ULXI@h%`9NBvH<0+I1#Agz--#c|5d-;rJ z{axo;L+!+|&I;~}1cnx<*)X?#G3J7tq+-kw{V(6Y_C=YT&6elXXzw?KKS$+#I4ukP z!DY^BiN)GiMC(M3x11l)UwjKpeiwFrt&EJxR2<9yt-;enECfUOORnOL&m;1jIqq7r zo7}5^?qn7F_rotZft&e21^FcZ9nW&=luRoTV+V^qP*JSjQ4C(F^>5KRj$FnZCI4SrRLL))-;AfrvChM~MvmM`|wk7Y+{N2AqRb3azT% zZcPNZS!l;PBV(@tp__?XYxUMr%M!ZpOb?1jw%n(*=_%+Ry9poP><&K&Y-AXGc|S=? zA7wC`E1R|P0XN}(R>hGiaRl2{F%h9prq6}$wj^b&e0I^cPjdRK3pyD5&Y0o8mFKl9 z!|f`0qRkd>;|ihJVjv2drLvo|kA0RlNZotLQ?CZtDxh_UvSyUCDK1tLaNum48fy)iQTc>nESG4o`J=FN_2 zwxvyx+fioPN?^JeMSZj}%mp+(r~j{<8uyI2gEEze=DSNEw$cdsZs`0H%CBsWYu%Ij zi}|xw^#3o*Uk5D+h|nhzaWMsy8h7`!K>6Yth8z*tkaC|;WTX9_4)G3o%X6Ep82`#~ zo0Gn@%&?Z6RTqCfZcyH3XO(4`&%~&rw4?IFo?iR;Jxrtf3r0yKW@h)z6K@~^`=T@O zo3yA)^j+c`xbAyS^S;qVND1&*W2gvDKc0vhg@ujvgU~|XyJUWtk5Oi%hrC%_v}rIwdp7NK(HN`k`uP=TqP-_lA&v7Anl-Jc*q6Q-8PK z+-LGqVisiJH0<52D_;DIb4bB6fb_dq^YfCgngErtq71fuQO}2~UBjU6gX0t5^HDkI z*#YFsxHbO~mYga>2R5OFC6X_Wyq(1Vl}b1_pY}h2yAS%FmxNVPHQu%a{%nint;uw< z4=;uE4+4xwb(vJ_Ci}-z(qpc3w^1HzIO$sY4M_hW1M_MN6ZD^r!sAL>>1mC!eJr~Z zwDrM&ouAQ<{-|7tMwc9ZN1BkPo-dY|Kw0vyf4KHj*4p9NT=bf_u1+~Aw~m&* z+%*i!OK5_~!*!=ZYI|o9tKhZ+!q48E3YL%RU%go*_&4Lv?So+)sZ;)we4y4w|oA20Q>N6 zi4uxcjAf+NNxtE#2)nITR=q_9`Q)=9uG^Jnlb(vp5~SSY_PRzq20s2_OKBs0Aa6o) z3ZiSq#u1bjzTWs^JeW9EP_r1E`8>85`~= z>8+2PHy*t&M)gtB;pns*k0=3ME1~S#8DrtjnWQ=nV_A%Wl!XnhN~}A2x7rDy%Gfg+ z8bmWV_p1$sPw%Q*gt@l94wKZIO^;=8SAGW!)@;bO!Gqne;Izz2V;vn z0Cpl`n{76{;!b%EC!f&0nDFHZ*X);Y$l(D_B|{Lc+haj^COj!(0)X}t8%9`c2NDh} zf=2=K6!>SqqZ#4nybs(Hah{z12#a>~`or7txi%D*B!qV7H08YpxmR+Bf!Vkiy(Rqe zj?Wfb52gw3S%?40lm~WoEtXYu^IuSi*TD>^Ne?8Ri;;dAVn>EGE4SjJIt9rLK~l@U zND_+`gXW`!XeY_1O(S*YF5lh}kQJ-ipC$QfPMrr@oXZ*I1ffn?*rXihFQy;Jq04P1 zA5nU{5q%q02Z9Xgdf=P6}L9EcJRxX>FQl56HG_+cM4 z-HvS%u~N1xXNcTfD6og8N{u2ii$ zJ?BC(|L0Ba{I{^5-dGiR+-qwJyP7mSeLg`^K8G#LNE>-E3`=Ms=!=_DP7~o&yF}&T z#i(nl@J3DrI$vYyGLd(s_aH-f#sL4w8g-6hHMM-9ztB1)`P?HJB5t}TZ59K3`$T!(|8r|*l zS<|F=XwB%KKe&fRKkFqjJ~Pi`P9K;%(%3)yRD}W^nD$guziGffIJT2oPtWMhQ|!q* z8wgPr*EnSPiW^ON^2TL$V9~yo@K_k+7y&&o`#ek0`&;4I=Ls zD5)7Py2GEjfPmc3#QJX(=ZU=0+iv}*;BA${A!PC5-RB>BgL0v!;x3)}F?6;OELo`@&F1)t~je`4x`7&h3wNN}_kG=OhH7{Gvnj+%0G5 z*@BUTm?50YHA41~kc~a2M=Uh#FY=J;W#%w`vO*!ssbIY}KHVHF(9$hH&IJ?J>X|6l z`GrarGVJJDy%s(3>MH&=fo=;C+PZ;H!K_=#;v3;78ygxlZ)Lak>CN|#mRC$H2#DlO zk$R-eu8UL)lYIj6&RMLJ#6kw=5?NEG)~0et`EFP`ILP?$x(XRTft>D!8X83~8q+)+YHue{uF*xVoFuu6)y@ z(__=&PaoKA2kV5+YngRK3EPR4(d-fx|#f(_oO8)izr{Ts3r2}7bzV9+40$y%1jve{a zS1}G}$%oUgT(bNcAOGu{#@kL)v_*HP+@{#o7gkEHz-ll6&A(jgL zJhA+9aeA2XEAH5j#qY0mE3GTRVpHC!c=$4CXcK~JtN3M3neskQZ6qvIzv9H-KVA-g zF7A5z#*(nG#0JC0=Y$(T!}0MDw8dm^(#}wH{6?0IDQ_-idctOW@7_?fIO~SC##a^` zcl-|cQvq2L35PZp^M$QT!T1N8$3xMs0k0EqA9CKyocH6aNEYf&})**pkA*WIus@@Fq;^9F9%d^Y9H9xCcVZe;Z$D&za^ zf5A7#{c1EiVJ?HqYa5p&8ydm*Q1q@M|7%MDk$(wp{IT#J=BM+g z?Rm3s+@dW1X93K|b|(yczF`eAk$sreHW)8+WIUk}v#{|gfelrU6L^MddofF@1 zMvP4@7l4@Fc0*$eg{`}(f4W2_a?9lYN0DCWj%`Y=$PGdEVj6Kj(+NCZ4){gX74oo5+};E1#W2xbNA?T>dp}zPOCoGg#xJog zA`#}Bpz3JKuY2(F3!CJ{#kb{!@pv&0yk^Lcx23Tn{H#~$Qg^Gt6F@8`wrvj3@QdAI zgRuq=qPw!tXu`s)Ea1fb#f`26B*CgDBP$lOps+9*$-D!2nIZMVtE0b2cS3yoW{Rum z+Lxd;co5i$n&t25M-0u#668>_nDr{zBpZsh}tBL0&TCRd^P7;NAu1jKjmJLn41;6Ovw^RJmxP^ z_7+p)N}v1Kcj#gkx=2VBLJ2$(hl+0WS%%o{!h-d&*!3ZZ3P41ooEd%Qu*9Z=oxA+1 zU_ZWa;Y;Mf@SCJ{#=V5jj5zK8qnZn-)f!*=~!Ip*Yi zl!^6iFfKkWec7cPME|s;!5N6;QA`L>A7QeiraRQ)E{J?SyL-W_2z>8#Tao{K>76#^u^Ix|TfIc?NKS%A?=ZM@^QzVOZKB^?}?v|eT zF%?c!bsa8b6HYoZfnP@o#RcovgUEnl-LTEe=9C?@>U=yxr4#`;=bbKYE z1?iu~`Ks=sI0N5>#|;~Z;jhLYX_J6#t9@%-Ex+d2wx6U4vutoK$FMGc0OR@7S#X7t z4vs_7)xl{p-JyzN@fx14#SIX7);d0Sw}^ec*E95*M#Cl|SnUSJv!;xHt{gz{-`JKxHKlkAA05_XoI!%TooMe%BPh^9wVzFX?t>5Sbmv%loFXL1J44fF zA-wQ8kWkoKxV#5W)EyMNLNgpRL*$e)O^B$u>|Czp;x*ycyjl)D#~>)z`^q7Nll4TG z(ET83m(82+%JR{N^oG452&hDOWdBuly?AHKmz*@O5#AYtGBQ3(LMSe>7N@25_1ge{b z>JnV5dl2%aXZt@sT2e^AsnIk`k5tWM0wNgdM`CtB)AR(tVomLZjlke5hr(WfiVIYJ z8WH2Eea%D;(q9e>1Kx{h?0_6b6dnjUIH|U~L3$ir zjwDCKC$AaDwGwSHM>N1inDL>`phqsyNA7?a$^ULZI1OUu&8m0M5rdE7KG|>R-=my#6AaVO|5+DyU&V!7@n+ztLNeu`O zfw0CNS0}~P1u;Uw2xEuh<-tF%_OBlNB(F3GpN!yP^G#3&1SGcjG&5;sV(hA^kXT8JR1YDTKFwDa4ZfGuD-SPpI=sn#hJ ztU*eN>^P66RRU#fk?W7vNhhy)7!B0 z*B=MxBb54pH_%gO)vlZym}+kY-sy9;Sh{-6d(h%4Smyr0t0+HAfl;GS*A!f%K!+Ky z;*qVS6Y?#lOPBpskG>vKc>$1jpN!N`^u>mWc!DJ9!6i4PZlD(l+~%Jc$)X1g z9UXd7J6FrW#ss)KU?e8kFmV4I5>=&TmP@Caw63rN$VV(GepQw^*|8#S`kM-<*?Lz$ z?rx|dqw>1rgrrh0kWl8(E;7#)t4|qu$hfz1PY!1|k0rM7!yy(XO-C)#J(4yZH(6H@#XbF!Z!l&6PBzE)-B=O0CzG*VxkAu0ef9H2Wqmg-!g+P zWLWA#Ba+p>Zim`*t#(9#a>inZrz zf&MmYm}K&h{Bu8O$JDoY^dwzB`^gFGK7iqjiIaZ3O0%6X824sj3#09A8F}VODM2{9 zjhXRbSe#49e#*4&1sKofCv9h%e{Q^e4xl6*nxANb$&spO)tYl+7fElna zK_i*}W`p+1Ti;rspAoH!ONev$aAGD509oLXWCOfqr?_P`!Lk!STx9BSaxm!NAeMGmTW#j6@yuakRmonp7}`Fl zA#D@x4Uj&^{4gfBa*Nf^F+V7)rvR2`hwlxJ09$CsBK#-R#Z-J23RAj#Vu_Bzl(fE2 z&DC(Y#75$<3f}ond)aj@!WmP1?b_QLZ{7lv(RmHB=ypbjTsqJXxYK`R3 zqiWSOZH=pc{X7^$A_sbLlIeb|&a}cT6^ye*|T@+gpiftuT5CSOYsIG}rj)tBxXZz7_6QAG^ zv3U%=>bi3!b^3SerS7aO_t4ExE}3+g6`u)3DwKz~uDeU>wuGkjifXzKS!|GM6#GUZ zE7s)ljtAAJ@l_wLliaJDPZBvr?F~MX87?KoS`*4_$%Io`H-v{hLwqkYQn<3is-VLe zna@p^2;H+Y>NP>#{m(r^KZIVZo2%Qk0tRfUQY_Up=93?URlDvV7G#GIF+l_*2#7#t z8-$qTLpkcL8^iZObryGp=~o%s73*yOZgiN@{a;H%s2VS>4-Nq_>3d2DnRrrC2k$A( zWDrkEQcrpjZmXL!?K%1aFzArO`0CM28lLlhz{k`vl$=0w{{v9no*6OO@Rx1C)OCD# za~q)T2|LIOK6_OJhgS{^*wKa3&w+Zho5p0Ez9;Nmg?9!29l*Qqc5$m@K0Z!R#eaN@ zh*luYTnSfD_TN_Htt`AXH0Kj(vg<&PRJa03 zc1UbvC7VxF!>iyCma>REs7_mfT$o@~_`i;w&bl0k!b&#Ze++7H-EnL+w;fS1f`U=u zLBYg9j2$W`c!YR4N5hNyGVvIZjIEOezas`Tl^Wa(#QjIG!cfk!>S<9>gNqmxQ~5m_ zYyn%qQ!BIuY$;2N4^;24G~6I3yDv(@3cyhxOTw1WrMvI8BDLR=EkUZ+o!V3>+D z81jk`6E!QhSw-UhcNkn&+a@dl-p?QZM1KGZlNJwimc@22wC)b2+k zR<6+BoQ%)bx6EBKpfdnBwt6sf%*rnSYR6lJ0zK{MC!HTA}5+BtCE6CU(cpoIk?Tp%s|+F&oR zrSHz$5>GgmoksDgbbm->l8`PR4!g?6xPciy#=G3KJxNSXH9CTzDA-#;;AI{ExZ8@5 zi6=oC*C%!TarH#BrOFMhy&b3U+hYq>TzJKQ{}pi>hSj_nNC|W8;=gE7035}JSAgTc z;x=|)n%QUwP+YqOOuxvb_;$5sJA&Q2q#TuFxeuwC7mkb+*)T2C_gYAw?Y z-Cq-IKjJ*h?B%+QI1dwXoSpgse}ZvO#zgY06S(f)WRX`=OcH{_d-`3jE9g~c<>_Q^ z-sSoX(@#Y0@2G@sz;ZMxJ6OTG25!4A*KHHI?65Cdf5H=L7)zalS$3?W6m`lbjwDBt zQ`DPE-6`e@M7wrcdlFIYJHEZUb#!)7&QW*jt}srYyC9aYFpVsaRt(b=DS)bEe?vW6 zT^$^U?V*cX!G8kqCm116*ixbwn-4<5Jv(G^E6L+;%3)*wr_p3_6{|!qHb+7W1=x!=7f#Q7%5(4GC}X+~S%jK$a9i;<6PHpv(W*6*g8g zq!N2>i(`~G9hiy^0N1S~y5BHVkn1k2q&ugTQCKJGpw2;f9YOW6cZIZ5)83lZ{}3bG zu_l=roDfw~@8sp+nm)kg0~d4M9Xo|>NepPRY`V$w4%fHP_6~9to^$P&X(y;|V@F#x z86^5*>qVK8N>76-l-e%(mw<(DGLz4rWysVC%IZOfZdj;RP2LlGEwCHb)?+J0oNk6! zt?f3xN3RbYSvw*(#C_V|o>HMIT0pxG7EUgSUeBpL6QtNq%46vJ8jg5#Z_)#Xs5lu7 zmzqAno_wv0uIp>)+a{<|{}t}hb$uzWmXBp_5qL^o&@UD6CZ$blNJCJF{YR*zR;|BD zY~QP^THYauI&XVmj&rR5p#4BV*oYW1$L{y==Px;Nf zX6_o&d-+^B=VsSDi^p_G33un%&_fk2|CB*oCsuZQh7kkMZg3fx>X^6u2XieveK@5b z7dR0W>}4sVC2lkT*l#gEm0~UyCdU*D`@1Y}^l30?^ohO251t@x4U*jIL_{}urJ?2{ z4;d@J!EnQU8w^JK?;4EC{l79{f^=?MsDD;IY#|l#`7z_($Q9;?F;cYeXYNaed;J`< zAi_3963S3S)do^knPW5D}>w6z;WZ{2{;U%}NgsoZ=4&U~QN9#I3ChGpjZ$J=`OY zJ1zSfwy|r4t>rfr2ql>;yEK3QUSNIpY-W%5 zNkPf45UC{oI>I8OWkMk9Z_NyPdJ{h; !GHh8Cq_7z9v_k6-)+G>#_9KO%zI*W7+Mhh+}J&Vr6)QBz?a@W5`QCCQZWCurToWocc{(hD~Y1J?mesl{n-yV z1&5z=j+oy&{L=aS+p$CKjRjoG?bIq^3KV{6@;NxYX-j;KsfyBHUz==gRFw2PgoJ*? zh1Zy>tP$4RC7WamJx*-e)GqX>bd%7d(o+&A?Zt#xj<@|uz;oTriX~%#cnPmeSm^bm zbEQp93;YY}Tbr-G-48uJ-Lt1$Sv+gKRhg@(Tq)?Fy@35-C}Y=B`sjUHdY1jETb?d}3Sl5C?oEhwt}(^j55X-;uvk zSolx?lD24ia_;D8d^_&&vzO#1nV+(RRfhv&7C*+$%-esu5@N_J>D*!74@@3J*TY~$pL27uE)#}9-ee48R%(JA4~)ke!ze(7htJNFm0uDy_n z`os)in@1fZ3<65t;$0^~9j0sxgQ{BA2CNx4n{w7}`Rgyx$jfc|s#K}qKRUp1yUVuf IEwse{1GeKjEC2ui diff --git a/resources/textures/debug-corner-fill.png b/resources/textures/debug-corner-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..499770473f2df89de6c6acaafb7e92dcd9333bec GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdn`UJR*x37`TN&n2}-D90>*n z2KEw9Usv|WOj06@;xpQ3*fKCM$YzE_lsM<-=BDPAFo1w_QEFmIYKlU6W=V#EyQgnJ zie4%^0|SF%fKP}k0|Ns$H@CL7wzai&baZrgclYesvrnHs{rdIm-@kwV|NsA+Su#j5 zW0JSK3quF1tOv+MPZ!4!j_b)O42%;KRNVyDhAACjNZO#sD&*r3a*82whNOdpk0Xx& z+iIpMf@c^K4Okr{b$9~W40;kdk~I!UFj+`495-g^b1OQ!9^^t#S3j3^P6#F_V-CkIb&$_CFXH7-Ta;B1)X|b8}PkO2GP^ zi&7IyQd1PlGfOfQ+&z5*QuI>U85kHodb&7`xDG}?2Y}oM=oxIk`1t#s@teKw*}O|d zES~>!I^I+{@8FpZ!$q%m{ny%em_fkF!t1ZjhkMO41)VII_i?o)I%M-29@~6!eN$>= zfS2XvpRox&jK+s8zw7=HSTbco@xO0hkAJJ>Pix!y&CBXUb$`_BttCo#wp`n?PCIt) p?4Yh~xylUJS%SQ7egFH3-M-sPe1rO_wmG0+@pScbS?83{1OUUqmgE2c literal 0 HcmV?d00001 diff --git a/resources/textures/debug-font.png b/resources/textures/debug-font.png index e07c069ca1374719b44a693656544f28a553725e..82641e97f4c58eaa67697ad482f7e2fcfef969db 100644 GIT binary patch literal 11814 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 S_Wpkda0MAv=}Jkn(EkDRHwP~O literal 21373 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 diff --git a/resources/textures/demo-bg-dark.png b/resources/textures/demo-bg-dark.png index 3425837d3b65b59be5e9c87828bd3b7e702e1efb..82275e929ac1631ce0416f4eeef444ed82abb47e 100644 GIT binary patch delta 767 zcmVUKTMQ&0LS6)o0k(R5WG|A zK|(dOaZxOZsf)HI7!wwfrmfn>q)UyvBApXq3@7@jyYW$G~OjOWUi3a$_oK>L1a`}@YaSS~lxHVaF;)|{@)m(Ixh`O| z$}5Hulh+imPcHj+;MI5Xh-1X%l>$y^P3&~rU%(j-O5NjNWDW_=;$7Fo33Wx*g zGUe3%!J3EH&U{+Ey&|$*epMNuQ+f8qdAyc?lwTL{qFx@mlTYzFDWC8ZFcy_p`PtuI zl5Uy8L!Nk5Ls zScP)RoBzWxRH^_)-ME&9W5+)!j(mKid0+w8?T~_E5~g8UzVl!#%mo69DHEiWrqL&002ovPDHLkV1o7{Uzz{_ literal 1356 zcmZ{kdo&XY9LIm#u!eaZN_3DCHDk6eS>9~sifXn>UGL^`%q+8M+_IIf=}vCxL3tJ@ z?^h2(S}D^NU9Sk$Bq0?$#cmKHGb3T85&iB7h+Ad#Dtg3-30ARgn9&`X8tguQ2 z0QMrkqym6agsYD$Ky8NF_Yh?OK=A0EZcx>=ZVCWQ!f13KfW%Dzq7;Cy03ezK;1dAe z1Ot$>0M>AG8h1MYfJ&&hrw9Dp7x$)Q0Kjl*{yYGn{e=23+6h1j>*e9fhLz$ zmGw<;t0VBN)79vfQ&Y{YBzmei2_t#IYaC~}D;Rn@ortDNPGU+Cl8sMq*iegi)x97e z%$L?~_qYAB`gMe+$b0a_nsZ(H(s_M!TZh19XKqx1;b;GTXTzGH>IJI?opT?B!bCgb z%)ODyvJ8VTD&>_X)7W(WZ_6Bsx`bAbLseOo`5j)!D5d!TwrUpDFEAAyTHT<&kT{eW zF#MF*Zm3A0ybmr~V)ieVqr>zFv>lv;Xtvfq=5>_gNrkfq-K+-LP#)i?OMQ9e*b}qy z+jr|#0(UJZZ*3dNSqhWhT5sySIafISK%Zx~8Ii$hNkYvPpXA)}jHvG^g^cjG@frgS zj3a3kO(bsM>EV~%{u(3dm6>Ok`VqK*sdU9h>YM2v_)#pWRGXaI!AC`Ud$nMpxN^6WoN+S^nd=CqO(L-cf!z~pVkhrFx3Kknyt%7@184*7Lz~ zfzugkIljEb9|1{=nO=Enw7IvLJ2b57dkC?R!}uc?UKW6t0Pw&w9#5J%TH&(%*%;TCR^&a=o5 z7UtEt-Mx<|D53#GkWdzj@)XJAf~{LQIetdp--%chN{M*x+oaOs#-};RYRn+|`&yYp zt~sI5ce?h4vRfQlU(nU8dF`{K(-JAErAlTmE`fxJqtbhj>#nVFCbV@sxe>2Segnq`Xu5tlZ%hFi6GesoNS80;`x2XRoo8@w6|vnCU9uWtSSsf2M-WIVvih!`Qpv=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8$G-qXdgJ|yGb+nIawgdIg%&kIDGTyTEl^2pt$ z{Wb@Op28&2PfQL@%#*k$2;?^^2+4|ua0Yx5^K8~^dg1(H&%?zZbaJkJt12%`6Zf{8 zqMMX9+ zeyL@xK2`4_Sg@bzNA-aV=YHF(aJ<6di=*RBVJzIt9&4~;f_kd=*?YBFKVlZy>1u9MbDB<~ZK ze6or8F2jdOS0;q~*#00XL6@Os&1}7Os=d=2HmXf&y3Q;mv3hoT;m$V)mNu|Oxw8Ms z7rpsji{}qV#)5)3`}a52Gv)R-E|G5J;khJ#=26kj#=j09CT$5XX*lh;P3h(AXI~YJ zkI8sey_SrdRMvgSnmgkr_Y8em=IPpv{xc$!<5{OYx2oM8^rNLy_LR8E?X3sYeb!hn zyKGpn+UvraMRk%DbB&j_9ax=d>EE$v-k;p5W*-E8aL5>}y5;xgckKhl3+L)3-tS*~ zs3JL=-{O5~>%W8b9%q90Z9FQoMJ!!5C4A}*{mhc6JjvvJKg<%6^KM!und&&NoLV_4 z;^(T{ug}-8>i%g^{(C*RAm<&sO!x9BrP+xK@=Q;)&sgR7Q-E7nB&MF>qWtY^n?h%p zGcYiymbgZgq$HN4S|t~yCYGc!7#SGWTk0AZ=^7b@7#Uj`n^+l`Y8x0>85rcQfBzIk zM{a&fW?Cgk2X+lIpTZ*<7#K7_Ruq?|TO}nHr|Om#Wiq5?=A>Hb>+6@~7U<_Dre`K+ e>l*3?Iae43gzlJp>^l!Amw3ARxvX)u zStam*S+G%fE`N;s9$Kyxo}8K;U+2pClbjjg_LFbtB2UhY!n=N4EG_Fou1}IF{rrj# z`ckNV$d~r#CHLp;{zW7GcluIv-VR@ipO5cLao+c(@Vwna|8QTPFXi$2zAvrgydT>{ z9#tZbY_7l0gA9@X&XD=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8&krl*TzeMrW=w>J#)gdIhWeT-~ZR$%c>3S{JZ z#8aXnB)-tg(K)Y?dx^+G2d|0T6NEG$NhKWQHSkcm+J7iHGxFNGO|QS6@%rtVS9b0F z-~HyF%if9~S`oNdigW$PoWsAA_nb1VJCJ+THc2>fWE&UH{1O-N*L3 zM=CCTPTq3;2jg*zI~(dc9>+W`7h3kCCw@kvKBtHGkJ_4*CQn)4ElJB}vOj9$6#sZr z$|IZCb614?W77|O5c|zKkUc)?^lg{38!cDuOmEsesWUR`-Ld))qQdgw`s=Q|39S&! z+w}0?;tZj6Ma}Uq*PL@36XSvmSTfBb+oqKzxb%VUq z4-uz~&sToPIaS1o9K9}fzy7VAxL4rM8QXuyoamD(^L>}+J7?7=!}9Gr1^9wO?Vi0i z6W=uFwo2puE*!N|bSQrEyp*TB3!#L&{p z(A3J*NZY``%D`a1Eb|={9l7}_nQ4_sI?yznbJ(50z`&pZvZA;w-6|=uI90c_D3c*A uGbhzbUthl@w?IEPF+DRmTemRF&(I@3KchHS_ADrMdb;|tx~y|bXaWGTiAqcW diff --git a/resources/textures/demo-open.png b/resources/textures/demo-open.png index c5ca9a01fb761045283c7ac00d22b20aa596e5c4..aa53bf09b33060bb854c9dc706dff71b25adb2ee 100644 GIT binary patch delta 201 zcmV;)05<=k1lj?R8Gir(0044nrdt32010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;{qBK1P+0l#JB(e00Lr5M??Sss*NKu0001MNkl!lvNA9* zFct^7J29*~C-ahlfk7eJBgmJ5p-PQ`p`nF=;THn~L&FOOhEf9thF1v;3|2E37{m+a z>475(jGm z&hTy2^I^4KwX%$XfkCyzHKHUXu_VnC}Q!>*kaccHSAFMEU)*RY~q z;jB3DRIU+1K!38>{jg@dN|z*okjm%Z0iB=UL9aEsfCs-Kv;)WXm%!-9CN~K*C_)67 z(x)#BM3iU(Xw(Z$K*Hp8)BuMjLLqQ(A`}BD6QLG3Fu8QI_R`VxX^jA3ec`lS={o`H zm9Rer^y`Ek;9hMFi2|2JYCLcX%xZpA@eDCr30oV$V|tnH=wX&sK4%eNO#k|aY!Pt+ zUt^`406R{GnX!J==S`x#-gAJ941>mA1+HTqA|h>b7XTd9{9x>fh`8ImicD?e8+-XK zJPkNmI<0a(^(ov;R{fwk{q2#2h{)DNOTPTCKf2xkqh>=3cd2g~00000NkvXXu0mjf DU+&~t delta 962 zcmbQha+ZC9WIY=L14B5|&vpg|29|V3Uq=Rpjs4tz5?L7-7#NF#+?^QKos)UVz`&r8 z>=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8%x&(p=RJ|yGb+Zo>3B90<%`DcCHjvqf%n5^Q` zvf%X}21j$DyAtJ1+VTqjm{tt@j>r;PZF1+SFAZC>{IsQ||K9-m#`MnjU`Q4!zd77sc>#x7geG<)k zhr_VGeMWA!Sit22)(;qT=e%d|ZuooPwZP~67gs)Vo%P*k=T(`1zdu&-rjpB+ zA8>F#6Yacld7K{aH}q?}5rI=g%>IV6D6w{pC@C&Ww@OMZPSq_f%4A5(%t^J<*Viw}Ezr+ROwUZt)-^UM YO-`=J4Z6$7-T}%~p00i_>zopr00%aL4FCWD diff --git a/resources/textures/demo-screenshot.png b/resources/textures/demo-screenshot.png index d257a5153f63222d0b5cf78f8361fea452ea7d99..61fe99516421255cfeba499cc9969bec14e34fe1 100644 GIT binary patch delta 399 zcmV;A0dW5H2A%_u8Gir(0044nrdt32010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;{qBK1SYgDY(fA400Lr5M??Sss*NKu0003mNkll9DJ4omyOn<_6?7WaKu{{luYp7jh-;u!)Wv{o?bw5X?Rc3Q5R9wy z$yNb)Teb(ZDx|=&JJMSj5CG_l!})xe>j0q`$i{$q{4kLTSeX!51NyOYkq-DmzyTJG zodK>8xCWjYyMG64Az%P$V^hHB1H{19Wk1OQ=6!zJ1N5lARt?yQ2R8xCs6Dt`T#YS& zHruD^<4gnC$;!9tmhVp5*5am9)aNn7W(%r&s-|N1?82MyL`&ysp7x&QzG00>D%PDHLkV1mZ`t~mez delta 873 zcmbQo{FQBjWIY=L14B5|&vpg|29|V3Uq=Rpjs4tz5?L7-7#NF#+?^QKos)UVz`&r8 z>=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8&6%+tlOJ|yGb+Zp!x!j2+Gp1U5(OHzDs;DUg+ z=X8$`whP*%E;8^cZkb}zq0cB(C}TNAWQz*x#8}0^$zqD<@`O0-yR4U--n8-k{F~Z& zOLXsDo_%-b?Y(#RPL?vs2#`8Z{OPf4#@*B-*AKgReoXWYQK>UjYj}Ntp+id~Qbf>z zC9F2;ta^RirHD&U6@shn_IXE{Z(jfM$)x2ULV1sRUsCndzq=%#P04fag{nC#`B|f$!MuZ# zjIr&Py?_0B&vvhB-X9C*{3qvFF6d`1IAiwfT&KK8)cFIqCzRCt#m@{pc3`3K{nH0a zv+YGi1D|PKG~AroWgb|Qk$UjT87s|qo0fR09W>qP^{4F7A*)joJ6;``UtDnambN0# zosvh_EqCP4`4Pq`n?5nQUixlX#oLtbGn;z1$-MLHD1IOjQMlu-rJCCh{!Nnw*ci%e z|A>7MxWTUG`FqBbsCmEk+AxRZG9+w1QdB#we1ofm1?xO9f&H$&>n_(DvQ$a_dOxxF z<{6`aukL^SJ*&Iko3&5soAk%@=>`X#vq j`nieenaSC@ULje9UO{gDALg-xk~xE?tDnm{r-UW|{m@`X diff --git a/resources/textures/demo-zoom-in.png b/resources/textures/demo-zoom-in.png index 6ed7ffaeaff14cfa3f8a58df8c535b931600a452..1518f8a5aa744548ca9b6555d61aad9863cb247d 100644 GIT binary patch delta 419 zcmV;U0bKs?2C@T?8Gir(0044nrdt32010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;{qBK11F4V$`b$p00Lr5M??Sss*NKu0003)Nklb;@5Jjh zc59=7f0g}d!9ky|7wv^f%!%T0!R^2QAR|+8en0Vt9pCf(ZkQ0R8WRB9`h9I#fRXNh zjsa6TE|d%qH&nm?wsg8uw!mETKLYIc1IhCx2DE+*fKbwagg{RLBA}B6y1+~UzD}wi z03TQ?zy>Ia$bYeGB2ol43a~y0+yU#nTUsf=Jny0V+O_tz;GAh(8=$VWdI8vSYBZL> zR1aHr_{s+OZtCMYPLFqc2{3d8$Rq*k);zDa574gaid@BHBf0|uSB+8nCorsXfsjUY z^iP}nL2(lD(3{!Kb~WqQMMQ!th`+gl_Zx97@h16*TpWIpAds8>RX=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8&6z|+OCJ|yGb+v$7rLJS33(--BqPUMxHaA6_u zBA*EYZ>D7m^6p{S!_?BJ>*zJTqrIU`?-c(+29Rv%rlg$ekRjjo7=6TqN1{eQ`cJHMdt}y!AQ}G+De;V#N2m%65vwi`lNSNU0(DO z)qPBRRO{{Sn96TG({*64;G83-P~R4uApByB>p!Ir>sSiAYZLbM&OEQQpVx+^>HzEa zuMO_!rmHH&sovSNQG)TWO!Dt_>yNtWd@{Gqu9KgkEs%V!cVl&uWgElnijbB+E_2o` z7uxMRdH*}jTKfy~4GsUNEuXb_l}$R+zTL;}1zzP(6<+zOUR_c?Z=uXqt_ag_t5=}*i$)s@9nbCt7{~T_Bn?-tzdf67i1UzR7R1} zzUS}xoRtT+l(l;w`*(9mL;kUORiB<6IB+9=wn##KC4ZJc!TlT6rboUUjy?6t<^{{$TBu&$#Jfe_ME!u138UYU8V47_ITFpToEkKc>I9)^=~Za>*XZ=nJZ~^#GkGg__!xG&(lR{ zqKk`|;be2i%K=x#l|Eg0{OhXOb|-_W71zw>Z&GS|{wl%S!^6X3{}1NM3UMxul}CFS z7#LJbTq8%B@7#K7_Ruq?|TO}nHr|Om#Wiq5?=A>Hb>+6@~7U<_Dre`K+ c>qeTVMrC=1`4yRS1%Oh$r>mdKI;Vst0O@8_NB{r; diff --git a/resources/textures/demo-zoom-out.png b/resources/textures/demo-zoom-out.png index 137097b3c61e0a3c430dc21c3dc1401a15fc3810..e97ee503b452b05c764f34dfd255b8fbd924e290 100644 GIT binary patch delta 414 zcmV;P0b%~+2CV~-8Gir(0044nrdt32010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;{qBK1q0?Wi9`SZ00Lr5M??Sss*NKu0003#Nklb;@5Jjh{JlTy_@3u?!#&~ZF#)ix-($-HjCB8V z44BffP%=Q=Pyqwj(rKk^fw|^?1ZX8|FEOCaV*rHdVhHpUAObq+Vi%Yxz*kmxA6P2D z1}KWiacUw`1b;RPu+9SRfOXziS}DLh???BwYwc^n$rxN4pstO20oZb4HI~3s4_kWq z$_Dsu>gzgAu6KJ0FmwgT>;u%Td0y=hpk37!xr#|gbO!{k9;4(>U|8h>A&uzhpEeJR z;w0puH?y1VYSyodhy+&<=edIS8*wf1Ci#e5evu%Mn-~67KaenH8b34CyZ`_I07*qo IM6N<$f_BHNW&i*H delta 856 zcmZ3>{Df_SWIY=L14B5|&vpg|29|V3Uq=Rpjs4tz5?L7-7#NF#+?^QKos)UVz`&r8 z>=ES4z)+>ez|hdb!0?NKfuZ3A14F3+1H-EX1_rAc3=HB0b9M#VFfcH%C3(BMFo3~N z=iT)T3=EtF9+AZi3=AG%>~=ESj)8$m)zihXJ|yGb+v)rLq#Xs?(*@TBC0v@Au3ke6QRI)W|OmNWfn(NV_^e?EwdCtXqh4tT? zw%DIMTJb)u?*6&Ach`9Y1Ox<3HHyq-lpSeIHEx zYuY%yOo!`Gy!xBu#ik6`gzoH4TYvS|_td(ZAJ5EZ2-Ym}xmo>XR>T*^1>F3XX2_oo zE-zUWzwIZh`|J0$IZ2=P7L;s`RC93Gzrj@Ws&(&N^XD#SBI=`$=5x=OUjF@xhRA}2 zkMvm?YQjFo+-sR^nCu@?V=Kp?qM6WR7-*TYrTx^>9egTAGd9P)lPYAmAM)pX&din| z%e0U`dwm+bMbqnA`&KS})NRE0r9EvkLj$jQ(Uvyk0U~JJ7iJtLOI1y2sBjzo|6L_q`%xT(R9g zsib1&^Y@Ku^L{X&)irp{d%(%(xWkf*YrA&uv)<_c&H1mK!E1@n?1_$IjgLj1Rrl!L z=*a%#6rp^+A@>3EV%NXSKRD;y{$EzG=XvA1dgh7D`-B-k?#jw%RB~Y9IA1Ry?8!Yv zH~EaT;LTE=yCH9Nr-rDB29 S{};awO6s1jelF{r5}E*f_*ZlQ diff --git a/resources/textures/gamma-lut.png b/resources/textures/gamma-lut.png index 8d2bdd5c78feb20cb9c6483aca966b1ef99742db..ff0cad1579f014100725a3a9cc8a7e98fa8e4a3e 100644 GIT binary patch delta 311 zcmV-70m%M@1JVMJB!3x6L_t(Y$DNhi4#Xe`L`Rr3>BIj2@9u+W5y58H3u2qJoWV;2 zn$_tnZt-B&dg_PW1b6dhkH(E#k!i)6RgorER8&-zB(LlK@Q9Sc6gV4GXsfq%kBGoo z0voZ7E4Y!HaYaS6YoH_u09EA0{KQe^Eh8%c@kX105BjNq6Mw-igxQ8DAW-O@PknsI zV~zlI{^~a??%{bN%Bqgv7g4Y#4Fr(AT5SAe{@)+M{#&9#>BKwd(NYe8=u2U&iqV!j zjJ4UlU!~_5TyZ6LN+NA4nj_nkr0TbHm zI9@T31AX9Opbq4K4eY{E7-q)|!)u`Io8H(HiZhrv*CoEggVuN2c^)=fF40lhUdn^N0n#6WNZNoR7%qXbQCYk6kwfDYODp9jei+PP zu9!Ot!GnOufnpvDJRP_VLvbg70fixZpzOQ2yek$j<%o?P^9}_l;1+9@rL8`%