From ff8b002c3b2bc68bdf4b88c1687a711d2d7c0ca6 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Oct 2013 13:56:06 -0500 Subject: Quite down log spam from loading shaders. Up bone cap to 64 for rigged meshes. --- .../shaders/class1/avatar/objectSkinV.glsl | 38 +++++++++++++++++----- .../shaders/class1/deferred/alphaF.glsl | 1 + 2 files changed, 31 insertions(+), 8 deletions(-) (limited to 'indra/newview/app_settings') diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index efd0d03965..3bbcf32482 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -26,7 +26,9 @@ ATTRIBUTE vec4 weight4; -uniform mat4 matrixPalette[32]; +uniform mat3 matrixPalette[64]; +uniform vec3 translationPalette[64]; + mat4 getObjectSkinnedTransform() { @@ -34,15 +36,35 @@ mat4 getObjectSkinnedTransform() vec4 w = fract(weight4); vec4 index = floor(weight4); - + + index = min(index, vec4(63.0)); + index = max(index, vec4( 0.0)); + float scale = 1.0/(w.x+w.y+w.z+w.w); w *= scale; - - mat4 mat = matrixPalette[int(index.x)]*w.x; - mat += matrixPalette[int(index.y)]*w.y; - mat += matrixPalette[int(index.z)]*w.z; - mat += matrixPalette[int(index.w)]*w.w; + + int i1 = int(index.x); + int i2 = int(index.y); + int i3 = int(index.z); + int i4 = int(index.w); - return mat; + mat3 mat = matrixPalette[i1]*w.x; + mat += matrixPalette[i2]*w.y; + mat += matrixPalette[i3]*w.z; + mat += matrixPalette[i4]*w.w; + + vec3 trans = translationPalette[i1]*w.x; + trans += translationPalette[i2]*w.y; + trans += translationPalette[i3]*w.z; + trans += translationPalette[i4]*w.w; + + mat4 ret; + + ret[0] = vec4(mat[0], 0); + ret[1] = vec4(mat[1], 0); + ret[2] = vec4(mat[2], 0); + ret[3] = vec4(trans, 1.0); + + return ret; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index e5f7366b70..2b5f001873 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -534,6 +534,7 @@ void main() #ifdef FOR_IMPOSTOR vec4 color; color.rgb = diff.rgb; + color.a = 1.0; #ifdef USE_VERTEX_COLOR float final_alpha = diff.a * vertex_color.a; -- cgit v1.3 From 2454bcc8db5952a16bd3a880825bf6a1b7086c3c Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 5 Nov 2013 10:24:41 -0500 Subject: STORM-=1982 Remove duplicate entry in settings.xml --- doc/contributions.txt | 1 + indra/newview/app_settings/settings.xml | 11 ----------- 2 files changed, 1 insertion(+), 11 deletions(-) (limited to 'indra/newview/app_settings') diff --git a/doc/contributions.txt b/doc/contributions.txt index 99527c0587..e715221826 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1982 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 41aac583d7..50b0e54f5d 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -14860,17 +14860,6 @@ Value 0 - DisablePrecacheDelayAfterTeleporting - - Comment - Disables the artificial delay in the viewer that precaches some incoming assets - Persist - 0 - Type - Boolean - Value - 0 - FMODExProfilerEnable Comment -- cgit v1.3 From 662efccfb821c2bf61c286aeec97563d7f95a9f8 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 6 Nov 2013 15:11:11 -0500 Subject: STORM-1980/1983 Add debug setting UISndRestart and value. This UUID will need to be replaced with an official UUID once one has been established. --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llviewermessage.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'indra/newview/app_settings') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 41aac583d7..be5f81e7e7 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12621,6 +12621,17 @@ Value 00000000-0000-0000-0000-000000000000 + UISndRestart + + Comment + Sound file for region restarting (uuid for sound asset) + Persist + 1 + Type + String + Value + 4b315701-1972-9e23-cdd8-23cbc8cb0f42 + UISndSnapshot Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index f66b3ba805..48bfdc03ac 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5973,7 +5973,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LLStringUtil::format(timeStr, substitution); llsdBlock["TIME"] = timeStr; - send_sound_trigger(LLUUID(gSavedSettings.getString("UISndAlert")), 1.0f); + send_sound_trigger(LLUUID(gSavedSettings.getString("UISndRestart")), 1.0f); } LLNotificationsUtil::add(notificationID, llsdBlock); -- cgit v1.3 From 52ec6f9af029797615a80e5a889572c18914d56e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 26 Nov 2013 15:09:55 -0500 Subject: remove excessively complex fixes for MAINT-2914 and MAINT-3142 --- indra/llui/llcommandmanager.cpp | 4 -- indra/llui/llcommandmanager.h | 7 ---- indra/llui/lltabcontainer.cpp | 23 ++--------- indra/llui/lltabcontainer.h | 11 +---- indra/llui/lltoolbar.cpp | 2 - indra/newview/app_settings/commands.xml | 48 ---------------------- indra/newview/skins/default/textures/textures.xml | 3 -- .../newview/skins/default/xui/en/panel_people.xml | 3 +- .../default/xui/en/widgets/location_input.xml | 1 - .../skins/default/xui/en/widgets/tab_container.xml | 15 ++----- 10 files changed, 8 insertions(+), 109 deletions(-) (limited to 'indra/newview/app_settings') diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 49cfb2255e..625fb8e870 100755 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -50,8 +50,6 @@ const LLCommandId LLCommandId::null = LLCommandId("null command"); LLCommand::Params::Params() : available_in_toybox("available_in_toybox", false) , icon("icon") - , hover_icon_unselected("hover_icon_unselected") - , hover_icon_selected("hover_icon_selected") , label_ref("label_ref") , name("name") , tooltip_ref("tooltip_ref") @@ -73,8 +71,6 @@ LLCommand::LLCommand(const LLCommand::Params& p) : mIdentifier(p.name) , mAvailableInToybox(p.available_in_toybox) , mIcon(p.icon) - , mHoverIconUnselected(p.hover_icon_unselected) - , mHoverIconSelected(p.hover_icon_selected) , mLabelRef(p.label_ref) , mName(p.name) , mTooltipRef(p.tooltip_ref) diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h index 9f276f712d..ff5a8a3257 100755 --- a/indra/llui/llcommandmanager.h +++ b/indra/llui/llcommandmanager.h @@ -96,9 +96,6 @@ public: Mandatory name; Mandatory tooltip_ref; - Optional hover_icon_selected; - Optional hover_icon_unselected; - Mandatory execute_function; Optional execute_parameters; @@ -127,8 +124,6 @@ public: const std::string& labelRef() const { return mLabelRef; } const std::string& name() const { return mName; } const std::string& tooltipRef() const { return mTooltipRef; } - const std::string& hoverIconUnselected() const {return mHoverIconUnselected; } - const std::string& hoverIconSelected() const {return mHoverIconSelected; } const std::string& executeFunctionName() const { return mExecuteFunction; } const LLSD& executeParameters() const { return mExecuteParameters; } @@ -155,8 +150,6 @@ private: std::string mLabelRef; std::string mName; std::string mTooltipRef; - std::string mHoverIconUnselected; - std::string mHoverIconSelected; std::string mExecuteFunction; LLSD mExecuteParameters; diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 6fd2bb1b36..76ba53ec32 100755 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -193,15 +193,12 @@ LLTabContainer::TabParams::TabParams() : tab_top_image_unselected("tab_top_image_unselected"), tab_top_image_selected("tab_top_image_selected"), tab_top_image_flash("tab_top_image_flash"), - tab_top_image_hovered("tab_top_image_hovered"), tab_bottom_image_unselected("tab_bottom_image_unselected"), tab_bottom_image_selected("tab_bottom_image_selected"), tab_bottom_image_flash("tab_bottom_image_flash"), - tab_bottom_image_hovered("tab_bottom_image_hovered"), tab_left_image_unselected("tab_left_image_unselected"), tab_left_image_selected("tab_left_image_selected"), - tab_left_image_flash("tab_left_image_flash"), - tab_left_image_hovered("tab_left_image_hovered") + tab_left_image_flash("tab_left_image_flash") {} LLTabContainer::Params::Params() @@ -221,8 +218,7 @@ LLTabContainer::Params::Params() open_tabs_on_drag_and_drop("open_tabs_on_drag_and_drop", false), tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0), use_ellipses("use_ellipses"), - font_halign("halign"), - use_highlighting_on_hover("use_highlighting_on_hover",false) + font_halign("halign") {} LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) @@ -258,8 +254,7 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) mCustomIconCtrlUsed(p.use_custom_icon_ctrl), mOpenTabsOnDragAndDrop(p.open_tabs_on_drag_and_drop), mTabIconCtrlPad(p.tab_icon_ctrl_pad), - mUseTabEllipses(p.use_ellipses), - mUseHighlightingOnHover(p.use_highlighting_on_hover) + mUseTabEllipses(p.use_ellipses) { static LLUICachedControl tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0); @@ -908,30 +903,18 @@ void LLTabContainer::update_images(LLTabTuple* tuple, TabParams params, LLTabCon tuple->mButton->setImageUnselected(static_cast(params.tab_top_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_top_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_top_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_top_image_hovered)); - } } else if (pos == LLTabContainer::BOTTOM) { tuple->mButton->setImageUnselected(static_cast(params.tab_bottom_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_bottom_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_bottom_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_bottom_image_hovered)); - } } else if (pos == LLTabContainer::LEFT) { tuple->mButton->setImageUnselected(static_cast(params.tab_left_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_left_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_left_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_left_image_hovered)); - } } } } diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h index 7e7d4ac6e6..57862fc626 100755 --- a/indra/llui/lltabcontainer.h +++ b/indra/llui/lltabcontainer.h @@ -62,15 +62,12 @@ public: Optional tab_top_image_unselected, tab_top_image_selected, tab_top_image_flash, - tab_top_image_hovered, tab_bottom_image_unselected, tab_bottom_image_selected, tab_bottom_image_flash, - tab_bottom_image_hovered, tab_left_image_unselected, tab_left_image_selected, - tab_left_image_flash, - tab_left_image_hovered; + tab_left_image_flash; TabParams(); }; @@ -117,11 +114,6 @@ public: */ Optional tab_icon_ctrl_pad; - /** - * This variable is used to found out should we highlight tab button on hover - */ - Optional use_highlighting_on_hover; - Params(); }; @@ -315,7 +307,6 @@ private: bool mOpenTabsOnDragAndDrop; S32 mTabIconCtrlPad; bool mUseTabEllipses; - bool mUseHighlightingOnHover; }; #endif // LL_TABCONTAINER_H diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 6bfe113933..928e82cb8c 100755 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -928,8 +928,6 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) button_p.label = LLTrans::getString(commandp->labelRef()); button_p.tool_tip = LLTrans::getString(commandp->tooltipRef()); button_p.image_overlay = LLUI::getUIImage(commandp->icon()); - button_p.image_hover_unselected = LLUI::getUIImage(commandp->hoverIconUnselected()); - button_p.image_hover_selected = LLUI::getUIImage(commandp->hoverIconSelected()); button_p.button_flash_enable = commandp->isFlashingAllowed(); button_p.overwriteFrom(mButtonParams[mButtonType]); LLToolBarButton* button = LLUICtrlFactory::create(button_p); diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index ce878f156b..60c942094a 100755 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -3,8 +3,6 @@ - - @@ -165,7 +163,6 @@ with the same filename but different name - diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 3caf2b3d7e..05013f6b1e 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -66,8 +66,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tab_position="top" top="0" halign="center" - right="-5" - use_highlighting_on_hover="true"> + right="-5"> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 4ea1aa6efb..61ec046649 100755 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -150,7 +150,6 @@ + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> -- cgit v1.3 From 02afa9cfb050fbc23f5de89bd0adcdc0fb832dea Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 18 Dec 2013 13:39:18 -0500 Subject: STORM-1980: set new region restart sound uuid --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llvieweraudio.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview/app_settings') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index abe7b95266..b6b9f40db7 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12641,7 +12641,7 @@ Type String Value - 4b315701-1972-9e23-cdd8-23cbc8cb0f42 + b92a0f64-7709-8811-40c5-16afd624a45f UISndSnapshot diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 3da934b148..826d296117 100755 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -368,6 +368,7 @@ void init_audio() gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTyping"))); gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowClose"))); gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowOpen"))); + gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndRestart"))); } audio_update_volume(true); -- cgit v1.3 From 476e317c8b4803926e1775ec206d013bd717ad98 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 23 Jan 2014 17:55:03 -0600 Subject: FITMESH-6, FITMESH-20 Fix for some objects disappearing when hardware skinning enabled and ALM disabled. --- .../app_settings/shaders/class1/avatar/objectSkinV.glsl | 9 +++------ indra/newview/lldrawpoolavatar.cpp | 12 +++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'indra/newview/app_settings') diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 972d10b325..8eb5a977bc 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -22,17 +22,14 @@ * $/LicenseInfo$ */ - - ATTRIBUTE vec4 weight4; -uniform mat3 matrixPalette[64]; -uniform vec3 translationPalette[64]; - +uniform mat3 matrixPalette[52]; +uniform vec3 translationPalette[52]; mat4 getObjectSkinnedTransform() { - int i; + int i; vec4 w = fract(weight4); vec4 index = floor(weight4); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index e77ed27fa2..4578d3d0cd 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -55,6 +55,7 @@ static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; static U32 sBufferUsage = GL_STREAM_DRAW_ARB; static U32 sShaderLevel = 0; +#define JOINT_COUNT 52 LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL; BOOL LLDrawPoolAvatar::sSkipOpaque = FALSE; @@ -1582,7 +1583,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLVector4a* norm = has_normal ? (LLVector4a*) normal.get() : NULL; //build matrix palette - LLMatrix4a mp[64]; + LLMatrix4a mp[JOINT_COUNT]; LLMatrix4* mat = (LLMatrix4*) mp; for (U32 j = 0; j < skin->mJointNames.size(); ++j) @@ -1642,6 +1643,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLVector4a& n = vol_face.mNormals[j]; bind_shape_matrix.rotate(n, t); final_mat.rotate(t, dst); + dst.normalize3fast(); norm[j] = dst; } } @@ -1708,9 +1710,9 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) { if (sShaderLevel > 0) { //upload matrix palette to shader - LLMatrix4 mat[64]; + LLMatrix4 mat[JOINT_COUNT]; - U32 count = llmin((U32) skin->mJointNames.size(), (U32) 64); + U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT); for (U32 i = 0; i < count; ++i) { @@ -1724,9 +1726,9 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) stop_glerror(); - F32 mp[64*9]; + F32 mp[JOINT_COUNT*9]; - F32 transp[64*3]; + F32 transp[JOINT_COUNT*3]; for (U32 i = 0; i < count; ++i) { -- cgit v1.3 From 7b1e1e4e35351936f2ab0305a91691f78f69519d Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 29 Jan 2014 18:25:03 -0500 Subject: FITMESH-6: correct bounds checking --- indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl | 2 +- indra/newview/lldrawpoolavatar.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'indra/newview/app_settings') diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 8eb5a977bc..57129c3bd1 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -34,7 +34,7 @@ mat4 getObjectSkinnedTransform() vec4 w = fract(weight4); vec4 index = floor(weight4); - index = min(index, vec4(63.0)); + index = min(index, vec4(51.0)); index = max(index, vec4( 0.0)); float scale = 1.0/(w.x+w.y+w.z+w.w); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 4578d3d0cd..906b7b2809 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -698,7 +698,7 @@ void LLDrawPoolAvatar::beginDeferredImpostor() specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP); normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL); sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); - sVertexProgram->bind(); + U1573sVertexProgram->bind(); sVertexProgram->setMinimumAlpha(0.01f); } @@ -1586,7 +1586,8 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLMatrix4a mp[JOINT_COUNT]; LLMatrix4* mat = (LLMatrix4*) mp; - for (U32 j = 0; j < skin->mJointNames.size(); ++j) + U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT); + for (U32 j = 0; j < count; ++j) { LLJoint* joint = avatar->getJoint(skin->mJointNames[j]); if (joint) -- cgit v1.3