VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
visutwin::canvas::GlbParser Class Reference

#include <framework/parsers/glbParser.h>

Static Public Member Functions

static std::unique_ptr< GlbContainerResourcecreateFromModel (tinygltf::Model &model, const std::shared_ptr< GraphicsDevice > &device, const std::string &debugName="memory")
static std::unique_ptr< GlbContainerResourcecreateFromPrepared (tinygltf::Model &model, PreparedGlbData &&prepared, const std::shared_ptr< GraphicsDevice > &device, const std::string &debugName="memory")
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 std::unique_ptr< GlbContainerResourceparse (const std::string &path, const std::shared_ptr< GraphicsDevice > &device)
 Parse a GLB file from disk.
static std::unique_ptr< GlbContainerResourceparseFromMemory (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 PreparedGlbData prepareFromModel (tinygltf::Model &model)

Detailed Description

Definition at line 73 of file glbParser.h.

Member Function Documentation

◆ createFromModel()

std::unique_ptr< GlbContainerResource > visutwin::canvas::GlbParser::createFromModel ( tinygltf::Model & model,
const std::shared_ptr< GraphicsDevice > & device,
const std::string & debugName = "memory" )
static

Create GPU resources from a pre-parsed tinygltf model.

Call this on the main thread after the background thread has completed tinygltf parsing (the heavy CPU work: JSON parse + image decode + Draco decompress). This method still performs Draco decode, vertex extraction, tangent generation, and pixel conversion on the main thread. Prefer prepareFromModel() + createFromPrepared() for the fully offloaded path.

Parameters
modelPre-parsed tinygltf model (moved in — consumed).
deviceGraphics device for GPU resource creation.
debugNameLabel for log messages.

Definition at line 1851 of file glbParser.cpp.

References visutwin::canvas::Color::a, visutwin::canvas::Primitive::base, visutwin::canvas::Primitive::baseVertex, visutwin::canvas::BLEND, visutwin::canvas::GlbNodePayload::children, visutwin::canvas::Primitive::count, visutwin::canvas::CULLFACE_BACK, visutwin::canvas::CULLFACE_NONE, visutwin::canvas::VertexBufferOptions::data, visutwin::canvas::FILTER_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_NEAREST, visutwin::canvas::FILTER_NEAREST_MIPMAP_LINEAR, visutwin::canvas::FILTER_NEAREST_MIPMAP_NEAREST, visutwin::canvas::TextureOptions::format, visutwin::canvas::Color::gamma(), visutwin::canvas::Vector4::getW(), visutwin::canvas::Vector3::getX(), visutwin::canvas::Vector4::getX(), visutwin::canvas::Vector3::getY(), visutwin::canvas::Vector4::getY(), visutwin::canvas::Vector3::getZ(), visutwin::canvas::Vector4::getZ(), visutwin::canvas::TextureOptions::height, visutwin::canvas::Primitive::indexed, visutwin::canvas::INDEXFORMAT_UINT32, visutwin::canvas::TextureOptions::magFilter, visutwin::canvas::MASK, visutwin::canvas::GlbMeshPayload::material, visutwin::canvas::GlbMeshPayload::mesh, visutwin::canvas::GlbNodePayload::meshPayloadIndices, visutwin::canvas::TextureOptions::minFilter, visutwin::canvas::TextureOptions::mipmaps, visutwin::canvas::GlbNodePayload::name, visutwin::canvas::TextureOptions::name, visutwin::canvas::Quaternion::normalized(), visutwin::canvas::TextureOptions::numLevels, visutwin::canvas::OPAQUE, visutwin::canvas::PIXELFORMAT_RGBA8, visutwin::canvas::GlbNodePayload::rotation, visutwin::canvas::GlbNodePayload::scale, visutwin::canvas::BoundingBox::setCenter(), visutwin::canvas::BoundingBox::setHalfExtents(), visutwin::canvas::GlbNodePayload::translation, visutwin::canvas::Primitive::type, and visutwin::canvas::TextureOptions::width.

Referenced by visutwin::canvas::Asset::loadAsync(), and parseFromMemory().

◆ createFromPrepared()

std::unique_ptr< GlbContainerResource > visutwin::canvas::GlbParser::createFromPrepared ( tinygltf::Model & model,
PreparedGlbData && prepared,
const std::shared_ptr< GraphicsDevice > & device,
const std::string & debugName = "memory" )
static

Create GPU resources from fully pre-processed model data.

Call on the main thread with data produced by prepareFromModel() on the background thread. Only creates GPU buffers and textures — all CPU-intensive work has already been done.

Parameters
modelPre-parsed tinygltf model (for metadata only).
preparedPre-processed data (consumed via move).
deviceGraphics device for GPU resource creation.
debugNameLabel for log messages.

Definition at line 2279 of file glbParser.cpp.

References visutwin::canvas::Color::a, visutwin::canvas::Primitive::base, visutwin::canvas::Primitive::baseVertex, visutwin::canvas::BLEND, visutwin::canvas::GlbNodePayload::children, visutwin::canvas::Primitive::count, visutwin::canvas::CULLFACE_BACK, visutwin::canvas::CULLFACE_NONE, visutwin::canvas::VertexBufferOptions::data, visutwin::canvas::FILTER_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_NEAREST, visutwin::canvas::FILTER_NEAREST_MIPMAP_LINEAR, visutwin::canvas::FILTER_NEAREST_MIPMAP_NEAREST, visutwin::canvas::TextureOptions::format, visutwin::canvas::Color::gamma(), visutwin::canvas::TextureOptions::height, visutwin::canvas::Primitive::indexed, visutwin::canvas::INDEXFORMAT_UINT32, visutwin::canvas::TextureOptions::magFilter, visutwin::canvas::MASK, visutwin::canvas::GlbMeshPayload::material, visutwin::canvas::GlbMeshPayload::mesh, visutwin::canvas::GlbNodePayload::meshPayloadIndices, visutwin::canvas::TextureOptions::minFilter, visutwin::canvas::TextureOptions::mipmaps, visutwin::canvas::GlbNodePayload::name, visutwin::canvas::TextureOptions::name, visutwin::canvas::Quaternion::normalized(), visutwin::canvas::TextureOptions::numLevels, visutwin::canvas::OPAQUE, visutwin::canvas::PIXELFORMAT_RGBA8, visutwin::canvas::GlbNodePayload::rotation, visutwin::canvas::GlbNodePayload::scale, visutwin::canvas::BoundingBox::setCenter(), visutwin::canvas::BoundingBox::setHalfExtents(), visutwin::canvas::GlbNodePayload::translation, visutwin::canvas::Primitive::type, and visutwin::canvas::TextureOptions::width.

Referenced by visutwin::canvas::Asset::loadAsync().

◆ loadImageData()

bool visutwin::canvas::GlbParser::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

Image-loader callback for tinygltf.

Public so the background ContainerResourceHandler can register it when calling tinygltf::LoadBinaryFromMemory. Uses per-thread stb_image flip state for thread safety.

Definition at line 138 of file glbParser.cpp.

Referenced by visutwin::canvas::ContainerResourceHandler::load(), parse(), and parseFromMemory().

◆ parse()

std::unique_ptr< GlbContainerResource > visutwin::canvas::GlbParser::parse ( const std::string & path,
const std::shared_ptr< GraphicsDevice > & device )
static

Parse a GLB file from disk.

Definition at line 885 of file glbParser.cpp.

References visutwin::canvas::Color::a, visutwin::canvas::BlendState::additiveBlend(), visutwin::canvas::Primitive::base, visutwin::canvas::Primitive::baseVertex, visutwin::canvas::BLEND, visutwin::canvas::GlbMeshPayload::castShadow, visutwin::canvas::GlbNodePayload::children, visutwin::canvas::Primitive::count, visutwin::canvas::CULLFACE_BACK, visutwin::canvas::CULLFACE_NONE, visutwin::canvas::VertexBufferOptions::data, visutwin::canvas::FILTER_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_LINEAR, visutwin::canvas::FILTER_LINEAR_MIPMAP_NEAREST, visutwin::canvas::FILTER_NEAREST_MIPMAP_LINEAR, visutwin::canvas::FILTER_NEAREST_MIPMAP_NEAREST, visutwin::canvas::TextureOptions::format, visutwin::canvas::Color::gamma(), visutwin::canvas::Matrix4::getElement(), visutwin::canvas::Vector4::getW(), visutwin::canvas::Vector3::getX(), visutwin::canvas::Vector4::getX(), visutwin::canvas::Vector3::getY(), visutwin::canvas::Vector4::getY(), visutwin::canvas::Vector3::getZ(), visutwin::canvas::Vector4::getZ(), visutwin::canvas::TextureOptions::height, visutwin::canvas::Matrix4::identity(), visutwin::canvas::Primitive::indexed, visutwin::canvas::INDEXFORMAT_UINT32, loadImageData(), visutwin::canvas::TextureOptions::magFilter, visutwin::canvas::MASK, visutwin::canvas::GlbMeshPayload::material, visutwin::canvas::GlbMeshPayload::mesh, visutwin::canvas::GlbNodePayload::meshPayloadIndices, visutwin::canvas::TextureOptions::minFilter, visutwin::canvas::TextureOptions::mipmaps, visutwin::canvas::GlbNodePayload::name, visutwin::canvas::TextureOptions::name, visutwin::canvas::Quaternion::normalized(), visutwin::canvas::DepthState::noWrite(), visutwin::canvas::TextureOptions::numLevels, visutwin::canvas::OPAQUE, visutwin::canvas::PIXELFORMAT_RGBA8, visutwin::canvas::PRIMITIVE_POINTS, visutwin::canvas::GlbNodePayload::rotation, visutwin::canvas::GlbNodePayload::scale, visutwin::canvas::BoundingBox::setCenter(), visutwin::canvas::Matrix4::setElement(), visutwin::canvas::BoundingBox::setHalfExtents(), visutwin::canvas::GlbNodePayload::skip, visutwin::canvas::Quaternion::toRotationMatrix(), visutwin::canvas::Matrix4::transformPoint(), visutwin::canvas::GlbNodePayload::translation, visutwin::canvas::Primitive::type, and visutwin::canvas::TextureOptions::width.

Referenced by visutwin::canvas::Asset::resource().

◆ parseFromMemory()

std::unique_ptr< GlbContainerResource > visutwin::canvas::GlbParser::parseFromMemory ( const std::uint8_t * data,
std::size_t length,
const std::shared_ptr< GraphicsDevice > & device,
const std::string & debugName = "memory" )
static

Parse a GLB from an in-memory byte buffer (e.g. extracted from b3dm).

Definition at line 1816 of file glbParser.cpp.

References createFromModel(), and loadImageData().

Referenced by visutwin::canvas::Asset::loadAsync().

◆ prepareFromModel()

PreparedGlbData visutwin::canvas::GlbParser::prepareFromModel ( tinygltf::Model & model)
static

Pre-process a tinygltf model on the background thread.

Performs all CPU-heavy work: pixel format conversion, Draco decompression, vertex extraction, tangent generation, and animation parsing. The result can be passed to createFromPrepared() on the main thread for fast GPU resource creation.

Parameters
modelPre-parsed tinygltf model.
Returns
Prepared data ready for GPU resource creation.

Definition at line 2162 of file glbParser.cpp.

References visutwin::canvas::PreparedGlbData::animTracks, visutwin::canvas::PreparedGlbData::PrimitiveData::boundsMax, visutwin::canvas::PreparedGlbData::PrimitiveData::boundsMin, visutwin::canvas::PreparedGlbData::dracoDecodeFailureCount, visutwin::canvas::PreparedGlbData::dracoDecodeSuccessCount, visutwin::canvas::PreparedGlbData::dracoPrimitiveCount, visutwin::canvas::PreparedGlbData::PrimitiveData::drawCount, visutwin::canvas::Vector4::getW(), visutwin::canvas::Vector3::getX(), visutwin::canvas::Vector4::getX(), visutwin::canvas::Vector3::getY(), visutwin::canvas::Vector4::getY(), visutwin::canvas::Vector3::getZ(), visutwin::canvas::Vector4::getZ(), visutwin::canvas::PreparedGlbData::images, visutwin::canvas::PreparedGlbData::PrimitiveData::indexBytes, visutwin::canvas::PreparedGlbData::PrimitiveData::indexed, visutwin::canvas::PreparedGlbData::PrimitiveData::materialIndex, visutwin::canvas::PreparedGlbData::meshPrimitives, visutwin::canvas::PreparedGlbData::PrimitiveData::mode, visutwin::canvas::PreparedGlbData::PrimitiveData::vertexBytes, and visutwin::canvas::PreparedGlbData::PrimitiveData::vertexCount.

Referenced by visutwin::canvas::ContainerResourceHandler::load().


The documentation for this class was generated from the following files: