Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
c8499b7
GLTF WIP. Still working on getting transforms working proper and nee…
Geenz Apr 8, 2025
f6b0660
Cursed stuff!
Geenz Apr 28, 2025
008f89f
More fixes - still a bit hacky but getting there.
Geenz May 4, 2025
3a4a2a5
Fix normals
Geenz May 4, 2025
e87c629
Transforms transmigrofied
Geenz May 5, 2025
dd74b36
Fix import rotation and UVs
Geenz May 5, 2025
4dedd13
Support bulk material uploads.
Geenz May 5, 2025
629e56d
Make sure transformation matricies are actually setup. Start getting…
Geenz May 5, 2025
47a5c7a
Make sure we're pushing to the joints name set as well.
Geenz May 5, 2025
d679e7f
Merge branch 'release/2025.04' into geenz/gltf-mesh-import
Geenz May 6, 2025
b3d1a1c
GLTF import texture upload
marchcat May 5, 2025
5e8f871
Apply 1/100th scale to the vertex positions
marchcat May 6, 2025
2efe514
Make pulling weights per vertex.
Geenz May 14, 2025
569bd9e
Merge branch 'geenz/gltf-mesh-import' into marchcat/gltf-mesh-texture…
Geenz May 14, 2025
b572bf7
Improve mesh scaling
marchcat May 14, 2025
3569cc1
Use correct model dimensions and bounding box rotation
marchcat May 14, 2025
bb76eae
Merge branch 'release/2025.04' into geenz/gltf-mesh-import
Geenz May 16, 2025
47d95f1
White space.
Geenz May 16, 2025
9346015
Merge branch 'geenz/gltf-texture-upload-merge' into geenz/gltf-mesh-i…
Geenz May 16, 2025
a9c75d8
More white space.
Geenz May 16, 2025
fdeef47
Merge branch 'geenz/gltf-mesh-import' into marchcat/gltf-mesh-texture…
marchcat May 18, 2025
875a418
#4080 Import GLTF skin data
akleshchev May 15, 2025
a3386f8
#4102 Allow selecting gltf models on mac
akleshchev May 19, 2025
a58adff
#4105 Support .gltf and .glb files in lookupLODModelFiles
marchcat May 20, 2025
a9e9c03
#4080 Rigged mesh support #2
akleshchev May 20, 2025
18182b1
Fix for crash when loading texutres on a GLTF mesh.
Geenz May 22, 2025
30b72ba
Make sure we're guarding texture uploads to the GPU properly
Geenz May 22, 2025
30aa14d
Make loading the asset into VRAM optional.
Geenz May 22, 2025
3670cf6
White space.
Geenz May 22, 2025
910a3a6
Merge pull request #4133 from secondlife/geenz/macos-texture-crash
Geenz May 22, 2025
fe84905
#4128 Crash on mInvBindMatrix
akleshchev May 21, 2025
6a92f87
Crash at LLVOVolume::isAnimatedObject
akleshchev May 21, 2025
9d3a03e
#4118 Allow Bulk Upload to initialize on Bulk Upload All option
maxim-productengine May 22, 2025
f5d4d3f
#4109 Improve handling of GLTF transform hierarchy
marchcat May 22, 2025
d713be4
#4109 Use correct GLTF coordinate system rotation
marchcat May 22, 2025
71d543f
#4109 #4080 Apply coordinate rotation to GLTF inverse bind matrices
marchcat May 22, 2025
8a9f09e
#4109 #4080 Undistort GLTF rigged mesh in Z-up coordinate transformation
marchcat May 22, 2025
4faebc0
#4109 Remove workaround code
marchcat May 24, 2025
3eab945
#4109 Refactor LLGLTFLoader::populateModelFromMesh()
marchcat May 24, 2025
e8eac13
#4109 Refactor LLGLTFLoader::populateModelFromMesh() #2
marchcat May 24, 2025
83fa366
#4109 Fix inside-out geometry from negative scale transforms in GLTF …
marchcat May 24, 2025
d6419f7
#4109 Fix GLTF model extents calculation
marchcat May 24, 2025
b423900
#4105 Fix duplicate GLTF model instances causing upload errors
marchcat May 25, 2025
d342aa7
#4080 Rigged mesh support #3
akleshchev May 26, 2025
a364b5e
#4109 Add validation for non-triangulated geometry in GLTF loader
marchcat May 26, 2025
d9d8008
#4080 Rigged mesh support #4
akleshchev May 26, 2025
3f0aa33
#4109 Improve LLGLTFLoader::computeCombinedNodeTransform()
marchcat May 26, 2025
0d99487
#4107 upload the model ignoring unsupported extension
maxim-productengine May 27, 2025
ab13373
#4157 Improve "Unable to upload material" error message
marchcat May 27, 2025
078cc9b
#4080 Rigged mesh support #5
akleshchev May 26, 2025
4c60231
#4080 Rigged mesh support #6
akleshchev May 28, 2025
0dbf2b4
#4080 Fix gltf crash when opening
akleshchev May 28, 2025
3375fb1
Merge pull request #4182 from secondlife/main
marchcat May 28, 2025
be40d20
#4190 provide unsupported extension info in log
maxim-productengine May 29, 2025
136149d
#4191 skip loading model compressed with Draco
maxim-productengine May 30, 2025
bd7e79d
#4191 Crash opening a gltf model
akleshchev May 30, 2025
7aea88f
Use awk to make PV channel name
marchcat May 29, 2025
4ae9b7b
#4203 show valid log info about 16 bit limit
maxim-productengine Jun 2, 2025
b322b3f
#4097 Fix crash in LLGLTFLoader::populateModelFromMesh()
marchcat Jun 3, 2025
acd4de6
#4080 Rigged mesh support #7
akleshchev Jun 3, 2025
11ece68
#4214 Support mesh splitting for meshes with more than 8 materials
akleshchev Jun 4, 2025
08f6f5c
#4214 Weights and Joints remap
akleshchev Jun 4, 2025
74d9908
#4214 Fix material upload
akleshchev Jun 5, 2025
3539852
Fix split model vertex/joint remapping to use correct model variable
marchcat Jun 9, 2025
689b829
#4170 Fix GLTF import missing mesh parts from transform tools
marchcat Jun 9, 2025
6924862
#4170 Follow-up: Optimize GLTF node hierarchy traversal
marchcat Jun 9, 2025
b20d10c
#4148 Skeleton Translation
akleshchev Jun 4, 2025
b4fb66c
#4170 Use GLTF scene definition for node traversal
marchcat Jun 9, 2025
4bbd631
#4148 Skeleton Translation #2
akleshchev Jun 10, 2025
b3fd05f
#4114 Improve GLTF mesh uploader log
marchcat Jun 10, 2025
fe10a83
#4214 Weights and Joints remap #2
akleshchev Jun 10, 2025
db95731
#4148 Skeleton Translation #3
akleshchev Jun 10, 2025
98abff9
#4248 Add safety checks to LLMeshSkinInfo::asLLSD()
marchcat Jun 10, 2025
48eb8a2
#4147 Joint override
maxim-productengine Jun 10, 2025
1132b19
#4114 Improve GLTF mesh uploader log 2
marchcat Jun 11, 2025
e2c76ec
#4147 Move mAlternateBindMatrices
akleshchev Jun 11, 2025
8322a9a
#4147 Joint Overrides #2
akleshchev Jun 12, 2025
54660c8
#4147 Joint Overrides #3
akleshchev Jun 13, 2025
46aeaf4
#4242 Support splitting of gltf faces that are over 16bit limit
akleshchev Jun 17, 2025
bb45bfa
#4204 Fix GLTF texture loading to match DAE loader behavior
marchcat Jun 18, 2025
68dc091
#4204 Don't show material editor with model loader
marchcat Jun 18, 2025
5099401
#4204 Log embedded texture extraction failure
marchcat Jun 18, 2025
5bc9232
#4250 Crash uploading a dae model
akleshchev Jun 18, 2025
f532030
#4214 Revert and remake "weights remap"
akleshchev Jun 19, 2025
2083e65
#4204 Unused code cleanup (#4278)
marchcat Jun 19, 2025
1a6e328
#4204 Remove more unused code
marchcat Jun 19, 2025
9e87757
#4257 Use filename as model initial name
marchcat Jun 23, 2025
781d9fa
Use latest release for changelog
marchcat May 31, 2025
c404b93
#4148 Fix collision bones
akleshchev Jun 24, 2025
4a40eaa
#4142 Add missed message
akleshchev Jun 24, 2025
8c9d0c6
#4142 Joint grouping and stripping
akleshchev Jun 25, 2025
895db14
#4291 Uploading without a .bin silently fails
akleshchev Jun 26, 2025
6dd8a02
Merge branch 'project/gltf_mesh_import' into geenz/develop-to-gltf-mesh
Geenz Jun 27, 2025
26e0ae1
Merge branch 'develop' into geenz/develop-to-gltf-mesh
Geenz Jun 27, 2025
ef7bfa5
Restore glTF mesh modifications.
Geenz Jun 27, 2025
6693fd0
Merge branch 'develop' into geenz/develop-to-gltf-mesh
Geenz Jun 27, 2025
a50a0e1
Fix LLCharacter base class constness.
Geenz Jun 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,10 @@ jobs:
prefix=${ba[0]}
if [ "$prefix" == "project" ]; then
IFS='_' read -ra prj <<< "${ba[1]}"
prj_str="${prj[*]}"
# uppercase first letter of each word
export viewer_channel="Second Life Project ${prj[*]^}"
capitalized=$(echo "$prj_str" | awk '{for (i=1; i<=NF; i++) $i = toupper(substr($i,1,1)) substr($i,2); print}')
export viewer_channel="Second Life Project $capitalized"
elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
then
export viewer_channel="Second Life Release"
Expand Down Expand Up @@ -455,7 +457,6 @@ jobs:
prerelease: true
generate_release_notes: true
target_commitish: ${{ github.sha }}
previous_tag: release
append_body: true
fail_on_unmatched_files: true
files: |
Expand Down
1 change: 1 addition & 0 deletions indra/llappearance/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ set(llappearance_SOURCE_FILES
llavatarjoint.cpp
llavatarjointmesh.cpp
lldriverparam.cpp
lljointdata.h
lllocaltextureobject.cpp
llpolyskeletaldistortion.cpp
llpolymesh.cpp
Expand Down
66 changes: 64 additions & 2 deletions indra/llappearance/llavatarappearance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,17 @@
#include "llavatarappearance.h"
#include "llavatarappearancedefines.h"
#include "llavatarjointmesh.h"
#include "lljointdata.h"
#include "llstl.h"
#include "lldir.h"
#include "llpolymorph.h"
#include "llpolymesh.h"
#include "llpolyskeletaldistortion.h"
#include "llstl.h"
#include "lltexglobalcolor.h"
#include "llwearabledata.h"
#include "boost/bind.hpp"
#include "boost/tokenizer.hpp"
#include "v4math.h"

using namespace LLAvatarAppearanceDefines;

Expand Down Expand Up @@ -71,11 +72,13 @@ class LLAvatarBoneInfo
mChildren.clear();
}
bool parseXml(LLXmlTreeNode* node);
glm::mat4 getJointMatrix();

