world textures

This commit is contained in:
Robin Appelman 2023-12-09 20:29:04 +01:00
commit 73c67766aa
3 changed files with 326 additions and 25 deletions

312
Cargo.lock generated
View file

@ -33,6 +33,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "adler32"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]] [[package]]
name = "ahash" name = "ahash"
version = "0.7.7" version = "0.7.7"
@ -169,7 +175,7 @@ dependencies = [
"cc", "cc",
"cfg-if", "cfg-if",
"libc", "libc",
"miniz_oxide", "miniz_oxide 0.7.1",
"object", "object",
"rustc-demangle", "rustc-demangle",
] ]
@ -234,7 +240,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "525586993a118417512a49bada2d143319310891f48b0b116c8f64fbb6486c87" checksum = "525586993a118417512a49bada2d143319310891f48b0b116c8f64fbb6486c87"
dependencies = [ dependencies = [
"bitbuffer_derive", "bitbuffer_derive",
"err-derive", "err-derive 0.3.1",
"memchr", "memchr",
"num-traits 0.2.17", "num-traits 0.2.17",
"serde", "serde",
@ -469,6 +475,12 @@ dependencies = [
"objc", "objc",
] ]
[[package]]
name = "color_quant"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]] [[package]]
name = "colorchoice" name = "colorchoice"
version = "1.0.0" version = "1.0.0"
@ -573,6 +585,30 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "crossbeam-deque"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [
"cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
"memoffset 0.9.0",
"scopeguard",
]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.16" version = "0.8.16"
@ -662,6 +698,16 @@ dependencies = [
"syn 1.0.109", "syn 1.0.109",
] ]
[[package]]
name = "deflate"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
dependencies = [
"adler32",
"byteorder 1.5.0",
]
[[package]] [[package]]
name = "delaunator" name = "delaunator"
version = "1.0.2" version = "1.0.2"
@ -671,6 +717,17 @@ dependencies = [
"robust", "robust",
] ]
[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.10.7" version = "0.10.7"
@ -757,7 +814,7 @@ dependencies = [
"bytemuck", "bytemuck",
"egui", "egui",
"glow", "glow",
"memoffset", "memoffset 0.6.5",
"tracing", "tracing",
"wasm-bindgen", "wasm-bindgen",
"web-sys", "web-sys",
@ -829,6 +886,20 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "err-derive"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22deed3a8124cff5fa835713fa105621e43bbdc46690c3a6b68328a012d350d4"
dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"rustversion",
"syn 1.0.109",
"synstructure",
]
[[package]] [[package]]
name = "err-derive" name = "err-derive"
version = "0.3.1" version = "0.3.1"
@ -885,7 +956,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [ dependencies = [
"crc32fast", "crc32fast",
"miniz_oxide", "miniz_oxide 0.7.1",
] ]
[[package]] [[package]]
@ -981,6 +1052,16 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "gif"
version = "0.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
dependencies = [
"color_quant",
"weezl",
]
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.28.1" version = "0.28.1"
@ -1111,6 +1192,25 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "image"
version = "0.23.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
dependencies = [
"bytemuck",
"byteorder 1.5.0",
"color_quant",
"gif",
"jpeg-decoder",
"num-iter",
"num-rational",
"num-traits 0.2.17",
"png 0.16.8",
"scoped_threadpool",
"tiff",
]
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.1.0" version = "2.1.0"
@ -1180,6 +1280,15 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jpeg-decoder"
version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
dependencies = [
"rayon",
]
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.66" version = "0.3.66"
@ -1358,6 +1467,15 @@ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
[[package]] [[package]]
name = "merge" name = "merge"
version = "0.1.0" version = "0.1.0"
@ -1418,6 +1536,25 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
dependencies = [
"adler32",
]
[[package]]
name = "miniz_oxide"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
"autocfg",
]
[[package]] [[package]]
name = "miniz_oxide" name = "miniz_oxide"
version = "0.7.1" version = "0.7.1"
@ -1507,7 +1644,7 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"cfg-if", "cfg-if",
"libc", "libc",
"memoffset", "memoffset 0.6.5",
] ]
[[package]] [[package]]
@ -1520,7 +1657,7 @@ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"cfg-if", "cfg-if",
"libc", "libc",
"memoffset", "memoffset 0.6.5",
] ]
[[package]] [[package]]
@ -1641,6 +1778,16 @@ dependencies = [
"libm", "libm",
] ]
[[package]]
name = "num_enum"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4"
dependencies = [
"derivative",
"num_enum_derive 0.4.3",
]
[[package]] [[package]]
name = "num_enum" name = "num_enum"
version = "0.5.11" version = "0.5.11"
@ -1659,6 +1806,18 @@ dependencies = [
"num_enum_derive 0.7.1", "num_enum_derive 0.7.1",
] ]
[[package]]
name = "num_enum_derive"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d"
dependencies = [
"proc-macro-crate 0.1.5",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]] [[package]]
name = "num_enum_derive" name = "num_enum_derive"
version = "0.5.11" version = "0.5.11"
@ -1766,6 +1925,17 @@ dependencies = [
"windows-targets 0.48.5", "windows-targets 0.48.5",
] ]
[[package]]
name = "parse-display"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd87725635cbae7fe960f91f55a114ed104e637790317cc8d9197ea16b058010"
dependencies = [
"lazy_static",
"parse-display-derive 0.1.2",
"regex",
]
[[package]] [[package]]
name = "parse-display" name = "parse-display"
version = "0.8.2" version = "0.8.2"
@ -1773,10 +1943,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6509d08722b53e8dafe97f2027b22ccbe3a5db83cb352931e9716b0aa44bc5c" checksum = "c6509d08722b53e8dafe97f2027b22ccbe3a5db83cb352931e9716b0aa44bc5c"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"parse-display-derive", "parse-display-derive 0.8.2",
"regex", "regex",
] ]
[[package]]
name = "parse-display-derive"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc52b391380aa8550348736a356bf028f5469391d580533a566e97543f55e813"
dependencies = [
"lazy_static",
"proc-macro2",
"quote",
"regex",
"regex-syntax 0.6.29",
"syn 1.0.109",
]
[[package]] [[package]]
name = "parse-display-derive" name = "parse-display-derive"
version = "0.8.2" version = "0.8.2"
@ -1861,6 +2045,18 @@ version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "png"
version = "0.16.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
dependencies = [
"bitflags 1.3.2",
"crc32fast",
"deflate",
"miniz_oxide 0.3.7",
]
[[package]] [[package]]
name = "png" name = "png"
version = "0.17.10" version = "0.17.10"
@ -1871,7 +2067,16 @@ dependencies = [
"crc32fast", "crc32fast",
"fdeflate", "fdeflate",
"flate2", "flate2",
"miniz_oxide", "miniz_oxide 0.7.1",
]
[[package]]
name = "proc-macro-crate"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
dependencies = [
"toml",
] ]
[[package]] [[package]]
@ -1951,6 +2156,26 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "rayon"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
dependencies = [
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
dependencies = [
"crossbeam-deque",
"crossbeam-utils",
]
[[package]] [[package]]
name = "redox_syscall" name = "redox_syscall"
version = "0.4.1" version = "0.4.1"
@ -2035,9 +2260,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]] [[package]]
name = "rustix" name = "rustix"
version = "0.38.27" version = "0.38.28"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfeae074e687625746172d639330f1de242a178bf3189b51e35a7a21573513ac" checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
dependencies = [ dependencies = [
"bitflags 2.4.1", "bitflags 2.4.1",
"errno", "errno",
@ -2054,9 +2279,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.15" version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
[[package]] [[package]]
name = "safe_arch" name = "safe_arch"
@ -2073,6 +2298,12 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "scoped_threadpool"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
@ -2412,6 +2643,15 @@ dependencies = [
"winapi", "winapi",
] ]
[[package]]
name = "texpresso"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8277e703c934b9693d0773d5749faacc6366b3d81d012da556a4cfd4ab87f336"
dependencies = [
"libm",
]
[[package]] [[package]]
name = "textwrap" name = "textwrap"
version = "0.15.2" version = "0.15.2"
@ -2430,13 +2670,13 @@ source = "git+https://github.com/demostf/parser#5f6600cfdb39c572cc70a744aa1dc317
dependencies = [ dependencies = [
"bitbuffer", "bitbuffer",
"enumflags2", "enumflags2",
"err-derive", "err-derive 0.3.1",
"fnv", "fnv",
"itertools 0.10.5", "itertools 0.10.5",
"main_error", "main_error",
"num-traits 0.2.17", "num-traits 0.2.17",
"num_enum 0.5.11", "num_enum 0.5.11",
"parse-display", "parse-display 0.8.2",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr", "serde_repr",
@ -2508,6 +2748,17 @@ dependencies = [
"web-sys", "web-sys",
] ]
[[package]]
name = "tiff"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
dependencies = [
"jpeg-decoder",
"miniz_oxide 0.4.4",
"weezl",
]
[[package]] [[package]]
name = "tiny-skia" name = "tiny-skia"
version = "0.7.0" version = "0.7.0"
@ -2518,7 +2769,7 @@ dependencies = [
"arrayvec 0.5.2", "arrayvec 0.5.2",
"bytemuck", "bytemuck",
"cfg-if", "cfg-if",
"png", "png 0.17.10",
"safe_arch", "safe_arch",
"tiny-skia-path", "tiny-skia-path",
] ]
@ -2533,6 +2784,15 @@ dependencies = [
"bytemuck", "bytemuck",
] ]
[[package]]
name = "toml"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "toml_datetime" name = "toml_datetime"
version = "0.6.3" version = "0.6.3"
@ -2702,6 +2962,7 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]] [[package]]
name = "vbsp" name = "vbsp"
version = "0.2.0" version = "0.2.0"
source = "git+https://github.com/icewind1991/vbsp#f1ead50800446f8764a3a68d18acb08af1f282c7"
dependencies = [ dependencies = [
"ahash 0.8.6", "ahash 0.8.6",
"arrayvec 0.7.4", "arrayvec 0.7.4",
@ -2721,6 +2982,7 @@ dependencies = [
[[package]] [[package]]
name = "vbsp-derive" name = "vbsp-derive"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/icewind1991/vbsp#f1ead50800446f8764a3a68d18acb08af1f282c7"
dependencies = [ dependencies = [
"merge", "merge",
"proc-macro2", "proc-macro2",
@ -2750,6 +3012,7 @@ dependencies = [
"vbsp", "vbsp",
"vmdl", "vmdl",
"vpk", "vpk",
"vtf",
] ]
[[package]] [[package]]
@ -2789,6 +3052,19 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "vtf"
version = "0.1.5"
source = "git+https://github.com/roman901/vtf-rs?rev=a346cb6d85c2766fe7e30b0a70b6f38e67c3a6c9#a346cb6d85c2766fe7e30b0a70b6f38e67c3a6c9"
dependencies = [
"byteorder 1.5.0",
"err-derive 0.2.4",
"image",
"num_enum 0.4.3",
"parse-display 0.1.2",
"texpresso",
]
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.11.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
@ -2942,6 +3218,12 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "weezl"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.3.9" version = "0.3.9"

View file

@ -7,8 +7,8 @@ license = "MIT"
[dependencies] [dependencies]
three-d = { version = "0.14.0", features = ["egui-gui"] } three-d = { version = "0.14.0", features = ["egui-gui"] }
#vbsp = { version = "0.2.0", git = "https://github.com/icewind1991/vbsp" } vbsp = { version = "0.2.0", git = "https://github.com/icewind1991/vbsp" }
vbsp = { version = "0.2.0", path = "../bsp" } #vbsp = { version = "0.2.0", path = "../bsp" }
miette = { version = "5.5.0", features = ["fancy"] } miette = { version = "5.5.0", features = ["fancy"] }
thiserror = "1.0.37" thiserror = "1.0.37"
delaunator = "1.0.1" delaunator = "1.0.1"
@ -24,6 +24,7 @@ tf-demo-parser = { version = "0.4.0", git = "https://github.com/demostf/parser"
steamid-ng = "1.0.0" steamid-ng = "1.0.0"
clap = { version = "4.0.29", features = ["derive"] } clap = { version = "4.0.29", features = ["derive"] }
splines = { version = "4.1.1", features = ["cgmath"] } splines = { version = "4.1.1", features = ["cgmath"] }
vtf = { version = "0.1.5", git = "https://github.com/roman901/vtf-rs", rev = "a346cb6d85c2766fe7e30b0a70b6f38e67c3a6c9" }
[profile.dev.package."*"] [profile.dev.package."*"]
opt-level = 2 opt-level = 2

View file

@ -1,7 +1,10 @@
use crate::{Error, Loader}; use crate::{Error, Loader};
use cgmath::{vec4, Matrix, SquareMatrix}; use cgmath::{vec4, Matrix, SquareMatrix};
use std::collections::HashMap; use std::collections::HashMap;
use three_d::{Color, CpuMaterial, CpuMesh, CpuModel, Indices, Mat4, Positions, Vec2, Vec3}; use three_d::{
texture, Color, CpuMaterial, CpuMesh, CpuModel, CpuTexture, Indices, Mat4, Positions,
TextureData, Vec2, Vec3,
};
use vbsp::{Bsp, Face, Handle, StaticPropLump}; use vbsp::{Bsp, Face, Handle, StaticPropLump};
use vmdl::mdl::Mdl; use vmdl::mdl::Mdl;
use vmdl::vtx::Vtx; use vmdl::vtx::Vtx;
@ -84,14 +87,29 @@ fn model_to_model(model: Handle<vbsp::data::Model>, loader: &Loader) -> CpuModel
.values() .values()
.map(|face| { .map(|face| {
let texture = face.first().unwrap().texture(); let texture = face.first().unwrap().texture();
let color = texture.texture().debug_color(); let tex_file = format!("materials/{}.vtf", texture.name().to_lowercase());
let vtf_data = loader.load(&tex_file).ok();
let texture_data = vtf_data.and_then(|mut vtf_data| {
let vtf = vtf::from_bytes(&mut vtf_data).ok()?;
let image = vtf.highres_image.decode(0).ok()?;
Some(CpuTexture {
name: texture.name().into(),
data: TextureData::RgbaU8(
image.into_rgba8().pixels().map(|pixel| pixel.0).collect(),
),
height: texture.texture_data().height as u32,
width: texture.texture_data().width as u32,
..CpuTexture::default()
})
});
let color = if texture_data.is_some() {
Color::default()
} else {
Color::new(255, 0, 255, 255)
};
CpuMaterial { CpuMaterial {
albedo: Color { albedo: color,
r: color[0], albedo_texture: texture_data,
g: color[1],
b: color[2],
a: 255,
},
name: texture.name().into(), name: texture.name().into(),
..Default::default() ..Default::default()
} }