perf(render): keep solid meshes resident

Keep all solid geometry GPU-resident during navigation. Use vertex-rate instancing, compact untextured vertices, vertex-cache ordering, and cached silhouette sources without culling geometry.
This commit is contained in:
Hakan Seven 2026-08-12 16:02:10 +03:00
commit 5e8221f8f1
9 changed files with 756 additions and 1012 deletions

63
Cargo.lock generated
View file

@ -31,6 +31,7 @@ dependencies = [
"js-sys",
"log",
"lyon_tessellation",
"meshopt",
"naga 27.0.3",
"ocs_plugin_api",
"open",
@ -152,7 +153,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
dependencies = [
"memchr 2.8.3",
"memchr",
]
[[package]]
@ -1071,7 +1072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
dependencies = [
"bytes",
"memchr 2.8.3",
"memchr",
]
[[package]]
@ -1694,6 +1695,15 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
[[package]]
name = "float-cmp"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8"
dependencies = [
"num-traits",
]
[[package]]
name = "float_next_after"
version = "1.0.0"
@ -1741,7 +1751,7 @@ version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198"
dependencies = [
"memchr 2.8.3",
"memchr",
"thiserror 2.0.18",
]
@ -1927,7 +1937,7 @@ dependencies = [
"futures-macro",
"futures-sink",
"futures-task",
"memchr 2.8.3",
"memchr",
"pin-project-lite",
"slab",
]
@ -3055,15 +3065,6 @@ dependencies = [
"digest 0.10.7",
]
[[package]]
name = "memchr"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a"
dependencies = [
"libc",
]
[[package]]
name = "memchr"
version = "2.8.3"
@ -3088,6 +3089,18 @@ dependencies = [
"autocfg",
]
[[package]]
name = "meshopt"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01e77ead21976b3a9f01ec1724f766923da74f0726364e2b0f425658935d71a"
dependencies = [
"bitflags 2.13.1",
"cc",
"float-cmp 0.10.0",
"thiserror 2.0.18",
]
[[package]]
name = "mime"
version = "0.3.17"
@ -3254,7 +3267,7 @@ version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003"
dependencies = [
"memchr 2.8.3",
"memchr",
]
[[package]]
@ -3263,7 +3276,7 @@ version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr 2.8.3",
"memchr",
"minimal-lexical",
]
@ -3273,7 +3286,7 @@ version = "8.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405"
dependencies = [
"memchr 2.8.3",
"memchr",
]
[[package]]
@ -3283,7 +3296,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d"
dependencies = [
"bytecount",
"memchr 1.0.2",
"memchr",
"nom 8.0.0",
]
@ -4225,7 +4238,7 @@ checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14"
dependencies = [
"bitflags 2.13.1",
"getopts",
"memchr 2.8.3",
"memchr",
"pulldown-cmark-escape",
"unicase",
]
@ -4286,7 +4299,7 @@ version = "0.39.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e"
dependencies = [
"memchr 2.8.3",
"memchr",
]
[[package]]
@ -4532,7 +4545,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d"
dependencies = [
"aho-corasick",
"memchr 2.8.3",
"memchr",
"regex-automata",
"regex-syntax",
]
@ -4544,7 +4557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad"
dependencies = [
"aho-corasick",
"memchr 2.8.3",
"memchr",
"regex-syntax",
]
@ -4963,7 +4976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"itoa",
"memchr 2.8.3",
"memchr",
"serde",
"serde_core",
"zmij",
@ -5260,7 +5273,7 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
dependencies = [
"float-cmp",
"float-cmp 0.9.0",
]
[[package]]
@ -5629,7 +5642,7 @@ version = "3.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6"
dependencies = [
"memchr 2.8.3",
"memchr",
"nom 8.0.0",
"petgraph",
]
@ -6699,7 +6712,7 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81"
dependencies = [
"memchr 2.8.3",
"memchr",
]
[[package]]