private:
std::string mName;
std::string mSupport;
std::string mAliases;
std::string mGroup;
bool mIsJoint;
LLVector3 mPos;
LLVector3 mEnd;
Expand Down Expand Up @@ -105,11 +108,17 @@ class LLAvatarSkeletonInfo
S32 getNumBones() const { return mNumBones; }
S32 getNumCollisionVolumes() const { return mNumCollisionVolumes; }

private:
typedef std::vector<LLAvatarBoneInfo*> bone_info_list_t;
static void getJointMatricesAndHierarhy(
LLAvatarBoneInfo* bone_info,
LLJointData& data,
const glm::mat4& parent_mat);

private:
S32 mNumBones;
S32 mNumCollisionVolumes;
LLAvatarAppearance::joint_alias_map_t mJointAliasMap;
typedef std::vector<LLAvatarBoneInfo*> bone_info_list_t;
bone_info_list_t mBoneInfoList;
};

Expand Down Expand Up @@ -1598,6 +1607,15 @@ bool LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
mSupport = "base";
}

// Skeleton has 133 bones, but shader only allows 110 (LL_MAX_JOINTS_PER_MESH_OBJECT)
// Groups can be used by importer to cut out unused groups of joints
static LLStdStringHandle group_string = LLXmlTree::addAttributeString("group");
if (!node->getFastAttributeString(group_string, mGroup))
{
LL_WARNS() << "Bone without group " << mName << LL_ENDL;
mGroup = "global";
}

