VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
glbParser.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 09.02.2026.
5//
6#pragma once
7
8#include <cstdint>
9#include <memory>
10#include <string>
11#include <unordered_map>
12#include <vector>
13
15
16namespace tinygltf { class Model; struct Image; }
17
18namespace visutwin::canvas
19{
20 class GraphicsDevice;
21
22 // ── Pre-processed model data (background thread → main thread) ──────
23
33 {
35 struct ImageData
36 {
37 std::vector<uint8_t> rgbaPixels;
38 int width = 0;
39 int height = 0;
40 bool valid = false;
41 };
42
45 {
46 std::vector<uint8_t> vertexBytes;
47 std::vector<uint8_t> indexBytes;
48 int vertexCount = 0;
49 int drawCount = 0;
50 bool indexed = false;
51 int mode = 4;
54 int materialIndex = -1;
55 };
56
58 std::vector<ImageData> images;
59
61 std::vector<std::vector<PrimitiveData>> meshPrimitives;
62
64 std::unordered_map<std::string, std::shared_ptr<AnimTrack>> animTracks;
65
69 };
70
71 // ── GLB parser ──────────────────────────────────────────────────────
72
74 {
75 public:
77 static std::unique_ptr<GlbContainerResource> parse(const std::string& path,
78 const std::shared_ptr<GraphicsDevice>& device);
79
81 static std::unique_ptr<GlbContainerResource> parseFromMemory(
82 const std::uint8_t* data, std::size_t length,
83 const std::shared_ptr<GraphicsDevice>& device,
84 const std::string& debugName = "memory");
85
100 static std::unique_ptr<GlbContainerResource> createFromModel(
101 tinygltf::Model& model,
102 const std::shared_ptr<GraphicsDevice>& device,
103 const std::string& debugName = "memory");
104
117 static PreparedGlbData prepareFromModel(tinygltf::Model& model);
118
132 static std::unique_ptr<GlbContainerResource> createFromPrepared(
133 tinygltf::Model& model,
134 PreparedGlbData&& prepared,
135 const std::shared_ptr<GraphicsDevice>& device,
136 const std::string& debugName = "memory");
137
145 static bool loadImageData(tinygltf::Image* image, int imageIndex,
146 std::string* err, std::string* warn, int reqWidth, int reqHeight,
147 const unsigned char* bytes, int size, void* userData);
148 };
149}
static std::unique_ptr< GlbContainerResource > createFromModel(tinygltf::Model &model, const std::shared_ptr< GraphicsDevice > &device, const std::string &debugName="memory")
static std::unique_ptr< GlbContainerResource > parse(const std::string &path, const std::shared_ptr< GraphicsDevice > &device)
Parse a GLB file from disk.
static std::unique_ptr< GlbContainerResource > createFromPrepared(tinygltf::Model &model, PreparedGlbData &&prepared, const std::shared_ptr< GraphicsDevice > &device, const std::string &debugName="memory")
static std::unique_ptr< GlbContainerResource > parseFromMemory(const std::uint8_t *data, std::size_t length, const std::shared_ptr< GraphicsDevice > &device, const std::string &debugName="memory")
Parse a GLB from an in-memory byte buffer (e.g. extracted from b3dm).
static bool loadImageData(tinygltf::Image *image, int imageIndex, std::string *err, std::string *warn, int reqWidth, int reqHeight, const unsigned char *bytes, int size, void *userData)
static PreparedGlbData prepareFromModel(tinygltf::Model &model)
Pre-converted RGBA8 image, one per tinygltf::Model::images entry.
Definition glbParser.h:36
bool valid
True if conversion succeeded.
Definition glbParser.h:40
std::vector< uint8_t > rgbaPixels
RGBA8 interleaved pixels.
Definition glbParser.h:37
Pre-built vertex/index byte buffers for one mesh primitive.
Definition glbParser.h:45
std::vector< uint8_t > vertexBytes
PackedVertex data.
Definition glbParser.h:46
std::vector< uint8_t > indexBytes
uint32_t index data.
Definition glbParser.h:47
std::vector< std::vector< PrimitiveData > > meshPrimitives
Per-mesh primitives: meshPrimitives[meshIndex][primIndex].
Definition glbParser.h:61
std::vector< ImageData > images
Pre-converted images indexed by tinygltf image index.
Definition glbParser.h:58
std::unordered_map< std::string, std::shared_ptr< AnimTrack > > animTracks
Fully parsed animation tracks (keyed by animation name).
Definition glbParser.h:64
3D vector for positions, directions, and normals with multi-backend SIMD acceleration.
Definition vector3.h:29