|
VisuTwin Canvas
C++ 3D Engine — Metal Backend
|
#include <framework/parsers/glbParser.h>
Static Public Member Functions | |
| 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 > | createFromPrepared (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< GlbContainerResource > | parse (const std::string &path, const std::shared_ptr< GraphicsDevice > &device) |
| Parse a GLB file from disk. | |
| 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 PreparedGlbData | prepareFromModel (tinygltf::Model &model) |
Definition at line 73 of file glbParser.h.
|
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.
| model | Pre-parsed tinygltf model (moved in — consumed). |
| device | Graphics device for GPU resource creation. |
| debugName | Label 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().
|
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.
| model | Pre-parsed tinygltf model (for metadata only). |
| prepared | Pre-processed data (consumed via move). |
| device | Graphics device for GPU resource creation. |
| debugName | Label 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().
|
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().
|
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().
|
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().
|
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.
| model | Pre-parsed tinygltf model. |
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().