From c6ce0b9e8c4e564cfe1e9c6b4a42ddd56386e240 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Wed, 18 Nov 2020 21:38:29 +0100 Subject: [PATCH] [example_web] show loading of an image Required some redesign of `TextureAllocator` as well as some improvements to the fetch API. --- Cargo.lock | 108 ++++++++++++++++- TODO.md | 2 +- docs/example.html | 2 +- docs/example_web.js | 57 ++++++--- docs/example_web_bg.wasm | Bin 875319 -> 1079953 bytes egui/src/app.rs | 15 ++- egui/src/demos/color_test.rs | 8 +- egui/src/paint/color.rs | 30 ++++- egui_glium/src/backend.rs | 17 ++- egui_glium/src/painter.rs | 205 +++++++++++++++++++-------------- egui_web/src/backend.rs | 17 ++- egui_web/src/fetch.rs | 66 ++++++++--- egui_web/src/lib.rs | 4 + egui_web/src/webgl.rs | 196 ++++++++++++++++++------------- example_web/Cargo.toml | 1 + example_web/src/example_app.rs | 194 ++++++++++++++++++++++--------- 16 files changed, 645 insertions(+), 277 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a96fce1a..4713db68 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,6 +21,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ahash" version = "0.4.6" @@ -72,7 +78,7 @@ dependencies = [ "addr2line", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.4.3", "object", "rustc-demangle", ] @@ -107,6 +113,12 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +[[package]] +name = "bytemuck" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41aa2ec95ca3b5c54cf73c91acf06d24f4495d5f1b1c12506ae3483d646177ac" + [[package]] name = "byteorder" version = "1.3.4" @@ -245,6 +257,12 @@ dependencies = [ "objc", ] +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + [[package]] name = "const_fn" version = "0.4.3" @@ -333,6 +351,15 @@ dependencies = [ "objc", ] +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "criterion" version = "0.3.3" @@ -473,6 +500,16 @@ dependencies = [ "syn", ] +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + [[package]] name = "demo_glium" version = "0.1.0" @@ -586,6 +623,7 @@ version = "0.1.0" dependencies = [ "egui", "egui_web", + "image", "js-sys", "serde", "serde_json", @@ -755,6 +793,22 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "image" +version = "0.23.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f0a8345b33b082aedec2f4d7d4a926b845cee184cbe78b703413066564431b" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "jpeg-decoder", + "num-iter", + "num-rational", + "num-traits", + "png", +] + [[package]] name = "instant" version = "0.1.8" @@ -794,6 +848,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jpeg-decoder" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc797adac5f083b8ff0ca6f6294a999393d76e197c36488e2ef732c4715f6fa3" +dependencies = [ + "byteorder", +] + [[package]] name = "js-sys" version = "0.3.45" @@ -905,6 +968,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + [[package]] name = "miniz_oxide" version = "0.4.3" @@ -1046,6 +1118,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.14" @@ -1202,6 +1296,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "png" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe7f9f1c730833200b134370e1d5098964231af8450bce9b78ee3ab5278b970" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.3.7", +] + [[package]] name = "proc-macro-crate" version = "0.1.5" diff --git a/TODO.md b/TODO.md index f95d0835..ca5c7966 100644 --- a/TODO.md +++ b/TODO.md @@ -4,7 +4,7 @@ TODO-list for the Egui project. If you looking for something to do, look here. ## Top priority -* Egui-web fetch +* Egui-web local storage ## Other diff --git a/docs/example.html b/docs/example.html index 7164f26c..102775b4 100644 --- a/docs/example.html +++ b/docs/example.html @@ -6,7 +6,7 @@ - Egui – An experimental immediate mode GUI written in Rust + Egui Example App