if (mIsJoint)
{
static LLStdStringHandle pivot_string = LLXmlTree::addAttributeString("pivot");
Expand All @@ -1623,6 +1641,21 @@ bool LLAvatarBoneInfo::parseXml(LLXmlTreeNode* node)
return true;
}


glm::mat4 LLAvatarBoneInfo::getJointMatrix()
{
glm::mat4 mat(1.0f);
// 1. Scaling
mat = glm::scale(mat, glm::vec3(mScale[0], mScale[1], mScale[2]));
// 2. Rotation (Euler angles rad)
mat = glm::rotate(mat, mRot[0], glm::vec3(1, 0, 0));
mat = glm::rotate(mat, mRot[1], glm::vec3(0, 1, 0));
mat = glm::rotate(mat, mRot[2], glm::vec3(0, 0, 1));
// 3. Position
mat = glm::translate(mat, glm::vec3(mPos[0], mPos[1], mPos[2]));
return mat;
}

//-----------------------------------------------------------------------------
// LLAvatarSkeletonInfo::parseXml()
//-----------------------------------------------------------------------------
Expand Down Expand Up @@ -1653,6 +1686,25 @@ bool LLAvatarSkeletonInfo::parseXml(LLXmlTreeNode* node)
return true;
}

void LLAvatarSkeletonInfo::getJointMatricesAndHierarhy(
LLAvatarBoneInfo* bone_info,
LLJointData& data,
const glm::mat4& parent_mat)
{
data.mName = bone_info->mName;
data.mJointMatrix = bone_info->getJointMatrix();
data.mScale = glm::vec3(bone_info->mScale[0], bone_info->mScale[1], bone_info->mScale[2]);
data.mRotation = bone_info->mRot;
data.mRestMatrix = parent_mat * data.mJointMatrix;
data.mIsJoint = bone_info->mIsJoint;
data.mGroup = bone_info->mGroup;
for (LLAvatarBoneInfo* child_info : bone_info->mChildren)
{
LLJointData& child_data = data.mChildren.emplace_back();
getJointMatricesAndHierarhy(child_info, child_data, data.mRestMatrix);
}
}

