From 8a33e663410385726c5ba5e9993266ea10fd0e14 Mon Sep 17 00:00:00 2001 From: Lucas Meurer Date: Wed, 25 Sep 2024 11:50:10 +0200 Subject: [PATCH] Add egui cpu renderer --- Cargo.lock | 474 ++++++++++++++++++++++- Cargo.toml | 2 +- crates/egui_cpu/Cargo.toml | 23 ++ crates/egui_cpu/examples/cpu_renderer.rs | 67 ++++ crates/egui_cpu/src/lib.rs | 134 +++++++ crates/egui_cpu/src/pipeline.rs | 117 ++++++ output.png | Bin 0 -> 182758 bytes rust-toolchain | 10 - 8 files changed, 813 insertions(+), 14 deletions(-) create mode 100644 crates/egui_cpu/Cargo.toml create mode 100644 crates/egui_cpu/examples/cpu_renderer.rs create mode 100644 crates/egui_cpu/src/lib.rs create mode 100644 crates/egui_cpu/src/pipeline.rs create mode 100644 output.png delete mode 100644 rust-toolchain diff --git a/Cargo.lock b/Cargo.lock index 1a2423eaa..daee43054 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -149,6 +149,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" + [[package]] name = "allocator-api2" version = "0.2.16" @@ -215,6 +221,21 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" + [[package]] name = "arboard" version = "3.4.0" @@ -230,6 +251,17 @@ dependencies = [ "x11rb", ] +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "arrayref" version = "0.3.7" @@ -470,6 +502,29 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "av1-grain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" +dependencies = [ + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -530,6 +585,12 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -545,6 +606,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bitstream-io" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b81e1519b0d82120d2fd469d5bfb2919a9361c48b02d82d04befc1cdd2002452" + [[package]] name = "block" version = "0.1.6" @@ -582,6 +649,12 @@ dependencies = [ "piper", ] +[[package]] +name = "built" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236e6289eda5a812bc6b53c3b024039382a2895fbbeef2d748b2931546d392c4" + [[package]] name = "bumpalo" version = "3.14.0" @@ -614,6 +687,12 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.5.0" @@ -753,7 +832,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", - "half", + "half 1.8.2", ] [[package]] @@ -796,6 +875,12 @@ dependencies = [ "error-code", ] +[[package]] +name = "clipline" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aa02ab3f9d7d7dd389014f64b681a1bd0c0fd88b17373a2b438bb9cafb4dc31" + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -946,7 +1031,7 @@ dependencies = [ "clap", "criterion-plot", "is-terminal", - "itertools", + "itertools 0.10.5", "num-traits", "once_cell", "oorandom", @@ -965,7 +1050,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] @@ -1003,6 +1088,12 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -1097,6 +1188,26 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "digest" version = "0.10.7" @@ -1272,6 +1383,19 @@ dependencies = [ "winit", ] +[[package]] +name = "egui_cpu" +version = "0.28.1" +dependencies = [ + "bytemuck", + "derive_more", + "egui", + "egui_extras", + "euc", + "image", + "vek", +] + [[package]] name = "egui_demo_app" version = "0.28.1" @@ -1503,6 +1627,17 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "281e452d3bad4005426416cdba5ccfd4f5c1280e10099e21db27f7c1c28347fc" +[[package]] +name = "euc" +version = "0.6.0" +source = "git+https://github.com/zesterer/euc#658c8fd5b66599919f64aa8223c78a6ce1893f57" +dependencies = [ + "clipline", + "fxhash", + "image", + "vek", +] + [[package]] name = "event-listener" version = "2.5.3" @@ -1541,6 +1676,22 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half 2.4.1", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fancy-regex" version = "0.11.0" @@ -1600,6 +1751,15 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1719,6 +1879,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "gdk-pixbuf-sys" version = "0.18.0" @@ -2007,6 +2176,16 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.14.3" @@ -2139,13 +2318,30 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", + "exr", "gif", + "image-webp", "num-traits", "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", "zune-core", "zune-jpeg", ] +[[package]] +name = "image-webp" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" +dependencies = [ + "byteorder-lite", + "quick-error", +] + [[package]] name = "images" version = "0.1.0" @@ -2162,6 +2358,12 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284" +[[package]] +name = "imgref" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126" + [[package]] name = "immutable-chunkmap" version = "2.0.5" @@ -2190,6 +2392,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "interpolate_name" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "io-lifetimes" version = "1.0.11" @@ -2221,6 +2434,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2258,6 +2480,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + [[package]] name = "js-sys" version = "0.3.70" @@ -2301,12 +2529,29 @@ dependencies = [ "arrayvec", ] +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "libc" version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +[[package]] +name = "libfuzzer-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7" +dependencies = [ + "arbitrary", + "cc", + "once_cell", +] + [[package]] name = "libloading" version = "0.8.0" @@ -2374,6 +2619,15 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "loop9" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + [[package]] name = "lz4_flex" version = "0.11.1" @@ -2389,6 +2643,16 @@ dependencies = [ "libc", ] +[[package]] +name = "maybe-rayon" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" +dependencies = [ + "cfg-if", + "rayon", +] + [[package]] name = "memchr" version = "2.6.3" @@ -2543,6 +2807,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.26.4" @@ -2571,6 +2841,55 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.16" @@ -3119,6 +3438,19 @@ name = "profiling" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0f7f43585c34e4fdd7497d746bc32e14458cf11c69341cc0587b1d825dde42" +dependencies = [ + "profiling-procmacros", +] + +[[package]] +name = "profiling-procmacros" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" +dependencies = [ + "quote", + "syn 2.0.48", +] [[package]] name = "puffin" @@ -3160,6 +3492,21 @@ dependencies = [ "puffin_http", ] +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.31.0" @@ -3217,6 +3564,56 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rav1e" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", + "num-traits", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", +] + +[[package]] +name = "ravif" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -3419,6 +3816,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.37.25" @@ -3527,6 +3933,12 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "serde" version = "1.0.188" @@ -3613,6 +4025,15 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simd_helpers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" +dependencies = [ + "quote", +] + [[package]] name = "simplecss" version = "0.2.1" @@ -3712,6 +4133,9 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "spirv" @@ -3892,6 +4316,17 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "tiff" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + [[package]] name = "time" version = "0.3.30" @@ -4207,6 +4642,30 @@ dependencies = [ "tiny-skia-path", ] +[[package]] +name = "v_frame" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" +dependencies = [ + "aligned-vec", + "num-traits", + "wasm-bindgen", +] + +[[package]] +name = "vek" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dce3b89992dbfee9b6f46d8a98a4a5ecf79f93f3b077fad3cc2759ebe92214" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version", + "serde", +] + [[package]] name = "version-compare" version = "0.1.1" @@ -5131,6 +5590,15 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + [[package]] name = "zune-jpeg" version = "0.4.11" diff --git a/Cargo.toml b/Cargo.toml index b8e02f3fd..8dd8a553e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ members = [ "examples/*", "tests/*", - "xtask", + "xtask", "crates/egui_cpu", ] [workspace.package] diff --git a/crates/egui_cpu/Cargo.toml b/crates/egui_cpu/Cargo.toml new file mode 100644 index 000000000..6f081b64b --- /dev/null +++ b/crates/egui_cpu/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "egui_cpu" +edition.workspace = true +license.workspace = true +rust-version.workspace = true +version.workspace = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +euc = { git = "https://github.com/zesterer/euc" } +egui = { workspace = true, features = ["bytemuck"] } +image = { workspace = true, default-features = false } +derive_more = { version = "1", features = ["add", "mul"] } +vek = "0.17.1" +bytemuck = "1" + +[dev-dependencies] +egui = { workspace = true, features = ["default_fonts"] } +egui_extras = { workspace = true, features = ["all_loaders"] } + +[lints] +workspace = true diff --git a/crates/egui_cpu/examples/cpu_renderer.rs b/crates/egui_cpu/examples/cpu_renderer.rs new file mode 100644 index 000000000..93f496850 --- /dev/null +++ b/crates/egui_cpu/examples/cpu_renderer.rs @@ -0,0 +1,67 @@ +use egui::load::SizedTexture; +use egui::{include_image, ColorImage, ImageSource, Pos2, RawInput, Stroke, TextureId, Vec2}; + +fn main() { + let ctx = egui::Context::default(); + + let mut input = RawInput { + screen_rect: Some(egui::Rect::from_min_size( + Default::default(), + Vec2::new(400.0, 200.0), + )), + ..Default::default() + }; + input + .viewports + .get_mut(&input.viewport_id) + .unwrap() + .native_pixels_per_point = Some(2.0); + let output = ctx.run(input, |ctx| { + egui::CentralPanel::default().show(ctx, |ui| { + ui.group(|ui| { + ui.label("Hello World!"); + ui.button("Click me!"); + ui.checkbox(&mut true, "Check me!"); + ui.heading("Heading"); + }); + // ui.image(SizedTexture::new( + // TextureId::default(), + // Vec2::new(2048.0, 128.0), + // )); + ui.image(include_image!("../../../media/rerun_io_logo.png")); + }); + + // ctx.debug_painter().rect_filled( + // egui::Rect::from_min_size(Pos2::new(0.0, 0.0), Vec2::new(100.0, 100.0)), + // 10.0, + // egui::Color32::from_rgba_premultiplied(255, 0, 0, 255), + // ); + // ctx.debug_painter().rect_filled( + // egui::Rect::from_min_size(Pos2::new(100.0, 0.0), Vec2::new(100.0, 100.0)), + // 10.0, + // egui::Color32::from_rgba_premultiplied(0, 255, 0, 255), + // ); + // + // ctx.debug_painter().rect_stroke( + // egui::Rect::from_min_size(Pos2::new(200.0, 0.0), Vec2::new(100.0, 100.0)), + // 10.0, + // Stroke::new(10.0, egui::Color32::from_rgba_premultiplied(0, 0, 255, 255)), + // ); + }); + + let primitives = ctx.tessellate(output.shapes, ctx.pixels_per_point()); + + let mut cpu_renderer = egui_cpu::Renderer::default(); + + cpu_renderer.update_textures(output.textures_delta); + + dbg!(ctx.screen_rect()); + + let image = cpu_renderer.render( + &primitives, + ctx.screen_rect().size(), + ctx.pixels_per_point(), + ); + + image.save("output.png").unwrap(); +} diff --git a/crates/egui_cpu/src/lib.rs b/crates/egui_cpu/src/lib.rs new file mode 100644 index 000000000..8f9b0f4c3 --- /dev/null +++ b/crates/egui_cpu/src/lib.rs @@ -0,0 +1,134 @@ +mod pipeline; + +use egui::ahash::HashMap; +use egui::epaint::Primitive; +use egui::{ClippedPrimitive, ColorImage, ImageData, TextureId, TexturesDelta, Vec2}; +use euc::buffer::Buffer2d; +use euc::{IndexedVertices, Pipeline, Sampler, Texture}; +use image::{DynamicImage, ImageBuffer, Pixel, RgbaImage}; +use std::ops::Deref; +use vek::Rgba; + +#[derive(Debug, Default)] +pub struct Renderer { + textures: HashMap>>, +} + +impl Renderer { + pub fn update_textures(&mut self, delta: TexturesDelta) { + for (id, delta) in delta.set { + dbg!(delta.image.size()); + let image = match delta.image { + ImageData::Color(color) => RgbaImage::from_raw( + color.width() as u32, + color.height() as u32, + Vec::from(color.deref().as_raw()), + ) + .unwrap(), + ImageData::Font(font) => { + let color_image = ColorImage { + size: font.size, + pixels: font.srgba_pixels(None).collect(), + }; + + RgbaImage::from_raw( + font.width() as u32, + font.height() as u32, + Vec::from(color_image.as_raw()), + ) + .unwrap() + } + }; + + let buffer = Buffer2d::from_texture(&DynamicImage::from(image).to_rgba8()); + self.textures.insert(id, buffer); + + if delta.pos.is_some() { + unimplemented!() + } + } + } + + pub fn render( + &self, + primitives: &[ClippedPrimitive], + resolution: Vec2, + dpi: f32, + ) -> ImageBuffer, Vec> { + let width = (resolution.x * dpi) as usize; + let height = (resolution.y * dpi) as usize; + + dbg!(width, height); + + let mut output = Buffer2d::fill([width, height], 0x000000); + let mut depth = Buffer2d::fill([width, height], 1.0); + + for ClippedPrimitive { + primitive, + clip_rect, + } in primitives + { + match primitive { + Primitive::Mesh(mesh) => { + let texture = self.textures.get(&mesh.texture_id).unwrap(); + + let sampler = texture + .map(|pixel| Rgba::from(pixel.0).map(|e: u8| e as f32)) + .linear(); + // let sampler = DebugSampler { + // texture: Buffer2d::fill([1, 1], 0.0), + // }; + + // let sampler = |pos| Rgba::new(0, 0, 0, 0); + + let mut pipeline = pipeline::EguiPipeline { + screen_size: vek::Vec2::new(width as f32, height as f32) / dpi, + scissor_rect: Default::default(), + sampler: &sampler, + }; + + pipeline.scissor_rect = vek::Rect::new( + clip_rect.min.x, + clip_rect.min.y, + clip_rect.width(), + clip_rect.height(), + ); + + pipeline.render( + mesh.indices.iter().map(|&i| mesh.vertices[i as usize]), + &mut output, + &mut depth, + ); + } + Primitive::Callback(_) => { + println!("Callback not implemented"); + } + } + } + + let raw = output.raw(); + let raw = Vec::from(bytemuck::cast_slice(&raw)); + let image = RgbaImage::from_raw(width as u32, height as u32, raw).unwrap(); + image + } +} + +struct DebugSampler { + texture: Buffer2d, +} +impl Sampler<2> for DebugSampler { + type Index = f32; + type Sample = Rgba; + type Texture = Buffer2d; + + fn raw_texture(&self) -> &Self::Texture { + &self.texture + } + + fn sample(&self, index: [Self::Index; 2]) -> Self::Sample { + if index[0] != 0.0 || index[1] != 0.0 { + dbg!(index); + } + Rgba::new(0.0, 0.0, 0.0, 0.0) + } +} diff --git a/crates/egui_cpu/src/pipeline.rs b/crates/egui_cpu/src/pipeline.rs new file mode 100644 index 000000000..98b579ca7 --- /dev/null +++ b/crates/egui_cpu/src/pipeline.rs @@ -0,0 +1,117 @@ +use derive_more::{Add, Mul}; +use euc::primitives::PrimitiveKind; +use euc::rasterizer::{Rasterizer, Triangles}; +use euc::{ + AaMode, CoordinateMode, CullMode, DepthMode, Pipeline, PixelMode, Sampler, Texture, + TriangleList, +}; +use vek::{Rgba, Vec2, Vec4}; + +pub(crate) struct EguiPipeline { + pub screen_size: Vec2, + pub scissor_rect: vek::Rect, + pub sampler: S, +} + +#[derive(Debug, Clone, Add, Mul)] +pub(crate) struct VertexData { + text_coord: Vec2, + color: Rgba, +} + +impl<'r, S: Sampler<2, Index = f32, Sample = Rgba>> Pipeline<'r> for EguiPipeline { + type Vertex = egui::epaint::Vertex; + type VertexData = VertexData; + type Primitives = TriangleList; + type Fragment = Rgba; + type Pixel = u32; + + fn coordinate_mode(&self) -> CoordinateMode { + CoordinateMode::VULKAN + } + + fn pixel_mode(&self) -> PixelMode { + PixelMode::WRITE + } + + fn vertex(&self, vertex: &Self::Vertex) -> ([f32; 4], Self::VertexData) { + let position = + position_from_screen(Vec2::new(vertex.pos.x, vertex.pos.y), self.screen_size); + let text_coord = Vec2::new(vertex.uv.x, vertex.uv.y); + let color = Rgba::new( + vertex.color.r() as f32 / 255.0, + vertex.color.g() as f32 / 255.0, + vertex.color.b() as f32 / 255.0, + vertex.color.a() as f32 / 255.0, + ); + (position.into_array(), VertexData { text_coord, color }) + } + + fn fragment(&self, vs_out: Self::VertexData) -> Self::Fragment { + vs_out.color * self.sampler.sample(vs_out.text_coord.into_array()) + } + + fn blend(&self, old: Self::Pixel, new: Self::Fragment) -> Self::Pixel { + //Source over + let source = new; + let dest = Rgba::from(old.to_le_bytes()).map(|c: u8| c as f32); + + let source_alpha = source.a / 255.0; + let inv_source_alpha = 1.0 - source_alpha; + + let r = source.r + dest.r * inv_source_alpha; + let g = source.g + dest.g * inv_source_alpha; + let b = source.b + dest.b * inv_source_alpha; + let a = source.a + dest.a * inv_source_alpha; + u32::from_le_bytes(Rgba::new(r, g, b, a).map(|c| (c) as u8).into_array()) + + // u32::from_le_bytes(new.map(|c| c as u8).into_array()) + } + + fn rasterizer_config( + &self, + ) -> <>::Rasterizer as Rasterizer>::Config + { + CullMode::None + } + + fn aa_mode(&self) -> AaMode { + AaMode::None + } +} + +// From wgsl shader: +// fn unpack_color(color: u32) -> vec4 { +// return vec4( +// f32(color & 255u), +// f32((color >> 8u) & 255u), +// f32((color >> 16u) & 255u), +// f32((color >> 24u) & 255u), +// ) / 255.0; +// } +// fn unpack_color(color: [u8; 4]) -> Vec4 { +// Vec4::new( +// (color & 255u32) as f32, +// ((color >> 8u32) & 255u32) as f32, +// ((color >> 16u32) & 255u32) as f32, +// ((color >> 24u32) & 255u32) as f32, +// ) / 255.0 +// } + +// From wgsl shader: +// fn position_from_screen(screen_pos: vec2) -> vec4 { +// return vec4( +// 2.0 * screen_pos.x / r_locals.screen_size.x - 1.0, +// 1.0 - 2.0 * screen_pos.y / r_locals.screen_size.y, +// 0.0, +// 1.0, +// ); +// } +fn position_from_screen(screen_pos: Vec2, screen_size: Vec2) -> Vec4 { + Vec4::new( + 2.0 * screen_pos.x / screen_size.x - 1.0, + 1.0 - 2.0 * screen_pos.y / screen_size.y, + 0.0, + 1.0, + ) +} diff --git a/output.png b/output.png new file mode 100644 index 0000000000000000000000000000000000000000..71ed3ece708d68842e108c2a5b47b220c461f5b6 GIT binary patch literal 182758 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 literal 0 HcmV?d00001 diff --git a/rust-toolchain b/rust-toolchain deleted file mode 100644 index 871f56248..000000000 --- a/rust-toolchain +++ /dev/null @@ -1,10 +0,0 @@ -# If you see this, run "rustup self update" to get rustup 1.23 or newer. - -# NOTE: above comment is for older `rustup` (before TOML support was added), -# which will treat the first line as the toolchain name, and therefore show it -# to the user in the error, instead of "error: invalid channel name '[toolchain]'". - -[toolchain] -channel = "1.76.0" -components = ["rustfmt", "clippy"] -targets = ["wasm32-unknown-unknown"]