summaryrefslogtreecommitdiff
path: root/indra/newview/gltf/llgltfloader.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/gltf/llgltfloader.h')
-rw-r--r--indra/newview/gltf/llgltfloader.h203
1 files changed, 0 insertions, 203 deletions
diff --git a/indra/newview/gltf/llgltfloader.h b/indra/newview/gltf/llgltfloader.h
deleted file mode 100644
index 048f7df7f5..0000000000
--- a/indra/newview/gltf/llgltfloader.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * @file LLGLTFLoader.h
- * @brief LLGLTFLoader class definition
- *
- * $LicenseInfo:firstyear=2022&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2022, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLGLTFLoader_H
-#define LL_LLGLTFLoader_H
-
-#include "tinygltf/tiny_gltf.h"
-
-#include "asset.h"
-
-#include "llglheaders.h"
-#include "lljointdata.h"
-#include "llmodelloader.h"
-
-class LLGLTFLoader : public LLModelLoader
-{
- public:
- typedef std::map<std::string, LLImportMaterial> material_map;
- typedef std::map<std::string, std::string> joint_viewer_parent_map_t;
- typedef std::map<std::string, glm::mat4> joint_viewer_rest_map_t;
- typedef std::map<S32, glm::mat4> joint_node_mat4_map_t;
-
- struct JointNodeData
- {
- JointNodeData()
- : mJointListIdx(-1)
- , mNodeIdx(-1)
- , mParentNodeIdx(-1)
- , mIsValidViewerJoint(false)
- , mIsParentValidViewerJoint(false)
- , mIsOverrideValid(false)
- {
-
- }
- S32 mJointListIdx;
- S32 mNodeIdx;
- S32 mParentNodeIdx;
- glm::mat4 mGltfRestMatrix;
- glm::mat4 mViewerRestMatrix;
- glm::mat4 mOverrideRestMatrix;
- glm::mat4 mGltfMatrix;
- glm::mat4 mOverrideMatrix;
- std::string mName;
- bool mIsValidViewerJoint;
- bool mIsParentValidViewerJoint;
- bool mIsOverrideValid;
- };
- typedef std::map <S32, JointNodeData> joints_data_map_t;
- typedef std::map <std::string, S32> joints_name_to_node_map_t;
-
- LLGLTFLoader(std::string filename,
- S32 lod,
- LLModelLoader::load_callback_t load_cb,
- LLModelLoader::joint_lookup_func_t joint_lookup_func,
- LLModelLoader::texture_load_func_t texture_load_func,
- LLModelLoader::state_callback_t state_cb,
- void * opaque_userdata,
- JointTransformMap & jointTransformMap,
- JointNameSet & jointsFromNodes,
- std::map<std::string, std::string> &jointAliasMap,
- U32 maxJointsPerMesh,
- U32 modelLimit,
- std::vector<LLJointData> viewer_skeleton); //,
- //bool preprocess );
- virtual ~LLGLTFLoader();
-
- virtual bool OpenFile(const std::string &filename);
-
- struct GLTFVertex
- {
- glm::vec3 position;
- glm::vec3 normal;
- glm::vec2 uv0;
- glm::u16vec4 joints;
- glm::vec4 weights;
- };
-
-protected:
- LL::GLTF::Asset mGLTFAsset;
- tinygltf::Model mGltfModel;
- bool mGltfLoaded;
- bool mApplyXYRotation = false;
- U32 mGeneratedModelLimit;
-
- // GLTF isn't aware of viewer's skeleton and uses it's own,
- // so need to take viewer's joints and use them to
- // recalculate iverse bind matrices
- std::vector<LLJointData> mViewerJointData;
-
- // vector of vectors because of a posibility of having more than one skin
- typedef std::vector<LLMeshSkinInfo::matrix_list_t> bind_matrices_t;
- typedef std::vector<std::vector<std::string> > joint_names_t;
- bind_matrices_t mInverseBindMatrices;
- bind_matrices_t mAlternateBindMatrices;
- joint_names_t mJointNames; // empty string when no legal name for a given idx
-
- // what group a joint belongs to.
- // For purpose of stripping unused groups when joints are over limit.
- struct JointGroups
- {
- std::string mGroup;
- std::string mParentGroup;
- };
- typedef std::map<std::string, JointGroups> joint_to_group_map_t;
- joint_to_group_map_t mJointGroups;
-
- // per skin joint count, needs to be tracked for the sake of limits check.
- std::vector<S32> mValidJointsCount;
-
-private:
- bool parseMeshes();
- void computeCombinedNodeTransform(const LL::GLTF::Asset& asset, S32 node_index, glm::mat4& combined_transform) const;
- void processNodeHierarchy(S32 node_idx, std::map<std::string, S32>& mesh_name_counts, U32 submodel_limit, const LLVolumeParams& volume_params);
- bool addJointToModelSkin(LLMeshSkinInfo& skin_info, S32 gltf_skin_idx, size_t gltf_joint_idx) const;
- bool populateModelFromMesh(LLModel* pModel, const LL::GLTF::Mesh &mesh, const LL::GLTF::Node &node, material_map& mats, S32 instance_count);
- void populateJointsFromSkin(S32 skin_idx);
- void populateJointGroups();
- void addModelToScene(LLModel* pModel, U32 submodel_limit, const LLMatrix4& transformation, const LLVolumeParams& volume_params, const material_map& mats);
- S32 findClosestValidJoint(S32 source_joint, const LL::GLTF::Skin& gltf_skin) const;
- S32 findValidRootJointNode(S32 source_joint_node, const LL::GLTF::Skin& gltf_skin) const;
- S32 findGLTFRootJointNode(const LL::GLTF::Skin& gltf_skin) const; // if there are multiple roots, gltf stores them under one commor joint
- S32 findParentNode(S32 node) const;
- void buildJointGroup(LLJointData& viewer_data, const std::string& parent_group);
- void buildOverrideMatrix(LLJointData& data, joints_data_map_t &gltf_nodes, joints_name_to_node_map_t &names_to_nodes, glm::mat4& parent_rest, glm::mat4& support_rest) const;
- glm::mat4 buildGltfRestMatrix(S32 joint_node_index, const LL::GLTF::Skin& gltf_skin) const;
- glm::mat4 buildGltfRestMatrix(S32 joint_node_index, const joints_data_map_t& joint_data) const;
- glm::mat4 computeGltfToViewerSkeletonTransform(const joints_data_map_t& joints_data_map, S32 gltf_node_index, const std::string& joint_name) const;
- bool checkForXYrotation(const LL::GLTF::Skin& gltf_skin, S32 joint_idx, S32 bind_indx);
- void checkForXYrotation(const LL::GLTF::Skin& gltf_skin);
-
- std::string extractTextureToTempFile(S32 textureIndex, const std::string& texture_type);
-
- void notifyUnsupportedExtension(bool unsupported);
-
- // bool mPreprocessGLTF;
-
- /* Below inherited from dae loader - unknown if/how useful here
-
- void processElement(gltfElement *element, bool &badElement, GLTF *gltf);
- void processGltfModel(LLModel *model, GLTF *gltf, gltfElement *pRoot, gltfMesh *mesh, gltfSkin *skin);
-
- material_map getMaterials(LLModel *model, gltfInstance_geometry *instance_geo, GLTF *gltf);
- LLImportMaterial profileToMaterial(gltfProfile_COMMON *material, GLTF *gltf);
- LLColor4 getGltfColor(gltfElement *element);
-
- gltfElement *getChildFromElement(gltfElement *pElement, std::string const &name);
-
- bool isNodeAJoint(gltfNode *pNode);
- void processJointNode(gltfNode *pNode, std::map<std::string, LLMatrix4> &jointTransforms);
- void extractTranslation(gltfTranslate *pTranslate, LLMatrix4 &transform);
- void extractTranslationViaElement(gltfElement *pTranslateElement, LLMatrix4 &transform);
- void extractTranslationViaSID(gltfElement *pElement, LLMatrix4 &transform);
- void buildJointToNodeMappingFromScene(gltfElement *pRoot);
- void processJointToNodeMapping(gltfNode *pNode);
- void processChildJoints(gltfNode *pParentNode);
-
- bool verifyCount(int expected, int result);
-
- // Verify that a controller matches vertex counts
- bool verifyController(gltfController *pController);
-
- static bool addVolumeFacesFromGltfMesh(LLModel *model, gltfMesh *mesh, LLSD &log_msg);
- static bool createVolumeFacesFromGltfMesh(LLModel *model, gltfMesh *mesh);
-
- static LLModel *loadModelFromGltfMesh(gltfMesh *mesh);
-
- // Loads a mesh breaking it into one or more models as necessary
- // to get around volume face limitations while retaining >8 materials
- //
- bool loadModelsFromGltfMesh(gltfMesh *mesh, std::vector<LLModel *> &models_out, U32 submodel_limit);
-
- static std::string getElementLabel(gltfElement *element);
- static size_t getSuffixPosition(std::string label);
- static std::string getLodlessLabel(gltfElement *element);
-
- static std::string preprocessGLTF(std::string filename);
- */
-
-};
-#endif // LL_LLGLTFLLOADER_H