#![allow(clippy::same_item_push)]
mod export;
mod material_methods;
mod mesh;
pub(crate) mod skeleton;
mod vertex_attributes;
use super::materials::{GltfImage, GltfMaterial, GltfSampler, GltfTexture};
use super::types::{GltfAccessor, GltfBufferView, GltfMesh, GltfNode, GltfSkin};
pub struct GltfBuilder {
pub(crate) buffer: Vec<u8>,
pub(crate) buffer_views: Vec<GltfBufferView>,
pub(crate) accessors: Vec<GltfAccessor>,
pub(crate) meshes: Vec<GltfMesh>,
pub(crate) nodes: Vec<GltfNode>,
pub(crate) skins: Vec<GltfSkin>,
pub(crate) images: Vec<GltfImage>,
pub(crate) textures: Vec<GltfTexture>,
pub(crate) samplers: Vec<GltfSampler>,
pub(crate) materials: Vec<GltfMaterial>,
pub bone_node_offset: usize,
}
impl GltfBuilder {
#[must_use]
pub fn new() -> Self {
Self {
buffer: Vec::new(),
buffer_views: Vec::new(),
accessors: Vec::new(),
meshes: Vec::new(),
nodes: Vec::new(),
skins: Vec::new(),
images: Vec::new(),
textures: Vec::new(),
samplers: Vec::new(),
materials: Vec::new(),
bone_node_offset: 0,
}
}
pub(crate) fn align(&mut self, alignment: usize) {
let padding = (alignment - (self.buffer.len() % alignment)) % alignment;
self.buffer.extend(std::iter::repeat_n(0u8, padding));
}
}
impl Default for GltfBuilder {
fn default() -> Self {
Self::new()
}
}