This commit is contained in:
Robin Appelman 2023-12-22 16:56:35 +01:00
commit cbccb8ae3d
6 changed files with 48 additions and 43 deletions

View file

@ -2,9 +2,10 @@ use crate::gltf_builder::push_or_get_material;
use crate::{map_coords, Error};
use bytemuck::{offset_of, Pod, Zeroable};
use gltf_json::accessor::{ComponentType, GenericComponentType, Type};
use gltf_json::buffer::{Target, View};
use gltf_json::buffer::{Stride, Target, View};
use gltf_json::mesh::{Mode, Primitive, Semantic};
use gltf_json::validation::Checked::Valid;
use gltf_json::validation::USize64;
use gltf_json::{Accessor, Index, Mesh, Node, Root, Value};
use std::mem::size_of;
use tf_asset_loader::Loader;
@ -112,9 +113,9 @@ pub fn push_bsp_face(
loader: &Loader,
face: &Handle<Face>,
) -> Primitive {
let vertex_count = face.vertex_positions().count() as u32;
let vertex_count = face.vertex_positions().count() as u64;
let buffer_start = buffer.len() as u32;
let buffer_start = buffer.len() as u64;
let (min, max) = bounding_box(face.vertex_positions());
@ -130,9 +131,9 @@ pub fn push_bsp_face(
let vertex_buffer_view = View {
buffer: Index::new(0),
byte_length: buffer.len() as u32 - buffer_start,
byte_offset: Some(buffer_start),
byte_stride: Some(size_of::<BspVertexData>() as u32),
byte_length: USize64(buffer.len() as u64 - buffer_start),
byte_offset: Some(USize64(buffer_start)),
byte_stride: Some(Stride(size_of::<BspVertexData>())),
extensions: Default::default(),
extras: Default::default(),
name: None,
@ -144,8 +145,8 @@ pub fn push_bsp_face(
let positions = Accessor {
buffer_view: Some(vertex_view),
byte_offset: Some(offset_of!(BspVertexData, position) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(BspVertexData, position) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),
@ -158,8 +159,8 @@ pub fn push_bsp_face(
};
let normals = Accessor {
buffer_view: Some(vertex_view),
byte_offset: Some(offset_of!(BspVertexData, normal) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(BspVertexData, normal) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),
@ -172,8 +173,8 @@ pub fn push_bsp_face(
};
let uvs = Accessor {
buffer_view: Some(vertex_view),
byte_offset: Some(offset_of!(BspVertexData, uv) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(BspVertexData, uv) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),

View file

@ -5,6 +5,7 @@ use gltf_json::image::MimeType;
use gltf_json::material::{AlphaCutoff, AlphaMode, PbrBaseColorFactor, PbrMetallicRoughness};
use gltf_json::texture::Info;
use gltf_json::validation::Checked::Valid;
use gltf_json::validation::USize64;
use gltf_json::{Extras, Image, Index, Material, Root, Texture};
use image::png::PngEncoder;
use image::{ColorType, DynamicImage, GenericImageView};
@ -105,7 +106,7 @@ fn push_texture(buffer: &mut Vec<u8>, gltf: &mut Root, texture: TextureData) ->
image = DynamicImage::ImageRgb8(image.into_rgb8());
}
}
let buffer_start = buffer.len() as u32;
let buffer_start = buffer.len() as u64;
let view_start = gltf.buffer_views.len() as u32;
let image_start = gltf.images.len() as u32;
@ -122,13 +123,13 @@ fn push_texture(buffer: &mut Vec<u8>, gltf: &mut Root, texture: TextureData) ->
buffer.extend_from_slice(&png_buffer);
let byte_length = buffer.len() as u32 - buffer_start;
let byte_length = buffer.len() as u64 - buffer_start;
pad_byte_vector(buffer);
let view = View {
buffer: Index::new(0),
byte_length,
byte_offset: Some(buffer_start),
byte_length: USize64(byte_length),
byte_offset: Some(USize64(buffer_start)),
byte_stride: None,
extensions: Default::default(),
extras: Default::default(),

View file

@ -11,6 +11,7 @@ use cgmath::Matrix4;
use clap::Parser;
pub use error::Error;
use gltf::Glb;
use gltf_json::validation::USize64;
use gltf_json::{Buffer, Index, Node, Root, Scene};
use miette::Context;
use std::borrow::Cow;
@ -115,7 +116,7 @@ fn export(bsp: Bsp, loader: &Loader) -> Result<Glb<'static>, Error> {
}];
root.buffers.push(Buffer {
byte_length: buffer.len() as u32,
byte_length: USize64(buffer.len() as u64),
extensions: Default::default(),
extras: Default::default(),
name: None,

View file

@ -2,9 +2,10 @@ use crate::gltf_builder::push_or_get_material;
use crate::{map_coords, Error};
use bytemuck::{offset_of, Pod, Zeroable};
use gltf_json::accessor::{ComponentType, GenericComponentType, Type};
use gltf_json::buffer::{Target, View};
use gltf_json::buffer::{Stride, Target, View};
use gltf_json::mesh::{Mode, Primitive, Semantic};
use gltf_json::validation::Checked::Valid;
use gltf_json::validation::USize64;
use gltf_json::{Accessor, Index, Mesh, Root, Value};
use std::mem::size_of;
use tf_asset_loader::Loader;
@ -29,9 +30,9 @@ impl From<&vmdl::vvd::Vertex> for ModelVertex {
}
fn push_vertices(buffer: &mut Vec<u8>, gltf: &mut Root, model: &Model) {
let start = buffer.len() as u32;
let start = buffer.len() as u64;
let view_start = gltf.buffer_views.len() as u32;
let vertex_count = model.vertices().len() as u32;
let vertex_count = model.vertices().len() as u64;
let (min, max) = model.bounding_box();
let min = map_coords(min);
@ -46,9 +47,9 @@ fn push_vertices(buffer: &mut Vec<u8>, gltf: &mut Root, model: &Model) {
let vertex_buffer_view = View {
buffer: Index::new(0),
byte_length: buffer.len() as u32 - start,
byte_offset: Some(start),
byte_stride: Some(size_of::<ModelVertex>() as u32),
byte_length: USize64(buffer.len() as u64 - start),
byte_offset: Some(USize64(start)),
byte_stride: Some(Stride(size_of::<ModelVertex>())),
extensions: Default::default(),
extras: Default::default(),
name: None,
@ -59,8 +60,8 @@ fn push_vertices(buffer: &mut Vec<u8>, gltf: &mut Root, model: &Model) {
let positions = Accessor {
buffer_view: Some(Index::new(view_start)),
byte_offset: Some(offset_of!(ModelVertex, position) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(ModelVertex, position) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),
@ -73,8 +74,8 @@ fn push_vertices(buffer: &mut Vec<u8>, gltf: &mut Root, model: &Model) {
};
let uvs = Accessor {
buffer_view: Some(Index::new(view_start)),
byte_offset: Some(offset_of!(ModelVertex, uv) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(ModelVertex, uv) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),
@ -87,8 +88,8 @@ fn push_vertices(buffer: &mut Vec<u8>, gltf: &mut Root, model: &Model) {
};
let normals = Accessor {
buffer_view: Some(Index::new(view_start)),
byte_offset: Some(offset_of!(ModelVertex, normal) as u32),
count: vertex_count,
byte_offset: Some(USize64(offset_of!(ModelVertex, normal) as u64)),
count: USize64(vertex_count),
component_type: Valid(GenericComponentType(ComponentType::F32)),
extensions: Default::default(),
extras: Default::default(),
@ -182,7 +183,7 @@ pub fn push_primitive(
vertex_accessor_start: u32,
skin: &SkinTable,
) -> Primitive {
let buffer_start = buffer.len() as u32;
let buffer_start = buffer.len() as u64;
let view_start = gltf.buffer_views.len() as u32;
let accessor_start = gltf.accessors.len() as u32;
@ -192,12 +193,12 @@ pub fn push_primitive(
.flat_map(|index| (index as u32).to_le_bytes()),
);
let byte_length = buffer.len() as u32 - buffer_start;
let byte_length = buffer.len() as u64 - buffer_start;
let view = View {
buffer: Index::new(0),
byte_length,
byte_offset: Some(buffer_start),
byte_length: USize64(byte_length),
byte_offset: Some(USize64(buffer_start)),
byte_stride: None,
extensions: Default::default(),
extras: Default::default(),
@ -208,8 +209,8 @@ pub fn push_primitive(
let accessor = Accessor {
buffer_view: Some(Index::new(view_start)),
byte_offset: Some(0),
count: byte_length / size_of::<u32>() as u32,
byte_offset: Some(USize64(0)),
count: USize64(byte_length / size_of::<u32>() as u64),
component_type: Valid(GenericComponentType(ComponentType::U32)),
extensions: Default::default(),
extras: Default::default(),