//Make aliases for joint and push to map.
void LLAvatarAppearance::makeJointAliases(LLAvatarBoneInfo *bone_info)
{
Expand Down Expand Up @@ -1714,6 +1766,16 @@ const LLAvatarAppearance::joint_alias_map_t& LLAvatarAppearance::getJointAliases
return mJointAliasMap;
}

void LLAvatarAppearance::getJointMatricesAndHierarhy(std::vector<LLJointData> &data) const
{
glm::mat4 identity(1.f);
for (LLAvatarBoneInfo* bone_info : sAvatarSkeletonInfo->mBoneInfoList)
{
LLJointData& child_data = data.emplace_back();
LLAvatarSkeletonInfo::getJointMatricesAndHierarhy(bone_info, child_data, identity);
}
}


//-----------------------------------------------------------------------------
// parseXmlSkeletonNode(): parses <skeleton> nodes from XML tree
Expand Down
10 changes: 7 additions & 3 deletions indra/llappearance/llavatarappearance.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,15 @@
#include "lltexlayer.h"
#include "llviewervisualparam.h"
#include "llxmltree.h"
#include "v4math.h"

class LLTexLayerSet;
class LLTexGlobalColor;
class LLTexGlobalColorInfo;
class LLWearableData;
class LLAvatarBoneInfo;
class LLAvatarSkeletonInfo;
class LLJointData;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// LLAvatarAppearance
Expand Down Expand Up @@ -138,7 +140,7 @@ class LLAvatarAppearance : public LLCharacter
LLVector3 mHeadOffset{}; // current head position
LLAvatarJoint* mRoot{ nullptr };

typedef std::map<std::string, LLJoint*, std::less<>> joint_map_t;
typedef std::map<std::string, LLJoint*> joint_map_t;
joint_map_t mJointMap;

typedef std::map<std::string, LLVector3> joint_state_map_t;
Expand All @@ -151,9 +153,11 @@ class LLAvatarAppearance : public LLCharacter
public:
typedef std::vector<LLAvatarJoint*> avatar_joint_list_t;
const avatar_joint_list_t& getSkeleton() { return mSkeleton; }
typedef std::map<std::string, std::string, std::less<>> joint_alias_map_t;
typedef std::map<std::string, std::string> joint_alias_map_t;
const joint_alias_map_t& getJointAliases();

typedef std::map<std::string, std::string> joint_parent_map_t; // matrix plus parent
typedef std::map<std::string, glm::mat4> joint_rest_map_t;
void getJointMatricesAndHierarhy(std::vector<LLJointData> &data) const;

