diff --git a/AGENTS.md b/AGENTS.md
index 943f2d0e4..abaab40ce 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -43,7 +43,6 @@ Game workspace (root `Cargo.toml`); `launcher/` and `crates/horizon-telemetry-se
| `horizon-server` | `horizon-server`: `server.toml`, CLI, supervisor of the headless game ([docs/hosting.md](docs/hosting.md)) |
| `horizon-server-files` | `server.properties`, eula, ops/whitelist/bans, usercache |
| `horizon-friends`, `horizon-relay` | Play with Friends: invite codes, encrypted tunnel, the relay ([docs/play-with-friends.md](docs/play-with-friends.md)) |
-| `horizon-shaderpack` | OptiFine/Iris packs: preprocessor, GLSL → WGSL ([docs/shader-packs.md](docs/shader-packs.md)) |
| `horizon-mods`, `horizon-mod-sdk`, `cargo-horizon-mod` | Sandboxed WebAssembly mods: runtime, SDK + WIT, `cargo horizon-mod` ([docs/mods.md](docs/mods.md)) |
| `horizon-port-pack` | Porting Java modpacks ([docs/modpacks.md](docs/modpacks.md)) |
| `horizon-theme` | Design tokens and fonts for the launcher, the game's own menus and the website |
@@ -126,7 +125,6 @@ python3 tools/agent_control_e2e.py # horizon-ctl / MCP end to end
| Input | game.rs `fn window_event`, `fn key_pressed`, `fn play_mouse`; L: `keybinds.rs`, `keymapping.rs`, `key_names.rs`, `mouse.rs`, `input.rs`, `interaction_input.rs`, `gamepad.rs`, `osk.rs`, `clipboard.rs`; G: `pad.rs`, `pad_menu.rs` |
| Audio | L: `audio.rs` (mixer), `sound_engine.rs`, `sound_events.rs`, `music.rs`, `ambience.rs`; G: `music.rs`, `subtitle_hud.rs` |
| Resource packs | L: `packs.rs` + `packs/`, `pack_screen.rs`, `atlas_sources.rs`, `sprites.rs`, `mipmap.rs`, `model_library.rs`, `font.rs`, `lang.rs`; crate `horizon-assets`; G: `packs.rs` |
-| Shader packs | L: `shader_pack.rs` (Horizon WGSL packs), `java_pack.rs` + crate `horizon-shaderpack` (Iris/OptiFine), `gfx/pack_stages.rs`, `gfx/java_stages.rs`; G: `shader_packs.rs` |
| Agent control | L: `control.rs` (socket), `bin/horizon-ctl/`; G: `control.rs`, `agent.rs`, `events.rs`, `ui_control.rs` ([docs/agent-control.md](docs/agent-control.md)) |
| Mods | crate `horizon-mods`; G: `mods.rs`; L: `mod_content.rs`, `mod_list.rs` |
| Horizon extras, settings | L: `extras.rs`, `graphics.rs`, `settings.rs`, `minimap.rs`; G: `extras.rs`, `tweaks.rs`, `options.rs` |
diff --git a/Cargo.lock b/Cargo.lock
index 1a1b288c9..46b99b819 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -178,15 +178,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
-[[package]]
-name = "ascii-canvas"
-version = "4.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef1e3e699d84ab1b0911a1010c5c106aa34ae89aeac103be5ce0c3859db1e891"
-dependencies = [
- "term",
-]
-
[[package]]
name = "ash"
version = "0.38.0+1.3.281"
@@ -214,30 +205,15 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
-[[package]]
-name = "bit-set"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
-dependencies = [
- "bit-vec 0.8.0",
-]
-
[[package]]
name = "bit-set"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d"
dependencies = [
- "bit-vec 0.9.1",
+ "bit-vec",
]
-[[package]]
-name = "bit-vec"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
-
[[package]]
name = "bit-vec"
version = "0.9.1"
@@ -283,16 +259,6 @@ dependencies = [
"objc2 0.6.5",
]
-[[package]]
-name = "borsh"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a"
-dependencies = [
- "bytes",
- "cfg_aliases",
-]
-
[[package]]
name = "bumpalo"
version = "3.20.3"
@@ -484,15 +450,6 @@ dependencies = [
"crossbeam-utils",
]
-[[package]]
-name = "convert_case"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9"
-dependencies = [
- "unicode-segmentation",
-]
-
[[package]]
name = "coords-hud"
version = "0.1.0"
@@ -797,41 +754,6 @@ dependencies = [
"syn 2.0.119",
]
-[[package]]
-name = "darling"
-version = "0.20.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
-dependencies = [
- "darling_core",
- "darling_macro",
-]
-
-[[package]]
-name = "darling_core"
-version = "0.20.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
-dependencies = [
- "fnv",
- "ident_case",
- "proc-macro2",
- "quote",
- "strsim",
- "syn 2.0.119",
-]
-
-[[package]]
-name = "darling_macro"
-version = "0.20.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
-dependencies = [
- "darling_core",
- "quote",
- "syn 2.0.119",
-]
-
[[package]]
name = "dasp_sample"
version = "0.11.0"
@@ -849,29 +771,6 @@ dependencies = [
"syn 3.0.6",
]
-[[package]]
-name = "derive_more"
-version = "2.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134"
-dependencies = [
- "derive_more-impl",
-]
-
-[[package]]
-name = "derive_more-impl"
-version = "2.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb"
-dependencies = [
- "convert_case",
- "proc-macro2",
- "quote",
- "rustc_version",
- "syn 2.0.119",
- "unicode-xid",
-]
-
[[package]]
name = "digest"
version = "0.10.7"
@@ -958,15 +857,6 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
-[[package]]
-name = "ena"
-version = "0.14.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
-dependencies = [
- "log",
-]
-
[[package]]
name = "encoding_rs"
version = "0.8.42"
@@ -1230,58 +1120,6 @@ version = "0.30.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9"
-[[package]]
-name = "glsl-lang"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "983a18d0c2ecad18ac9ff3c94b069d6bd03b47405a200836d9d8d63def8e34de"
-dependencies = [
- "glsl-lang-lexer",
- "glsl-lang-types",
- "lalrpop",
- "lalrpop-util",
- "lang-util",
- "once_cell",
- "thiserror 2.0.21",
-]
-
-[[package]]
-name = "glsl-lang-lexer"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abdbc0bdfbc81d557f4865e695457eb23d68031bfb061fda3444f56511b26eee"
-dependencies = [
- "glsl-lang-pp",
- "glsl-lang-types",
- "lalrpop-util",
- "lang-util",
- "thiserror 2.0.21",
-]
-
-[[package]]
-name = "glsl-lang-pp"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88677876fb27f116015d0ecebda6d77bdf65f3a6fa3f5dfeed10b8c8f04cb2c5"
-dependencies = [
- "arrayvec",
- "derive_more",
- "lang-util",
- "string_cache",
- "string_cache_codegen",
- "thiserror 2.0.21",
-]
-
-[[package]]
-name = "glsl-lang-types"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd8b1532b424d40df634cf2dc2be56d59f994b9ac07fa7c1e3183fd33db9cb07"
-dependencies = [
- "lang-util",
- "thiserror 2.0.21",
-]
-
[[package]]
name = "gpu-allocator"
version = "0.28.0"
@@ -1428,7 +1266,6 @@ dependencies = [
"horizon-mods",
"horizon-protocol",
"horizon-server-files",
- "horizon-shaderpack",
"horizon-telemetry",
"horizon-theme",
"horizon-threads",
@@ -1443,7 +1280,6 @@ dependencies = [
"serde_json",
"sha2",
"symphonia",
- "toml",
"ureq",
"wgpu",
"winit",
@@ -1594,16 +1430,6 @@ dependencies = [
"ureq",
]
-[[package]]
-name = "horizon-shaderpack"
-version = "0.1.0"
-dependencies = [
- "glsl-lang",
- "naga",
- "pp-rs",
- "zip",
-]
-
[[package]]
name = "horizon-telemetry"
version = "0.1.0"
@@ -1755,12 +1581,6 @@ version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
-[[package]]
-name = "ident_case"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
-
[[package]]
name = "idna"
version = "1.1.0"
@@ -1943,73 +1763,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "keccak"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
-dependencies = [
- "cpufeatures",
-]
-
-[[package]]
-name = "lalrpop"
-version = "0.22.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba4ebbd48ce411c1d10fb35185f5a51a7bfa3d8b24b4e330d30c9e3a34129501"
-dependencies = [
- "ascii-canvas",
- "bit-set 0.8.0",
- "ena",
- "itertools",
- "lalrpop-util",
- "petgraph 0.7.1",
- "pico-args",
- "regex",
- "regex-syntax",
- "sha3",
- "string_cache",
- "term",
- "unicode-xid",
- "walkdir",
-]
-
-[[package]]
-name = "lalrpop-util"
-version = "0.22.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5baa5e9ff84f1aefd264e6869907646538a52147a755d494517a8007fb48733"
-dependencies = [
- "regex-automata",
- "rustversion",
-]
-
-[[package]]
-name = "lang-util"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1715a1e56998f119cd6d49ac8a69802dcbe4fca96d8291243d6dae87abeb913"
-dependencies = [
- "derive_more",
- "lalrpop-util",
- "lang-util-derive",
- "line-span",
- "smol_str 0.3.6",
- "text-size",
-]
-
-[[package]]
-name = "lang-util-derive"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f2acc66aedf0e445534e0a6b3f0f6ee20ef6ebb9647dbe10735e52ea8d6a096"
-dependencies = [
- "darling",
- "proc-macro2",
- "quote",
- "syn 2.0.119",
-]
-
[[package]]
name = "lazy_static"
version = "1.5.1"
@@ -2066,12 +1819,6 @@ dependencies = [
"pkg-config",
]
-[[package]]
-name = "line-span"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29fc123b2f6600099ca18248f69e3ee02b09c4188c0d98e9a690d90dec3e408a"
-
[[package]]
name = "linux-raw-sys"
version = "0.4.15"
@@ -2183,7 +1930,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130"
dependencies = [
"arrayvec",
- "bit-set 0.10.0",
+ "bit-set",
"bitflags 2.13.2",
"cfg-if",
"cfg_aliases",
@@ -2196,7 +1943,6 @@ dependencies = [
"naga-types",
"num-traits",
"once_cell",
- "pp-rs",
"rustc-hash 1.1.0",
"spirv",
"thiserror 2.0.21",
@@ -2245,12 +1991,6 @@ dependencies = [
"jni-sys 0.3.1",
]
-[[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.31.3"
@@ -2750,16 +2490,6 @@ version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
-[[package]]
-name = "petgraph"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
-dependencies = [
- "fixedbitset",
- "indexmap",
-]
-
[[package]]
name = "petgraph"
version = "0.8.3"
@@ -2771,31 +2501,6 @@ dependencies = [
"indexmap",
]
-[[package]]
-name = "phf_generator"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
-dependencies = [
- "phf_shared",
- "rand",
-]
-
-[[package]]
-name = "phf_shared"
-version = "0.11.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
-dependencies = [
- "siphasher",
-]
-
-[[package]]
-name = "pico-args"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
-
[[package]]
name = "pin-project"
version = "1.1.13"
@@ -2914,21 +2619,6 @@ dependencies = [
"zerovec",
]
-[[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 = "precomputed-hash"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
-
[[package]]
name = "presser"
version = "0.3.1"
@@ -3022,15 +2712,6 @@ version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
-[[package]]
-name = "rand"
-version = "0.8.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c"
-dependencies = [
- "rand_core",
-]
-
[[package]]
name = "rand_core"
version = "0.6.4"
@@ -3369,16 +3050,6 @@ dependencies = [
"digest",
]
-[[package]]
-name = "sha3"
-version = "0.10.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874"
-dependencies = [
- "digest",
- "keccak",
-]
-
[[package]]
name = "shlex"
version = "2.0.1"
@@ -3407,12 +3078,6 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
-[[package]]
-name = "siphasher"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256"
-
[[package]]
name = "slab"
version = "0.4.12"
@@ -3462,16 +3127,6 @@ dependencies = [
"serde",
]
-[[package]]
-name = "smol_str"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523"
-dependencies = [
- "borsh",
- "serde_core",
-]
-
[[package]]
name = "socket2"
version = "0.5.10"
@@ -3521,37 +3176,6 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
-[[package]]
-name = "string_cache"
-version = "0.8.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f"
-dependencies = [
- "new_debug_unreachable",
- "parking_lot",
- "phf_shared",
- "precomputed-hash",
- "serde",
-]
-
-[[package]]
-name = "string_cache_codegen"
-version = "0.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
-dependencies = [
- "phf_generator",
- "phf_shared",
- "proc-macro2",
- "quote",
-]
-
-[[package]]
-name = "strsim"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
-
[[package]]
name = "subtle"
version = "2.6.1"
@@ -3668,15 +3292,6 @@ version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
-[[package]]
-name = "term"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1"
-dependencies = [
- "windows-sys 0.61.2",
-]
-
[[package]]
name = "termcolor"
version = "1.4.1"
@@ -3686,12 +3301,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "text-size"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
-
[[package]]
name = "thiserror"
version = "1.0.69"
@@ -3852,7 +3461,7 @@ checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6"
dependencies = [
"memchr",
"nom",
- "petgraph 0.8.3",
+ "petgraph",
]
[[package]]
@@ -4573,8 +4182,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14"
dependencies = [
"arrayvec",
- "bit-set 0.10.0",
- "bit-vec 0.9.1",
+ "bit-set",
+ "bit-vec",
"bitflags 2.13.2",
"bytemuck",
"cfg_aliases",
@@ -4624,7 +4233,7 @@ dependencies = [
"android_system_properties",
"arrayvec",
"ash",
- "bit-set 0.10.0",
+ "bit-set",
"bitflags 2.13.2",
"block2 0.6.2",
"bytemuck",
@@ -5122,7 +4731,7 @@ dependencies = [
"rustix 0.38.44",
"sctk-adwaita",
"smithay-client-toolkit",
- "smol_str 0.2.2",
+ "smol_str",
"tracing",
"unicode-segmentation",
"wasm-bindgen",
diff --git a/Cargo.toml b/Cargo.toml
index bc67ec748..14493dc01 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[workspace]
exclude = ["launcher", "crates/horizon-telemetry-server", "third_party/wgpu-hal"]
-members = ["crates/horizon-core", "crates/horizon-dualsense", "crates/horizon-threads", "crates/horizon-world", "crates/voxel-kernels", "crates/horizon-client", "crates/horizon-server-files", "crates/horizon-server", "crates/horizon-bots", "crates/horizon-assets", "crates/horizon-protocol", "crates/horizon-theme", "crates/horizon-shaderpack", "crates/horizon-prepare", "crates/horizon-telemetry", "crates/horizon-bench", "crates/horizon-friends", "crates/horizon-relay", "crates/horizon-mod-sdk", "crates/horizon-mods", "crates/horizon-mods/tests/guest", "crates/cargo-horizon-mod", "crates/horizon-port-pack", "crates/horizon-release-sign", "crates/horizon-mod-sdk/examples/coords-hud", "xtask"]
+members = ["crates/horizon-core", "crates/horizon-dualsense", "crates/horizon-threads", "crates/horizon-world", "crates/voxel-kernels", "crates/horizon-client", "crates/horizon-server-files", "crates/horizon-server", "crates/horizon-bots", "crates/horizon-assets", "crates/horizon-protocol", "crates/horizon-theme", "crates/horizon-prepare", "crates/horizon-telemetry", "crates/horizon-bench", "crates/horizon-friends", "crates/horizon-relay", "crates/horizon-mod-sdk", "crates/horizon-mods", "crates/horizon-mods/tests/guest", "crates/cargo-horizon-mod", "crates/horizon-port-pack", "crates/horizon-release-sign", "crates/horizon-mod-sdk/examples/coords-hud", "xtask"]
resolver = "2"
[workspace.package]
diff --git a/README.md b/README.md
index 4abb52b86..6dd192d5d 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ The [documentation](https://playhorizon.dev/docs/) covers each of these.
- **The game:** singleplayer with vanilla's world generation, mobs, villagers, raids, redstone, every command, the HUD and the recipe book, on saves in vanilla's format. Worlds from 1.8 to 26.2 are upgraded as vanilla does. [Status table](#project-status).
- **Horizon's own extras:** new menus (vanilla's are one setting away), graphics presets, distant terrain up to 1024 chunks, controller support, optional zoom, minimap and more, all off by default where they would change the vanilla look. See [Settings](https://playhorizon.dev/docs/settings).
-- **Resource packs, shader packs and data packs:** resource packs work, Java shader packs run their full-screen effects (experimental), and data packs load functions, predicates and item modifiers.
+- **Resource packs and data packs:** resource packs work, and data packs load functions, predicates and item modifiers.
- **Playing with others:** invite friends from the pause menu's Friends button with a code, Open to LAN, and joining offline-mode servers. Horizon cannot sign in to a Microsoft account yet, so it cannot join servers that check accounts. See [Multiplayer](https://playhorizon.dev/docs/multiplayer).
- **Mods:** Horizon has its own mod system (Rust compiled to WebAssembly). Java mod jars do not run. See [Mods and data packs](https://playhorizon.dev/docs/mods).
@@ -57,7 +57,7 @@ Screenshots, captured in the Rust client itself with vanilla assets and no mods
 |
-  |
+  |
 |
diff --git a/crates/horizon-client/Cargo.toml b/crates/horizon-client/Cargo.toml
index 300872765..35e9bee5c 100644
--- a/crates/horizon-client/Cargo.toml
+++ b/crates/horizon-client/Cargo.toml
@@ -29,13 +29,9 @@ png = "0.18"
sha2 = "0.10.9"
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1.0.151", features = ["raw_value"] }
-# Shader packs: pack.toml, and WGSL checked before it reaches wgpu.
-toml = "1.1"
# hlsl-out: the gfx.rs tests translate every shader as wgpu's DirectX 12 backend does. A normal feature,
# not a dev-dependency's, so builds, tests and examples share one build of naga, wgpu and this crate.
naga = { version = "30.0.1", features = ["wgsl-in", "hlsl-out"] }
-# Java (OptiFine/Iris) shader packs, translated to WGSL.
-horizon-shaderpack = { path = "../horizon-shaderpack" }
# Sound (ALSA on Linux); the `audio` feature.
cpal = { version = "0.16", optional = true }
symphonia = { version = "0.5", default-features = false, features = ["ogg", "vorbis"] }
diff --git a/crates/horizon-client/src/bin/horizon-ctl/commands.rs b/crates/horizon-client/src/bin/horizon-ctl/commands.rs
index f2db98535..cf7be69a6 100644
--- a/crates/horizon-client/src/bin/horizon-ctl/commands.rs
+++ b/crates/horizon-client/src/bin/horizon-ctl/commands.rs
@@ -147,7 +147,6 @@ const PAGES: Ty = Ty::Enum(&[
"graphics-advanced",
"extras",
"horizon",
- "shader-packs",
"agent",
]);
diff --git a/crates/horizon-client/src/game.rs b/crates/horizon-client/src/game.rs
index 7ac3d0829..533973805 100644
--- a/crates/horizon-client/src/game.rs
+++ b/crates/horizon-client/src/game.rs
@@ -138,7 +138,6 @@ mod screens;
mod sculk;
mod sculk_fixture;
mod server_travel;
-mod shader_packs;
mod shield;
mod sign_edit;
mod sniffers;
@@ -1199,8 +1198,6 @@ struct Game<'a> {
modifiers: winit::keyboard::ModifiersState,
/// The window's fullscreen request and reported state.
fullscreen: horizon_client::window::FullscreenState,
- /// The selected Horizon shader pack (`game/shader_packs.rs`).
- shader_packs: shader_packs::ShaderPacks,
/// MouseHandler's accumulated look and wheel state.
mouse: MouseLook,
/// An agent moved the mouse (`mouse-move`) since the pointer was last
@@ -7434,30 +7431,17 @@ impl Game<'_> {
self.tick_player_model();
Ok(())
}
- /// What the loaded Java shader pack changes in this dimension's vanilla
- /// sky (`sunPathRotation`, `clouds`, `sun`, `moon`); `None` without one.
- fn java_sky(&self) -> Option<(f32, horizon_shaderpack::properties::SkyDirectives)> {
- self.shader_packs.java_sky(match self.dim {
- Dim::Overworld => 0,
- Dim::Nether => -1,
- Dim::End => 1,
- })
- }
/// SkyRenderer.renderSunMoonAndStars: bodies on a frame rotated Y -90 then X by angle.
- /// A Java pack's `sunPathRotation` tilts it about Z in between, and its
- /// `sun = false` / `moon = false` leave those out, as Iris does. Returns
- /// the sun and moon quads, and the stars' frame and brightness (the
- /// renderer keeps their geometry, built once).
+ /// Returns the sun and moon quads, and the stars' frame and brightness
+ /// (the renderer keeps their geometry, built once).
fn celestial_geometry(
&self,
sky: &horizon_client::environment::Sky,
) -> (Vec, Option<(glam::Mat4, f32)>) {
let mut out = Vec::new();
let atlas = &self.gui.atlas;
- let (tilt, keep) = self.java_sky().unwrap_or_default();
let frame = |angle: f32| {
glam::Mat4::from_rotation_y((-90.0f32).to_radians())
- * glam::Mat4::from_rotation_z(tilt.to_radians())
* glam::Mat4::from_rotation_x(angle.to_radians())
};
let mut body = |name: &str, angle: f32, size: f32, color: u32| {
@@ -7479,14 +7463,12 @@ impl Game<'_> {
});
}
};
- if keep.sun {
- body(
- "environment/celestial/sun",
- sky.sun_angle,
- 30.0,
- 0xFFFF_FFFF,
- );
- }
+ body(
+ "environment/celestial/sun",
+ sky.sun_angle,
+ 30.0,
+ 0xFFFF_FFFF,
+ );
let phases = [
"full_moon",
"waning_gibbous",
@@ -7498,14 +7480,12 @@ impl Game<'_> {
"waxing_gibbous",
];
let phase = phases[(self.world.day_time / 24000).rem_euclid(8) as usize];
- if keep.moon {
- body(
- &format!("environment/celestial/moon/{phase}"),
- sky.moon_angle,
- 20.0,
- 0xFFFF_FFFF,
- );
- }
+ body(
+ &format!("environment/celestial/moon/{phase}"),
+ sky.moon_angle,
+ 20.0,
+ 0xFFFF_FFFF,
+ );
// SkyRenderer.renderStars: the static star buffer on the same frame.
let stars =
(sky.star_brightness > 0.0).then(|| (frame(sky.star_angle), sky.star_brightness));
@@ -9831,7 +9811,6 @@ impl Game<'_> {
}
return Ok(false);
}
- self.poll_shader_pack();
let Some(size) = self
.renderer
.as_ref()
@@ -10044,18 +10023,6 @@ impl Game<'_> {
self.dragon_fireball_geometry(camera, alpha, &mut dragon);
entities.extend(dragon);
}
- // A Java pack's `clouds` replaces the cloud option (`renderClouds`:
- // "false", "fast", "true"), as Iris overrides `getCloudsType`.
- let clouds_mode = {
- use horizon_shaderpack::properties::CloudSetting;
- match self.java_sky().and_then(|(_, sky)| sky.clouds) {
- Some(CloudSetting::Off) => "false",
- Some(CloudSetting::Fast) => "fast",
- Some(CloudSetting::Fancy) => "true",
- None => self.settings.clouds.as_str(),
- }
- .to_owned()
- };
let (celestial, stars) = if title {
(Vec::new(), None)
} else if self.dim == Dim::Overworld
@@ -10099,7 +10066,6 @@ impl Game<'_> {
let frame = Frame {
weather: &weather,
weather_time: horizon_client::weather::Time::new(self.world.game_time, alpha as f32),
- shader: self.shader_inputs(camera, alpha as f32),
nether_lighting: self.dim == Dim::Nether,
camera,
yaw,
@@ -10147,7 +10113,7 @@ impl Game<'_> {
hud: &hud,
clouds: (!title
&& self.dim == Dim::Overworld
- && horizon_client::clouds::visible(&clouds_mode, sky.cloud_color[3]))
+ && horizon_client::clouds::visible(&self.settings.clouds, sky.cloud_color[3]))
.then(|| self.gui.atlas.sprites.get("horizon/white"))
.flatten()
.map(|white| horizon_client::clouds::Input {
@@ -10157,7 +10123,7 @@ impl Game<'_> {
time: self.world.game_time,
partial_tick: alpha,
range: self.settings.cloud_range,
- fast: clouds_mode == "fast",
+ fast: self.settings.clouds == "fast",
color: sky.cloud_color,
}),
entities: &entities,
@@ -10875,9 +10841,6 @@ impl ApplicationHandler for Game<'_> {
WindowEvent::CloseRequested => {
self.pending_save.as_mut().unwrap().quit = true;
}
- WindowEvent::DroppedFile(path) => {
- self.drop_shader_pack(&path);
- }
WindowEvent::Focused(focused) => {
self.focused = focused;
if !focused {
@@ -11760,7 +11723,6 @@ impl<'a> Game<'a> {
focused: true,
modifiers: winit::keyboard::ModifiersState::empty(),
fullscreen: horizon_client::window::FullscreenState::new(false),
- shader_packs: Default::default(),
mouse: MouseLook::default(),
agent_pointer: false,
smooth_camera: false,
@@ -12719,7 +12681,6 @@ fn loading_frame(hud: &HudBatch) -> Frame<'_> {
night_vision: 0.0,
block_flicker: 0.0,
menu_blur: None,
- shader: Default::default(),
}
}
diff --git a/crates/horizon-client/src/game/control.rs b/crates/horizon-client/src/game/control.rs
index bc02012d5..205a66074 100644
--- a/crates/horizon-client/src/game/control.rs
+++ b/crates/horizon-client/src/game/control.rs
@@ -589,7 +589,6 @@ impl Game<'_> {
"credits" => Page::Credits,
"horizon" => Page::Horizon,
"agent" => Page::Agent,
- "shader-packs" => Page::ShaderPacks,
other => return Err(format!("unknown options page {other}").into()),
};
if self.screen == Screen::Playing && self.title.is_none() {
diff --git a/crates/horizon-client/src/game/debug_keys.rs b/crates/horizon-client/src/game/debug_keys.rs
index be9f76b3f..a94f3f01b 100644
--- a/crates/horizon-client/src/game/debug_keys.rs
+++ b/crates/horizon-client/src/game/debug_keys.rs
@@ -593,7 +593,6 @@ impl Game<'_> {
DebugAction::ReloadResourcePacks => {
self.debug_translated("debug.reload_resourcepacks.message");
self.reload_packs();
- self.load_shader_pack();
true
}
DebugAction::CopyLocation if player => {
diff --git a/crates/horizon-client/src/game/friends.rs b/crates/horizon-client/src/game/friends.rs
index f55e96392..b6d1ad660 100644
--- a/crates/horizon-client/src/game/friends.rs
+++ b/crates/horizon-client/src/game/friends.rs
@@ -200,7 +200,7 @@ impl Game<'_> {
}
Action::Copy => self.friends_copy(),
Action::Stop => self.friends_stop(),
- // The system browser, as the Shader Packs page opens its folder.
+ // The system browser, as the folder buttons open their folders.
Action::Help => {
if let Some(url) = &view.help {
super::packs::open_folder(std::path::Path::new(url));
diff --git a/crates/horizon-client/src/game/options.rs b/crates/horizon-client/src/game/options.rs
index d422f0218..d947f91d0 100644
--- a/crates/horizon-client/src/game/options.rs
+++ b/crates/horizon-client/src/game/options.rs
@@ -237,15 +237,7 @@ impl Game<'_> {
let _ = std::fs::create_dir_all(&dir);
super::packs::open_folder(&dir);
}
- Event::OpenShaderPackFolder => {
- let dir = horizon_client::shader_pack::folder();
- let _ = std::fs::create_dir_all(&dir);
- super::packs::open_folder(&dir);
- }
Event::Credits => self.open_win_screen(false, super::win::Finish::Options),
- Event::ReloadShaderPack => {
- self.load_shader_pack();
- }
}
}
Ok(())
@@ -294,14 +286,6 @@ impl Game<'_> {
font.reset_cache();
self.ui.chat.rescale(&self.gui.atlas);
}
- // A new renderer (resource reload, first window) takes the loaded pack.
- let stale = self
- .renderer
- .as_ref()
- .is_some_and(|r| r.shader_pack_id() != self.shader_packs.id());
- if stale && let Err(e) = self.apply_shader_pack() {
- log::warn!("Horizon: shader pack: {e}");
- }
}
/// `Window.updateFullscreenState`: a fullscreen change made by the window
/// system is adopted by the option (`Minecraft.fullscreenStateChanged`).
diff --git a/crates/horizon-client/src/game/render_tick.rs b/crates/horizon-client/src/game/render_tick.rs
index e947d2af5..331db8833 100644
--- a/crates/horizon-client/src/game/render_tick.rs
+++ b/crates/horizon-client/src/game/render_tick.rs
@@ -104,45 +104,6 @@ impl Game<'_> {
},
)
}
- /// What a shader pack's `Frame` uniform reads of the game this frame.
- pub(super) fn shader_inputs(
- &self,
- camera: glam::DVec3,
- partial_tick: f32,
- ) -> horizon_client::gfx::ShaderInputs {
- let (rain, thunder) = if self.dim == Dim::Overworld {
- self.world.weather.levels(self.clock.fraction() as f32)
- } else {
- (0.0, 0.0)
- };
- let at = [camera.x, camera.y, camera.z];
- let day = self.world.day_time;
- let has_sky_light = self.dim == Dim::Overworld;
- // CommonUniforms.getEyeBrightness: the camera entity's eye block.
- let eye = self.eye_position().unwrap_or(at).map(|v| v.floor() as i32);
- let light = self.world.light(eye[0], eye[1], eye[2]);
- let eye_light = [light & 15, if has_sky_light { light >> 4 } else { 0 }];
- horizon_client::gfx::ShaderInputs {
- rain,
- thunder,
- submerged: match fog_type(&self.world, self.res.facts(), at, self.forward()) {
- FogType::Atmospheric => 0,
- FogType::Water => 1,
- FogType::Lava => 2,
- FogType::PowderSnow => 3,
- },
- dimension: match self.dim {
- Dim::Overworld => 0,
- Dim::Nether => -1,
- Dim::End => 1,
- },
- has_sky_light,
- moon_phase: day.div_euclid(24_000).rem_euclid(8) as u8,
- day_fraction: (day.rem_euclid(24_000) as f32 + partial_tick) / 24_000.0,
- partial_tick,
- eye_light,
- }
- }
/// `SkyRenderer.shouldRenderDarkDisc`: eye below the horizon (y 63) and not under water.
pub(super) fn dark_disc(&self, camera: glam::DVec3) -> bool {
camera.y < 63.0
diff --git a/crates/horizon-client/src/game/shader_packs.rs b/crates/horizon-client/src/game/shader_packs.rs
deleted file mode 100644
index 41ce50d3f..000000000
--- a/crates/horizon-client/src/game/shader_packs.rs
+++ /dev/null
@@ -1,131 +0,0 @@
-//! The selected Horizon shader pack (`shaderPack` in `horizon-graphics.txt`,
-//! docs/shader-packs.md): loaded from `shaderpacks/`, given to the renderer,
-//! and loaded again when the selection changes, on F3 + T, or when its files
-//! change (checked twice a second). A pack that fails leaves the last good
-//! one (or the vanilla picture) on and says why in chat.
-use super::Game;
-use horizon_client::shader_pack::{self, ShaderPack, Stamp};
-use horizon_client::text::Text;
-use horizon_shaderpack::properties::SkyDirectives;
-use std::{
- path::PathBuf,
- time::{Duration, Instant},
-};
-
-#[derive(Default)]
-pub(super) struct ShaderPacks {
- /// The pack the renderer runs.
- pack: Option,
- /// The selection and its files at the last load, success or not.
- selected: String,
- stamp: Stamp,
- checked: Option,
-}
-
-impl ShaderPacks {
- /// The loaded pack's folder name.
- pub(super) fn id(&self) -> Option<&str> {
- self.pack.as_ref().map(|p| p.id.as_str())
- }
- /// What a loaded Java pack changes in the vanilla sky of `dimension`
- /// (0 overworld, -1 the Nether, 1 the End): its `sunPathRotation`, and
- /// whether it keeps the clouds, sun and moon (Iris's sky mixins).
- pub(super) fn java_sky(&self, dimension: i8) -> Option<(f32, SkyDirectives)> {
- let java = self.pack.as_ref()?.java.as_ref()?;
- let folder = &java.folders[java.folder_for(dimension)?];
- Some((folder.directives.sun_path_rotation, java.sky))
- }
-}
-
-pub(super) fn dir() -> PathBuf {
- shader_pack::folder()
-}
-
-impl Game<'_> {
- /// Load the selected pack and give it to the renderer.
- pub(super) fn load_shader_pack(&mut self) {
- let id = self.settings.horizon.shader_pack.clone();
- let dir = dir();
- let state = &mut self.shader_packs;
- state.selected = id.clone();
- state.checked = Some(Instant::now());
- let pack = if id.is_empty() {
- state.stamp = Stamp::default();
- None
- } else {
- state.stamp = Stamp::of(&dir.join(&id));
- // Java packs are told which GPU they run on.
- let (vendor, renderer) = self.renderer.as_ref().map_or(("Unknown", ""), |r| {
- let name = r.info.name.as_str();
- (
- horizon_client::java_pack::vendor_name(r.info.vendor, name),
- name,
- )
- });
- let values = shader_pack::load_values(&dir, &id);
- match ShaderPack::load_any(&dir.join(&id), &values, vendor, renderer) {
- Ok(pack) => Some(pack),
- Err(e) => return self.shader_pack_error(&id, &e),
- }
- };
- if let Some(r) = self.renderer.as_mut()
- && let Err(e) = r.set_shader_pack(pack.as_ref(), &self.pack.render.sprite_layers)
- {
- return self.shader_pack_error(&id, &e.to_string());
- }
- self.shader_packs.pack = pack;
- self.ui.options.shader_pack_error = None;
- }
- /// Give the loaded pack to the renderer (also after it is rebuilt).
- pub(super) fn apply_shader_pack(&mut self) -> horizon_client::Result<()> {
- match self.renderer.as_mut() {
- Some(r) => r.set_shader_pack(
- self.shader_packs.pack.as_ref(),
- &self.pack.render.sprite_layers,
- ),
- None => Ok(()),
- }
- }
- /// Every frame: a new selection or edited pack files load it again.
- pub(super) fn poll_shader_pack(&mut self) {
- let state = &mut self.shader_packs;
- if self.settings.horizon.shader_pack != state.selected {
- return self.load_shader_pack();
- }
- if state.selected.is_empty()
- || state
- .checked
- .is_some_and(|t| t.elapsed() < Duration::from_millis(500))
- {
- return;
- }
- state.checked = Some(Instant::now());
- if Stamp::of(&dir().join(&state.selected)) != state.stamp {
- self.load_shader_pack();
- }
- }
- /// A file dropped on the window: a shader pack while the Shader Packs
- /// page shows (`OptionsUi::drop_shader_pack`).
- pub(super) fn drop_shader_pack(&mut self, path: &std::path::Path) {
- match self.ui.options.drop_shader_pack(&mut self.settings, path) {
- Some(Ok(())) => {
- self.settings.save(&Self::options_path());
- self.load_shader_pack();
- }
- Some(Err(e)) => {
- log::warn!("Horizon: shader pack {}: {e}", path.display());
- self.system_message(Text::literal(format!("Shader pack: {e}")));
- }
- None => {}
- }
- }
- fn shader_pack_error(&mut self, id: &str, error: &str) {
- log::warn!("Horizon: shader pack {id}: {error}");
- // The Shader Packs page says why on the pack's row: the first line,
- // since translator errors go on with a drawn source excerpt.
- let first = error.lines().map(str::trim).find(|l| !l.is_empty());
- self.ui.options.shader_pack_error =
- Some((id.to_owned(), first.unwrap_or(error).to_owned()));
- self.system_message(Text::literal(format!("Shader pack {id}: {error}")));
- }
-}
diff --git a/crates/horizon-client/src/game/startup_menu.rs b/crates/horizon-client/src/game/startup_menu.rs
index ebf062a83..e6cb6b04f 100644
--- a/crates/horizon-client/src/game/startup_menu.rs
+++ b/crates/horizon-client/src/game/startup_menu.rs
@@ -367,11 +367,6 @@ impl Loading {
let _ = std::fs::create_dir_all(&dir);
packs::open_folder(&dir);
}
- Event::OpenShaderPackFolder => {
- let dir = horizon_client::shader_pack::folder();
- let _ = std::fs::create_dir_all(&dir);
- packs::open_folder(&dir);
- }
Event::Credits => {
if let Some(gui) = &self.gui {
let name = self.options.as_ref().map_or_else(
@@ -387,9 +382,6 @@ impl Loading {
self.menu.win = Some((screen, Instant::now()));
}
}
- Event::ReloadShaderPack => {
- self.save_menu_settings();
- }
// The startup menu runs before the game opens a control socket.
Event::ButtonClick | Event::CopyAgentDetails => {}
}
@@ -455,17 +447,6 @@ impl Loading {
}
self.apply_menu_settings();
}
- WindowEvent::DroppedFile(path) => {
- match self
- .menu
- .options
- .drop_shader_pack(&mut self.settings, &path)
- {
- Some(Ok(())) => self.save_menu_settings(),
- Some(Err(e)) => log::warn!("Horizon: shader pack {}: {e}", path.display()),
- None => {}
- }
- }
WindowEvent::RedrawRequested => self.draw(),
WindowEvent::ModifiersChanged(modifiers) => self.menu.modifiers = modifiers.state(),
WindowEvent::Focused(false) => {
diff --git a/crates/horizon-client/src/gfx.rs b/crates/horizon-client/src/gfx.rs
index 59a3b5d03..c369ee1c7 100644
--- a/crates/horizon-client/src/gfx.rs
+++ b/crates/horizon-client/src/gfx.rs
@@ -65,12 +65,9 @@ mod arena;
mod cull;
mod end_sky;
mod flat;
-pub(crate) mod java_stages;
-pub(crate) mod java_terrain;
pub mod lightning;
mod lod;
mod occlusion;
-mod pack_stages;
mod page_runs;
pub mod panorama;
mod resident;
@@ -90,7 +87,6 @@ fn world_pass_after_culling<'e>(
encoder: &'e mut wgpu::CommandEncoder,
view: &wgpu::TextureView,
depth: &wgpu::TextureView,
- pack: bool,
) -> wgpu::RenderPass<'e> {
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("Horizon world, after culling"),
@@ -107,11 +103,7 @@ fn world_pass_after_culling<'e>(
view: depth,
depth_ops: Some(wgpu::Operations {
load: wgpu::LoadOp::Load,
- store: if pack {
- wgpu::StoreOp::Store
- } else {
- wgpu::StoreOp::Discard
- },
+ store: wgpu::StoreOp::Discard,
}),
stencil_ops: None,
}),
@@ -159,18 +151,6 @@ struct Globals {
dynamic_lights: [[f32; 4]; crate::dynamic_light::MAX],
}
pub type SectionKey = (i32, i32, i32);
-/// The sections a Java pack's shadow map draws ([`Renderer`]'s `shadow`).
-#[derive(Default)]
-struct ShadowList {
- visible: Vec,
- draws: Vec<[u32; 5]>,
- pages: Vec<(u32, Option)>,
- /// How many of `draws` are solid.
- solid: u32,
- indirect: Option,
- capacity: u64,
-}
-
struct SectionGpu {
/// Arena page and first vertex in it: solid quads, then translucent ones.
page: u32,
@@ -291,28 +271,6 @@ pub struct Frame<'a> {
/// `Screen.extractBlurredBackground`: blur the frame by this radius
/// (`menuBackgroundBlurriness`) before the screen is drawn over it.
pub menu_blur: Option,
- /// What a shader pack's `Frame` uniform reads beyond the rest of the frame.
- pub shader: ShaderInputs,
-}
-/// A shader pack's view of the game this frame (docs/shader-packs.md, `Frame`).
-#[derive(Clone, Copy, Debug, Default)]
-pub struct ShaderInputs {
- /// `Level.getRainLevel` and `getThunderLevel` at the partial tick.
- pub rain: f32,
- pub thunder: f32,
- /// The camera's fog type: 0 air, 1 water, 2 lava, 3 powder snow.
- pub submerged: u8,
- /// 0 overworld, -1 the Nether, 1 the End.
- pub dimension: i8,
- pub has_sky_light: bool,
- /// `DimensionType.moonPhase`, 0..=7.
- pub moon_phase: u8,
- /// The time of day as a fraction (0 sunrise, 0.25 noon) and the partial tick.
- pub day_fraction: f32,
- pub partial_tick: f32,
- /// The block and sky light (0..15) of the block holding the camera
- /// entity's eyes; no sky light without a sky.
- pub eye_light: [u8; 2],
}
/// One frame of the world border wall (`WorldBorderRenderer.render`).
#[derive(Clone, Debug)]
@@ -380,11 +338,6 @@ pub struct Renderer {
/// (`crosshair_globals`).
crosshair_group: wgpu::BindGroup,
crosshair_globals: wgpu::Buffer,
- shadow_pipeline: wgpu::RenderPipeline,
- shadow_entity_pipeline: wgpu::RenderPipeline,
- shadow_globals: wgpu::Buffer,
- shadow_group: wgpu::BindGroup,
- shadow_entity_group: wgpu::BindGroup,
entity_pipeline: wgpu::RenderPipeline,
weather: weather::Weather,
crumbling_pipeline: wgpu::RenderPipeline,
@@ -492,10 +445,6 @@ pub struct Renderer {
/// built, and their pages.
phase2_draws: Vec<[u32; 5]>,
phase2_pages: Vec<(u32, Option)>,
- /// A Java pack's shadow map (`gfx/java_terrain.rs`): the sections in
- /// the light's view, their draws (solid then translucent, instances
- /// after the camera's), and the indirect buffer they're uploaded to.
- shadow: ShadowList,
/// Each section's solid draws, to group them by arena page.
solid_runs: page_runs::PageRuns,
phase2_runs: page_runs::PageRuns,
@@ -507,17 +456,6 @@ pub struct Renderer {
occlusion: occlusion::Occlusion,
/// Resolution scale and FXAA (Horizon settings).
world_post: world_post::Post,
- /// The selected shader pack's stages (Horizon setting; none by default).
- pack: Option,
- /// A Java pack's terrain programs (`gfx/java_terrain.rs`): their page
- /// groups' layout, the glue's table, each arena page's group.
- java_page_layout: wgpu::BindGroupLayout,
- /// The device renders to and filters 16-bit normalized formats.
- java_norm16: bool,
- java_table: Option,
- java_pages: Vec