/** * @file llgltfaccessor.h * @brief LL GLTF Implementation * * $LicenseInfo:firstyear=2024&license=viewergpl$ * * Copyright (c) 2024, Linden Research, Inc. * * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement * ("Other License"), formally executed by you and Linden Lab. Terms of * the GPL can be found in doc/GPL-license.txt in this distribution, or * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 * * There are special exceptions to the terms and conditions of the GPL as * it is applied to this Source Code. View the full text of the exception * in the file doc/FLOSS-exception.txt in this software distribution, or * online at * http://secondlifegrid.net/programs/open_source/licensing/flossexception * * By copying, modifying or distributing this software, you acknowledge * that you have read and understood your obligations described above, * and agree to abide by those obligations. * * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, * COMPLETENESS OR PERFORMANCE. * $/LicenseInfo$ */ #ifndef LL_LLGLTFACCESSOR_H #define LL_LLGLTFACCESSOR_H #include #include #include "llpreprocessor.h" #include "stdtypes.h" // Saves from including "tinygltf/tiny_gltf.h" here. HB #ifndef TINYGLTF_TYPE_VEC2 # define TINYGLTF_TYPE_VEC2 (2) # define TINYGLTF_TYPE_VEC3 (3) # define TINYGLTF_TYPE_VEC4 (4) # define TINYGLTF_TYPE_MAT2 (32 + 2) # define TINYGLTF_TYPE_MAT3 (32 + 3) # define TINYGLTF_TYPE_MAT4 (32 + 4) # define TINYGLTF_TYPE_SCALAR (64 + 1) # define LL_CLEANUP_TINYGLTF_DEFINES #endif namespace tinygltf { struct Accessor; struct Buffer; struct BufferView; } namespace LLGLTF { constexpr S32 INVALID_INDEX = -1; class Buffer { public: const Buffer& operator=(const tinygltf::Buffer& src); public: std::string mName; std::string mUri; std::vector mData; }; class BufferView { public: LL_INLINE BufferView() : mBuffer(INVALID_INDEX) { } const BufferView& operator=(const tinygltf::BufferView& src); public: std::string mName; S32 mBuffer; S32 mByteLength; S32 mByteOffset; S32 mByteStride; S32 mTarget; S32 mComponentType; }; class Accessor { public: LL_INLINE Accessor() : mBufferView(INVALID_INDEX) { } const Accessor& operator=(const tinygltf::Accessor& src); enum class Type : S32 { SCALAR = TINYGLTF_TYPE_SCALAR, VEC2 = TINYGLTF_TYPE_VEC2, VEC3 = TINYGLTF_TYPE_VEC3, VEC4 = TINYGLTF_TYPE_VEC4, MAT2 = TINYGLTF_TYPE_MAT2, MAT3 = TINYGLTF_TYPE_MAT3, MAT4 = TINYGLTF_TYPE_MAT4 }; public: std::string mName; std::vector mMax; std::vector mMin; S32 mType; S32 mBufferView; S32 mByteOffset; S32 mComponentType; S32 mCount; bool mNormalized; }; } #ifdef LL_CLEANUP_TINYGLTF_DEFINES # undef TINYGLTF_TYPE_VEC2 # undef TINYGLTF_TYPE_VEC3 # undef TINYGLTF_TYPE_VEC4 # undef TINYGLTF_TYPE_MAT2 # undef TINYGLTF_TYPE_MAT3 # undef TINYGLTF_TYPE_MAT4 # undef TINYGLTF_TYPE_SCALAR # undef LL_CLEANUP_TINYGLTF_DEFINES #endif #endif // LL_LLGLTFACCESSOR_H