mirror of
https://codeberg.org/icewind/vbspview.git
synced 2026-06-03 10:14:10 +02:00
mmap the bsp
This commit is contained in:
parent
d355ccad1c
commit
cb2310fd67
3 changed files with 24 additions and 6 deletions
10
Cargo.lock
generated
10
Cargo.lock
generated
|
|
@ -1481,6 +1481,15 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mmarinus"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6f001c2c323e765b22d8248a0b8a7f8f66672a007babf01c380b579cc71e862c"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native-tls"
|
name = "native-tls"
|
||||||
version = "0.2.8"
|
version = "0.2.8"
|
||||||
|
|
@ -2676,6 +2685,7 @@ dependencies = [
|
||||||
"delaunator",
|
"delaunator",
|
||||||
"itertools",
|
"itertools",
|
||||||
"miette",
|
"miette",
|
||||||
|
"mmarinus",
|
||||||
"steamlocate",
|
"steamlocate",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"three-d",
|
"three-d",
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ tracing = "0.1.29"
|
||||||
tracing-subscriber = { version = "0.3.3", features = ["env-filter"] }
|
tracing-subscriber = { version = "0.3.3", features = ["env-filter"] }
|
||||||
tracing-tree = "0.2.0"
|
tracing-tree = "0.2.0"
|
||||||
cgmath = "0.18.0"
|
cgmath = "0.18.0"
|
||||||
|
mmarinus = "0.2.1"
|
||||||
|
|
||||||
[profile.dev.package."*"]
|
[profile.dev.package."*"]
|
||||||
opt-level = 2
|
opt-level = 2
|
||||||
|
|
|
||||||
19
src/main.rs
19
src/main.rs
|
|
@ -5,7 +5,8 @@ use camera::FirstPerson;
|
||||||
use itertools::Either;
|
use itertools::Either;
|
||||||
use loader::Loader;
|
use loader::Loader;
|
||||||
use std::env::args;
|
use std::env::args;
|
||||||
use std::fs;
|
use std::path::Path;
|
||||||
|
use std::time::Instant;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use three_d::*;
|
use three_d::*;
|
||||||
use tracing_subscriber::{prelude::*, EnvFilter};
|
use tracing_subscriber::{prelude::*, EnvFilter};
|
||||||
|
|
@ -72,13 +73,9 @@ fn main() -> Result<(), Error> {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let data = fs::read(&file)?;
|
|
||||||
let bsp = Bsp::read(&data)?;
|
|
||||||
let world_model = bsp.models().next().ok_or(Error::Other("No world model"))?;
|
|
||||||
|
|
||||||
let context = window.gl().unwrap();
|
let context = window.gl().unwrap();
|
||||||
|
|
||||||
let cpu_mesh = model_to_mesh(world_model);
|
let (cpu_mesh, bsp) = load_world(file.as_ref())?;
|
||||||
let forward_pipeline = ForwardPipeline::new(&context).unwrap();
|
let forward_pipeline = ForwardPipeline::new(&context).unwrap();
|
||||||
let mut camera = Camera::new_perspective(
|
let mut camera = Camera::new_perspective(
|
||||||
&context,
|
&context,
|
||||||
|
|
@ -360,6 +357,16 @@ fn prop_to_mesh(model: &vmdl::Model) -> CPUMesh {
|
||||||
mesh
|
mesh
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn load_world(path: &Path) -> Result<(CPUMesh, Bsp), Error> {
|
||||||
|
use mmarinus::{perms, Kind};
|
||||||
|
|
||||||
|
let map = Kind::Private.load::<perms::Read, _>(path).unwrap();
|
||||||
|
let bsp = Bsp::read(map.as_ref())?;
|
||||||
|
let world_model = bsp.models().next().ok_or(Error::Other("No world model"))?;
|
||||||
|
|
||||||
|
Ok((model_to_mesh(world_model), bsp))
|
||||||
|
}
|
||||||
|
|
||||||
fn merge_meshes<I: IntoIterator<Item = CPUMesh>>(meshes: I) -> CPUMesh {
|
fn merge_meshes<I: IntoIterator<Item = CPUMesh>>(meshes: I) -> CPUMesh {
|
||||||
let mut positions = Vec::new();
|
let mut positions = Vec::new();
|
||||||
let mut normals = Vec::new();
|
let mut normals = Vec::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue