5#include "Serialization/JsonParser.h"
7#include <meshoptimizer/meshoptimizer.h>
9#include <unordered_set>
31 enum class Mode { UNKNOWN, ATTRIBUTES, TRIANGLES, INDICES };
32 enum class Filter { NONE, OCTAHEDRAL, QUATERNION, EXPONENTIAL };
43 uint32_t byteLength = 0;
44 uint32_t byteStride = 0;
46 uint32_t byteOffset = 0;
47 Mode mode = Mode::UNKNOWN;
48 Filter filter = Filter::NONE;
50 uint32_t originalBufferViewIdx = 0;
64 if (accessor.minCount == 0 || accessor.maxCount == 0 || accessor.componentType == GltfLoader::AccessorComponentType::Float) {
69 constexpr int n = v.length();
71 if (accessor.componentType == GltfLoader::AccessorComponentType::UnsignedByte ||
72 accessor.componentType == GltfLoader::AccessorComponentType::UnsignedShort ||
73 accessor.componentType == GltfLoader::AccessorComponentType::UnsignedInt) {
74 for (
int i = 0; i < n; ++i) {
75 accessor.min.s_float[i] = float(accessor.min.s_uint[i]);
76 accessor.max.s_float[i] = float(accessor.max.s_uint[i]);
79 else if (accessor.componentType == GltfLoader::AccessorComponentType::Byte ||
80 accessor.componentType == GltfLoader::AccessorComponentType::Short) {
81 for (
int i = 0; i < n; ++i) {
82 accessor.min.s_float[i] = float(accessor.min.s_int[i]);
83 accessor.max.s_float[i] = float(accessor.max.s_int[i]);
87 assert(
false &&
"Unsupported component type");
90 if (accessor.normalized) {
91 for (
int i = 0; i < n; ++i) {
92 normalizeBBoxValue(accessor, i);
98 bool transformData(T data,
int size,
int stride, MeshoptDecompressor::Filter filter)
const {
100 case Filter::EXPONENTIAL:
101 meshopt_decodeFilterExp(data, size, stride);
103 case Filter::OCTAHEDRAL:
104 meshopt_decodeFilterOct(data, size, stride);
106 case Filter::QUATERNION:
107 meshopt_decodeFilterQuat(data, size, stride);
116 std::unordered_map<uint32_t, BufferViewDecomp> bufferViewDecomps;
117 std::vector<Memory::MemoryBuffer> memoryBuffers;
118 std::unordered_set<uint32_t> decompressedBufferViews;
bool registerBufferViewCompression(uint32_t bufferViewIdx, const GltfLoader::Object &properties)
Returns false if something failed.
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....