std::vector ReadSparseAccessor()

in GLTFSDK/Inc/GLTFSDK/GLTFResourceReader.h [155:199]


            std::vector<T> ReadSparseAccessor(const Document& gltfDocument, const Accessor& accessor) const
            {
                const auto typeCount = Accessor::GetTypeCount(accessor.type);
                const auto elementSize = sizeof(T) * typeCount;

                std::vector<T> baseData;

                if (accessor.bufferViewId.empty())
                {
                    baseData.resize(typeCount * accessor.count, T());
                }
                else
                {
                    const BufferView& bufferView = gltfDocument.bufferViews.Get(accessor.bufferViewId);
                    const Buffer& buffer = gltfDocument.buffers.Get(bufferView.bufferId);

                    const size_t offset = accessor.byteOffset + bufferView.byteOffset;

                    if (!bufferView.byteStride || bufferView.byteStride.Get() == elementSize)
                    {
                        baseData = ReadBinaryData<T>(buffer, offset, accessor.count * typeCount);
                    }
                    else
                    {
                        baseData = ReadBinaryDataInterleaved<T>(buffer, offset, accessor.count, typeCount, bufferView.byteStride.Get());
                    }
                }

                switch (accessor.sparse.indicesComponentType)
                {
                case COMPONENT_UNSIGNED_BYTE:
                    ReadSparseBinaryData<T, uint8_t>(gltfDocument, baseData, accessor);
                    break;
                case COMPONENT_UNSIGNED_SHORT:
                    ReadSparseBinaryData<T, uint16_t>(gltfDocument, baseData, accessor);
                    break;
                case COMPONENT_UNSIGNED_INT:
                    ReadSparseBinaryData<T, uint32_t>(gltfDocument, baseData, accessor);
                    break;
                default:
                    throw GLTFException("Unsupported sparse indices ComponentType");
                }

                return baseData;
            }