diff --git a/.gitignore b/.gitignore index ee4c674..588be0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,38 @@ -# Added by cargo +# Rust /target -*.csv \ No newline at end of file + +# Python +/.venv +__pycache__/ +*.pyc +*.pyo +*.pyd +.pytest_cache/ + +# Node.js +/node_modules +/dist +npm-debug.log* +yarn-error.log* +yarn-debug.log* + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Editor directories and files +.vscode/ +.idea/ +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# User added +*.csv diff --git a/Cargo.lock b/Cargo.lock index 1612cf8..1368f0b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,65 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "accesskit" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529" - -[[package]] -name = "accesskit_consumer" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520" -dependencies = [ - "accesskit", - "hashbrown", - "immutable-chunkmap", -] - -[[package]] -name = "accesskit_macos" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown", - "objc2", - "objc2-app-kit", - "objc2-foundation", -] - -[[package]] -name = "accesskit_windows" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown", - "paste", - "static_assertions", - "windows 0.58.0", - "windows-core 0.58.0", -] - -[[package]] -name = "accesskit_winit" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f" -dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_windows", - "raw-window-handle", - "winit", -] - [[package]] name = "adler2" version = "2.0.1" @@ -91,67 +32,12 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "alsa" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" -dependencies = [ - "alsa-sys", - "bitflags 2.9.1", - "cfg-if", - "libc", -] - -[[package]] -name = "alsa-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "android-activity" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" -dependencies = [ - "android-properties", - "bitflags 2.9.1", - "cc", - "cesu8", - "jni", - "jni-sys", - "libc", - "log", - "ndk 0.9.0", - "ndk-context", - "ndk-sys 0.6.0+11769913", - "num_enum", - "thiserror 1.0.69", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - [[package]] name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" -[[package]] -name = "android_log-sys" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -190,15 +76,9 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" @@ -206,6050 +86,2218 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" +name = "autocfg" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] -name = "ash" -version = "0.38.0+1.3.281" +name = "av1-grain" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" dependencies = [ - "libloading", + "anyhow", + "arrayvec", + "log", + "nom", + "num-rational", + "v_frame", ] [[package]] -name = "assert_type_match" -version = "0.1.1" +name = "avif-serialize" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" +checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" dependencies = [ - "proc-macro2", - "quote", - "syn", + "arrayvec", ] [[package]] -name = "async-broadcast" -version = "0.7.2" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" -dependencies = [ - "event-listener", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "async-channel" -version = "2.5.0" +name = "bimap" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] -name = "async-executor" -version = "1.13.2" +name = "bindgen" +version = "0.71.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "5f58bf3d7db68cfbac37cfc485a8d711e87e064c3d0fe0435b92f7a407f9d6b3" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "pin-project-lite", - "slab", + "bitflags 2.9.1", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.104", ] [[package]] -name = "async-fs" -version = "2.1.3" +name = "bit-vec" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "async-lock" -version = "3.4.0" +name = "bit_field" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener", - "event-listener-strategy", - "pin-project-lite", -] +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" [[package]] -name = "async-task" -version = "4.7.1" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" -dependencies = [ - "portable-atomic", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "atomic-waker" -version = "1.1.2" +name = "bitflags" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -dependencies = [ - "portable-atomic", -] +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] -name = "atomicow" -version = "1.1.0" +name = "bitstream-io" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" -dependencies = [ - "portable-atomic", - "portable-atomic-util", -] +checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] -name = "autocfg" -version = "1.5.0" +name = "built" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" [[package]] -name = "av1-grain" -version = "0.2.4" +name = "bumpalo" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" -dependencies = [ - "anyhow", - "arrayvec", - "log", - "nom", - "num-rational", - "v_frame", -] +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] -name = "avif-serialize" -version = "0.8.5" +name = "bytemuck" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea8ef51aced2b9191c08197f55450d830876d9933f8f48a429b354f1d496b42" -dependencies = [ - "arrayvec", -] +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] -name = "base64" -version = "0.21.7" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "base64" -version = "0.22.1" +name = "byteorder-lite" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] -name = "bevy" -version = "0.16.1" +name = "cc" +version = "1.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8369c16b7c017437021341521f8b4a0d98e1c70113fb358c3258ae7d661d79" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" dependencies = [ - "bevy_internal", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "bevy_a11y" -version = "0.16.1" +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3561712cf49074d89e9989bfc2e6c6add5d33288f689db9a0c333300d2d004" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "accesskit", - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_reflect", + "nom", ] [[package]] -name = "bevy_animation" -version = "0.16.1" +name = "cfg-expr" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49796627726d0b9a722ad9a0127719e7c1868f474d6575ec0f411e8299c4d7bb" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_derive", - "bevy_ecs", - "bevy_log", - "bevy_math", - "bevy_mesh", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_time", - "bevy_transform", - "bevy_utils", - "blake3", - "derive_more", - "downcast-rs", - "either", - "petgraph", - "ron", - "serde", "smallvec", - "thiserror 2.0.12", - "thread_local", - "tracing", - "uuid", + "target-lexicon", ] [[package]] -name = "bevy_app" -version = "0.16.1" +name = "cfg-if" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4491cc4c718ae76b4c6883df58b94cc88b32dcd894ea8d5b603c7c7da72ca967" -dependencies = [ - "bevy_derive", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "cfg-if", - "console_error_panic_hook", - "ctrlc", - "downcast-rs", - "log", - "thiserror 2.0.12", - "variadics_please", - "wasm-bindgen", - "web-sys", -] +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] -name = "bevy_asset" -version = "0.16.1" +name = "chrono" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56111d9b88d8649f331a667d9d72163fb26bd09518ca16476d238653823db1e" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ - "async-broadcast", - "async-fs", - "async-lock", - "atomicow", - "bevy_app", - "bevy_asset_macros", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "bevy_window", - "bitflags 2.9.1", - "blake3", - "crossbeam-channel", - "derive_more", - "disqualified", - "downcast-rs", - "either", - "futures-io", - "futures-lite", + "android-tzdata", + "iana-time-zone", "js-sys", - "parking_lot", - "ron", + "num-traits 0.2.19", "serde", - "stackfuture", - "thiserror 2.0.12", - "tracing", - "uuid", "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "windows-link 0.1.3", ] [[package]] -name = "bevy_asset_macros" -version = "0.16.1" +name = "chull" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4cca3e67c0ec760d8889d42293d987ce5da92eaf9c592bf5d503728a63b276d" +checksum = "977db54e5eec96279bea3032dcf41d3844e90d62e5cfeded48f8d53b1a755d7a" dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", + "num-bigint 0.3.3", + "num-traits 0.2.19", ] [[package]] -name = "bevy_audio" -version = "0.16.1" +name = "clang-sys" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b4f6f2a5c6c0e7c6825e791d2a061c76c2d6784f114c8f24382163fabbfaaa" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_math", - "bevy_reflect", - "bevy_transform", - "cpal", - "rodio", - "tracing", + "glob", + "libc", + "libloading", ] [[package]] -name = "bevy_color" -version = "0.16.2" +name = "color_quant" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c101cbe1e26b8d701eb77263b14346e2e0cbbd2a6e254b9b1aead814e5ca8d3" -dependencies = [ - "bevy_math", - "bevy_reflect", - "bytemuck", - "derive_more", - "encase", - "serde", - "thiserror 2.0.12", - "wgpu-types", -] +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] -name = "bevy_core_pipeline" -version = "0.16.1" +name = "contour_tracing" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed46363cad80dc00f08254c3015232bd6f640738403961c6d63e7ecfc61625" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_image", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags 2.9.1", - "bytemuck", - "nonmax", - "radsort", - "serde", - "smallvec", - "thiserror 2.0.12", - "tracing", -] +checksum = "c9efef72b4f4049ebc4b690ae8ac98cfb7d3cb50407592745ad2c83106625936" [[package]] -name = "bevy_derive" -version = "0.16.1" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b837bf6c51806b10ebfa9edf1844ad80a3a0760d6c5fac4e90761df91a8901a" -dependencies = [ - "bevy_macro_utils", - "quote", - "syn", -] +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "bevy_diagnostic" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48797366f312a8f31e237d08ce3ee70162591282d2bfe7c5ad8be196fb263e55" +name = "core2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_tasks", - "bevy_time", - "bevy_utils", - "const-fnv1a-hash", - "log", - "serde", - "sysinfo", + "memchr", ] [[package]] -name = "bevy_ecs" -version = "0.16.1" +name = "crc32fast" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2bf6521aae57a0ec3487c4bfb59e36c4a378e834b626a4bea6a885af2fdfe7" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "arrayvec", - "bevy_ecs_macros", - "bevy_platform", - "bevy_ptr", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "bitflags 2.9.1", - "bumpalo", - "concurrent-queue", - "derive_more", - "disqualified", - "fixedbitset", - "indexmap", - "log", - "nonmax", - "serde", - "smallvec", - "thiserror 2.0.12", - "variadics_please", + "cfg-if", ] [[package]] -name = "bevy_ecs_macros" -version = "0.16.1" +name = "crossbeam" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38748d6f3339175c582d751f410fb60a93baf2286c3deb7efebb0878dce7f413" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", ] [[package]] -name = "bevy_encase_derive" -version = "0.16.1" +name = "crossbeam-channel" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8148f4edee470a2ea5cad010184c492a4c94c36d7a7158ea28e134ea87f274ab" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "bevy_macro_utils", - "encase_derive_impl", + "crossbeam-utils", ] [[package]] -name = "bevy_flycam" -version = "0.16.1" +name = "crossbeam-deque" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86d62cba553c444f64b947b8ea76803d6c767dc4c23598a812974defb4265b3" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "bevy", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "bevy_gilrs" -version = "0.16.1" +name = "crossbeam-epoch" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97efef87c631949e67d06bb5d7dfd2a5f936b3b379afb6b1485b08edbb219b87" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_input", - "bevy_platform", - "bevy_time", - "bevy_utils", - "gilrs", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "bevy_gizmos" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7823154a9682128c261d8bddb3a4d7192a188490075c527af04520c2f0f8aad6" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_core_pipeline", - "bevy_ecs", - "bevy_gizmos_macros", - "bevy_image", - "bevy_math", - "bevy_pbr", - "bevy_reflect", - "bevy_render", - "bevy_sprite", - "bevy_time", - "bevy_transform", - "bevy_utils", - "bytemuck", - "tracing", + "crossbeam-utils", ] [[package]] -name = "bevy_gizmos_macros" -version = "0.16.1" +name = "crossbeam-queue" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f378f3b513218ddc78254bbe76536d9de59c1429ebd0c14f5d8f2a25812131ad" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "bevy_gltf" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a080237c0b8842ccc15a06d3379302c68580eeea4497b1c7387e470eda1f07" -dependencies = [ - "base64 0.22.1", - "bevy_animation", - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_core_pipeline", - "bevy_ecs", - "bevy_image", - "bevy_math", - "bevy_mesh", - "bevy_pbr", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_scene", - "bevy_tasks", - "bevy_transform", - "bevy_utils", - "fixedbitset", - "gltf", - "itertools 0.14.0", - "percent-encoding", - "serde", - "serde_json", - "smallvec", - "thiserror 2.0.12", - "tracing", + "crossbeam-utils", ] [[package]] -name = "bevy_image" -version = "0.16.1" +name = "crossbeam-utils" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e6e900cfecadbc3149953169e36b9e26f922ed8b002d62339d8a9dc6129328" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "bitflags 2.9.1", - "bytemuck", - "futures-lite", - "guillotiere", - "half", - "image", - "ktx2", - "rectangle-pack", - "ruzstd", - "serde", - "thiserror 2.0.12", - "tracing", - "wgpu-types", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] -name = "bevy_input" -version = "0.16.1" +name = "crunchy" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d6b6516433f6f7d680f648d04eb1866bb3927a1782d52f74831b62042f3cd1" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "derive_more", - "log", - "smol_str", - "thiserror 2.0.12", -] +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] -name = "bevy_input_focus" -version = "0.16.1" +name = "csgrs" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e2d079fda74d1416e0a57dac29ea2b79ff77f420cd6b87f833d3aa29a46bc4d" +checksum = "b004da954c4987881c668e0051f6c69a23d035b4b406eee539772db4d4944025" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_reflect", - "bevy_window", - "log", + "chull", + "contour_tracing", + "core2", + "doc-image-embed", + "dxf", + "either", + "fast-surface-nets", + "geo", + "geo-buf", + "hashbrown", + "hershey", + "image", + "nalgebra", + "nom", + "parry3d-f64", + "rapier3d-f64", + "robust", + "stl_io", + "svg", "thiserror 2.0.12", + "ttf-parser", + "ttf-parser-utils", ] [[package]] -name = "bevy_internal" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "857da8785678fde537d02944cd20dec9cafb7d4c447efe15f898dc60e733cacd" -dependencies = [ - "bevy_a11y", - "bevy_animation", - "bevy_app", - "bevy_asset", - "bevy_audio", - "bevy_color", - "bevy_core_pipeline", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_gilrs", - "bevy_gizmos", - "bevy_gltf", - "bevy_image", - "bevy_input", - "bevy_input_focus", - "bevy_log", - "bevy_math", - "bevy_pbr", - "bevy_picking", - "bevy_platform", - "bevy_ptr", - "bevy_reflect", - "bevy_render", - "bevy_scene", - "bevy_sprite", - "bevy_state", - "bevy_tasks", - "bevy_text", - "bevy_time", - "bevy_transform", - "bevy_ui", - "bevy_utils", - "bevy_window", - "bevy_winit", -] - -[[package]] -name = "bevy_log" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a61ee8aef17a974f5ca481dcedf0c2bd52670e231d4c4bc9ddef58328865f9" -dependencies = [ - "android_log-sys", - "bevy_app", - "bevy_ecs", - "bevy_utils", - "tracing", - "tracing-log", - "tracing-oslog", - "tracing-subscriber", - "tracing-wasm", -] - -[[package]] -name = "bevy_macro_utils" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052eeebcb8e7e072beea5031b227d9a290f8a7fbbb947573ab6ec81df0fb94be" -dependencies = [ - "parking_lot", - "proc-macro2", - "quote", - "syn", - "toml_edit", +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", ] [[package]] -name = "bevy_math" -version = "0.16.1" +name = "csv-core" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68553e0090fe9c3ba066c65629f636bd58e4ebd9444fdba097b91af6cd3e243f" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" dependencies = [ - "approx", - "bevy_reflect", - "derive_more", - "glam", - "itertools 0.14.0", - "libm", - "rand 0.8.5", - "rand_distr", - "serde", - "smallvec", - "thiserror 2.0.12", - "variadics_please", + "memchr", ] [[package]] -name = "bevy_mesh" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10399c7027001edbc0406d7d0198596b1f07206c1aae715274106ba5bdcac40" +name = "cuda_builder" +version = "0.3.0" +source = "git+https://github.com/Rust-GPU/Rust-CUDA.git#e6e046dd79f4fc028916f02b2d9521c599848d19" dependencies = [ - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_image", - "bevy_math", - "bevy_mikktspace", - "bevy_platform", - "bevy_reflect", - "bevy_transform", - "bevy_utils", - "bitflags 2.9.1", - "bytemuck", - "hexasphere", + "nvvm", "serde", - "thiserror 2.0.12", - "tracing", - "wgpu-types", + "serde_json", ] [[package]] -name = "bevy_mikktspace" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb60c753b968a2de0fd279b76a3d19517695e771edb4c23575c7f92156315de" +name = "cuda_std" +version = "0.2.2" +source = "git+https://github.com/Rust-GPU/Rust-CUDA.git#e6e046dd79f4fc028916f02b2d9521c599848d19" dependencies = [ - "glam", + "bitflags 2.9.1", + "cuda_std_macros", + "glam 0.29.3", + "half", + "paste", + "vek 0.17.2", ] [[package]] -name = "bevy_panorbit_camera" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66273755984c3ef10a3e1ab47f5a06ea560bb2e8d56ca4c4a6fb34d1300602c0" +name = "cuda_std_macros" +version = "0.2.0" +source = "git+https://github.com/Rust-GPU/Rust-CUDA.git#e6e046dd79f4fc028916f02b2d9521c599848d19" dependencies = [ - "bevy", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "bevy_pbr" -version = "0.16.1" +name = "cust" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5e0b4eb871f364a0d217f70f6c41d7fdc6f9f931fa1abbf222180c03d0ae410" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_core_pipeline", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_image", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags 2.9.1", + "bitflags 1.3.2", "bytemuck", - "derive_more", - "fixedbitset", - "nonmax", - "offset-allocator", - "radsort", - "smallvec", - "static_assertions", - "thiserror 2.0.12", - "tracing", + "cust_core", + "cust_derive", + "cust_raw 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "find_cuda_helper", ] [[package]] -name = "bevy_picking" -version = "0.16.1" +name = "cust_core" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed04757938655ed8094ea1efb533f99063a8b22abffc22010c694d291522850" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_mesh", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_time", - "bevy_transform", - "bevy_utils", - "bevy_window", - "crossbeam-channel", - "tracing", - "uuid", + "cust_derive", + "glam 0.20.5", + "mint", + "vek 0.15.10", ] [[package]] -name = "bevy_platform" -version = "0.16.1" +name = "cust_derive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7573dc824a1b08b4c93fdbe421c53e1e8188e9ca1dd74a414455fe571facb47" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" dependencies = [ - "cfg-if", - "critical-section", - "foldhash", - "getrandom 0.2.16", - "hashbrown", - "portable-atomic", - "portable-atomic-util", - "serde", - "spin", - "web-time", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "bevy_ptr" -version = "0.16.1" +name = "cust_raw" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7370d0e46b60e071917711d0860721f5347bc958bf325975ae6913a5dfcf01" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] [[package]] -name = "bevy_reflect" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daeb91a63a1a4df00aa58da8cc4ddbd4b9f16ab8bb647c5553eb156ce36fa8c2" +name = "cust_raw" +version = "0.11.3" +source = "git+https://github.com/Rust-GPU/Rust-CUDA.git#e6e046dd79f4fc028916f02b2d9521c599848d19" dependencies = [ - "assert_type_match", - "bevy_platform", - "bevy_ptr", - "bevy_reflect_derive", - "bevy_utils", - "derive_more", - "disqualified", - "downcast-rs", - "erased-serde", - "foldhash", - "glam", - "petgraph", - "serde", - "smallvec", - "smol_str", - "thiserror 2.0.12", - "uuid", - "variadics_please", - "wgpu-types", + "bimap", + "bindgen", + "cc", + "doxygen-bindgen", ] [[package]] -name = "bevy_reflect_derive" -version = "0.16.1" +name = "doc-image-embed" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ddadc55fe16b45faaa54ab2f9cb00548013c74812e8b018aa172387103cce6" +checksum = "4b1c7e5bbb92b417588a5e733e095416c27c06eedc051065cc955a0a8c8389d9" dependencies = [ - "bevy_macro_utils", + "base64", "proc-macro2", "quote", - "syn", - "uuid", + "syn 2.0.104", ] [[package]] -name = "bevy_render" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef91fed1f09405769214b99ebe4390d69c1af5cdd27967deae9135c550eb1667" -dependencies = [ - "async-channel", - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_encase_derive", - "bevy_image", - "bevy_math", - "bevy_mesh", - "bevy_platform", - "bevy_reflect", - "bevy_render_macros", - "bevy_tasks", - "bevy_time", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags 2.9.1", - "bytemuck", - "codespan-reporting", - "derive_more", - "downcast-rs", - "encase", - "fixedbitset", - "futures-lite", - "image", - "indexmap", - "js-sys", - "ktx2", - "naga", - "naga_oil", - "nonmax", - "offset-allocator", - "send_wrapper", - "serde", - "smallvec", - "thiserror 2.0.12", - "tracing", - "variadics_please", - "wasm-bindgen", - "web-sys", - "wgpu", -] +name = "downcast-rs" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" [[package]] -name = "bevy_render_cli" -version = "0.1.0" +name = "doxygen-bindgen" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ba4ed6eedf7f4ace1632149d8f0e8a65a480534024d65a7c3b9daacdedbad3" dependencies = [ - "bevy", - "bevy_render_core", - "csv", - "glam", - "rand 0.8.5", - "raytracing_core", - "serde", - "toml", + "yap", ] [[package]] -name = "bevy_render_config" -version = "0.1.0" +name = "dxf" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db88ab4334d9288e6658b8bb8e7bc9167ae48878b5f92818e01969a5041d294d" dependencies = [ - "bevy", - "csv", - "glam", - "rand 0.8.5", - "raytracing_core", - "serde", - "toml", + "byteorder", + "chrono", + "encoding_rs", + "enum_primitive", + "image", + "itertools 0.13.0", + "num", + "uuid", + "xmltree", ] [[package]] -name = "bevy_render_core" -version = "0.1.0" +name = "earcutr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" dependencies = [ - "bevy", - "bevy_flycam", - "bevy_panorbit_camera", - "csgrs", - "csv", - "glam", - "rand 0.9.2", - "raytracing_core", - "serde", - "toml", + "itertools 0.11.0", + "num-traits 0.2.19", ] [[package]] -name = "bevy_render_macros" -version = "0.16.1" +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "ena" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd42cf6c875bcf38da859f8e731e119a6aff190d41dd0a1b6000ad57cf2ed3d" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", + "log", ] [[package]] -name = "bevy_scene" -version = "0.16.1" +name = "encoding_rs" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c52ca165200995fe8afd2a1a6c03e4ffee49198a1d4653d32240ea7f217d4ab" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "derive_more", - "serde", - "thiserror 2.0.12", - "uuid", + "cfg-if", ] [[package]] -name = "bevy_sprite" -version = "0.16.1" +name = "enum_primitive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ccae7bab2cb956fb0434004c359e432a3a1a074a6ef4eb471f1fb099f0b620b" +checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_core_pipeline", - "bevy_derive", - "bevy_ecs", - "bevy_image", - "bevy_math", - "bevy_picking", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags 2.9.1", - "bytemuck", - "derive_more", - "fixedbitset", - "nonmax", - "radsort", - "tracing", + "num-traits 0.1.43", ] [[package]] -name = "bevy_state" -version = "0.16.1" +name = "equator" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155d3cd97b900539008cdcaa702f88b724d94b08977b8e591a32536ce66faa8c" +checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_state_macros", - "bevy_utils", - "log", - "variadics_please", + "equator-macro", ] [[package]] -name = "bevy_state_macros" -version = "0.16.1" +name = "equator-macro" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2481c1304fd2a1851a0d4cb63a1ce6421ae40f3f0117cbc9882963ee4c9bb609" +checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ - "bevy_macro_utils", "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] -name = "bevy_tasks" -version = "0.16.1" +name = "equivalent" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b674242641cab680688fc3b850243b351c1af49d4f3417a576debd6cca8dcf5" -dependencies = [ - "async-channel", - "async-executor", - "async-task", - "atomic-waker", - "bevy_platform", - "cfg-if", - "concurrent-queue", - "crossbeam-queue", - "derive_more", - "futures-channel", - "futures-lite", - "heapless", - "pin-project", - "wasm-bindgen-futures", -] - -[[package]] -name = "bevy_text" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d76c85366159f5f54110f33321c76d8429cfd8f39638f26793a305dae568b60" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_derive", - "bevy_ecs", - "bevy_image", - "bevy_log", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_sprite", - "bevy_transform", - "bevy_utils", - "bevy_window", - "cosmic-text", - "serde", - "smallvec", - "sys-locale", - "thiserror 2.0.12", - "tracing", - "unicode-bidi", -] +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] -name = "bevy_time" -version = "0.16.1" +name = "exr" +version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc98eb356c75be04fbbc77bb3d8ffa24c8bacd99f76111cee23d444be6ac8c9c" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "crossbeam-channel", - "log", - "serde", + "bit_field", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", ] [[package]] -name = "bevy_transform" -version = "0.16.1" +name = "fast-surface-nets" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df218e440bb9a19058e1b80a68a031c887bcf7bd3a145b55f361359a2fa3100d" +checksum = "2aef9e8d9e33f51d8120a2e997a819f18239ad7c2735e353ade79208a9a1c442" dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_log", - "bevy_math", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "derive_more", - "serde", - "thiserror 2.0.12", + "glam 0.29.3", + "ndshape", ] [[package]] -name = "bevy_ui" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a4d2ba51865bc3039af29a26b4f52c48b54cc758369f52004caf4b6f03770" -dependencies = [ - "accesskit", - "bevy_a11y", - "bevy_app", - "bevy_asset", - "bevy_color", - "bevy_core_pipeline", - "bevy_derive", - "bevy_ecs", - "bevy_image", - "bevy_input", - "bevy_math", - "bevy_picking", - "bevy_platform", - "bevy_reflect", - "bevy_render", - "bevy_sprite", - "bevy_text", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bytemuck", - "derive_more", - "nonmax", - "smallvec", - "taffy", - "thiserror 2.0.12", - "tracing", +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", ] [[package]] -name = "bevy_utils" -version = "0.16.1" +name = "find_cuda_helper" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f7a8905a125d2017e8561beefb7f2f5e67e93ff6324f072ad87c5fd6ec3b99" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" dependencies = [ - "bevy_platform", - "thread_local", + "glob", ] [[package]] -name = "bevy_window" -version = "0.16.1" +name = "flate2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7e8ad0c17c3cc23ff5566ae2905c255e6986037fb041f74c446216f5c38431" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ - "android-activity", - "bevy_app", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "log", - "raw-window-handle", - "serde", - "smol_str", + "crc32fast", + "miniz_oxide", ] [[package]] -name = "bevy_winit" -version = "0.16.1" +name = "float-cmp" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5e7f00c6b3b6823df5ec2a5e9067273607208919bc8c211773ebb9643c87f0" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ - "accesskit", - "accesskit_winit", - "approx", - "bevy_a11y", - "bevy_app", - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_image", - "bevy_input", - "bevy_input_focus", - "bevy_log", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "bevy_window", - "bytemuck", - "cfg-if", - "crossbeam-channel", - "raw-window-handle", - "tracing", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "winit", + "num-traits 0.2.19", ] [[package]] -name = "bindgen" -version = "0.70.1" +name = "float_next_after" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "geo" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +checksum = "34f0e6e028c581e82e6822a68869514e94c25e7f8ea669a2d8595bdf7461ccc5" dependencies = [ - "bitflags 2.9.1", - "cexpr", - "clang-sys", - "itertools 0.13.0", + "earcutr", + "float_next_after", + "geo-types", + "geographiclib-rs", + "i_overlay", "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 1.1.0", - "shlex", - "syn", + "num-traits 0.2.19", + "robust", + "rstar", + "spade", ] [[package]] -name = "bindgen" -version = "0.72.0" +name = "geo-buf" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f72209734318d0b619a5e0f5129918b848c416e122a3c4ce054e03cb87b726f" +checksum = "3259dd509ae98be7ce49236ec9be30c7d8a0ce84eada28dbefb68bc839b29e66" dependencies = [ - "bitflags 2.9.1", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn", + "geo", + "geo-types", ] [[package]] -name = "bit-set" -version = "0.5.3" +name = "geo-types" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "75a4dcd69d35b2c87a7c83bce9af69fd65c9d68d3833a0ded568983928f3fc99" dependencies = [ - "bit-vec 0.6.3", + "approx", + "num-traits 0.2.19", + "rayon", + "rstar", + "serde", ] [[package]] -name = "bit-set" -version = "0.8.0" +name = "geographiclib-rs" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "f611040a2bb37eaa29a78a128d1e92a378a03e0b6e66ae27398d42b1ba9a7841" dependencies = [ - "bit-vec 0.8.0", + "libm", ] [[package]] -name = "bit-vec" -version = "0.6.3" +name = "getrandom" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] [[package]] -name = "bit-vec" -version = "0.8.0" +name = "getrandom" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] [[package]] -name = "bit_field" -version = "0.10.2" +name = "gif" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" +checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" +dependencies = [ + "color_quant", + "weezl", +] [[package]] -name = "bitflags" -version = "1.3.2" +name = "glam" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits 0.2.19", +] [[package]] -name = "bitflags" -version = "2.9.1" +name = "glam" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" dependencies = [ + "bytemuck", + "libm", "serde", ] [[package]] -name = "bitstream-io" -version = "2.6.0" +name = "glob" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] -name = "blake3" -version = "1.8.2" +name = "half" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ - "arrayref", - "arrayvec", - "cc", "cfg-if", - "constant_time_eq", + "crunchy", ] [[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "block2" -version = "0.5.1" +name = "hash32" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" dependencies = [ - "objc2", + "byteorder", ] [[package]] -name = "blocking" -version = "1.6.2" +name = "hashbrown" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", + "allocator-api2", + "equivalent", + "foldhash", ] [[package]] -name = "built" -version = "0.7.7" +name = "heapless" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] [[package]] -name = "bumpalo" -version = "3.19.0" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "bytemuck" -version = "1.23.1" +name = "hershey" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" +checksum = "7d3cafa4047531c5386484c8f03dd90ff59c6dd96f8f011c32e13728692d1bbb" dependencies = [ - "bytemuck_derive", + "itertools 0.14.0", + "thiserror 2.0.12", ] [[package]] -name = "bytemuck_derive" -version = "1.10.0" +name = "i_float" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "441473f2b4b0459a68628c744bc61d23e730fb00128b841d30fa4bb3972257e4" +checksum = "775f9961a8d2f879725da8aff789bb20a3ddf297473e0c90af75e69313919490" dependencies = [ - "proc-macro2", - "quote", - "syn", + "serde", ] [[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[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.10.1" +name = "i_key_sort" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "347c253b4748a1a28baf94c9ce133b6b166f08573157e05afe718812bc599fcd" [[package]] -name = "calloop" -version = "0.13.0" +name = "i_overlay" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +checksum = "01882ce5ed786bf6e8f5167f171a4026cd129ce17d9ff5cbf1e6749b98628ece" dependencies = [ - "bitflags 2.9.1", - "log", - "polling", - "rustix 0.38.44", - "slab", - "thiserror 1.0.69", + "i_float", + "i_key_sort", + "i_shape", + "i_tree", + "rayon", ] [[package]] -name = "cc" -version = "1.2.31" +name = "i_shape" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" +checksum = "27dbe9e5238d6b9c694c08415bf00fb370b089949bd818ab01f41f8927b8774c" dependencies = [ - "jobserver", - "libc", - "shlex", + "i_float", + "serde", ] [[package]] -name = "cesu8" -version = "1.1.0" +name = "i_tree" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +checksum = "155181bc97d770181cf9477da51218a19ee92a8e5be642e796661aee2b601139" [[package]] -name = "cexpr" -version = "0.6.0" +name = "iana-time-zone" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ - "nom", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", ] [[package]] -name = "cfg-expr" -version = "0.15.8" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "smallvec", - "target-lexicon", + "cc", ] [[package]] -name = "cfg-if" -version = "1.0.1" +name = "image" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" +dependencies = [ + "bytemuck", + "byteorder-lite", + "color_quant", + "exr", + "gif", + "image-webp", + "num-traits 0.2.19", + "png", + "qoi", + "ravif", + "rayon", + "rgb", + "tiff", + "zune-core", + "zune-jpeg", +] [[package]] -name = "cfg_aliases" -version = "0.2.1" +name = "image-webp" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" +dependencies = [ + "byteorder-lite", + "quick-error", +] [[package]] -name = "chrono" -version = "0.4.41" +name = "imgref" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits 0.2.19", - "serde", - "wasm-bindgen", - "windows-link", + "equivalent", + "hashbrown", ] [[package]] -name = "chull" +name = "interpolate_name" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977db54e5eec96279bea3032dcf41d3844e90d62e5cfeded48f8d53b1a755d7a" +checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ - "num-bigint 0.3.3", - "num-traits 0.2.19", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "clang-sys" -version = "1.8.1" +name = "itertools" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ - "glob", - "libc", - "libloading", + "either", ] [[package]] -name = "codespan-reporting" -version = "0.11.1" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ - "termcolor", - "unicode-width", + "either", ] [[package]] -name = "color_quant" -version = "1.1.0" +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] [[package]] -name = "combine" -version = "4.6.7" +name = "itertools" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ - "bytes", - "memchr", + "either", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", - "portable-atomic", -] +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "console_error_panic_hook" -version = "0.1.7" +name = "jobserver" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ - "cfg-if", - "wasm-bindgen", + "getrandom 0.3.3", + "libc", ] [[package]] -name = "const-fnv1a-hash" -version = "1.1.0" +name = "jpeg-decoder" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] -name = "const_panic" -version = "0.2.13" +name = "js-sys" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98d1483e98c9d67f341ab4b3915cfdc54740bd6f5cccc9226ee0535d86aa8fb" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] [[package]] -name = "const_soft_float" -version = "0.1.4" +name = "lebe" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] -name = "constant_time_eq" -version = "0.3.1" +name = "libc" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] -name = "constgebra" -version = "0.1.4" +name = "libfuzzer-sys" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" +checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" dependencies = [ - "const_soft_float", + "arbitrary", + "cc", ] [[package]] -name = "contour_tracing" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9efef72b4f4049ebc4b690ae8ac98cfb7d3cb50407592745ad2c83106625936" - -[[package]] -name = "core-foundation" -version = "0.9.4" +name = "libloading" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ - "core-foundation-sys", - "libc", + "cfg-if", + "windows-link 0.2.0", ] [[package]] -name = "core-foundation" -version = "0.10.1" +name = "libm" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] -name = "core-foundation-sys" -version = "0.8.7" +name = "log" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] -name = "core-graphics" -version = "0.23.2" +name = "loop9" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types", - "foreign-types", - "libc", + "imgref", ] [[package]] -name = "core-graphics-types" -version = "0.1.3" +name = "matrixmultiply" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "libc", + "autocfg", + "rawpointer", ] [[package]] -name = "core2" -version = "0.4.0" +name = "maybe-rayon" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" +checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ - "memchr", + "cfg-if", + "rayon", ] [[package]] -name = "coreaudio-rs" -version = "0.11.3" +name = "memchr" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" -dependencies = [ - "bitflags 1.3.2", - "core-foundation-sys", - "coreaudio-sys", -] +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "coreaudio-sys" -version = "0.2.17" +name = "miniz_oxide" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceec7a6067e62d6f931a2baf6f3a751f4a892595bcec1461a3c94ef9949864b6" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "bindgen 0.72.0", + "adler2", + "simd-adler32", ] [[package]] -name = "cosmic-text" -version = "0.13.2" +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + +[[package]] +name = "nalgebra" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ - "bitflags 2.9.1", - "fontdb", - "log", - "rangemap", - "rustc-hash 1.1.0", - "rustybuzz", - "self_cell", - "smol_str", - "swash", - "sys-locale", - "ttf-parser 0.21.1", - "unicode-bidi", - "unicode-linebreak", - "unicode-script", - "unicode-segmentation", + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits 0.2.19", + "simba", + "typenum", ] [[package]] -name = "cpal" -version = "0.15.3" +name = "nalgebra-macros" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ - "alsa", - "core-foundation-sys", - "coreaudio-rs", - "dasp_sample", - "jni", - "js-sys", - "libc", - "mach2", - "ndk 0.8.0", - "ndk-context", - "oboe", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows 0.54.0", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "crc32fast" -version = "1.5.0" +name = "ndshape" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +checksum = "975bce586ad637e27f6dc26ee907c07050686a588695bfd64b7873a9d48a700c" dependencies = [ - "cfg-if", + "static_assertions", ] [[package]] -name = "critical-section" -version = "1.2.0" +name = "new_debug_unreachable" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] -name = "crossbeam" -version = "0.8.4" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", + "memchr", + "minimal-lexical", ] [[package]] -name = "crossbeam-channel" -version = "0.5.15" +name = "noop_proc_macro" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" -dependencies = [ - "crossbeam-utils", -] +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] -name = "crossbeam-deque" -version = "0.8.6" +name = "num" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "num-bigint 0.4.6", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits 0.2.19", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "num-bigint" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" dependencies = [ - "crossbeam-utils", + "autocfg", + "num-integer", + "num-traits 0.2.19", ] [[package]] -name = "crossbeam-queue" -version = "0.3.12" +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "crossbeam-utils", + "num-integer", + "num-traits 0.2.19", ] [[package]] -name = "crossbeam-utils" -version = "0.8.21" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits 0.2.19", +] [[package]] -name = "crunchy" -version = "0.2.4" +name = "num-derive" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] -name = "csgrs" -version = "0.20.1" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b004da954c4987881c668e0051f6c69a23d035b4b406eee539772db4d4944025" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "bevy_asset", - "bevy_mesh", - "chull", - "contour_tracing", - "core2", - "doc-image-embed", - "dxf", - "either", - "fast-surface-nets", - "geo", - "geo-buf", - "hashbrown", - "hershey", - "image", - "nalgebra", - "nom", - "parry3d-f64", - "rapier3d-f64", - "robust", - "stl_io", - "svg", - "thiserror 2.0.12", - "ttf-parser 0.25.1", - "ttf-parser-utils", - "wgpu-types", + "num-traits 0.2.19", ] [[package]] -name = "csv" -version = "1.3.1" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "csv-core", - "itoa", - "ryu", - "serde", + "autocfg", + "num-integer", + "num-traits 0.2.19", ] [[package]] -name = "csv-core" -version = "0.1.12" +name = "num-rational" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "memchr", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", ] [[package]] -name = "ctrlc" -version = "3.4.7" +name = "num-traits" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" dependencies = [ - "nix 0.30.1", - "windows-sys 0.59.0", + "num-traits 0.2.19", ] [[package]] -name = "cursor-icon" -version = "1.2.0" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] [[package]] -name = "dasp_sample" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +name = "nvvm" +version = "0.1.1" +source = "git+https://github.com/Rust-GPU/Rust-CUDA.git#e6e046dd79f4fc028916f02b2d9521c599848d19" +dependencies = [ + "cust_raw 0.11.3 (git+https://github.com/Rust-GPU/Rust-CUDA.git)", + "strum", +] [[package]] -name = "data-encoding" -version = "2.9.0" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "derive_more" -version = "1.0.0" +name = "ordered-float" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" dependencies = [ - "derive_more-impl", + "num-traits 0.2.19", ] [[package]] -name = "derive_more-impl" -version = "1.0.0" +name = "parry3d-f64" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +checksum = "ed9184cf88474deb3e5ec6c67a8c6fe51ee9572e8c476d44b7de643937a125c5" dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", + "approx", + "arrayvec", + "bitflags 2.9.1", + "downcast-rs", + "either", + "ena", + "hashbrown", + "log", + "nalgebra", + "num-derive", + "num-traits 0.2.19", + "ordered-float", + "rstar", + "simba", + "slab", + "spade", + "thiserror 2.0.12", ] [[package]] -name = "dispatch" -version = "0.2.0" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "disqualified" -version = "1.0.0" +name = "pkg-config" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "dlib" -version = "0.5.2" +name = "png" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ - "libloading", + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", ] [[package]] -name = "doc-image-embed" -version = "0.2.1" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b1c7e5bbb92b417588a5e733e095416c27c06eedc051065cc955a0a8c8389d9" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "base64 0.22.1", - "proc-macro2", - "quote", - "syn", + "zerocopy", ] [[package]] -name = "document-features" -version = "0.2.11" +name = "prettyplease" +version = "0.2.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" dependencies = [ - "litrs", + "proc-macro2", + "syn 2.0.104", ] [[package]] -name = "downcast-rs" -version = "2.0.1" +name = "proc-macro2" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] [[package]] -name = "dpi" -version = "0.1.2" +name = "profiling" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" +dependencies = [ + "profiling-procmacros", +] [[package]] -name = "dxf" -version = "0.6.0" +name = "profiling-procmacros" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db88ab4334d9288e6658b8bb8e7bc9167ae48878b5f92818e01969a5041d294d" +checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ - "byteorder", - "chrono", - "encoding_rs", - "enum_primitive", - "image", - "itertools 0.13.0", - "num", - "uuid", - "xmltree", + "quote", + "syn 2.0.104", ] [[package]] -name = "earcutr" -version = "0.4.3" +name = "qoi" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" dependencies = [ - "itertools 0.11.0", - "num-traits 0.2.19", + "bytemuck", ] [[package]] -name = "either" -version = "1.15.0" +name = "quick-error" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] -name = "ena" -version = "0.14.3" +name = "quote" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ - "log", + "proc-macro2", ] [[package]] -name = "encase" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020" -dependencies = [ - "const_panic", - "encase_derive", - "glam", - "thiserror 1.0.69", -] - -[[package]] -name = "encase_derive" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85" -dependencies = [ - "encase_derive_impl", -] - -[[package]] -name = "encase_derive_impl" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] -name = "enum_primitive" -version = "0.1.1" +name = "rand" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "num-traits 0.1.43", + "libc", + "rand_chacha", + "rand_core", ] [[package]] -name = "equator" -version = "0.4.2" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ - "equator-macro", + "ppv-lite86", + "rand_core", ] [[package]] -name = "equator-macro" -version = "0.4.2" +name = "rand_core" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "proc-macro2", - "quote", - "syn", + "getrandom 0.2.16", ] [[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "erased-serde" -version = "0.4.6" +name = "rapier3d-f64" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +checksum = "75a10d0735644bdc60b54a573a1ba413bab4f4822ce403e4f637f4d0b3d54d6b" dependencies = [ - "serde", - "typeid", + "approx", + "arrayvec", + "bit-vec", + "bitflags 2.9.1", + "crossbeam", + "downcast-rs", + "log", + "nalgebra", + "num-derive", + "num-traits 0.2.19", + "ordered-float", + "parry3d-f64", + "profiling", + "rustc-hash", + "simba", + "thiserror 2.0.12", ] [[package]] -name = "errno" -version = "0.3.13" +name = "rav1e" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av1-grain", + "bitstream-io", + "built", + "cfg-if", + "interpolate_name", + "itertools 0.12.1", "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "euclid" -version = "0.22.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" -dependencies = [ + "libfuzzer-sys", + "log", + "maybe-rayon", + "new_debug_unreachable", + "noop_proc_macro", + "num-derive", "num-traits 0.2.19", + "once_cell", + "paste", + "profiling", + "rand", + "rand_chacha", + "simd_helpers", + "system-deps", + "thiserror 1.0.69", + "v_frame", + "wasm-bindgen", ] [[package]] -name = "event-listener" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener", - "pin-project-lite", -] - -[[package]] -name = "exr" -version = "1.73.0" +name = "ravif" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" +checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" dependencies = [ - "bit_field", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", ] [[package]] -name = "fast-surface-nets" +name = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aef9e8d9e33f51d8120a2e997a819f18239ad7c2735e353ade79208a9a1c442" -dependencies = [ - "glam", - "ndshape", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fdeflate" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "flate2" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" -dependencies = [ - "crc32fast", - "miniz_oxide", -] - -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "float_next_after" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[package]] -name = "font-types" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "fontconfig-parser" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" -dependencies = [ - "roxmltree", -] - -[[package]] -name = "fontdb" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" -dependencies = [ - "fontconfig-parser", - "log", - "memmap2", - "slotmap", - "tinyvec", - "ttf-parser 0.20.0", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared", -] +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] -name = "foreign-types-macros" -version = "0.2.3" +name = "rayon" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "proc-macro2", - "quote", - "syn", + "either", + "rayon-core", ] [[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - -[[package]] -name = "futures-channel" -version = "0.3.31" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "futures-core", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +name = "raytracing" +version = "0.1.0" dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", + "csgrs", + "raytracing_cli", + "raytracing_config", + "raytracing_core", + "raytracing_renderer", ] [[package]] -name = "geo" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f0e6e028c581e82e6822a68869514e94c25e7f8ea669a2d8595bdf7461ccc5" +name = "raytracing_cli" +version = "0.1.0" dependencies = [ - "earcutr", - "float_next_after", - "geo-types", - "geographiclib-rs", - "i_overlay", - "log", - "num-traits 0.2.19", - "robust", - "rstar", - "spade", -] - -[[package]] -name = "geo-buf" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3259dd509ae98be7ce49236ec9be30c7d8a0ce84eada28dbefb68bc839b29e66" -dependencies = [ - "geo", - "geo-types", -] - -[[package]] -name = "geo-types" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a4dcd69d35b2c87a7c83bce9af69fd65c9d68d3833a0ded568983928f3fc99" -dependencies = [ - "approx", - "num-traits 0.2.19", - "rayon", - "rstar", - "serde", -] - -[[package]] -name = "geographiclib-rs" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f611040a2bb37eaa29a78a128d1e92a378a03e0b6e66ae27398d42b1ba9a7841" -dependencies = [ - "libm", -] - -[[package]] -name = "gethostname" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" -dependencies = [ - "libc", - "windows-targets 0.48.5", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", -] - -[[package]] -name = "getrandom" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - -[[package]] -name = "gif" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gilrs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb2c998745a3c1ac90f64f4f7b3a54219fd3612d7705e7798212935641ed18f" -dependencies = [ - "fnv", - "gilrs-core", - "log", - "uuid", - "vec_map", -] - -[[package]] -name = "gilrs-core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d95ae10ce5aa99543a28cf74e41c11f3b9e3c14f0452bbde46024753cd683e" -dependencies = [ - "core-foundation 0.10.1", - "inotify", - "io-kit-sys", - "js-sys", - "libc", - "libudev-sys", - "log", - "nix 0.29.0", - "uuid", - "vec_map", - "wasm-bindgen", - "web-sys", - "windows 0.61.3", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs 0.8.27", -] - -[[package]] -name = "glam" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" -dependencies = [ - "bytemuck", - "libm", - "rand 0.8.5", - "serde", -] - -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - -[[package]] -name = "glow" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gltf" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ce1918195723ce6ac74e80542c5a96a40c2b26162c1957a5cd70799b8cacf7" -dependencies = [ - "byteorder", - "gltf-json", - "lazy_static", - "serde_json", -] - -[[package]] -name = "gltf-derive" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14070e711538afba5d6c807edb74bcb84e5dbb9211a3bf5dea0dfab5b24f4c51" -dependencies = [ - "inflections", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "gltf-json" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6176f9d60a7eab0a877e8e96548605dedbde9190a7ae1e80bbcc1c9af03ab14" -dependencies = [ - "gltf-derive", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.9.1", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "gpu-allocator" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" -dependencies = [ - "log", - "presser", - "thiserror 1.0.69", - "windows 0.58.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.9.1", - "gpu-descriptor-types", - "hashbrown", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "grid" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" - -[[package]] -name = "guillotiere" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" -dependencies = [ - "euclid", - "svg_fmt", -] - -[[package]] -name = "half" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", - "serde", -] - -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "portable-atomic", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" - -[[package]] -name = "hershey" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3cafa4047531c5386484c8f03dd90ff59c6dd96f8f011c32e13728692d1bbb" -dependencies = [ - "itertools 0.14.0", - "thiserror 2.0.12", -] - -[[package]] -name = "hexasphere" -version = "15.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679" -dependencies = [ - "constgebra", - "glam", - "tinyvec", -] - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "i_float" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775f9961a8d2f879725da8aff789bb20a3ddf297473e0c90af75e69313919490" -dependencies = [ - "serde", -] - -[[package]] -name = "i_key_sort" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347c253b4748a1a28baf94c9ce133b6b166f08573157e05afe718812bc599fcd" - -[[package]] -name = "i_overlay" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01882ce5ed786bf6e8f5167f171a4026cd129ce17d9ff5cbf1e6749b98628ece" -dependencies = [ - "i_float", - "i_key_sort", - "i_shape", - "i_tree", - "rayon", -] - -[[package]] -name = "i_shape" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27dbe9e5238d6b9c694c08415bf00fb370b089949bd818ab01f41f8927b8774c" -dependencies = [ - "i_float", - "serde", -] - -[[package]] -name = "i_tree" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155181bc97d770181cf9477da51218a19ee92a8e5be642e796661aee2b601139" - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.61.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "image" -version = "0.25.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" -dependencies = [ - "bytemuck", - "byteorder-lite", - "color_quant", - "exr", - "gif", - "image-webp", - "num-traits 0.2.19", - "png", - "qoi", - "ravif", - "rayon", - "rgb", - "tiff", - "zune-core", - "zune-jpeg", -] - -[[package]] -name = "image-webp" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6970fe7a5300b4b42e62c52efa0187540a5bef546c60edaf554ef595d2e6f0b" -dependencies = [ - "byteorder-lite", - "quick-error", -] - -[[package]] -name = "imgref" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" - -[[package]] -name = "immutable-chunkmap" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "indexmap" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" -dependencies = [ - "equivalent", - "hashbrown", - "serde", -] - -[[package]] -name = "inflections" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" - -[[package]] -name = "inotify" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" -dependencies = [ - "bitflags 2.9.1", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - -[[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", -] - -[[package]] -name = "io-kit-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b" -dependencies = [ - "core-foundation-sys", - "mach2", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -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 = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jni" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" -dependencies = [ - "cesu8", - "cfg-if", - "combine", - "jni-sys", - "log", - "thiserror 1.0.69", - "walkdir", - "windows-sys 0.45.0", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" -dependencies = [ - "getrandom 0.3.3", - "libc", -] - -[[package]] -name = "jpeg-decoder" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading", - "pkg-config", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "ktx2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "lebe" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" - -[[package]] -name = "lewton" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" -dependencies = [ - "byteorder", - "ogg", - "tinyvec", -] - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libfuzzer-sys" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404" -dependencies = [ - "arbitrary", - "cc", -] - -[[package]] -name = "libloading" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" -dependencies = [ - "cfg-if", - "windows-targets 0.53.3", -] - -[[package]] -name = "libm" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" - -[[package]] -name = "libredox" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" -dependencies = [ - "bitflags 2.9.1", - "libc", - "redox_syscall 0.5.17", -] - -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "litrs" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" - -[[package]] -name = "lock_api" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "loop9" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" -dependencies = [ - "imgref", -] - -[[package]] -name = "mach2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640282b302c0bb0a2a8e0233ead9035e3bed871f0b7e81fe4a1ec829765db44" -dependencies = [ - "libc", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[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.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "memmap2" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28" -dependencies = [ - "libc", -] - -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.9.1", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", - "paste", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", - "simd-adler32", -] - -[[package]] -name = "naga" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" -dependencies = [ - "arrayvec", - "bit-set 0.8.0", - "bitflags 2.9.1", - "cfg_aliases", - "codespan-reporting", - "hexf-parse", - "indexmap", - "log", - "pp-rs", - "rustc-hash 1.1.0", - "spirv", - "strum", - "termcolor", - "thiserror 2.0.12", - "unicode-xid", -] - -[[package]] -name = "naga_oil" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2464f7395decfd16bb4c33fb0cb3b2c645cc60d051bc7fb652d3720bfb20f18" -dependencies = [ - "bit-set 0.5.3", - "codespan-reporting", - "data-encoding", - "indexmap", - "naga", - "once_cell", - "regex", - "regex-syntax 0.8.5", - "rustc-hash 1.1.0", - "thiserror 1.0.69", - "tracing", - "unicode-ident", -] - -[[package]] -name = "nalgebra" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits 0.2.19", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" -dependencies = [ - "bitflags 2.9.1", - "jni-sys", - "log", - "ndk-sys 0.5.0+25.2.9519653", - "num_enum", - "thiserror 1.0.69", -] - -[[package]] -name = "ndk" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" -dependencies = [ - "bitflags 2.9.1", - "jni-sys", - "log", - "ndk-sys 0.6.0+11769913", - "num_enum", - "raw-window-handle", - "thiserror 1.0.69", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-sys" -version = "0.5.0+25.2.9519653" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "ndk-sys" -version = "0.6.0+11769913" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "ndshape" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975bce586ad637e27f6dc26ee907c07050686a588695bfd64b7873a9d48a700c" -dependencies = [ - "static_assertions", -] - -[[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.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nonmax" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" - -[[package]] -name = "noop_proc_macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" - -[[package]] -name = "ntapi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" -dependencies = [ - "winapi", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.6", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits 0.2.19", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits 0.2.19", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits 0.2.19", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits 0.2.19", -] - -[[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", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits 0.2.19", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint 0.4.6", - "num-integer", - "num-traits 0.2.19", -] - -[[package]] -name = "num-traits" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_enum" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" -dependencies = [ - "num_enum_derive", - "rustversion", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - -[[package]] -name = "objc2" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" -dependencies = [ - "objc-sys", - "objc2-encode", -] - -[[package]] -name = "objc2-app-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.9.1", - "block2", - "libc", - "objc2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-core-foundation" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "objc2-core-image" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2", - "objc2", - "objc2-contacts", - "objc2-foundation", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.9.1", - "block2", - "dispatch", - "libc", - "objc2", -] - -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-foundation", - "objc2-metal", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2", - "objc2-foundation", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.9.1", - "block2", - "objc2", - "objc2-core-location", - "objc2-foundation", -] - -[[package]] -name = "oboe" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb" -dependencies = [ - "jni", - "ndk 0.8.0", - "ndk-context", - "num-derive", - "num-traits 0.2.19", - "oboe-sys", -] - -[[package]] -name = "oboe-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8bb09a4a2b1d668170cfe0a7d5bc103f8999fb316c98099b6a9939c9f2e79d" -dependencies = [ - "cc", -] - -[[package]] -name = "offset-allocator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" -dependencies = [ - "log", - "nonmax", -] - -[[package]] -name = "ogg" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" -dependencies = [ - "byteorder", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "orbclient" -version = "0.3.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" -dependencies = [ - "libredox", -] - -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "ordered-float" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" -dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - -[[package]] -name = "parking_lot" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.5.17", - "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "parry3d-f64" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9184cf88474deb3e5ec6c67a8c6fe51ee9572e8c476d44b7de643937a125c5" -dependencies = [ - "approx", - "arrayvec", - "bitflags 2.9.1", - "downcast-rs", - "either", - "ena", - "hashbrown", - "log", - "nalgebra", - "num-derive", - "num-traits 0.2.19", - "ordered-float 5.0.0", - "rstar", - "simba", - "slab", - "spade", - "thiserror 2.0.12", -] - -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "petgraph" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" -dependencies = [ - "fixedbitset", - "indexmap", - "serde", - "serde_derive", -] - -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - -[[package]] -name = "polling" -version = "3.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee9b2fa7a4517d2c91ff5bc6c297a427a96749d15f98fcdbb22c05571a4d4b7" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix 1.0.8", - "windows-sys 0.60.2", -] - -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - -[[package]] -name = "portable-atomic-util" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "pp-rs" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - -[[package]] -name = "prettyplease" -version = "0.2.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff24dfcda44452b9816fff4cd4227e1bb73ff5a2f1bc1105aa92fb8565ce44d2" -dependencies = [ - "proc-macro2", - "syn", -] - -[[package]] -name = "proc-macro-crate" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "profiling" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" -dependencies = [ - "profiling-procmacros", -] - -[[package]] -name = "profiling-procmacros" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" -dependencies = [ - "quote", - "syn", -] - -[[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 = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "radsort" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.3", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.16", -] - -[[package]] -name = "rand_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" -dependencies = [ - "getrandom 0.3.3", -] - -[[package]] -name = "rand_distr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" -dependencies = [ - "num-traits 0.2.19", - "rand 0.8.5", -] - -[[package]] -name = "range-alloc" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" - -[[package]] -name = "rangemap" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7e49bb0bf967717f7bd674458b3d6b0c5f48ec7e3038166026a69fc22223" - -[[package]] -name = "rapier3d-f64" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a10d0735644bdc60b54a573a1ba413bab4f4822ce403e4f637f4d0b3d54d6b" -dependencies = [ - "approx", - "arrayvec", - "bit-vec 0.8.0", - "bitflags 2.9.1", - "crossbeam", - "downcast-rs", - "log", - "nalgebra", - "num-derive", - "num-traits 0.2.19", - "ordered-float 5.0.0", - "parry3d-f64", - "profiling", - "rustc-hash 2.1.1", - "simba", - "thiserror 2.0.12", -] - -[[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 0.2.19", - "once_cell", - "paste", - "profiling", - "rand 0.8.5", - "rand_chacha 0.3.1", - "simd_helpers", - "system-deps", - "thiserror 1.0.69", - "v_frame", - "wasm-bindgen", -] - -[[package]] -name = "ravif" -version = "0.11.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5825c26fddd16ab9f515930d49028a630efec172e903483c94796cfe31893e6b" -dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error", - "rav1e", - "rayon", - "rgb", -] - -[[package]] -name = "raw-window-handle" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" - -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "raytracing" -version = "0.1.0" -dependencies = [ - "csgrs", - "raytracing_cli", -] - -[[package]] -name = "raytracing_cli" -version = "0.1.0" -dependencies = [ - "bevy_render_cli", - "csv", - "glam", - "rand 0.8.5", - "raytracing_config", - "raytracing_core", - "serde", - "toml", -] - -[[package]] -name = "raytracing_config" -version = "0.1.0" -dependencies = [ - "csv", - "glam", - "rand 0.8.5", - "raytracing_core", - "serde", - "toml", -] - -[[package]] -name = "raytracing_core" -version = "0.1.0" -dependencies = [ - "csv", - "glam", - "rand 0.8.5", - "serde", - "toml", -] - -[[package]] -name = "read-fonts" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ca636dac446b5664bd16c069c00a9621806895b8bb02c2dc68542b23b8f25d" -dependencies = [ - "bytemuck", - "font-types", -] - -[[package]] -name = "rectangle-pack" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - -[[package]] -name = "rgb" -version = "0.8.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" - -[[package]] -name = "robust" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839" - -[[package]] -name = "rodio" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1" -dependencies = [ - "cpal", - "lewton", -] - -[[package]] -name = "ron" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" -dependencies = [ - "base64 0.21.7", - "bitflags 2.9.1", - "serde", - "serde_derive", -] - -[[package]] -name = "roxmltree" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" - -[[package]] -name = "rstar" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" -dependencies = [ - "heapless", - "num-traits 0.2.19", - "smallvec", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustix" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" -dependencies = [ - "bitflags 2.9.1", - "errno", - "libc", - "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", -] - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "rustybuzz" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" -dependencies = [ - "bitflags 2.9.1", - "bytemuck", - "libm", - "smallvec", - "ttf-parser 0.21.1", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-properties", - "unicode-script", -] - -[[package]] -name = "ruzstd" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c" -dependencies = [ - "twox-hash", -] - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "safe_arch" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "self_cell" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" - -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.142" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_spanned" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" -dependencies = [ - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "simba" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" -dependencies = [ - "approx", - "num-complex", - "num-traits 0.2.19", - "paste", - "wide", -] - -[[package]] -name = "simd-adler32" -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 = "skrifa" -version = "0.31.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeb4ca4399663735553a09dd17ce7e49a0a0203f03b706b39628c4d913a8607" -dependencies = [ - "bytemuck", - "read-fonts", -] - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "spade" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a14e31a007e9f85c32784b04f89e6e194bb252a4d41b4a8ccd9e77245d901c8c" -dependencies = [ - "hashbrown", - "num-traits 0.2.19", - "robust", - "smallvec", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "portable-atomic", -] - -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.9.1", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "stackfuture" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stl_io" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff2e145168af9fef3b518ac0c6f9849c407b3df8a28582ced9f1fda510aa34c" -dependencies = [ - "byteorder", - "float-cmp", -] - -[[package]] -name = "strum" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[package]] -name = "svg" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94afda9cd163c04f6bee8b4bf2501c91548deae308373c436f36aeff3cf3c4a3" - -[[package]] -name = "svg_fmt" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" - -[[package]] -name = "swash" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f745de914febc7c9ab4388dfaf94bbc87e69f57bb41133a9b0c84d4be49856f3" -dependencies = [ - "skrifa", - "yazi", - "zeno", -] - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sys-locale" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" -dependencies = [ - "libc", -] - -[[package]] -name = "sysinfo" -version = "0.34.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2" -dependencies = [ - "libc", - "memchr", - "ntapi", - "objc2-core-foundation", - "windows 0.57.0", -] - -[[package]] -name = "system-deps" -version = "6.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" -dependencies = [ - "cfg-expr", - "heck", - "pkg-config", - "toml", - "version-compare", -] - -[[package]] -name = "taffy" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" -dependencies = [ - "arrayvec", - "grid", - "serde", - "slotmap", -] - -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl 2.0.12", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[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 = "tinyvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "toml" -version = "0.8.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.22.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "toml_write", - "winnow", -] - -[[package]] -name = "toml_write" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" - -[[package]] -name = "tracing" -version = "0.1.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-oslog" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e" -dependencies = [ - "bindgen 0.70.1", - "cc", - "cfg-if", - "once_cell", - "parking_lot", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "tracing-wasm" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" -dependencies = [ - "tracing", - "tracing-subscriber", - "wasm-bindgen", -] - -[[package]] -name = "ttf-parser" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" - -[[package]] -name = "ttf-parser" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" - -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - -[[package]] -name = "ttf-parser-utils" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2ad77abd4b1ab08adbab7f399be4cc1ff6958421cafa86af75824d9179b5c0" -dependencies = [ - "ttf-parser 0.25.1", -] - -[[package]] -name = "twox-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" - -[[package]] -name = "typeid" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" - -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-bidi-mirroring" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" - -[[package]] -name = "unicode-ccc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" - -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-properties" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" - -[[package]] -name = "unicode-script" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" - -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "uuid" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" -dependencies = [ - "getrandom 0.3.3", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "v_frame" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" -dependencies = [ - "aligned-vec", - "num-traits 0.2.19", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "variadics_please" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version-compare" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", + "csv", + "glam 0.29.3", + "rand", + "raytracing_config", + "raytracing_core", + "serde", + "toml", ] [[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +name = "raytracing_config" +version = "0.1.0" dependencies = [ - "js-sys", - "wasm-bindgen", + "csv", + "glam 0.29.3", + "rand", + "raytracing_core", + "serde", + "toml", ] [[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +name = "raytracing_core" +version = "0.1.0" dependencies = [ - "js-sys", - "wasm-bindgen", + "csv", + "glam 0.29.3", + "rand", + "serde", + "toml", ] [[package]] -name = "weezl" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" - -[[package]] -name = "wgpu" -version = "24.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" +name = "raytracing_cuda_kernel" +version = "0.1.0" dependencies = [ - "arrayvec", - "bitflags 2.9.1", - "cfg_aliases", - "document-features", - "js-sys", - "log", - "naga", - "parking_lot", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", + "cuda_std", + "glam 0.29.3", ] [[package]] -name = "wgpu-core" -version = "24.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" +name = "raytracing_renderer" +version = "0.1.0" dependencies = [ - "arrayvec", - "bit-vec 0.8.0", - "bitflags 2.9.1", - "cfg_aliases", - "document-features", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.12", - "wgpu-hal", - "wgpu-types", + "cuda_builder", + "cust", + "glam 0.29.3", + "image", + "rand", + "rayon", + "raytracing_config", + "raytracing_core", + "raytracing_cuda_kernel", ] [[package]] -name = "wgpu-hal" -version = "24.0.4" +name = "regex" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set 0.8.0", - "bitflags 2.9.1", - "block", - "bytemuck", - "cfg_aliases", - "core-graphics-types", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor", - "js-sys", - "khronos-egl", - "libc", - "libloading", - "log", - "metal", - "naga", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "once_cell", - "ordered-float 4.6.0", - "parking_lot", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.12", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "windows 0.58.0", - "windows-core 0.58.0", + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] -name = "wgpu-types" -version = "24.0.0" +name = "regex-automata" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ - "bitflags 2.9.1", - "js-sys", - "log", - "serde", - "web-sys", + "aho-corasick", + "memchr", + "regex-syntax", ] [[package]] -name = "wide" -version = "0.7.33" +name = "regex-syntax" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" -dependencies = [ - "bytemuck", - "safe_arch", -] +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] -name = "winapi" -version = "0.3.9" +name = "rgb" +version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] +checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "robust" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839" [[package]] -name = "winapi-util" -version = "0.1.9" +name = "rstar" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" dependencies = [ - "windows-sys 0.59.0", + "heapless", + "num-traits 0.2.19", + "smallvec", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "rustc-hash" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] -name = "windows" -version = "0.54.0" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "windows-core 0.54.0", - "windows-targets 0.52.6", + "semver", ] [[package]] -name = "windows" -version = "0.57.0" +name = "rustversion" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" -dependencies = [ - "windows-core 0.57.0", - "windows-targets 0.52.6", -] +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] -name = "windows" -version = "0.58.0" +name = "ryu" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" -dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", -] +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] -name = "windows" -version = "0.61.3" +name = "safe_arch" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ - "windows-collections", - "windows-core 0.61.2", - "windows-future", - "windows-link", - "windows-numerics", + "bytemuck", ] [[package]] -name = "windows-collections" -version = "0.2.0" +name = "semver" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" -dependencies = [ - "windows-core 0.61.2", -] +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] -name = "windows-core" -version = "0.54.0" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "windows-result 0.1.2", - "windows-targets 0.52.6", + "serde_core", + "serde_derive", ] [[package]] -name = "windows-core" -version = "0.57.0" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "windows-implement 0.57.0", - "windows-interface 0.57.0", - "windows-result 0.1.2", - "windows-targets 0.52.6", + "serde_derive", ] [[package]] -name = "windows-core" -version = "0.58.0" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "windows-core" -version = "0.61.2" +name = "serde_json" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ - "windows-implement 0.60.0", - "windows-interface 0.59.1", - "windows-link", - "windows-result 0.3.4", - "windows-strings 0.4.2", + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", ] [[package]] -name = "windows-future" -version = "0.2.1" +name = "serde_spanned" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ - "windows-core 0.61.2", - "windows-link", - "windows-threading", + "serde", ] [[package]] -name = "windows-implement" -version = "0.57.0" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "windows-implement" -version = "0.58.0" +name = "simba" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" dependencies = [ - "proc-macro2", - "quote", - "syn", + "approx", + "num-complex", + "num-traits 0.2.19", + "paste", + "wide", ] [[package]] -name = "windows-implement" -version = "0.60.0" +name = "simd-adler32" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] -name = "windows-interface" -version = "0.57.0" +name = "simd_helpers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" dependencies = [ - "proc-macro2", "quote", - "syn", ] [[package]] -name = "windows-interface" -version = "0.58.0" +name = "slab" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] -name = "windows-interface" -version = "0.59.1" +name = "smallvec" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "spade" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a14e31a007e9f85c32784b04f89e6e194bb252a4d41b4a8ccd9e77245d901c8c" dependencies = [ - "proc-macro2", - "quote", - "syn", + "hashbrown", + "num-traits 0.2.19", + "robust", + "smallvec", ] [[package]] -name = "windows-link" -version = "0.1.3" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] -name = "windows-numerics" -version = "0.2.0" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" -dependencies = [ - "windows-core 0.61.2", - "windows-link", -] +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "windows-result" -version = "0.1.2" +name = "stl_io" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "cff2e145168af9fef3b518ac0c6f9849c407b3df8a28582ced9f1fda510aa34c" dependencies = [ - "windows-targets 0.52.6", + "byteorder", + "float-cmp", ] [[package]] -name = "windows-result" -version = "0.2.0" +name = "strum" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" dependencies = [ - "windows-targets 0.52.6", + "strum_macros", ] [[package]] -name = "windows-result" -version = "0.3.4" +name = "strum_macros" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" dependencies = [ - "windows-link", + "heck", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "svg" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] +checksum = "94afda9cd163c04f6bee8b4bf2501c91548deae308373c436f36aeff3cf3c4a3" [[package]] -name = "windows-strings" -version = "0.4.2" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "windows-link", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "syn" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ - "windows-targets 0.42.2", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "system-deps" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "windows-targets 0.52.6", + "cfg-expr", + "heck", + "pkg-config", + "toml", + "version-compare", ] [[package]] -name = "windows-sys" -version = "0.59.0" +name = "target-lexicon" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] -name = "windows-sys" -version = "0.60.2" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "windows-targets 0.53.3", + "thiserror-impl 1.0.69", ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "thiserror" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "thiserror-impl 2.0.12", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "windows-targets" -version = "0.52.6" +name = "thiserror-impl" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "proc-macro2", + "quote", + "syn 2.0.104", ] [[package]] -name = "windows-targets" -version = "0.53.3" +name = "tiff" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "flate2", + "jpeg-decoder", + "weezl", ] [[package]] -name = "windows-threading" -version = "0.1.0" +name = "toml" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ - "windows-link", + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" +name = "toml_datetime" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +name = "toml_edit" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +name = "toml_write" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" +name = "ttf-parser" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" +name = "ttf-parser-utils" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "ff2ad77abd4b1ab08adbab7f399be4cc1ff6958421cafa86af75824d9179b5c0" +dependencies = [ + "ttf-parser", +] [[package]] -name = "windows_i686_gnu" -version = "0.42.2" +name = "typenum" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] -name = "windows_i686_gnu" -version = "0.48.5" +name = "unicode-ident" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] -name = "windows_i686_gnu" -version = "0.52.6" +name = "uuid" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "serde", + "wasm-bindgen", +] [[package]] -name = "windows_i686_gnu" -version = "0.53.0" +name = "v_frame" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" +dependencies = [ + "aligned-vec", + "num-traits 0.2.19", + "wasm-bindgen", +] [[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" +name = "vek" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits 0.2.19", + "rustc_version", +] [[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" +name = "vek" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "25215c4675beead435b254fc510932ff7f519cbc585b1b9fe2539ee9f20ca331" +dependencies = [ + "approx", + "num-integer", + "num-traits 0.2.19", + "rustc_version", +] [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "version-compare" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] -name = "windows_i686_msvc" -version = "0.48.5" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "windows_i686_msvc" -version = "0.52.6" +name = "wasi" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] [[package]] -name = "windows_i686_msvc" -version = "0.53.0" +name = "wasm-bindgen" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +name = "wasm-bindgen-backend" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-shared", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +name = "wasm-bindgen-macro" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" +name = "wasm-bindgen-macro-support" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" +name = "wasm-bindgen-shared" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "weezl" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +name = "wide" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" +name = "windows-core" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result", + "windows-strings", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.104", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "windows-link" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" +name = "windows-result" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] [[package]] -name = "winit" -version = "0.30.12" +name = "windows-strings" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "android-activity", - "atomic-waker", - "bitflags 2.9.1", - "block2", - "bytemuck", - "calloop", - "cfg_aliases", - "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "ndk 0.9.0", - "objc2", - "objc2-app-kit", - "objc2-foundation", - "objc2-ui-kit", - "orbclient", - "percent-encoding", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.44", - "smol_str", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", + "windows-link 0.1.3", ] [[package]] @@ -6270,57 +2318,6 @@ dependencies = [ "bitflags 2.9.1", ] -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 0.38.44", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.9.1", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - [[package]] name = "xml-rs" version = "0.7.0" @@ -6330,32 +2327,20 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "xml-rs" -version = "0.8.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" - [[package]] name = "xmltree" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff8eaee9d17062850f1e6163b509947969242990ee59a35801af437abe041e70" dependencies = [ - "xml-rs 0.7.0", + "xml-rs", ] [[package]] -name = "yazi" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" - -[[package]] -name = "zeno" -version = "0.3.3" +name = "yap" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" +checksum = "bfe269e7b803a5e8e20cbd97860e136529cd83bf2c9c6d37b142467e7e1f051f" [[package]] name = "zerocopy" @@ -6374,7 +2359,7 @@ checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.104", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2f2a05e..ed4cbb4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,10 +12,13 @@ resolver = "2" raytracing_core = { path = "./crates/raytracing_core" } raytracing_config = { path = "./crates/raytracing_config" } raytracing_cli = { path = "./crates/raytracing_cli" } -bevy_render_cli = {path = "./crates/bevy_render_cli"} -bevy_render_core = {path = "./crates/bevy_render_core"} -bevy_render_config = {path = "./crates/bevy_render_config"} +raytracing_renderer = { path = "./crates/raytracing_renderer" } +glam = { version = "0.29.0", features = ["serde"] } + [dependencies] csgrs = "0.20.1" raytracing_cli.workspace = true +raytracing_renderer.workspace = true +raytracing_core.workspace = true +raytracing_config.workspace = true diff --git a/crates/bevy_render_cli/Cargo.toml b/crates/bevy_render_cli/Cargo.toml deleted file mode 100644 index f30377b..0000000 --- a/crates/bevy_render_cli/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "bevy_render_cli" -version = "0.1.0" -edition = "2024" - - -[dependencies] -bevy = "0.16.1" -rand = "0.8.3" -glam = "0.29.0" -csv = "1.3" -serde = { version = "1.0", features = ["derive"] } -toml = "0.8" -raytracing_core.workspace = true -bevy_render_core.workspace = true \ No newline at end of file diff --git a/crates/bevy_render_cli/src/bevy_render_cli.rs b/crates/bevy_render_cli/src/bevy_render_cli.rs deleted file mode 100644 index 3ac9e9c..0000000 --- a/crates/bevy_render_cli/src/bevy_render_cli.rs +++ /dev/null @@ -1,8 +0,0 @@ -use bevy::prelude::*; -use bevy_render_core::render_core; -use raytracing_core::Scene; -pub fn render_cli(scene: Scene, results: Vec>) -> Result<(), Box> { - println!("レンダー起動"); - render_core(scene, results); - Ok(()) -} diff --git a/crates/bevy_render_cli/src/lib.rs b/crates/bevy_render_cli/src/lib.rs deleted file mode 100644 index 75d4d95..0000000 --- a/crates/bevy_render_cli/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod bevy_render_cli; - -pub use bevy_render_cli::*; diff --git a/crates/bevy_render_config/Cargo.toml b/crates/bevy_render_config/Cargo.toml deleted file mode 100644 index 7d5d423..0000000 --- a/crates/bevy_render_config/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "bevy_render_config" -version = "0.1.0" -edition = "2024" - - -[dependencies] -bevy = "0.16.1" -rand = "0.8.3" -glam = "0.29.0" -csv = "1.3" -serde = { version = "1.0", features = ["derive"] } -toml = "0.8" -raytracing_core.workspace = true diff --git a/crates/bevy_render_config/src/bevy_render_config.rs b/crates/bevy_render_config/src/bevy_render_config.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_config/src/bevy_render_config.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_config/src/lib.rs b/crates/bevy_render_config/src/lib.rs deleted file mode 100644 index 38b0400..0000000 --- a/crates/bevy_render_config/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod bevy_render_config; - -pub use bevy_render_config::*; diff --git a/crates/bevy_render_core/Cargo.toml b/crates/bevy_render_core/Cargo.toml deleted file mode 100644 index 83c7e73..0000000 --- a/crates/bevy_render_core/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "bevy_render_core" -version = "0.1.0" -edition = "2024" - - -[dependencies] -bevy = "0.16.1" -rand = "0.9.2" -glam = "0.29.0" -csv = "1.3" -serde = { version = "1.0", features = ["derive"] } -toml = "0.8" -raytracing_core.workspace = true -bevy_panorbit_camera = "0.27" -bevy_flycam = "0.16.1" -csgrs = { version = "0.20.1", features = ["bevymesh"] } \ No newline at end of file diff --git a/crates/bevy_render_core/src/beby_trait.rs b/crates/bevy_render_core/src/beby_trait.rs deleted file mode 100644 index baa82b2..0000000 --- a/crates/bevy_render_core/src/beby_trait.rs +++ /dev/null @@ -1,5 +0,0 @@ -type Csmesh = csgrs::mesh::Mesh<()>; -use raytracing_core::Hittable; -pub trait Hittable_beby: Hittable { - fn to_mesh(&self) -> Option; -} diff --git a/crates/bevy_render_core/src/bevy_render_core.rs b/crates/bevy_render_core/src/bevy_render_core.rs deleted file mode 100644 index 762be4d..0000000 --- a/crates/bevy_render_core/src/bevy_render_core.rs +++ /dev/null @@ -1,128 +0,0 @@ -use bevy::pbr::{DirectionalLight, StandardMaterial}; -use bevy::prelude::*; -use bevy_flycam::prelude::*; -use bevy_panorbit_camera::{PanOrbitCamera, PanOrbitCameraPlugin}; -use csgrs::traits::CSG; -use rand::{self, Rng}; -use raytracing_core::{Hittable, InfiniteCone, Scene}; -type Csmesh = csgrs::mesh::Mesh<()>; -#[derive(Resource)] -pub struct RenderScene(pub Scene); -#[derive(Resource)] -pub struct PathData(pub Vec>); - -pub fn render_core( - scene: Scene, - results: Vec>, -) -> Result<(), Box> { - render_main(scene, results); - Ok(()) -} - -fn render_main(scene: Scene, results: Vec>) { - App::new() - .add_plugins(DefaultPlugins) - .add_plugins(PanOrbitCameraPlugin) - .add_plugins(PlayerPlugin) - .insert_resource(RenderScene(scene)) - .insert_resource(PathData(results)) - .add_systems(Startup, setup) - .run(); -} - -fn setup( - render_scene: Res, - path_data: Res, - mut commands: Commands, - mut meshes: ResMut>, - mut materials: ResMut>, -) { - let scene = &render_scene.0; - let results = &path_data.0; - // 光の軌跡の描画 - spawn_arrows(&mut commands, &mut meshes, &mut materials, results); - commands.spawn(DirectionalLight { - shadows_enabled: true, - ..default() - }); - //commands.spawn((Camera3d::default(),)); -} - -fn spawn_object( - scene: &Scene, - materials: &mut ResMut>, - meshes: &mut ResMut>, - commands: &mut Commands, -) { - let object_material = materials.add(Color::srgb(0.8, 0.7, 0.6)); -} - -fn spawn_arrows( - commands: &mut Commands, - meshes: &mut ResMut>, - materials: &mut ResMut>, - results: &Vec>, -) { - let mut arrow_material = materials.add(Color::srgb(0.1, 0.1, 0.1)); - - for arrows in results { - let mut rng = rand::rng(); - let r: f32 = rng.random::(); - let g: f32 = rng.random::(); - let b: f32 = rng.random::(); - let random_color = Color::srgb(r, g, b); - arrow_material = materials.add(random_color); - for pair in arrows.windows(2) { - spawn_arrow( - commands, - meshes, - arrow_material.clone(), - pair[0].into(), - pair[1].into(), - ); - } - } -} - -fn spawn_arrow( - commands: &mut Commands, - meshes: &mut ResMut>, - material: Handle, - start: Vec3, - end: Vec3, -) { - let direction = end - start; - let half_length = direction.length() / 2.0; - if half_length < 0.001 { - return; - } - - let mid_point = start + direction / 2.0; - let rotation = Quat::from_rotation_arc(Vec3::Y, direction.normalize()); - commands.spawn(( - Mesh3d(meshes.add(Cylinder { - radius: 0.02, - half_height: half_length, - })), - MeshMaterial3d(material.clone()), - Transform { - translation: mid_point, - rotation, - ..default() - }, - )); - - // 矢印の先端 - commands.spawn(( - Mesh3d(meshes.add(Cone { - radius: 0.08, - height: 0.2, - })), - MeshMaterial3d(material), - Transform { - translation: end, - rotation, - ..default() - }, - )); -} diff --git a/crates/bevy_render_core/src/lib.rs b/crates/bevy_render_core/src/lib.rs deleted file mode 100644 index 0a3f0f1..0000000 --- a/crates/bevy_render_core/src/lib.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod beby_trait; -pub mod bevy_render_core; -pub mod render_primitives; - -pub use beby_trait::*; -pub use bevy_render_core::*; diff --git a/crates/bevy_render_core/src/render_primitives/mod.rs b/crates/bevy_render_core/src/render_primitives/mod.rs deleted file mode 100644 index a6b6699..0000000 --- a/crates/bevy_render_core/src/render_primitives/mod.rs +++ /dev/null @@ -1,46 +0,0 @@ -// このファイルは、primitivesモジュールに含まれる他のファイルを宣言し、 -// それらの中の公開アイテム(pub)を、このモジュールの外からも使えるようにします。 - -// 各プリミティブのモジュールを宣言 -mod render_axis_aligned_box; -mod render_csg; -mod render_infinite_cone; -mod render_infinite_cylinder; -mod render_lens; -mod render_plane; -mod render_sphere; -mod render_wedge; - -// 各モジュール内の公開アイテムを、primitives::* で使えるように再公開(re-export)する -//pub use render_axis_aligned_box::AxisAlignedBox; -//pub use render_csg::CSGObject; -//pub use render_infinite_cone::InfiniteCone; -//pub use render_infinite_cylinder::InfiniteCylinder; -//pub use render_lens::Lens; -//pub use render_plane::Plane; -//pub use render_sphere::Sphere; -//pub use render_wedge::Wedge; - -use raytracing_core::HitRecord; -use raytracing_core::Ray; -// ブーリアン演算の種類 -#[derive(Debug, Copy, Clone, PartialEq)] -pub enum CsgOperation { - /// 和集合 - Union, - /// 積集合 - Intersection, - /// 差集合 - Difference, -} - -#[derive(Debug, Clone, Copy, PartialEq)] -pub enum Material { - Mirror, - Glass { ior: f32 }, - HalfMirror { reflectance: f32 }, -} - -pub trait Hittable { - fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option>; -} diff --git a/crates/bevy_render_core/src/render_primitives/render_axis_aligned_box.rs b/crates/bevy_render_core/src/render_primitives/render_axis_aligned_box.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_axis_aligned_box.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_csg.rs b/crates/bevy_render_core/src/render_primitives/render_csg.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_csg.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_infinite_cone.rs b/crates/bevy_render_core/src/render_primitives/render_infinite_cone.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_infinite_cone.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_infinite_cylinder.rs b/crates/bevy_render_core/src/render_primitives/render_infinite_cylinder.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_infinite_cylinder.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_lens.rs b/crates/bevy_render_core/src/render_primitives/render_lens.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_lens.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_plane.rs b/crates/bevy_render_core/src/render_primitives/render_plane.rs deleted file mode 100644 index 8b13789..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_plane.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_sphere.rs b/crates/bevy_render_core/src/render_primitives/render_sphere.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_sphere.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/bevy_render_core/src/render_primitives/render_wedge.rs b/crates/bevy_render_core/src/render_primitives/render_wedge.rs deleted file mode 100644 index d3f5a12..0000000 --- a/crates/bevy_render_core/src/render_primitives/render_wedge.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/raytracing_cli/Cargo.toml b/crates/raytracing_cli/Cargo.toml index 55441cf..97cb28e 100644 --- a/crates/raytracing_cli/Cargo.toml +++ b/crates/raytracing_cli/Cargo.toml @@ -12,5 +12,4 @@ csv = "1.3" serde = { version = "1.0", features = ["derive"] } toml = "0.8" raytracing_core.workspace = true -raytracing_config.workspace = true -bevy_render_cli.workspace = true \ No newline at end of file +raytracing_config.workspace = true \ No newline at end of file diff --git a/crates/raytracing_cli/src/cli.rs b/crates/raytracing_cli/src/cli.rs index 040d7a7..06afd74 100644 --- a/crates/raytracing_cli/src/cli.rs +++ b/crates/raytracing_cli/src/cli.rs @@ -1,32 +1,69 @@ -use bevy_render_cli::render_cli; -use csv::Writer; +use glam::Vec3; use raytracing_config::simulation_config::SimulationConfig; use raytracing_core::Scene; use std::error::Error; +use std::fs::File; +use std::io::{Result as IoResult, Write}; + +/// Exports the calculated ray paths to a .obj file as a series of line segments. +fn export_paths_to_obj(results: &Vec>, filename: &str) -> IoResult<()> { + let mut file = File::create(filename)?; + + writeln!( + file, + "# Light path visualization generated by raytracing-cli" + )?; + writeln!(file, "# Vertices")?; + + // Write all points from all paths as vertices + for path in results { + for point in path { + writeln!(file, "v {} {} {}", point.x, point.y, point.z)?; + } + } + + writeln!(file, "\n# Line segments")?; + let mut vertex_offset = 1; // OBJ indices are 1-based + for path in results { + if path.len() > 1 { + // Create line segments between consecutive vertices in the current path + for i in 0..path.len() - 1 { + writeln!(file, "l {} {}", vertex_offset + i, vertex_offset + i + 1)?; + } + } + // Increase the offset for the next path's indices + vertex_offset += path.len(); + } + + println!("\n光路を {} にエクスポートしました。", filename); + Ok(()) +} pub fn cli() -> Result<(), Box> { println!("設定ファイル simulation.toml を読み込んでいます..."); let SimulationConfig { scene, simulation_settings, + .. } = SimulationConfig::load_from_path("simulation.toml")?; let scene: Scene = scene.into(); let results = scene.simulate_rays(simulation_settings.into()); - render_cli(scene, results.clone()); - // --- 3c. 結果を光路ごとに別々のCSVファイルに出力 --- - for (i, result) in results.into_iter().enumerate() { - let file_name = format!("./dist/path_{}.csv", i); - let mut wtr = Writer::from_path(&file_name)?; - wtr.write_record(&["x", "y", "z"])?; - for point in result { - wtr.write_record(&[ - point.x.to_string(), - point.y.to_string(), - point.z.to_string(), - ])?; + + println!("光路の計算が完了しました。"); + println!("計算された光路の数: {}", results.len()); + for (i, path) in results.iter().enumerate() { + println!("--- 光路 {} ---", i); + for (j, point) in path.iter().enumerate() { + println!( + " 点 {}: ({:.3}, {:.3}, {:.3})", + j, point.x, point.y, point.z + ); } - wtr.flush()?; - println!("光路 {} を '{}' に出力しました。", i, file_name); + } + + // Export the results to an OBJ file + if let Err(e) = export_paths_to_obj(&results, "paths.obj") { + eprintln!("OBJファイルのエクスポートに失敗しました: {}", e); } Ok(()) diff --git a/crates/raytracing_config/src/model.rs b/crates/raytracing_config/src/model.rs index b1f7570..dddfab1 100644 --- a/crates/raytracing_config/src/model.rs +++ b/crates/raytracing_config/src/model.rs @@ -7,3 +7,4 @@ pub mod shape_config; pub mod simulation_config; pub mod simulation_settings_config; pub mod transform_config; +pub mod camera_config; diff --git a/crates/raytracing_config/src/model/camera_config.rs b/crates/raytracing_config/src/model/camera_config.rs new file mode 100644 index 0000000..7d20371 --- /dev/null +++ b/crates/raytracing_config/src/model/camera_config.rs @@ -0,0 +1,31 @@ +use glam::Vec3; +use serde::Deserialize; + +#[derive(Debug, Deserialize, Clone, Copy)] +pub struct CameraConfig { + pub lookfrom: Vec3, + pub lookat: Vec3, + #[serde(default = "default_vup")] + pub vup: Vec3, + #[serde(default = "default_vfov")] + pub vfov: f32, +} + +fn default_vup() -> Vec3 { + Vec3::Y +} + +fn default_vfov() -> f32 { + 40.0 +} + +impl Default for CameraConfig { + fn default() -> Self { + Self { + lookfrom: Vec3::new(0.0, 0.0, 25.0), + lookat: Vec3::new(0.0, 0.0, 0.0), + vup: default_vup(), + vfov: default_vfov(), + } + } +} diff --git a/crates/raytracing_config/src/model/material_config.rs b/crates/raytracing_config/src/model/material_config.rs index 8dd2404..78fb5c4 100644 --- a/crates/raytracing_config/src/model/material_config.rs +++ b/crates/raytracing_config/src/model/material_config.rs @@ -1,21 +1,34 @@ +use glam::Vec3; use serde::Deserialize; use raytracing_core::Material; -#[derive(Deserialize, Clone, Copy)] // 材質はコピーするのでClone, Copyも +#[derive(Deserialize, Clone, Copy, Debug)] // 材質はコピーするのでClone, Copyも #[serde(tag = "type")] pub enum MaterialConfig { - Glass { ior: f32 }, + Glass { + #[serde(default = "default_glass_color")] + color: Vec3, + ior: f32, + }, HalfMirror { reflectance: f32 }, - Mirror, + Metal { color: Vec3, fuzz: f32 }, + Diffuse { color: Vec3 }, + Light { color: Vec3 }, } -impl Into for MaterialConfig { - fn into(self) -> Material { - match self { - MaterialConfig::Mirror => Material::Mirror, - MaterialConfig::Glass { ior } => Material::Glass { ior }, +fn default_glass_color() -> Vec3 { + Vec3::ONE +} + +impl From for Material { + fn from(config: MaterialConfig) -> Material { + match config { + MaterialConfig::Metal { color, fuzz } => Material::Metal { color, fuzz }, + MaterialConfig::Glass { color, ior } => Material::Glass { color, ior }, MaterialConfig::HalfMirror { reflectance } => Material::HalfMirror { reflectance }, + MaterialConfig::Diffuse { color } => Material::Diffuse { color }, + MaterialConfig::Light { color } => Material::Light { color }, } } -} +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/object_config.rs b/crates/raytracing_config/src/model/object_config.rs index fce969e..4d630fb 100644 --- a/crates/raytracing_config/src/model/object_config.rs +++ b/crates/raytracing_config/src/model/object_config.rs @@ -6,7 +6,7 @@ use crate::{ material_config::MaterialConfig, shape_config::ShapeConfig, transform_config::TransformConfig, }; -#[derive(Deserialize, Clone)] +#[derive(Deserialize, Clone, Debug)] pub struct ObjectConfig { pub shape: ShapeConfig, pub material: MaterialConfig, @@ -27,4 +27,4 @@ impl Into> for ObjectConfig { Box::new(Transform::new(primitive, transform_matrix)) } -} +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/object_generator_config.rs b/crates/raytracing_config/src/model/object_generator_config.rs index c758c9c..7712dc6 100644 --- a/crates/raytracing_config/src/model/object_generator_config.rs +++ b/crates/raytracing_config/src/model/object_generator_config.rs @@ -1,175 +1,175 @@ -use glam::Vec3; -use raytracing_core::{Hittable, Ray}; -use serde::Deserialize; - -use crate::{ - material_config::MaterialConfig, object_config::ObjectConfig, shape_config::ShapeConfig, -}; - -// --- ジェネレータの定義 --- - -#[derive(Deserialize, Debug)] -#[serde(tag = "type")] -pub enum RayGeneratorConfig { - ParallelGrid { - origin_corner: [f32; 3], - vec_u: [f32; 3], - vec_v: [f32; 3], - count_u: u32, - count_v: u32, - direction: [f32; 3], - current_ior: f32, - }, - Projector { - origin: [f32; 3], - target_corner: [f32; 3], - target_u: [f32; 3], - target_v: [f32; 3], - count_u: u32, - count_v: u32, - current_ior: f32, - }, -} - -#[derive(Deserialize)] -#[serde(tag = "type")] -pub enum ObjectGeneratorConfig { - ObjectGrid { - count_x: u32, - count_z: u32, - position_start: [f32; 3], - step_x: [f32; 3], - step_z: [f32; 3], - template: ObjectConfig, // オブジェクトのテンプレート - }, -} - -#[derive(Deserialize, Clone)] // テンプレートはクローン可能にする -pub struct ObjectTemplateConfig { - pub shape: ShapeConfig, - pub material: MaterialConfig, -} - -// --- シーン全体のコンフィグ --- -// (ShapeConfig, MaterialConfig, ObjectConfig などは以前のものを使用) - -#[derive(Deserialize)] -pub struct SceneDefinition { - // defaultを追加して、TOMLにキーが無くてもエラーにならないようにする - //#[serde(default)] - pub ray_generators: Vec, - - //#[serde(default)] - pub object_generators: Vec, - - //#[serde(default)] - pub objects: Vec, -} - -// この関数でConfigから実行時に使うオブジェクトを生成する -pub fn build_scene_from_config(config: SceneDefinition) -> (Vec, Vec>) { - let mut rays: Vec = Vec::new(); - let mut hittables: Vec> = Vec::new(); - - // === レイの生成 === - for generator in config.ray_generators { - match generator { - RayGeneratorConfig::ParallelGrid { - origin_corner, - vec_u, - vec_v, - count_u, - count_v, - direction, - current_ior, - } => { - let corner = Vec3::from(origin_corner); - let u_step = Vec3::from(vec_u) / (count_u as f32); - let v_step = Vec3::from(vec_v) / (count_v as f32); - let dir = Vec3::from(direction).normalize(); - - for i in 0..count_u { - for j in 0..count_v { - let origin = corner + (i as f32 * u_step) + (j as f32 * v_step); - rays.push(Ray { - origin, - direction: dir, - current_ior, //..Default::default() - }); - } - } - } - RayGeneratorConfig::Projector { - origin, - target_corner, - target_u, - target_v, - count_u, - count_v, - current_ior, - } => { - let ray_origin = Vec3::from(origin); - let target_c = Vec3::from(target_corner); - let target_u_step = Vec3::from(target_u) / (count_u as f32); - let target_v_step = Vec3::from(target_v) / (count_v as f32); - - for i in 0..count_u { - for j in 0..count_v { - let target_point = - target_c + (i as f32 * target_u_step) + (j as f32 * target_v_step); - rays.push(Ray { - origin: ray_origin, - direction: (target_point - ray_origin).normalize(), - current_ior, //..Default::default() - }); - } - } - } - } - } - - // === オブジェクトの生成 === - for generator in config.object_generators { - match generator { - ObjectGeneratorConfig::ObjectGrid { - count_x, - count_z, - position_start, - step_x, - step_z, - template, - } => { - let start_pos = Vec3::from(position_start); - let x_step = Vec3::from(step_x); - let z_step = Vec3::from(step_z); - - for i in 0..count_x { - for j in 0..count_z { - let pos = start_pos + (i as f32 * x_step) + (j as f32 * z_step); - - // テンプレートを複製し、transform.positionのみ変更 - let mut obj = template.clone(); - obj.transform.position = pos.to_array(); - - let hittable: Box = obj.into(); - hittables.push(hittable); - } - } - } - } - } - - // === 個別オブジェクトの追加 === - for obj_conf in config.objects { - let material = obj_conf.material.into(); - let mut hittable = obj_conf.shape.into_with(material); - // ... transformの適用 ... - hittables.push(hittable); - } - - (rays, hittables) -} - -// 以下は仮のヘルパー関数 -// pub fn build_material(config: MaterialConfig) -> Material { ... } -// impl ShapeConfig { pub fn into_with(self, material: Material) -> Box { ... } } +use glam::Vec3; +use raytracing_core::{Hittable, Ray}; +use serde::Deserialize; + +use crate::{ + material_config::MaterialConfig, object_config::ObjectConfig, shape_config::ShapeConfig, +}; + +// --- ジェネレータの定義 --- + +#[derive(Deserialize, Debug)] +#[serde(tag = "type")] +pub enum RayGeneratorConfig { + ParallelGrid { + origin_corner: [f32; 3], + vec_u: [f32; 3], + vec_v: [f32; 3], + count_u: u32, + count_v: u32, + direction: [f32; 3], + current_ior: f32, + }, + Projector { + origin: [f32; 3], + target_corner: [f32; 3], + target_u: [f32; 3], + target_v: [f32; 3], + count_u: u32, + count_v: u32, + current_ior: f32, + }, +} + +#[derive(Deserialize, Debug)] +#[serde(tag = "type")] +pub enum ObjectGeneratorConfig { + ObjectGrid { + count_x: u32, + count_z: u32, + position_start: [f32; 3], + step_x: [f32; 3], + step_z: [f32; 3], + template: ObjectConfig, // オブジェクトのテンプレート + }, +} + +#[derive(Deserialize, Clone)] // テンプレートはクローン可能にする +pub struct ObjectTemplateConfig { + pub shape: ShapeConfig, + pub material: MaterialConfig, +} + +// --- シーン全体のコンフィグ --- +// (ShapeConfig, MaterialConfig, ObjectConfig などは以前のものを使用) + +#[derive(Deserialize)] +pub struct SceneDefinition { + // defaultを追加して、TOMLにキーが無くてもエラーにならないようにする + //#[serde(default)] + pub ray_generators: Vec, + + //#[serde(default)] + pub object_generators: Vec, + + //#[serde(default)] + pub objects: Vec, +} + +// この関数でConfigから実行時に使うオブジェクトを生成する +pub fn build_scene_from_config(config: SceneDefinition) -> (Vec, Vec>) { + let mut rays: Vec = Vec::new(); + let mut hittables: Vec> = Vec::new(); + + // === レイの生成 === + for generator in config.ray_generators { + match generator { + RayGeneratorConfig::ParallelGrid { + origin_corner, + vec_u, + vec_v, + count_u, + count_v, + direction, + current_ior, + } => { + let corner = Vec3::from(origin_corner); + let u_step = Vec3::from(vec_u) / (count_u as f32); + let v_step = Vec3::from(vec_v) / (count_v as f32); + let dir = Vec3::from(direction).normalize(); + + for i in 0..count_u { + for j in 0..count_v { + let origin = corner + (i as f32 * u_step) + (j as f32 * v_step); + rays.push(Ray { + origin, + direction: dir, + current_ior, //..Default::default() + }); + } + } + } + RayGeneratorConfig::Projector { + origin, + target_corner, + target_u, + target_v, + count_u, + count_v, + current_ior, + } => { + let ray_origin = Vec3::from(origin); + let target_c = Vec3::from(target_corner); + let target_u_step = Vec3::from(target_u) / (count_u as f32); + let target_v_step = Vec3::from(target_v) / (count_v as f32); + + for i in 0..count_u { + for j in 0..count_v { + let target_point = + target_c + (i as f32 * target_u_step) + (j as f32 * target_v_step); + rays.push(Ray { + origin: ray_origin, + direction: (target_point - ray_origin).normalize(), + current_ior, //..Default::default() + }); + } + } + } + } + } + + // === オブジェクトの生成 === + for generator in config.object_generators { + match generator { + ObjectGeneratorConfig::ObjectGrid { + count_x, + count_z, + position_start, + step_x, + step_z, + template, + } => { + let start_pos = Vec3::from(position_start); + let x_step = Vec3::from(step_x); + let z_step = Vec3::from(step_z); + + for i in 0..count_x { + for j in 0..count_z { + let pos = start_pos + (i as f32 * x_step) + (j as f32 * z_step); + + // テンプレートを複製し、transform.positionのみ変更 + let mut obj = template.clone(); + obj.transform.position = pos.to_array(); + + let hittable: Box = obj.into(); + hittables.push(hittable); + } + } + } + } + } + + // === 個別オブジェクトの追加 === + for obj_conf in config.objects { + let material = obj_conf.material.into(); + let hittable = obj_conf.shape.into_with(material); + // ... transformの適用 ... + hittables.push(hittable); + } + + (rays, hittables) +} + +// 以下は仮のヘルパー関数 +// pub fn build_material(config: MaterialConfig) -> Material { ... } +// impl ShapeConfig { pub fn into_with(self, material: Material) -> Box { ... } } \ No newline at end of file diff --git a/crates/raytracing_config/src/model/ray_config.rs b/crates/raytracing_config/src/model/ray_config.rs index 134291a..ff28eac 100644 --- a/crates/raytracing_config/src/model/ray_config.rs +++ b/crates/raytracing_config/src/model/ray_config.rs @@ -3,10 +3,11 @@ use serde::Deserialize; use raytracing_core::Ray; -#[derive(Deserialize)] +#[derive(Deserialize, Debug)] pub struct RayConfig { pub origin: [f32; 3], pub direction: [f32; 3], + pub current_ior: f32, } impl Into for RayConfig { @@ -14,7 +15,7 @@ impl Into for RayConfig { Ray { origin: Vec3::from_array(self.origin), direction: Vec3::from_array(self.direction).normalize(), - current_ior: 1.0, + current_ior: self.current_ior, } } -} +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/scene_config.rs b/crates/raytracing_config/src/model/scene_config.rs index af573c9..345b9c3 100644 --- a/crates/raytracing_config/src/model/scene_config.rs +++ b/crates/raytracing_config/src/model/scene_config.rs @@ -1,32 +1,29 @@ -use raytracing_core::{Hittable, Ray, Scene}; +use raytracing_core::{BVHNode, Hittable, HittableList, Ray, Scene}; use serde::Deserialize; -use crate::{ - model::object_generator_config::{ObjectGeneratorConfig, RayGeneratorConfig}, - object_config::ObjectConfig, - ray_config::RayConfig, -}; +use super::object_config::ObjectConfig; +use super::object_generator_config::{ObjectGeneratorConfig, RayGeneratorConfig}; +use super::ray_config::RayConfig; -#[derive(Deserialize)] +#[derive(Deserialize, Debug, Default)] pub struct SceneConfig { #[serde(default)] - pub rays: Vec, - #[serde(default)] - pub ray_generators: Vec, + pub objects: Vec, #[serde(default)] pub object_generators: Vec, #[serde(default)] - pub objects: Vec, + pub rays: Vec, + #[serde(default)] + pub ray_generators: Vec, } -impl Into for SceneConfig { - fn into(self) -> Scene { - // 個別オブジェクト - let mut objects: Vec> = - self.objects.into_iter().map(Into::into).collect(); +impl From for Scene { + fn from(config: SceneConfig) -> Self { + // 1. Generate all objects from config + let mut all_objects: Vec> = + config.objects.into_iter().map(Into::into).collect(); - // ジェネレータから生成 - for generator in self.object_generators { + for generator in config.object_generators { match generator { ObjectGeneratorConfig::ObjectGrid { count_x, @@ -44,18 +41,32 @@ impl Into for SceneConfig { let pos = start_pos + (i as f32 * x_step) + (j as f32 * z_step); let mut obj = template.clone(); obj.transform.position = pos.to_array(); - objects.push(obj.into()); + all_objects.push(obj.into()); } } } } } - // 個別レイ - let mut rays: Vec = self.rays.into_iter().map(Into::into).collect(); + // 2. Partition objects into bounded and unbounded + let (mut bounded_objects, unbounded_objects): (Vec<_>, Vec<_>) = + all_objects.into_iter().partition(|obj| obj.bounding_box().is_some()); + + // 3. Create a world list and add unbounded objects + let mut world_list = HittableList::new(); + for obj in unbounded_objects { + world_list.add(obj); + } - // ray_generatorsから生成 - for generator in self.ray_generators { + // 4. Build BVH from bounded objects and add it to the world list + if !bounded_objects.is_empty() { + let bvh_node = BVHNode::new(&mut bounded_objects); + world_list.add(Box::new(bvh_node)); + } + + // 5. Generate all rays (same as before) + let mut rays: Vec = config.rays.into_iter().map(Into::into).collect(); + for generator in config.ray_generators { match generator { RayGeneratorConfig::ParallelGrid { origin_corner, @@ -109,6 +120,10 @@ impl Into for SceneConfig { } } - Scene { objects, rays } + // 6. Create the final scene with the world object + Scene { + world: Box::new(world_list), + rays, + } } -} +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/shape_config.rs b/crates/raytracing_config/src/model/shape_config.rs index a21db89..50694bf 100644 --- a/crates/raytracing_config/src/model/shape_config.rs +++ b/crates/raytracing_config/src/model/shape_config.rs @@ -5,7 +5,7 @@ use raytracing_core::{ }; use serde::Deserialize; -#[derive(Deserialize, Clone)] +#[derive(Deserialize, Clone, Debug)] #[serde(tag = "type")] pub enum ShapeConfig { Sphere { @@ -146,4 +146,4 @@ impl ShapeConfig { }), } } -} +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/simulation_config.rs b/crates/raytracing_config/src/model/simulation_config.rs index 941dce6..1acd9c5 100644 --- a/crates/raytracing_config/src/model/simulation_config.rs +++ b/crates/raytracing_config/src/model/simulation_config.rs @@ -1,20 +1,25 @@ -use std::{error::Error, path::Path}; - -use serde::Deserialize; - -use crate::{scene_config::SceneConfig, simulation_settings_config::SimulationSettingsConfig}; - -#[derive(Deserialize)] -pub struct SimulationConfig { - pub simulation_settings: SimulationSettingsConfig, - pub scene: SceneConfig, -} - -impl SimulationConfig { - pub fn load_from_path>(path: P) -> Result> { - let toml_str = std::fs::read_to_string(path)?; - let simulation_config = toml::from_str(&toml_str)?; - - Ok(simulation_config) - } -} +use std::{error::Error, path::Path}; + +use serde::Deserialize; + +use crate::model::{ + camera_config::CameraConfig, scene_config::SceneConfig, + simulation_settings_config::SimulationSettingsConfig, +}; + +#[derive(Deserialize)] +pub struct SimulationConfig { + pub simulation_settings: SimulationSettingsConfig, + pub scene: SceneConfig, + #[serde(default)] + pub camera: CameraConfig, +} + +impl SimulationConfig { + pub fn load_from_path>(path: P) -> Result> { + let toml_str = std::fs::read_to_string(path)?; + let simulation_config = toml::from_str(&toml_str)?; + + Ok(simulation_config) + } +} \ No newline at end of file diff --git a/crates/raytracing_config/src/model/simulation_settings_config.rs b/crates/raytracing_config/src/model/simulation_settings_config.rs index 802b279..1b9569d 100644 --- a/crates/raytracing_config/src/model/simulation_settings_config.rs +++ b/crates/raytracing_config/src/model/simulation_settings_config.rs @@ -1,17 +1,35 @@ use raytracing_core::SimulationSettingsConfig as CoreSimulationSettingsConfig; use serde::Deserialize; -#[derive(Deserialize)] +#[derive(Deserialize, Clone, Copy)] pub struct SimulationSettingsConfig { pub infinity_distance: f32, pub max_bounces: u32, + #[serde(default = "default_samples_per_pixel")] + pub samples_per_pixel: u32, + #[serde(default = "default_image_width")] + pub image_width: u32, + #[serde(default = "default_image_height")] + pub image_height: u32, } -impl Into for SimulationSettingsConfig { - fn into(self) -> CoreSimulationSettingsConfig { +fn default_samples_per_pixel() -> u32 { + 100 +} + +fn default_image_width() -> u32 { + 800 +} + +fn default_image_height() -> u32 { + 600 +} + +impl From for CoreSimulationSettingsConfig { + fn from(config: SimulationSettingsConfig) -> CoreSimulationSettingsConfig { CoreSimulationSettingsConfig { - infinity_distance: self.infinity_distance, - max_bounces: self.max_bounces, + infinity_distance: config.infinity_distance, + max_bounces: config.max_bounces, } } } diff --git a/crates/raytracing_config/src/model/transform_config.rs b/crates/raytracing_config/src/model/transform_config.rs index 0dd593b..87ce519 100644 --- a/crates/raytracing_config/src/model/transform_config.rs +++ b/crates/raytracing_config/src/model/transform_config.rs @@ -1,7 +1,7 @@ use serde::Deserialize; -#[derive(Deserialize, Clone)] +#[derive(Deserialize, Clone, Debug)] pub struct TransformConfig { pub position: [f32; 3], pub rotation_y_deg: f32, -} +} \ No newline at end of file diff --git a/crates/raytracing_core/src/primitives/aabb.rs b/crates/raytracing_core/src/primitives/aabb.rs new file mode 100644 index 0000000..cb5962e --- /dev/null +++ b/crates/raytracing_core/src/primitives/aabb.rs @@ -0,0 +1,50 @@ +use crate::Ray; +use glam::Vec3; + +#[derive(Debug, Clone, Copy)] +pub struct AABB { + pub min: Vec3, + pub max: Vec3, +} + +impl AABB { + pub fn new(min: Vec3, max: Vec3) -> Self { + Self { min, max } + } + + // An optimized ray-AABB intersection test + pub fn hit(&self, ray: &Ray, t_min: f32, t_max: f32) -> bool { + for a in 0..3 { + let inv_d = 1.0 / ray.direction[a]; + let mut t0 = (self.min[a] - ray.origin[a]) * inv_d; + let mut t1 = (self.max[a] - ray.origin[a]) * inv_d; + + if inv_d < 0.0 { + std::mem::swap(&mut t0, &mut t1); + } + + let t_min = t0.max(t_min); + let t_max = t1.min(t_max); + + if t_max <= t_min { + return false; + } + } + true + } +} + +// Function to create a new AABB that surrounds two other AABBs +pub fn surrounding_box(box0: &AABB, box1: &AABB) -> AABB { + let small = Vec3::new( + box0.min.x.min(box1.min.x), + box0.min.y.min(box1.min.y), + box0.min.z.min(box1.min.z), + ); + let big = Vec3::new( + box0.max.x.max(box1.max.x), + box0.max.y.max(box1.max.y), + box0.max.z.max(box1.max.z), + ); + AABB::new(small, big) +} diff --git a/crates/raytracing_core/src/primitives/axis_aligned_box.rs b/crates/raytracing_core/src/primitives/axis_aligned_box.rs index 014d490..9e57d9a 100644 --- a/crates/raytracing_core/src/primitives/axis_aligned_box.rs +++ b/crates/raytracing_core/src/primitives/axis_aligned_box.rs @@ -1,4 +1,4 @@ -use crate::{HitRecord, Hittable, Material, Ray}; +use crate::{AABB, HitRecord, Hittable, Material, Ray}; use glam::Vec3; // 軸並行な直方体 (AABB) 対角の座標を指定 #[derive(Debug, Clone, Copy)] @@ -62,6 +62,14 @@ impl Hittable for AxisAlignedBox { Some(hits) } + + fn bounding_box(&self) -> Option { + Some(AABB { min: self.min, max: self.max }) + } + + fn clone_hittable(&self) -> Box { + Box::new(*self) + } } // AABBのためのヘルパーメソッド diff --git a/crates/raytracing_core/src/primitives/bvh.rs b/crates/raytracing_core/src/primitives/bvh.rs new file mode 100644 index 0000000..c6a12a7 --- /dev/null +++ b/crates/raytracing_core/src/primitives/bvh.rs @@ -0,0 +1,84 @@ +use crate::{primitives::aabb::surrounding_box, AABB, HitRecord, Hittable, Ray}; +use rand::Rng; + +pub struct BVHNode { + left: Box, + right: Box, + bbox: AABB, +} + +impl Clone for BVHNode { + fn clone(&self) -> Self { + Self { + left: self.left.clone_hittable(), + right: self.right.clone_hittable(), + bbox: self.bbox, + } + } +} + +impl BVHNode { + pub fn new(objects: &mut [Box]) -> Self { + let axis = rand::thread_rng().gen_range(0..3); + let comparator = |a: &Box, b: &Box| { + // Bounding box should exist for all objects used in a BVH. + let box_a = a.bounding_box().unwrap(); + let box_b = b.bounding_box().unwrap(); + box_a.min[axis].partial_cmp(&box_b.min[axis]).unwrap() + }; + + let (left, right): (Box, Box) = if objects.len() == 1 { + (objects[0].clone_hittable(), objects[0].clone_hittable()) + } else if objects.len() == 2 { + if comparator(&objects[0], &objects[1]).is_lt() { + (objects[0].clone_hittable(), objects[1].clone_hittable()) + } else { + (objects[1].clone_hittable(), objects[0].clone_hittable()) + } + } else { + objects.sort_by(comparator); + let mid = objects.len() / 2; + let (left_half, right_half) = objects.split_at_mut(mid); + ( + Box::new(BVHNode::new(left_half)), + Box::new(BVHNode::new(right_half)), + ) + }; + + let box_left = left.bounding_box().unwrap(); + let box_right = right.bounding_box().unwrap(); + let bbox = surrounding_box(&box_left, &box_right); + + Self { left, right, bbox } + } +} + +impl Hittable for BVHNode { + fn bounding_box(&self) -> Option { + Some(self.bbox) + } + + fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { + if !self.bbox.hit(ray, t_min, t_max) { + return None; + } + + let hits_left = self.left.intersect_all(ray, t_min, t_max); + let hits_right = self.right.intersect_all(ray, t_min, t_max); + + match (hits_left, hits_right) { + (Some(mut l), Some(mut r)) => { + l.append(&mut r); + l.sort_by(|a, b| a.t.partial_cmp(&b.t).unwrap()); + Some(l) + } + (Some(l), None) => Some(l), + (None, Some(r)) => Some(r), + (None, None) => None, + } + } + + fn clone_hittable(&self) -> Box { + Box::new(self.clone()) + } +} \ No newline at end of file diff --git a/crates/raytracing_core/src/primitives/csg.rs b/crates/raytracing_core/src/primitives/csg.rs index ddbeb7f..6a12c93 100644 --- a/crates/raytracing_core/src/primitives/csg.rs +++ b/crates/raytracing_core/src/primitives/csg.rs @@ -1,4 +1,5 @@ -use crate::{CsgOperation, HitRecord, Hittable, Ray}; +use super::aabb::surrounding_box; +use crate::{AABB, CsgOperation, HitRecord, Hittable, Ray}; // CSGオブジェクト pub struct CSGObject { pub left: Box, @@ -73,4 +74,34 @@ impl Hittable for CSGObject { Some(result_hits) } } + + fn bounding_box(&self) -> Option { + let left_box = self.left.bounding_box(); + let right_box = self.right.bounding_box(); + + match (left_box, right_box) { + (Some(l), Some(r)) => match self.operation { + CsgOperation::Union => Some(surrounding_box(&l, &r)), + CsgOperation::Intersection => { + let min = l.min.max(r.min); + let max = l.max.min(r.max); + if min.x < max.x && min.y < max.y && min.z < max.z { + Some(AABB::new(min, max)) + } else { + None + } + } + CsgOperation::Difference => Some(l), + }, + _ => None, // If either child is unbounded, the result is complex. + } + } + + fn clone_hittable(&self) -> Box { + Box::new(CSGObject { + left: self.left.clone_hittable(), + right: self.right.clone_hittable(), + operation: self.operation, + }) + } } diff --git a/crates/raytracing_core/src/primitives/hittable_list.rs b/crates/raytracing_core/src/primitives/hittable_list.rs new file mode 100644 index 0000000..5afeeea --- /dev/null +++ b/crates/raytracing_core/src/primitives/hittable_list.rs @@ -0,0 +1,69 @@ +use crate::{primitives::aabb::surrounding_box, AABB, HitRecord, Hittable, Ray}; + +// A list of hittable objects +pub struct HittableList { + pub objects: Vec>, +} + +impl HittableList { + pub fn new() -> Self { + Self { objects: Vec::new() } + } + + pub fn add(&mut self, object: Box) { + self.objects.push(object); + } +} + +impl Hittable for HittableList { + fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { + let mut all_hits = Vec::new(); + let mut closest_so_far = t_max; + + for object in &self.objects { + // By reducing t_max with each hit, we can prune the search space + if let Some(mut hits) = object.intersect_all(ray, t_min, closest_so_far) { + if let Some(first_hit) = hits.first() { + closest_so_far = first_hit.t; + } + all_hits.append(&mut hits); + } + } + + if all_hits.is_empty() { + None + } else { + all_hits.sort_by(|a, b| a.t.partial_cmp(&b.t).unwrap()); + Some(all_hits) + } + } + + fn bounding_box(&self) -> Option { + if self.objects.is_empty() { + return None; + } + + let mut output_box: Option = None; + + for object in &self.objects { + if let Some(temp_box) = object.bounding_box() { + output_box = match output_box { + Some(b) => Some(surrounding_box(&b, &temp_box)), + None => Some(temp_box), + }; + } else { + // If any object in the list is unbounded, the list itself is unbounded. + return None; + } + } + output_box + } + + fn clone_hittable(&self) -> Box { + let mut new_list = HittableList::new(); + for object in &self.objects { + new_list.add(object.clone_hittable()); + } + Box::new(new_list) + } +} diff --git a/crates/raytracing_core/src/primitives/infinite_cone.rs b/crates/raytracing_core/src/primitives/infinite_cone.rs index 9b46edb..5e4bd5c 100644 --- a/crates/raytracing_core/src/primitives/infinite_cone.rs +++ b/crates/raytracing_core/src/primitives/infinite_cone.rs @@ -1,4 +1,4 @@ -use crate::{HitRecord, Hittable, Material, Ray}; +use crate::{AABB, HitRecord, Hittable, Material, Ray}; use glam::Vec3; // 無限円錐 #[derive(Debug, Clone, Copy)] @@ -78,10 +78,14 @@ impl Hittable for InfiniteCone { } } - if hits.is_empty() { - None - } else { - Some(hits) - } + if hits.is_empty() { None } else { Some(hits) } + } + + fn bounding_box(&self) -> Option { + None // An infinite cone has no bounding box. + } + + fn clone_hittable(&self) -> Box { + Box::new(*self) } } diff --git a/crates/raytracing_core/src/primitives/infinite_cylinder.rs b/crates/raytracing_core/src/primitives/infinite_cylinder.rs index b63e05d..a86690f 100644 --- a/crates/raytracing_core/src/primitives/infinite_cylinder.rs +++ b/crates/raytracing_core/src/primitives/infinite_cylinder.rs @@ -1,85 +1,89 @@ -use crate::{HitRecord, Hittable, Material, Ray}; -use glam::Vec3; -// 無限円柱 -#[derive(Debug, Clone, Copy)] -pub struct InfiniteCylinder { - pub axis_point: Vec3, // 軸上の任意の点 - pub axis_dir: Vec3, // 軸の方向(正規化されていること) - pub radius: f32, - pub material: Material, -} - -impl Hittable for InfiniteCylinder { - fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { - // --- 二次方程式の係数 A, B, C を計算 --- - - let oc = ray.origin - self.axis_point; - - // ベクトルを軸に平行な成分と垂直な成分に分解する考え方を用いる - // D_perp = D - (D・V)V (Vは軸方向ベクトル) - let d_dot_v = ray.direction.dot(self.axis_dir); - let d_perp = ray.direction - d_dot_v * self.axis_dir; - - // OC_perp = OC - (OC・V)V - let oc_dot_v = oc.dot(self.axis_dir); - let oc_perp = oc - oc_dot_v * self.axis_dir; - - let a = d_perp.length_squared(); - let b = 2.0 * oc_perp.dot(d_perp); - let c = oc_perp.length_squared() - self.radius * self.radius; - - // --- 二次方程式を解く --- - - // レイが軸とほぼ平行な場合、ヒットしないか常にヒットする。簡単のためミスとする。 - if a.abs() < 1e-6 { - return None; - } - - let discriminant = b * b - 4.0 * a * c; - if discriminant < 0.0 { - return None; // 実数解なし - } - - let sqrtd = discriminant.sqrt(); - let mut hits = Vec::new(); - - // 2つの解を計算 - let t1 = (-b - sqrtd) / (2.0 * a); - let t2 = (-b + sqrtd) / (2.0 * a); - - for &t in &[t1, t2] { - if t > t_min && t < t_max { - let point = ray.origin + t * ray.direction; - - // 法線を計算 - // 軸上の最近接点 = P_axis = axis_point + ((P - axis_point)・axis_dir) * axis_dir - // 法線 N = normalize(P - P_axis) - let p_minus_a = point - self.axis_point; - let projection = p_minus_a.dot(self.axis_dir); - let point_on_axis = self.axis_point + projection * self.axis_dir; - let outward_normal = (point - point_on_axis).normalize(); - - let front_face = ray.direction.dot(outward_normal) < 0.0; - let normal = if front_face { - outward_normal - } else { - -outward_normal - }; - - hits.push(HitRecord { - t, - point, - normal, - front_face, - material: self.material, - }); - } - } - - if hits.is_empty() { - None - } else { - Some(hits) - } - } -} +use crate::{AABB, HitRecord, Hittable, Material, Ray}; +use glam::Vec3; +// 無限円柱 +#[derive(Debug, Clone, Copy)] +pub struct InfiniteCylinder { + pub axis_point: Vec3, // 軸上の任意の点 + pub axis_dir: Vec3, // 軸の方向(正規化されていること) + pub radius: f32, + pub material: Material, +} + +impl Hittable for InfiniteCylinder { + fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { + // --- 二次方程式の係数 A, B, C を計算 --- + + let oc = ray.origin - self.axis_point; + + // ベクトルを軸に平行な成分と垂直な成分に分解する考え方を用いる + // D_perp = D - (D・V)V (Vは軸方向ベクトル) + let d_dot_v = ray.direction.dot(self.axis_dir); + let d_perp = ray.direction - d_dot_v * self.axis_dir; + + // OC_perp = OC - (OC・V)V + let oc_dot_v = oc.dot(self.axis_dir); + let oc_perp = oc - oc_dot_v * self.axis_dir; + + let a = d_perp.length_squared(); + let b = 2.0 * oc_perp.dot(d_perp); + let c = oc_perp.length_squared() - self.radius * self.radius; + + // --- 二次方程式を解く --- + + // レイが軸とほぼ平行な場合、ヒットしないか常にヒットする。簡単のためミスとする。 + if a.abs() < 1e-6 { + return None; + } + + let discriminant = b * b - 4.0 * a * c; + if discriminant < 0.0 { + return None; // 実数解なし + } + + let sqrtd = discriminant.sqrt(); + let mut hits = Vec::new(); + + // 2つの解を計算 + let t1 = (-b - sqrtd) / (2.0 * a); + let t2 = (-b + sqrtd) / (2.0 * a); + + for &t in &[t1, t2] { + if t > t_min && t < t_max { + let point = ray.origin + t * ray.direction; + + // 法線を計算 + // 軸上の最近接点 = P_axis = axis_point + ((P - axis_point)・axis_dir) * axis_dir + // 法線 N = normalize(P - P_axis) + let p_minus_a = point - self.axis_point; + let projection = p_minus_a.dot(self.axis_dir); + let point_on_axis = self.axis_point + projection * self.axis_dir; + let outward_normal = (point - point_on_axis).normalize(); + + let front_face = ray.direction.dot(outward_normal) < 0.0; + let normal = if front_face { + outward_normal + } else { + -outward_normal + }; + + hits.push(HitRecord { + t, + point, + normal, + front_face, + material: self.material, + }); + } + } + + if hits.is_empty() { None } else { Some(hits) } + } + + fn bounding_box(&self) -> Option { + None // An infinite cylinder has no bounding box. + } + + fn clone_hittable(&self) -> Box { + Box::new(*self) + } +} \ No newline at end of file diff --git a/crates/raytracing_core/src/primitives/lens.rs b/crates/raytracing_core/src/primitives/lens.rs index 2a267c4..42e7528 100644 --- a/crates/raytracing_core/src/primitives/lens.rs +++ b/crates/raytracing_core/src/primitives/lens.rs @@ -1,7 +1,8 @@ use crate::{ - CSGObject, CsgOperation, HitRecord, Hittable, InfiniteCylinder, Material, Plane, Ray, Sphere, + AABB, CSGObject, CsgOperation, HitRecord, Hittable, InfiniteCylinder, Material, Plane, Ray, + Sphere, }; -use glam::{f32, Vec3}; +use glam::{Vec3, f32}; //レンズプリミティブ pub struct Lens { pub csg_object: Box, @@ -80,4 +81,14 @@ impl Hittable for Lens { fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { self.csg_object.intersect_all(ray, t_min, t_max) } + + fn bounding_box(&self) -> Option { + self.csg_object.bounding_box() + } + + fn clone_hittable(&self) -> Box { + Box::new(Lens { + csg_object: self.csg_object.clone_hittable(), + }) + } } diff --git a/crates/raytracing_core/src/primitives/mod.rs b/crates/raytracing_core/src/primitives/mod.rs index 535a2bb..0cbd4b8 100644 --- a/crates/raytracing_core/src/primitives/mod.rs +++ b/crates/raytracing_core/src/primitives/mod.rs @@ -2,8 +2,11 @@ // それらの中の公開アイテム(pub)を、このモジュールの外からも使えるようにします。 // 各プリミティブのモジュールを宣言 +mod aabb; mod axis_aligned_box; +mod bvh; mod csg; +mod hittable_list; mod infinite_cone; mod infinite_cylinder; mod lens; @@ -13,8 +16,11 @@ mod transform; mod wedge; // 各モジュール内の公開アイテムを、primitives::* で使えるように再公開(re-export)する +pub use aabb::AABB; pub use axis_aligned_box::AxisAlignedBox; +pub use bvh::BVHNode; pub use csg::CSGObject; +pub use hittable_list::HittableList; pub use infinite_cone::InfiniteCone; pub use infinite_cylinder::InfiniteCylinder; pub use lens::Lens; @@ -25,6 +31,7 @@ pub use wedge::Wedge; use crate::HitRecord; use crate::Ray; +use glam::Vec3; // ブーリアン演算の種類 #[derive(Debug, Copy, Clone, PartialEq)] pub enum CsgOperation { @@ -38,11 +45,15 @@ pub enum CsgOperation { #[derive(Debug, Clone, Copy, PartialEq)] pub enum Material { - Mirror, - Glass { ior: f32 }, + Metal { color: Vec3, fuzz: f32 }, + Glass { color: Vec3, ior: f32 }, HalfMirror { reflectance: f32 }, + Diffuse { color: Vec3 }, + Light { color: Vec3 }, } pub trait Hittable: Sync + Send { fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option>; + fn bounding_box(&self) -> Option; + fn clone_hittable(&self) -> Box; } diff --git a/crates/raytracing_core/src/primitives/plane.rs b/crates/raytracing_core/src/primitives/plane.rs index 0cb2957..dc605a0 100644 --- a/crates/raytracing_core/src/primitives/plane.rs +++ b/crates/raytracing_core/src/primitives/plane.rs @@ -1,4 +1,4 @@ -use crate::{HitRecord, Hittable, Material, Ray}; +use crate::{AABB, HitRecord, Hittable, Material, Ray}; use glam::Vec3; // main.rsから移動させる共通定義をインポート #[derive(Debug, Clone, Copy)] @@ -52,4 +52,12 @@ impl Hittable for Plane { // 単一のHitRecordを、要素が1つのVec(ベクタ)に入れてSomeで返す Some(vec![hit_record]) } + + fn bounding_box(&self) -> Option { + None // An infinite plane has no bounding box. + } + + fn clone_hittable(&self) -> Box { + Box::new(*self) + } } diff --git a/crates/raytracing_core/src/primitives/sphere.rs b/crates/raytracing_core/src/primitives/sphere.rs index 16a891b..397ba5d 100644 --- a/crates/raytracing_core/src/primitives/sphere.rs +++ b/crates/raytracing_core/src/primitives/sphere.rs @@ -1,4 +1,4 @@ -use crate::{HitRecord, Hittable, Material, Ray}; +use crate::{AABB, HitRecord, Hittable, Material, Ray}; use glam::Vec3; // main.rsから移動させる共通定義をインポート #[derive(Debug, Clone, Copy)] @@ -72,4 +72,15 @@ impl Hittable for Sphere { Some(hits) } } + + fn bounding_box(&self) -> Option { + Some(AABB { + min: self.center - Vec3::splat(self.radius), + max: self.center + Vec3::splat(self.radius), + }) + } + + fn clone_hittable(&self) -> Box { + Box::new(*self) + } } diff --git a/crates/raytracing_core/src/primitives/transform.rs b/crates/raytracing_core/src/primitives/transform.rs index 31332d8..5a1b237 100644 --- a/crates/raytracing_core/src/primitives/transform.rs +++ b/crates/raytracing_core/src/primitives/transform.rs @@ -1,4 +1,4 @@ -use crate::{HitRecord, Hittable, Ray}; +use crate::{AABB, HitRecord, Hittable, Ray}; use glam::Mat4; // 他のHittableオブジェクトに変換を適用するためのラッパー pub struct Transform { @@ -49,4 +49,34 @@ impl Hittable for Transform { None } } + + fn bounding_box(&self) -> Option { + if let Some(bbox) = self.object.bounding_box() { + let mut min = glam::Vec3::splat(f32::INFINITY); + let mut max = glam::Vec3::splat(f32::NEG_INFINITY); + + for i in 0..8 { + let x = if (i & 1) == 0 { bbox.min.x } else { bbox.max.x }; + let y = if (i & 2) == 0 { bbox.min.y } else { bbox.max.y }; + let z = if (i & 4) == 0 { bbox.min.z } else { bbox.max.z }; + + let corner = glam::Vec3::new(x, y, z); + let transformed_corner = self.transform.transform_point3(corner); + + min = min.min(transformed_corner); + max = max.max(transformed_corner); + } + Some(AABB::new(min, max)) + } else { + None + } + } + + fn clone_hittable(&self) -> Box { + Box::new(Transform { + object: self.object.clone_hittable(), + transform: self.transform, + inverse_transform: self.inverse_transform, + }) + } } diff --git a/crates/raytracing_core/src/primitives/wedge.rs b/crates/raytracing_core/src/primitives/wedge.rs index 2bae76f..8d6c252 100644 --- a/crates/raytracing_core/src/primitives/wedge.rs +++ b/crates/raytracing_core/src/primitives/wedge.rs @@ -1,85 +1,95 @@ -use glam::Vec3; - -use crate::{CSGObject, CsgOperation, HitRecord, Hittable, Material, Plane, Ray}; -//ウェッジ -pub struct Wedge { - pub csg_object: Box, -} -// Wedge構造体の実装ブロックを追加 -impl Wedge { - pub fn new(size: Vec3, wedge_angle_rad: f32, material: Material) -> Self { - let width = size.x; - let height = size.y; - let half_depth = size.z / 2.0; - - // --- 5枚の平面を定義 --- - let p1 = Box::new(Plane { - // 底面 (y >= 0) - point: Vec3::ZERO, - normal: Vec3::Y, - material, - }) as Box; - - let p2 = Box::new(Plane { - // 垂直面 (x >= 0) - point: Vec3::ZERO, - normal: Vec3::X, - material, - }) as Box; - - // 傾斜面 - let angle_cos = wedge_angle_rad.cos(); - let angle_sin = wedge_angle_rad.sin(); - let p3 = Box::new(Plane { - point: Vec3::ZERO, - normal: Vec3::new(-angle_sin, angle_cos, 0.0), // 法線で傾きを表現 - material, - }) as Box; - - let p4 = Box::new(Plane { - // 前面キャップ (z <= half_depth) - point: Vec3::new(0.0, 0.0, half_depth), - normal: Vec3::NEG_Z, // 法線を反転させることで、zが小さい側が「内側」になる - material, - }) as Box; - - let p5 = Box::new(Plane { - // 背面キャップ (z >= -half_depth) - point: Vec3::new(0.0, 0.0, -half_depth), - normal: Vec3::Z, - material, - }) as Box; - - // --- CSGの積集合で5枚の平面を組み合わせる --- - let csg1 = Box::new(CSGObject { - left: p1, - right: p2, - operation: CsgOperation::Intersection, - }); - let csg2 = Box::new(CSGObject { - left: csg1, - right: p3, - operation: CsgOperation::Intersection, - }); - let csg3 = Box::new(CSGObject { - left: csg2, - right: p4, - operation: CsgOperation::Intersection, - }); - let final_wedge = Box::new(CSGObject { - left: csg3, - right: p5, - operation: CsgOperation::Intersection, - }); - - Wedge { - csg_object: final_wedge, - } - } -} -// WedgeのためのHittable実装を追加 -impl Hittable for Wedge { - fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { - self.csg_object.intersect_all(ray, t_min, t_max) - } -} +use glam::Vec3; + +use crate::{AABB, CSGObject, CsgOperation, HitRecord, Hittable, Material, Plane, Ray}; +//ウェッジ +pub struct Wedge { + pub csg_object: Box, +} +// Wedge構造体の実装ブロックを追加 +impl Wedge { + pub fn new(size: Vec3, wedge_angle_rad: f32, material: Material) -> Self { + let _width = size.x; + let _height = size.y; + let half_depth = size.z / 2.0; + + // --- 5枚の平面を定義 --- + let p1 = Box::new(Plane { + // 底面 (y >= 0) + point: Vec3::ZERO, + normal: Vec3::Y, + material, + }) as Box; + + let p2 = Box::new(Plane { + // 垂直面 (x >= 0) + point: Vec3::ZERO, + normal: Vec3::X, + material, + }) as Box; + + // 傾斜面 + let angle_cos = wedge_angle_rad.cos(); + let angle_sin = wedge_angle_rad.sin(); + let p3 = Box::new(Plane { + point: Vec3::ZERO, + normal: Vec3::new(-angle_sin, angle_cos, 0.0), // 法線で傾きを表現 + material, + }) as Box; + + let p4 = Box::new(Plane { + // 前面キャップ (z <= half_depth) + point: Vec3::new(0.0, 0.0, half_depth), + normal: Vec3::NEG_Z, // 法線を反転させることで、zが小さい側が「内側」になる + material, + }) as Box; + + let p5 = Box::new(Plane { + // 背面キャップ (z >= -half_depth) + point: Vec3::new(0.0, 0.0, -half_depth), + normal: Vec3::Z, + material, + }) as Box; + + // --- CSGの積集合で5枚の平面を組み合わせる --- + let csg1 = Box::new(CSGObject { + left: p1, + right: p2, + operation: CsgOperation::Intersection, + }); + let csg2 = Box::new(CSGObject { + left: csg1, + right: p3, + operation: CsgOperation::Intersection, + }); + let csg3 = Box::new(CSGObject { + left: csg2, + right: p4, + operation: CsgOperation::Intersection, + }); + let final_wedge = Box::new(CSGObject { + left: csg3, + right: p5, + operation: CsgOperation::Intersection, + }); + + Wedge { + csg_object: final_wedge, + } + } +} +// WedgeのためのHittable実装を追加 +impl Hittable for Wedge { + fn intersect_all(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option> { + self.csg_object.intersect_all(ray, t_min, t_max) + } + + fn bounding_box(&self) -> Option { + self.csg_object.bounding_box() + } + + fn clone_hittable(&self) -> Box { + Box::new(Wedge { + csg_object: self.csg_object.clone_hittable(), + }) + } +} \ No newline at end of file diff --git a/crates/raytracing_core/src/scene.rs b/crates/raytracing_core/src/scene.rs index f22c004..937370d 100644 --- a/crates/raytracing_core/src/scene.rs +++ b/crates/raytracing_core/src/scene.rs @@ -1,125 +1,128 @@ -use std::clone; - -use glam::Vec3; -use rand::Rng; - -use crate::{Hittable, Material}; - -// 反射ベクトルを計算 -fn reflect(incident: Vec3, normal: Vec3) -> Vec3 { - incident - 2.0 * incident.dot(normal) * normal -} - -// 屈折ベクトルを計算(全反射の可能性も考慮) -fn refract(incident: Vec3, normal: Vec3, ior_ratio: f32) -> Option { - let cos_theta = (-incident).dot(normal).min(1.0); - let sin_theta_squared = 1.0 - cos_theta * cos_theta; - - if ior_ratio * ior_ratio * sin_theta_squared > 1.0 { - println!("全反射が発生しました! ior_ratio: {}", ior_ratio); - return None; // 全反射 - } - - let perp = ior_ratio * (incident + cos_theta * normal); - let parallel = -(1.0 - perp.length_squared()).abs().sqrt() * normal; - - Some((perp + parallel).normalize()) -} -pub struct Scene { - pub objects: Vec>, - pub rays: Vec, -} - -pub struct SimulationSettingsConfig { - pub infinity_distance: f32, - pub max_bounces: u32, -} - -impl Scene { - pub fn simulate_rays(&self, setting: SimulationSettingsConfig) -> Vec> { - let mut result: Vec> = Vec::new(); - // --- 3. 初期光線の設定 - for ray in &self.rays { - let mut ray = ray.clone(); - // --- 3b. 光路の追跡 --- - let mut path_points: Vec = vec![ray.origin]; - let max_bounces = setting.max_bounces; - let infinity_distance = setting.infinity_distance; - - for _ in 0..max_bounces { - let mut closest_hit_record: Option = None; - let mut t_closest = f32::INFINITY; - - for object in &self.objects { - if let Some(hits) = object.intersect_all(&ray, 0.001, t_closest) { - if let Some(first_hit) = hits.first() { - if first_hit.t < t_closest { - t_closest = first_hit.t; - closest_hit_record = Some(*first_hit); - } - } - } - } - if let Some(hit) = closest_hit_record { - path_points.push(hit.point); - - let material = hit.material; // HitRecordから直接マテリアルを取得! - - match material { - Material::Mirror => { - ray.direction = reflect(ray.direction, hit.normal); - } - Material::Glass { ior: material_ior } => { - let n1 = ray.current_ior; - let n2 = if hit.front_face { material_ior } else { 1.0 }; - let ior_ratio = n1 / n2; - - if let Some(refracted_dir) = - refract(ray.direction, hit.normal, ior_ratio) - { - ray.direction = refracted_dir; - ray.current_ior = n2; - } else { - ray.direction = reflect(ray.direction, hit.normal); - } - } - Material::HalfMirror { reflectance } => { - // 0.0から1.0までの一様な乱数を生成 - if rand::thread_rng().r#gen::() < reflectance { - // 反射する場合 - ray.direction = reflect(ray.direction, hit.normal); - } else { - // 透過する場合(方向は変わらない) - // ray.direction はそのまま - } - } - } - ray.origin = hit.point + ray.direction * 0.001; - } else { - path_points.push(ray.origin + ray.direction * infinity_distance); - break; - } - } - result.push(path_points); - } - result - } -} -// 光線を表す構造体 -// origin: 始点, direction: 方向 -#[derive(Debug, Clone)] -pub struct Ray { - pub origin: Vec3, - pub direction: Vec3, - pub current_ior: f32, -} - -// 衝突(ヒット)に関する情報をまとめる構造体 -#[derive(Debug, Clone, Copy)] -pub struct HitRecord { - pub t: f32, - pub point: Vec3, - pub normal: Vec3, - pub front_face: bool, - pub material: Material, -} +use glam::Vec3; +use rand::Rng; + +use crate::{Hittable, Material}; + +// 反射ベクトルを計算 +fn reflect(incident: Vec3, normal: Vec3) -> Vec3 { + incident - 2.0 * incident.dot(normal) * normal +} + +// 屈折ベクトルを計算(全反射の可能性も考慮) +fn refract(incident: Vec3, normal: Vec3, ior_ratio: f32) -> Option { + let cos_theta = (-incident).dot(normal).min(1.0); + let sin_theta_squared = 1.0 - cos_theta * cos_theta; + + if ior_ratio * ior_ratio * sin_theta_squared > 1.0 { + println!("全反射が発生しました! ior_ratio: {}", ior_ratio); + return None; // 全反射 + } + + let perp = ior_ratio * (incident + cos_theta * normal); + let parallel = -(1.0 - perp.length_squared()).abs().sqrt() * normal; + + Some((perp + parallel).normalize()) +} +pub struct Scene { + pub world: Box, + pub rays: Vec, +} + +pub struct SimulationSettingsConfig { + pub infinity_distance: f32, + pub max_bounces: u32, +} + +impl Scene { + pub fn simulate_rays(&self, setting: SimulationSettingsConfig) -> Vec> { + let mut result: Vec> = Vec::new(); + // --- 3. 初期光線の設定 + for ray in &self.rays { + let mut ray = ray.clone(); + // --- 3b. 光路の追跡 --- + let mut path_points: Vec = vec![ray.origin]; + let max_bounces = setting.max_bounces; + let infinity_distance = setting.infinity_distance; + + for _ in 0..max_bounces { + // The world object (a BVH or a HittableList) finds the closest hit. + let closest_hit_record = self + .world + .intersect_all(&ray, 0.001, f32::INFINITY) + .and_then(|mut hits| { + // intersect_all is expected to return sorted hits, but we sort again to be safe. + hits.sort_by(|a, b| a.t.partial_cmp(&b.t).unwrap()); + hits.into_iter().next() + }); + if let Some(hit) = closest_hit_record { + path_points.push(hit.point); + + let material = hit.material; // HitRecordから直接マテリアルを取得! + + match material { + Material::Metal { .. } => { + // For path visualization, treat metal as a perfect mirror. + ray.direction = reflect(ray.direction, hit.normal); + } + Material::Glass { ior: material_ior, .. } => { + let n1 = ray.current_ior; + let n2 = if hit.front_face { material_ior } else { 1.0 }; + let ior_ratio = n1 / n2; + + if let Some(refracted_dir) = + refract(ray.direction, hit.normal, ior_ratio) + { + ray.direction = refracted_dir; + ray.current_ior = n2; + } else { + ray.direction = reflect(ray.direction, hit.normal); + } + } + Material::HalfMirror { reflectance } => { + // 0.0から1.0までの一様な乱数を生成 + if rand::thread_rng().r#gen::() < reflectance { + // 反射する場合 + ray.direction = reflect(ray.direction, hit.normal); + } else { + // 透過する場合(方向は変わらない) + // ray.direction はそのまま + } + } + Material::Diffuse { .. } => { + // For path visualization, we stop when hitting a diffuse surface. + break; + } + Material::Light { .. } => { + // For path visualization, we stop when hitting a light source. + break; + } + } + ray.origin = hit.point + ray.direction * 0.001; + } else { + path_points.push(ray.origin + ray.direction * infinity_distance); + break; + } + } + result.push(path_points); + } + result + } +} +// 光線を表す構造体 +// origin: 始点, direction: 方向 +#[derive(Debug, Clone)] +pub struct Ray { + pub origin: Vec3, + pub direction: Vec3, + pub current_ior: f32, +} + +// 衝突(ヒット)に関する情報をまとめる構造体 +#[derive(Debug, Clone, Copy)] +pub struct HitRecord { + pub t: f32, + pub point: Vec3, + pub normal: Vec3, + pub front_face: bool, + pub material: Material, +} \ No newline at end of file diff --git a/crates/raytracing_cuda_kernel/Cargo.toml b/crates/raytracing_cuda_kernel/Cargo.toml new file mode 100644 index 0000000..a80dc7b --- /dev/null +++ b/crates/raytracing_cuda_kernel/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "raytracing_cuda_kernel" +version = "0.1.0" +edition = "2024" + +[dependencies] +cuda_std = { git = "https://github.com/Rust-GPU/Rust-CUDA.git", package = "cuda_std" } +glam = "0.29.3" + +[lib] +crate-type = ["cdylib", "rlib"] + +[profile.release] +panic = "abort" \ No newline at end of file diff --git a/crates/raytracing_cuda_kernel/src/lib.rs b/crates/raytracing_cuda_kernel/src/lib.rs new file mode 100644 index 0000000..fb9144a --- /dev/null +++ b/crates/raytracing_cuda_kernel/src/lib.rs @@ -0,0 +1,469 @@ +#![no_std] +#![feature(abi_ptx)] +#![feature(std_internals)] +#![feature(core_intrinsics)] + +use cuda_std::*; +use glam::Vec3; + +// --- GPU Data Structures --- + +#[derive(Copy, Clone)] +pub enum GpuMaterial { + Metal { color: Vec3, fuzz: f32 }, + Glass { color: Vec3, ior: f32 }, + HalfMirror { reflectance: f32 }, + Diffuse { color: Vec3 }, + Light { color: Vec3 }, +} + +#[derive(Copy, Clone)] +pub struct Sphere { + pub center: Vec3, + pub radius: f32, + pub material: GpuMaterial, +} + +#[derive(Copy, Clone)] +pub struct Plane { + pub point: Vec3, + pub normal: Vec3, + pub material: GpuMaterial, +} + +#[derive(Copy, Clone)] +pub struct GpuAxisAlignedBox { + pub min: Vec3, + pub max: Vec3, + pub material: GpuMaterial, +} + +#[derive(Copy, Clone)] +pub struct GpuInfiniteCylinder { + pub axis_point: Vec3, + pub axis_dir: Vec3, + pub radius: f32, + pub material: GpuMaterial, +} + +#[derive(Copy, Clone)] +pub enum GpuHittable { + Sphere(Sphere), + Plane(Plane), + AxisAlignedBox(GpuAxisAlignedBox), + InfiniteCylinder(GpuInfiniteCylinder), +} + +#[derive(Copy, Clone)] +pub struct GpuCamera { + origin: Vec3, + lower_left_corner: Vec3, + horizontal: Vec3, + vertical: Vec3, +} + +impl GpuCamera { + pub fn new(lookfrom: Vec3, lookat: Vec3, vup: Vec3, vfov: f32, aspect_ratio: f32) -> Self { + let theta = vfov.to_radians(); + let h = (theta / 2.0).tan(); + let viewport_height = 2.0 * h; + let viewport_width = aspect_ratio * viewport_height; + + let w = (lookfrom - lookat).normalize(); + let u = vup.cross(w).normalize(); + let v = w.cross(u); + + let origin = lookfrom; + let horizontal = viewport_width * u; + let vertical = viewport_height * v; + let lower_left_corner = origin - horizontal / 2.0 - vertical / 2.0 - w; + + Self { + origin, + lower_left_corner, + horizontal, + vertical, + } + } + + #[inline(always)] + pub fn get_ray(&self, s: f32, t: f32) -> Ray { + Ray { + origin: self.origin, + direction: (self.lower_left_corner + s * self.horizontal + t * self.vertical - self.origin).normalize(), + current_ior: 1.0, + } + } +} + +#[derive(Copy, Clone)] +pub struct GpuScene<'a> { + pub hittables: &'a [GpuHittable], +} + +impl<'a> GpuScene<'a> { + pub fn hit(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + let mut closest_so_far = t_max; + let mut hit_record = None; + for hittable in self.hittables { + if let Some(hit) = hittable.intersect(ray, t_min, closest_so_far) { + closest_so_far = hit.t; + hit_record = Some(hit); + } + } + hit_record + } +} + + +#[derive(Copy, Clone)] +pub struct Ray { + pub origin: Vec3, + pub direction: Vec3, + pub current_ior: f32, +} + +impl Ray { + #[inline(always)] + pub fn at(&self, t: f32) -> Vec3 { + self.origin + t * self.direction + } +} + +#[derive(Copy, Clone)] +pub struct HitRecord { + pub t: f32, + pub point: Vec3, + pub normal: Vec3, + pub front_face: bool, + pub material: GpuMaterial, +} + +impl HitRecord { + #[inline(always)] + pub fn face_normal(ray: &Ray, outward_normal: Vec3) -> (Vec3, bool) { + let front_face = ray.direction.dot(outward_normal) < 0.0; + let normal = if front_face { + outward_normal + } else { + -outward_normal + }; + (normal, front_face) + } +} + +// --- Intersection implementations --- + +impl Sphere { + pub fn intersect(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + let oc = ray.origin - self.center; + let a = ray.direction.length_squared(); + let half_b = oc.dot(ray.direction); + let c = oc.length_squared() - self.radius * self.radius; + let discriminant = half_b * half_b - a * c; + + if discriminant < 0.0 { + return None; + } + let sqrtd = discriminant.sqrt(); + let mut root = (-half_b - sqrtd) / a; + if root < t_min || t_max < root { + root = (-half_b + sqrtd) / a; + if root < t_min || t_max < root { + return None; + } + } + + let t = root; + let point = ray.at(t); + let outward_normal = (point - self.center) / self.radius; + let (normal, front_face) = HitRecord::face_normal(ray, outward_normal); + + Some(HitRecord { + t, + point, + normal, + front_face, + material: self.material, + }) + } +} + +impl Plane { + pub fn intersect(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + let denominator = self.normal.dot(ray.direction); + if denominator.abs() < 1e-6 { + return None; + } + let t = (self.point - ray.origin).dot(self.normal) / denominator; + if t < t_min || t > t_max { + return None; + } + let point = ray.at(t); + let (normal, front_face) = HitRecord::face_normal(ray, self.normal); + Some(HitRecord { + t, + point, + normal, + front_face, + material: self.material, + }) + } +} + +impl GpuAxisAlignedBox { + pub fn intersect(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + let mut tmin = t_min; + let mut tmax = t_max; + + for i in 0..3 { + let inv_d = 1.0 / ray.direction[i]; + let mut t0 = (self.min[i] - ray.origin[i]) * inv_d; + let mut t1 = (self.max[i] - ray.origin[i]) * inv_d; + + if inv_d < 0.0 { + core::mem::swap(&mut t0, &mut t1); + } + + tmin = tmin.max(t0); + tmax = tmax.min(t1); + + if tmax <= tmin { + return None; + } + } + + let t = tmin; + let point = ray.at(t); + let outward_normal = self.calculate_normal(point); + let (normal, front_face) = HitRecord::face_normal(ray, outward_normal); + + Some(HitRecord { + t, + point, + normal, + front_face, + material: self.material, + }) + } + + fn calculate_normal(&self, point: Vec3) -> Vec3 { + let epsilon = 1e-4; + if (point.x - self.min.x).abs() < epsilon { return Vec3::NEG_X; } + if (point.x - self.max.x).abs() < epsilon { return Vec3::X; } + if (point.y - self.min.y).abs() < epsilon { return Vec3::NEG_Y; } + if (point.y - self.max.y).abs() < epsilon { return Vec3::Y; } + if (point.z - self.min.z).abs() < epsilon { return Vec3::NEG_Z; } + if (point.z - self.max.z).abs() < epsilon { return Vec3::Z; } + Vec3::ZERO + } +} + +impl GpuInfiniteCylinder { + pub fn intersect(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + let oc = ray.origin - self.axis_point; + let d_dot_v = ray.direction.dot(self.axis_dir); + let d_perp = ray.direction - d_dot_v * self.axis_dir; + let oc_dot_v = oc.dot(self.axis_dir); + let oc_perp = oc - oc_dot_v * self.axis_dir; + + let a = d_perp.length_squared(); + let b = 2.0 * oc_perp.dot(d_perp); + let c = oc_perp.length_squared() - self.radius * self.radius; + + if a.abs() < 1e-6 { + return None; + } + + let discriminant = b * b - 4.0 * a * c; + if discriminant < 0.0 { + return None; + } + + let sqrtd = discriminant.sqrt(); + let mut t = (-b - sqrtd) / (2.0 * a); + if t < t_min || t > t_max { + t = (-b + sqrtd) / (2.0 * a); + if t < t_min || t > t_max { + return None; + } + } + + let point = ray.at(t); + let p_minus_a = point - self.axis_point; + let projection = p_minus_a.dot(self.axis_dir); + let point_on_axis = self.axis_point + projection * self.axis_dir; + let outward_normal = (point - point_on_axis).normalize(); + let (normal, front_face) = HitRecord::face_normal(ray, outward_normal); + + Some(HitRecord { + t, + point, + normal, + front_face, + material: self.material, + }) + } +} + + +impl GpuHittable { + pub fn intersect(&self, ray: &Ray, t_min: f32, t_max: f32) -> Option { + match self { + GpuHittable::Sphere(s) => s.intersect(ray, t_min, t_max), + GpuHittable::Plane(p) => p.intersect(ray, t_min, t_max), + GpuHittable::AxisAlignedBox(b) => b.intersect(ray, t_min, t_max), + GpuHittable::InfiniteCylinder(c) => c.intersect(ray, t_min, t_max), + } + } +} + +// --- Helper Functions for Kernel --- + +#[inline(always)] +fn reflect(v: Vec3, n: Vec3) -> Vec3 { + v - 2.0 * v.dot(n) * n +} + +#[inline(always)] +fn refract(uv: Vec3, n: Vec3, etai_over_etat: f32) -> Vec3 { + let cos_theta = (-uv).dot(n).min(1.0); + let r_out_perp = etai_over_etat * (uv + cos_theta * n); + let r_out_parallel = -(1.0 - r_out_perp.length_squared()).abs().sqrt() * n; + r_out_perp + r_out_parallel +} + +#[inline(always)] +fn schlick(cosine: f32, ref_idx: f32) -> f32 { + let mut r0 = (1.0 - ref_idx) / (1.0 + ref_idx); + r0 = r0 * r0; + r0 + (1.0 - r0) * (1.0 - cosine).powi(5) +} + +// LCG random number generator for the GPU +#[inline(always)] +fn lcg(seed: &mut u32) -> f32 { + *seed = seed.wrapping_mul(1664525).wrapping_add(1013904223); + (*seed as f32) / (u32::MAX as f32) +} + +#[inline(always)] +fn random_in_unit_sphere(seed: &mut u32) -> Vec3 { + loop { + let p = Vec3::new(lcg(seed) * 2.0 - 1.0, lcg(seed) * 2.0 - 1.0, lcg(seed) * 2.0 - 1.0); + if p.length_squared() < 1.0 { + return p; + } + } +} + +// --- Main Kernel Logic --- + +fn kernel_ray_color(mut ray: Ray, scene: &GpuScene, max_depth: i32, seed: &mut u32) -> Vec3 { + let mut color = Vec3::ONE; + for _ in 0..max_depth { + if let Some(hit) = scene.hit(&ray, 0.001, f32::INFINITY) { + let emitted = match hit.material { + GpuMaterial::Light { color } => color, + _ => Vec3::ZERO, + }; + + let (maybe_scattered, attenuation) = match hit.material { + GpuMaterial::Light { .. } => (None, Vec3::ZERO), + GpuMaterial::Diffuse { color } => { + let scatter_direction = hit.normal + random_in_unit_sphere(seed).normalize(); + let scattered = Ray { + origin: hit.point, + direction: scatter_direction, + current_ior: ray.current_ior, + }; + (Some(scattered), color) + } + GpuMaterial::Metal { color, fuzz } => { + let reflected = reflect(ray.direction.normalize(), hit.normal); + let scattered = Ray { + origin: hit.point, + direction: reflected + fuzz * random_in_unit_sphere(seed), + current_ior: ray.current_ior, + }; + if scattered.direction.dot(hit.normal) > 0.0 { + (Some(scattered), color) + } else { + (None, Vec3::ZERO) + } + } + GpuMaterial::Glass { color: _, ior } => { + let etai_over_etat = if hit.front_face { 1.0 / ior } else { ior }; + let unit_direction = ray.direction.normalize(); + let cos_theta = (-unit_direction).dot(hit.normal).min(1.0); + let sin_theta = (1.0 - cos_theta * cos_theta).sqrt(); + let reflect_prob = schlick(cos_theta, etai_over_etat); + + let direction = if etai_over_etat * sin_theta > 1.0 || lcg(seed) < reflect_prob { + reflect(unit_direction, hit.normal) + } else { + refract(unit_direction, hit.normal, etai_over_etat) + }; + let scattered = Ray { + origin: hit.point, + direction, + current_ior: if hit.front_face { ior } else { 1.0 }, + }; + (Some(scattered), Vec3::ONE) // Glass is perfectly transparent + } + _ => (None, Vec3::ZERO), + }; + + color *= attenuation; + if let Some(scattered) = maybe_scattered { + ray = scattered; + } else { + return emitted; + } + } else { + return Vec3::ZERO; // Background + } + } + Vec3::ZERO +} + +#[no_mangle] +pub unsafe extern "ptx-kernel" fn render_kernel( + hittables: *const GpuHittable, + hittable_count: u32, + camera: *const GpuCamera, + output: *mut Vec3, + width: u32, + height: u32, + samples_per_pixel: u32, + max_depth: i32, +) { + let thread_idx = thread::idx().x; + let block_idx = block::idx().x; + let block_dim = block::dim().x; + + let i = block_idx * block_dim + thread_idx; + if i >= width * height { + return; + } + + let x = i % width; + let y = i / width; + + let scene = GpuScene { + hittables: core::slice::from_raw_parts(hittables, hittable_count as usize), + }; + let camera = &*camera; + + let mut pixel_color = Vec3::ZERO; + let mut seed = (i as u32).wrapping_mul(123456789); + + for _ in 0..samples_per_pixel { + let u = (x as f32 + lcg(&mut seed)) / (width - 1) as f32; + let v = (y as f32 + lcg(&mut seed)) / (height - 1) as f32; + let ray = camera.get_ray(u, v); + pixel_color += kernel_ray_color(ray, &scene, max_depth, &mut seed); + } + + *output.add(i as usize) = pixel_color / samples_per_pixel as f32; +} \ No newline at end of file diff --git a/crates/raytracing_renderer/Cargo.toml b/crates/raytracing_renderer/Cargo.toml new file mode 100644 index 0000000..246bc0b --- /dev/null +++ b/crates/raytracing_renderer/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "raytracing_renderer" +version = "0.1.0" +edition = "2024" + +[dependencies] +raytracing_core = { workspace = true } +raytracing_config = { workspace = true } +glam = { workspace = true } +image = "0.25.1" +rand = "0.8" +rayon = "1.5" + +# CUDA dependencies +cust = "0.3.2" +raytracing_cuda_kernel = { path = "../raytracing_cuda_kernel" } + +[build-dependencies] +cuda_builder = { git = "https://github.com/Rust-GPU/Rust-CUDA.git", package = "cuda_builder" } \ No newline at end of file diff --git a/crates/raytracing_renderer/build.rs b/crates/raytracing_renderer/build.rs new file mode 100644 index 0000000..a9e8f67 --- /dev/null +++ b/crates/raytracing_renderer/build.rs @@ -0,0 +1,8 @@ +use cuda_builder::CudaBuilder; + +fn main() { + CudaBuilder::new("../raytracing_cuda_kernel") + .copy_to("kernel.ptx") + .build() + .unwrap(); +} \ No newline at end of file diff --git a/crates/raytracing_renderer/src/lib.rs b/crates/raytracing_renderer/src/lib.rs new file mode 100644 index 0000000..8427ba2 --- /dev/null +++ b/crates/raytracing_renderer/src/lib.rs @@ -0,0 +1,182 @@ +use cust::prelude::*; +use glam::Vec3; +use image::{ImageBuffer, Rgb}; +use raytracing_config::model::camera_config::CameraConfig; +use raytracing_core::{Hittable, HittableList, Material, Plane, Scene, Sphere, Transform}; +use raytracing_cuda_kernel::{ + GpuAxisAlignedBox, GpuCamera, GpuHittable, GpuInfiniteCylinder, GpuMaterial, +}; +use std::error::Error; + +// This embeds the PTX file generated by the build script +const PTX: &str = include_str!(env!("KERNEL_PTX_PATH")); + +/// Converts the CPU-side scene representation (using trait objects) +/// into a flat list of GPU-compatible structs. +struct GpuSceneConverter { + gpu_hittables: Vec, +} + +impl GpuSceneConverter { + fn new() -> Self { + Self { + gpu_hittables: Vec::new(), + } + } + + fn convert(mut self, scene: &Scene) -> Vec { + self.flatten_hittable(scene.world.as_ref(), glam::Mat4::IDENTITY); + self.gpu_hittables + } + + fn flatten_hittable(&mut self, hittable: &dyn Hittable, transform: glam::Mat4) { + if let Some(s) = hittable.downcast_ref::() { + let center = transform.transform_point3(s.center); + self.gpu_hittables.push(GpuHittable::Sphere( + raytracing_cuda_kernel::Sphere { + center, + radius: s.radius, + material: self.convert_material(s.material), + }, + )); + } else if let Some(p) = hittable.downcast_ref::() { + let point = transform.transform_point3(p.point); + let normal = transform.transform_vector3(p.normal).normalize(); + self.gpu_hittables.push(GpuHittable::Plane( + raytracing_cuda_kernel::Plane { + point, + normal, + material: self.convert_material(p.material), + }, + )); + } else if let Some(b) = hittable.downcast_ref::() { + self.gpu_hittables.push(GpuHittable::AxisAlignedBox( + GpuAxisAlignedBox { + min: transform.transform_point3(b.min), + max: transform.transform_point3(b.max), + material: self.convert_material(b.material), + }, + )); + } else if let Some(c) = hittable.downcast_ref::() { + self.gpu_hittables.push(GpuHittable::InfiniteCylinder( + GpuInfiniteCylinder { + axis_point: transform.transform_point3(c.axis_point), + axis_dir: transform.transform_vector3(c.axis_dir).normalize(), + radius: c.radius, + material: self.convert_material(c.material), + }, + )); + } else if let Some(list) = hittable.downcast_ref::() { + for obj in &list.objects { + self.flatten_hittable(obj.as_ref(), transform); + } + } else if let Some(t) = hittable.downcast_ref::() { + let composed_transform = transform * t.transform; + self.flatten_hittable(t.primitive.as_ref(), composed_transform); + } + // Other hittable types like BVH, CSG, etc., are ignored for this CUDA implementation. + } + + fn convert_material(&self, mat: Material) -> GpuMaterial { + match mat { + Material::Metal { color, fuzz } => GpuMaterial::Metal { color, fuzz }, + Material::Glass { color, ior } => GpuMaterial::Glass { color, ior }, + Material::HalfMirror { reflectance } => GpuMaterial::HalfMirror { reflectance }, + Material::Diffuse { color } => GpuMaterial::Diffuse { color }, + Material::Light { color } => GpuMaterial::Light { color }, + } + } +} + +/// Renders the scene using the CUDA kernel and saves it to a file. +pub fn render( + scene: &Scene, + camera_config: &CameraConfig, + width: u32, + height: u32, + samples_per_pixel: u32, + max_depth: u32, +) -> Result<(), Box> { + // --- 1. Initialize CUDA and Load Kernel --- + let _ctx = cust::quick_init()?; + let module = Module::from_str(PTX)?; + let stream = Stream::new(StreamFlags::DEFAULT, None)?; + + // --- 2. Convert Scene to GPU format --- + let converter = GpuSceneConverter::new(); + let gpu_hittables = converter.convert(scene); + + if gpu_hittables.is_empty() { + println!("Warning: No compatible objects found for GPU rendering. Ensure your scene contains Spheres, Planes, Boxes, or Cylinders."); + // Create a blank image + let img_buf: ImageBuffer, Vec> = + ImageBuffer::from_pixel(width, height, Rgb([0, 0, 0])); + img_buf.save("output.png").unwrap(); + println!("Saved a blank 'output.png'."); + return Ok(()); + } + + // --- 3. Setup Camera --- + let camera = GpuCamera::new( + camera_config.lookfrom, + camera_config.lookat, + camera_config.vup, + camera_config.vfov, + width as f32 / height as f32, + ); + + // --- 4. Allocate and Copy Data to GPU --- + let hittables_gpu = DeviceBuffer::from_slice(&gpu_hittables)?; + let camera_gpu = DeviceBuffer::from_slice(&[camera])?; + let mut output_gpu = unsafe { DeviceBuffer::uninitialized((width * height) as usize)? }; + + // --- 5. Launch Kernel --- + let grid_size = (width * height + 255) / 256; + let block_size = 256; + + let kernel = module.get_function("render_kernel")?; + + unsafe { + launch!( + kernel<<>>( + hittables_gpu.as_device_ptr(), + gpu_hittables.len() as u32, + camera_gpu.as_device_ptr(), + output_gpu.as_device_ptr(), + width, + height, + samples_per_pixel, + max_depth as i32 + ) + )?; + } + stream.synchronize()?; + + // --- 6. Copy Result from GPU and Save Image --- + let mut output_cpu = vec![Vec3::ZERO; (width * height) as usize]; + output_gpu.copy_to(&mut output_cpu)?; + + let pixels: Vec> = output_cpu + .into_iter() + .map(|pixel_color| { + // Apply gamma correction (sqrt) + let r = (pixel_color.x).sqrt(); + let g = (pixel_color.y).sqrt(); + let b = (pixel_color.z).sqrt(); + Rgb([ + (256.0 * r.clamp(0.0, 0.999)) as u8, + (256.0 * g.clamp(0.0, 0.999)) as u8, + (256.0 * b.clamp(0.0, 0.999)) as u8, + ]) + }) + .collect(); + + let raw_pixels: Vec = pixels.into_iter().flat_map(|p| p.0).collect(); + let img_buf: ImageBuffer, Vec> = + ImageBuffer::from_raw(width, height, raw_pixels).unwrap(); + + img_buf.save("output.png").unwrap(); + println!("GPUレンダリングが完了し、'output.png' に保存されました。"); + + Ok(()) +} \ No newline at end of file diff --git a/output.png b/output.png new file mode 100644 index 0000000..409730e Binary files /dev/null and b/output.png differ diff --git a/package.json b/package.json new file mode 100644 index 0000000..7472aca --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "jules": "^1.0.0" + } +} diff --git a/paths.obj b/paths.obj new file mode 100644 index 0000000..b003f2a --- /dev/null +++ b/paths.obj @@ -0,0 +1,21 @@ +# Light path visualization generated by raytracing-cli +# Vertices +v -15 0 0 +v 3.77524 -9.38762 -9.38762 +v 5 -10 -10 +v 6.224745 -9.387628 -10.612372 +v 47.050392 11.025195 -31.025196 +v -15 0 0 +v 44.999996 -10 -29.999998 +v 81.86122 -38.313652 -48.43061 +v -15 0 0 +v 29.232582 7.372097 -22.116291 + +# Line segments +l 1 2 +l 2 3 +l 3 4 +l 4 5 +l 6 7 +l 7 8 +l 9 10 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..5b93408 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,38 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + jules: + specifier: ^1.0.0 + version: 1.0.0 + +packages: + + get-stdin@5.0.1: + resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} + engines: {node: '>=0.12.0'} + + jules@1.0.0: + resolution: {integrity: sha512-zTCl9xy54mUArumz9Q4nJl+vjQwtHKWwe5kOV/Mm/L+udn2+d0w0qbANvh/+KqnnI3BzAIWGEBhzQCNsYL+TJg==} + engines: {node: '>8.0.0'} + hasBin: true + + valid-identifier@0.0.1: + resolution: {integrity: sha512-+tLvqAC/bJrWSVqtNWNSx0UG6SYxKpGVCZWUdE0cmSUyEUELtx/23kIAfgiMtoiu8djPbJnh4iT8uTekRnLHNg==} + +snapshots: + + get-stdin@5.0.1: {} + + jules@1.0.0: + dependencies: + get-stdin: 5.0.1 + valid-identifier: 0.0.1 + + valid-identifier@0.0.1: {} diff --git a/python_files/plot_3d.py b/python_files/plot_3d.py deleted file mode 100644 index cde2b52..0000000 --- a/python_files/plot_3d.py +++ /dev/null @@ -1,44 +0,0 @@ -import matplotlib.pyplot as plt -import pandas as pd -from matplotlib.patches import Circle, PathPatch -from matplotlib.path import Path - -# CSVファイルを読み込む -try: - df = pd.read_csv('path_3d.csv') -except FileNotFoundError: - print("Error: 'path_3d.csv' not found. Please run the Rust program first.") - exit() - -# プロットの準備 -plt.figure(figsize=(12, 9)) -ax = plt.gca() - -# --- シーン内のオブジェクトの断面を描画 --- -# Rustコードのシーン設定と対応させる - -# 1. ガラスの球: center=(0,0,0), radius=10 -# XY平面で見た場合、(0,0)が中心の半径10の円になる -sphere = Circle((0, 0), 10, color='skyblue', alpha=0.4, label='Glass Sphere (ior=1.5)') -ax.add_patch(sphere) - -# 2. 反射する床: y = -15 の平面 -# XY平面で見た場合、y = -15 の水平な直線になる -plt.axhline(y=-15, color='dimgray', linewidth=3, label='Mirror Plane') - - -# --- 光路を描画 --- -# 'x'と'y'の列だけを使ってプロット(Z軸を無視してXY平面に射影) -plt.plot(df['x'], df['z'], marker='o', markersize=4, linestyle='-', color='red', label='Ray Path (XZ Projection)') - -# 始点に印をつける -plt.plot(df['x'].iloc[0], df['z'].iloc[0], 'go', markersize=10, label='Start Point') - -# --- グラフの体裁を整える --- -plt.xlabel('X coordinate') -plt.ylabel('Y coordinate') -plt.title('3D Optical Path Simulation (Projected onto XY Plane)') -plt.grid(True) -plt.legend() -plt.axis('equal') # X軸とY軸のスケールを合わせる(形状が歪まないように) -plt.show() \ No newline at end of file diff --git a/simulation.toml b/simulation.toml index ccef7d0..79e83ef 100644 --- a/simulation.toml +++ b/simulation.toml @@ -1,6 +1,9 @@ [simulation_settings] infinity_distance = 50.0 -max_bounces = 10 +max_bounces = 50 +samples_per_pixel = 100 +image_width = 800 +image_height = 600 # === レイ生成ルール === # 2. プロジェクターのような点光源 @@ -26,17 +29,32 @@ step_z = [0.0, 0.0, -5.0] # Z方向の配置ステップ # グリッド配置するオブジェクトのテンプレート template.shape = { type = "Sphere", radius = 1.5 } -template.material = { type = "Glass", ior = 1.5 } +template.material = { type = "Diffuse", color = [0.8, 0.3, 0.3] } template.transform = { position = [0.0, 0.0, 0.0], rotation_y_deg = 0.0 } # === 個別に配置するオブジェクト === [[scene.objects]] # 床 shape = { type = "Plane", normal = [0.0, 1.0, 0.0] } -material = { type = "Glass", ior = 1.2} +material = { type = "Metal", color = [0.8, 0.8, 0.8], fuzz = 0.2 } transform = { position = [0.0, -10.0, 0.0], rotation_y_deg = 0.0 } [[scene.objects]] shape = { type = "Plane", normal = [0.0, 1.0, 0.0] } material = { type = "Glass", ior = 1.2 } -transform = { position = [0.0, -10.0, 0.0],rotation_y_deg = 0.0 } \ No newline at end of file +transform = { position = [0.0, -10.0, 0.0],rotation_y_deg = 0.0 } + +[camera] +lookfrom = [0.0, 0.0, 25.0] +lookat = [0.0, 0.0, 0.0] +vfov = 90.0 + +[[scene.objects]] + shape = { type = "Sphere", radius = 3.0 } + material = { type = "Light", color = [4.0, 4.0, 4.0] } + transform = { position = [0.0, 0.0, 0.0], rotation_y_deg = 0.0 } + +[[scene.objects]] +shape = { type = "Sphere", radius = 5.0 } +material = { type = "Glass", color = [0.8, 1.0, 0.85], ior = 1.5 } +transform = { position = [-10.0, 0.0, 0.0], rotation_y_deg = 0.0 } \ No newline at end of file diff --git a/src/bin/render.rs b/src/bin/render.rs new file mode 100644 index 0000000..b374bad --- /dev/null +++ b/src/bin/render.rs @@ -0,0 +1,23 @@ +use raytracing_config::simulation_config::SimulationConfig; +use raytracing_core::Scene; +use raytracing_renderer::render; +use std::error::Error; + +fn main() -> Result<(), Box> { + println!("設定ファイル simulation.toml を読み込んでいます..."); + let config = SimulationConfig::load_from_path("simulation.toml")?; + let scene: Scene = config.scene.into(); + + println!("レンダリングを開始します..."); + let settings = config.simulation_settings; + render( + &scene, + &config.camera, + settings.image_width, + settings.image_height, + settings.samples_per_pixel, + settings.max_bounces, + )?; + + Ok(()) +} \ No newline at end of file