protected:
static bool parseSkeletonFile(const std::string& filename, LLXmlTree& skeleton_xml_tree);
Expand Down
66 changes: 66 additions & 0 deletions indra/llappearance/lljointdata.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/**
* @file lljointdata.h
* @brief LLJointData class for holding individual joint data and skeleton
*
* $LicenseInfo:firstyear=2025&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2025, 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_LLJOINTDATA_H
#define LL_LLJOINTDATA_H

#include "v4math.h"

// may be just move LLAvatarBoneInfo
class LLJointData
{
public:
std::string mName;
std::string mGroup;
glm::mat4 mJointMatrix;
glm::mat4 mRestMatrix;
glm::vec3 mScale;
LLVector3 mRotation;

typedef std::vector<LLJointData> bones_t;
bones_t mChildren;

bool mIsJoint; // if not, collision_volume
enum SupportCategory
{
SUPPORT_BASE,
SUPPORT_EXTENDED
};
SupportCategory mSupport;
void setSupport(const std::string& support)
{
if (support == "extended")
{
mSupport = SUPPORT_EXTENDED;
}
else
{
mSupport = SUPPORT_BASE;
}
}
};

#endif //LL_LLJOINTDATA_H
6 changes: 3 additions & 3 deletions indra/llcharacter/llbvhloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ LLQuaternion::Order bvhStringToOrder( char *str )
// LLBVHLoader()
//-----------------------------------------------------------------------------

LLBVHLoader::LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &errorLine, std::map<std::string, std::string, std::less<>>& joint_alias_map )
LLBVHLoader::LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &errorLine, std::map<std::string, std::string>& joint_alias_map )
{
reset();
errorLine = 0;
Expand All @@ -156,9 +156,9 @@ LLBVHLoader::LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &error
}

// Recognize all names we've been told are legal.
for (const auto& [alias, joint] : joint_alias_map)
for (std::map<std::string, std::string>::value_type& alias_pair : joint_alias_map)
{
makeTranslation(alias, joint);
makeTranslation( alias_pair.first , alias_pair.second );
}

char error_text[128]; /* Flawfinder: ignore */
Expand Down
2 changes: 1 addition & 1 deletion indra/llcharacter/llbvhloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ class LLBVHLoader
friend class LLKeyframeMotion;
public:
// Constructor
LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &errorLine, std::map<std::string, std::string, std::less<>>& joint_alias_map );
LLBVHLoader(const char* buffer, ELoadStatus &loadStatus, S32 &errorLine, std::map<std::string, std::string>& joint_alias_map );
~LLBVHLoader();

/*
Expand Down
7 changes: 4 additions & 3 deletions indra/llcharacter/llcharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,12 @@ LLCharacter::~LLCharacter()
//-----------------------------------------------------------------------------
// getJoint()
//-----------------------------------------------------------------------------
LLJoint* LLCharacter::getJoint(std::string_view name)
LLJoint *LLCharacter::getJoint( const std::string &name )
{
LLJoint* joint = nullptr;
LLJoint* joint = NULL;

if (LLJoint* root = getRootJoint())
LLJoint *root = getRootJoint();
if (root)
{
joint = root->findJoint(name);
}
Expand Down
2 changes: 1 addition & 1 deletion indra/llcharacter/llcharacter.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class LLCharacter
// get the specified joint
// default implementation does recursive search,
// subclasses may optimize/cache results.
virtual LLJoint* getJoint(std::string_view name);
virtual LLJoint *getJoint( const std::string &name );

// get the position of the character
virtual LLVector3 getCharacterPosition() = 0;
Expand Down
2 changes: 0 additions & 2 deletions indra/llprimitive/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ include(TinyGLTF)

set(llprimitive_SOURCE_FILES
lldaeloader.cpp
llgltfloader.cpp
llgltfmaterial.cpp
llmaterialid.cpp
llmaterial.cpp
Expand All @@ -32,7 +31,6 @@ set(llprimitive_SOURCE_FILES
set(llprimitive_HEADER_FILES
CMakeLists.txt
lldaeloader.h
llgltfloader.h
llgltfmaterial.h
llgltfmaterial_templates.h
legacy_object_types.h
Expand Down
2 changes: 1 addition & 1 deletion indra/llprimitive/lldaeloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ LLDAELoader::LLDAELoader(
void* opaque_userdata,
JointTransformMap& jointTransformMap,
JointNameSet& jointsFromNodes,
std::map<std::string, std::string, std::less<>>& jointAliasMap,
std::map<std::string, std::string>& jointAliasMap,
U32 maxJointsPerMesh,
U32 modelLimit,
bool preprocess)
Expand Down
26 changes: 13 additions & 13 deletions indra/llprimitive/lldaeloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,19 @@ class LLDAELoader : public LLModelLoader
dae_model_map mModelsMap;

LLDAELoader(
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, std::less<>>& jointAliasMap,
U32 maxJointsPerMesh,
U32 modelLimit,
bool preprocess);
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,
bool preprocess);
virtual ~LLDAELoader() ;

virtual bool OpenFile(const std::string& filename);
Expand Down
Loading
Loading