summaryrefslogtreecommitdiff
path: root/indra/llprimitive
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llprimitive')
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/CMakeLists.txt4
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/legacy_object_types.h0
-rw-r--r--indra/llprimitive/lldaeloader.cpp72
-rw-r--r--indra/llprimitive/lldaeloader.h6
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmaterialtable.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmaterialtable.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmediaentry.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmediaentry.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmodel.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llmodel.h0
-rw-r--r--indra/llprimitive/llmodelloader.cpp4
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llprimitive.cpp4
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llprimitive.h2
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llprimlinkinfo.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llprimtexturelist.cpp11
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llprimtexturelist.h2
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltextureanim.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltextureanim.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltextureentry.cpp4
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltextureentry.h4
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltree_common.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltreeparams.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/lltreeparams.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llvolumemessage.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/llvolumemessage.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/material_codes.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/material_codes.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/object_flags.h0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/tests/llmediaentry_test.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/tests/llmessagesystem_stub.cpp0
-rw-r--r--[-rwxr-xr-x]indra/llprimitive/tests/llprimitive_test.cpp0
31 files changed, 83 insertions, 30 deletions
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index 75ce624a58..dd2e806dda 100755..100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -6,6 +6,7 @@ include(00-Common)
include(LLCommon)
include(LLMath)
include(LLMessage)
+include(LLCoreHttp)
include(LLXML)
include(LLPhysicsExtensions)
include(LLCharacter)
@@ -75,9 +76,12 @@ target_link_libraries(llprimitive
${LLCOMMON_LIBRARIES}
${LLMATH_LIBRARIES}
${LLMESSAGE_LIBRARIES}
+ ${LLCOREHTTP_LIBRARIES}
${LLXML_LIBRARIES}
${LLPHYSICSEXTENSIONS_LIBRARIES}
${LLCHARACTER_LIBRARIES}
+ ${BOOST_COROUTINE_LIBRARY}
+ ${BOOST_CONTEXT_LIBRARY}
)
diff --git a/indra/llprimitive/legacy_object_types.h b/indra/llprimitive/legacy_object_types.h
index 697ad584a5..697ad584a5 100755..100644
--- a/indra/llprimitive/legacy_object_types.h
+++ b/indra/llprimitive/legacy_object_types.h
diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp
index c1b74b1fd7..00bde8dbc3 100644
--- a/indra/llprimitive/lldaeloader.cpp
+++ b/indra/llprimitive/lldaeloader.cpp
@@ -62,6 +62,9 @@
#include "glh/glh_linear.h"
#include "llmatrix4a.h"
+#include <boost/regex.hpp>
+#include <boost/algorithm/string/replace.hpp>
+
std::string colladaVersion[VERSIONTYPE_COUNT+1] =
{
"1.4.0",
@@ -236,7 +239,10 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
// Don't share verts within the same tri, degenerate
//
- if ((indices.size() % 3) && (indices[indices.size()-1] != shared_index))
+ U32 indx_size = indices.size();
+ U32 verts_new_tri = indx_size % 3;
+ if ((verts_new_tri < 1 || indices[indx_size - 1] != shared_index)
+ && (verts_new_tri < 2 || indices[indx_size - 2] != shared_index))
{
found = true;
indices.push_back(shared_index);
@@ -810,7 +816,8 @@ LLDAELoader::LLDAELoader(
void* opaque_userdata,
JointTransformMap& jointMap,
JointSet& jointsFromNodes,
- U32 modelLimit)
+ U32 modelLimit,
+ bool preprocess)
: LLModelLoader(
filename,
lod,
@@ -821,7 +828,8 @@ LLDAELoader::LLDAELoader(
opaque_userdata,
jointMap,
jointsFromNodes),
-mGeneratedModelLimit(modelLimit)
+mGeneratedModelLimit(modelLimit),
+mPreprocessDAE(preprocess)
{
}
@@ -845,7 +853,16 @@ bool LLDAELoader::OpenFile(const std::string& filename)
{
//no suitable slm exists, load from the .dae file
DAE dae;
- domCOLLADA* dom = dae.open(filename);
+ domCOLLADA* dom;
+ if (mPreprocessDAE)
+ {
+ dom = dae.openFromMemory(filename, preprocessDAE(filename).c_str());
+ }
+ else
+ {
+ LL_INFOS() << "Skipping dae preprocessing" << LL_ENDL;
+ dom = dae.open(filename);
+ }
if (!dom)
{
@@ -873,7 +890,7 @@ bool LLDAELoader::OpenFile(const std::string& filename)
daeInt count = db->getElementCount(NULL, COLLADA_TYPE_MESH);
- daeDocument* doc = dae.getDoc(mFilename);
+ daeDocument* doc = dae.getDoc(filename);
if (!doc)
{
LL_WARNS() << "can't find internal doc" << LL_ENDL;
@@ -1051,6 +1068,41 @@ bool LLDAELoader::OpenFile(const std::string& filename)
return true;
}
+std::string LLDAELoader::preprocessDAE(std::string filename)
+{
+ // Open a DAE file for some preprocessing (like removing space characters in IDs), see MAINT-5678
+ std::ifstream inFile;
+ inFile.open(filename.c_str(), std::ios_base::in);
+ std::stringstream strStream;
+ strStream << inFile.rdbuf();
+ std::string buffer = strStream.str();
+
+ LL_INFOS() << "Preprocessing dae file to remove spaces from the names, ids, etc." << LL_ENDL;
+
+ try
+ {
+ boost::regex re("\"[\\w\\.@#$-]*(\\s[\\w\\.@#$-]*)+\"");
+ boost::sregex_iterator next(buffer.begin(), buffer.end(), re);
+ boost::sregex_iterator end;
+ while (next != end)
+ {
+ boost::smatch match = *next;
+ std::string s = match.str();
+ LL_INFOS() << s << " found" << LL_ENDL;
+ boost::replace_all(s, " ", "_");
+ LL_INFOS() << "Replacing with " << s << LL_ENDL;
+ boost::replace_all(buffer, match.str(), s);
+ next++;
+ }
+ }
+ catch (boost::regex_error &)
+ {
+ LL_INFOS() << "Regex error" << LL_ENDL;
+ }
+
+ return buffer;
+}
+
void LLDAELoader::processDomModel(LLModel* model, DAE* dae, daeElement* root, domMesh* mesh, domSkin* skin)
{
llassert(model && dae && mesh && skin);
@@ -1578,9 +1630,9 @@ void LLDAELoader::processChildJoints( domNode* pParentNode )
//-----------------------------------------------------------------------------
bool LLDAELoader::isNodeAJoint( domNode* pNode )
{
- if ( !pNode )
+ if ( !pNode || !pNode->getName() )
{
- LL_INFOS()<<"Created node is NULL"<<LL_ENDL;
+ LL_INFOS()<<"Created node is NULL or invalid"<<LL_ENDL;
return false;
}
@@ -2183,7 +2235,11 @@ std::string LLDAELoader::getElementLabel(daeElement *element)
// retrieve index to distinguish items inside same parent
size_t ind = 0;
parent->getChildren().find(element, ind);
- index_string = "_" + boost::lexical_cast<std::string>(ind);
+
+ if (ind > 0)
+ {
+ index_string = "_" + boost::lexical_cast<std::string>(ind);
+ }
// if parent has a name or ID, use it
std::string name = parent->getAttribute("name");
diff --git a/indra/llprimitive/lldaeloader.h b/indra/llprimitive/lldaeloader.h
index 7d91a6063b..27db5326d5 100644
--- a/indra/llprimitive/lldaeloader.h
+++ b/indra/llprimitive/lldaeloader.h
@@ -56,7 +56,8 @@ public:
void* opaque_userdata,
JointTransformMap& jointMap,
JointSet& jointsFromNodes,
- U32 modelLimit);
+ U32 modelLimit,
+ bool preprocess);
virtual ~LLDAELoader() ;
virtual bool OpenFile(const std::string& filename);
@@ -100,8 +101,11 @@ protected:
static size_t getSuffixPosition(std::string label);
static std::string getLodlessLabel(daeElement *element);
+ static std::string preprocessDAE(std::string filename);
+
private:
U32 mGeneratedModelLimit; // Attempt to limit amount of generated submodels
+ bool mPreprocessDAE;
};
#endif // LL_LLDAELLOADER_H
diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp
index 37c718b4c6..37c718b4c6 100755..100644
--- a/indra/llprimitive/llmaterialtable.cpp
+++ b/indra/llprimitive/llmaterialtable.cpp
diff --git a/indra/llprimitive/llmaterialtable.h b/indra/llprimitive/llmaterialtable.h
index a17e0103ff..a17e0103ff 100755..100644
--- a/indra/llprimitive/llmaterialtable.h
+++ b/indra/llprimitive/llmaterialtable.h
diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp
index 02aba2bd83..02aba2bd83 100755..100644
--- a/indra/llprimitive/llmediaentry.cpp
+++ b/indra/llprimitive/llmediaentry.cpp
diff --git a/indra/llprimitive/llmediaentry.h b/indra/llprimitive/llmediaentry.h
index 33855b3fb2..33855b3fb2 100755..100644
--- a/indra/llprimitive/llmediaentry.h
+++ b/indra/llprimitive/llmediaentry.h
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index e494c55250..e494c55250 100755..100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index ae602c09df..ae602c09df 100755..100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
diff --git a/indra/llprimitive/llmodelloader.cpp b/indra/llprimitive/llmodelloader.cpp
index 81d92d151b..f86eceb98d 100644
--- a/indra/llprimitive/llmodelloader.cpp
+++ b/indra/llprimitive/llmodelloader.cpp
@@ -116,6 +116,7 @@ LLModelLoader::LLModelLoader(
, LLThread("Model Loader")
, mFilename(filename)
, mLod(lod)
+, mTrySLM(false)
, mFirstTransform(TRUE)
, mNumOfFetchingTextures(0)
, mLoadCallback(load_cb)
@@ -123,6 +124,9 @@ LLModelLoader::LLModelLoader(
, mTextureLoadFunc(texture_load_func)
, mStateCallback(state_cb)
, mOpaqueData(opaque_userdata)
+, mRigParityWithScene(false)
+, mRigValidJointUpload(false)
+, mLegacyRigValid(false)
, mNoNormalize(false)
, mNoOptimize(false)
, mCacheOnlyHitIfRigged(false)
diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp
index 9eff74f1e8..186716609c 100755..100644
--- a/indra/llprimitive/llprimitive.cpp
+++ b/indra/llprimitive/llprimitive.cpp
@@ -317,9 +317,9 @@ S32 LLPrimitive::setTEMaterialID(const U8 index, const LLMaterialID& pMaterialID
return mTextureList.setMaterialID(index, pMaterialID);
}
-S32 LLPrimitive::setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams, bool isInitFromServer)
+S32 LLPrimitive::setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams)
{
- return mTextureList.setMaterialParams(index, pMaterialParams, isInitFromServer);
+ return mTextureList.setMaterialParams(index, pMaterialParams);
}
LLMaterialPtr LLPrimitive::getTEMaterialParams(const U8 index)
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index 54870fbb10..19d9d52817 100755..100644
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -384,7 +384,7 @@ public:
virtual S32 setTEMediaFlags(const U8 te, const U8 flags);
virtual S32 setTEGlow(const U8 te, const F32 glow);
virtual S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
- virtual S32 setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams, bool isInitFromServer);
+ virtual S32 setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams);
virtual BOOL setMaterial(const U8 material); // returns TRUE if material changed
virtual void setTESelected(const U8 te, bool sel);
diff --git a/indra/llprimitive/llprimlinkinfo.h b/indra/llprimitive/llprimlinkinfo.h
index bee25975f1..bee25975f1 100755..100644
--- a/indra/llprimitive/llprimlinkinfo.h
+++ b/indra/llprimitive/llprimlinkinfo.h
diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp
index 6aae2f97c6..f4f08248b8 100755..100644
--- a/indra/llprimitive/llprimtexturelist.cpp
+++ b/indra/llprimitive/llprimtexturelist.cpp
@@ -368,18 +368,11 @@ S32 LLPrimTextureList::setMaterialID(const U8 index, const LLMaterialID& pMateri
return TEM_CHANGE_NONE;
}
-S32 LLPrimTextureList::setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams, bool isInitFromServer)
+S32 LLPrimTextureList::setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams)
{
if (index < mEntryList.size())
{
- if (!isInitFromServer && mEntryList[index]->isMatParamsInitFromServer())
- {
- return TEM_CHANGE_NONE;
- }
- else
- {
- return mEntryList[index]->setMaterialParams(pMaterialParams);
- }
+ return mEntryList[index]->setMaterialParams(pMaterialParams);
}
return TEM_CHANGE_NONE;
}
diff --git a/indra/llprimitive/llprimtexturelist.h b/indra/llprimitive/llprimtexturelist.h
index 63e6372405..49c636e40f 100755..100644
--- a/indra/llprimitive/llprimtexturelist.h
+++ b/indra/llprimitive/llprimtexturelist.h
@@ -105,7 +105,7 @@ public:
S32 setMediaFlags(const U8 index, const U8 media_flags);
S32 setGlow(const U8 index, const F32 glow);
S32 setMaterialID(const U8 index, const LLMaterialID& pMaterialID);
- S32 setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams, bool isInitFromServer);
+ S32 setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams);
LLMaterialPtr getMaterialParams(const U8 index);
diff --git a/indra/llprimitive/lltextureanim.cpp b/indra/llprimitive/lltextureanim.cpp
index 031a315d62..031a315d62 100755..100644
--- a/indra/llprimitive/lltextureanim.cpp
+++ b/indra/llprimitive/lltextureanim.cpp
diff --git a/indra/llprimitive/lltextureanim.h b/indra/llprimitive/lltextureanim.h
index f0d9f9df5c..f0d9f9df5c 100755..100644
--- a/indra/llprimitive/lltextureanim.h
+++ b/indra/llprimitive/lltextureanim.h
diff --git a/indra/llprimitive/lltextureentry.cpp b/indra/llprimitive/lltextureentry.cpp
index 6020031099..284dfc15f4 100755..100644
--- a/indra/llprimitive/lltextureentry.cpp
+++ b/indra/llprimitive/lltextureentry.cpp
@@ -63,7 +63,6 @@ LLTextureEntry::LLTextureEntry()
: mMediaEntry(NULL)
, mSelected(false)
, mMaterialUpdatePending(false)
- , mInitMatParamsFromServer(false)
{
init(LLUUID::null,1.f,1.f,0.f,0.f,0.f,DEFAULT_BUMP_CODE);
}
@@ -72,7 +71,6 @@ LLTextureEntry::LLTextureEntry(const LLUUID& tex_id)
: mMediaEntry(NULL)
, mSelected(false)
, mMaterialUpdatePending(false)
- , mInitMatParamsFromServer(false)
{
init(tex_id,1.f,1.f,0.f,0.f,0.f,DEFAULT_BUMP_CODE);
}
@@ -81,7 +79,6 @@ LLTextureEntry::LLTextureEntry(const LLTextureEntry &rhs)
: mMediaEntry(NULL)
, mSelected(false)
, mMaterialUpdatePending(false)
- , mInitMatParamsFromServer(false)
{
mID = rhs.mID;
mScaleS = rhs.mScaleS;
@@ -565,7 +562,6 @@ S32 LLTextureEntry::setMaterialParams(const LLMaterialPtr pMaterialParams)
mMaterialUpdatePending = true;
}
mMaterial = pMaterialParams;
- this->mInitMatParamsFromServer = TRUE;
return TEM_CHANGE_TEXTURE;
}
diff --git a/indra/llprimitive/lltextureentry.h b/indra/llprimitive/lltextureentry.h
index 81e2e8a5a2..a40c3988f2 100755..100644
--- a/indra/llprimitive/lltextureentry.h
+++ b/indra/llprimitive/lltextureentry.h
@@ -160,8 +160,6 @@ public:
const LLMaterialID& getMaterialID() const { return mMaterialID; };
const LLMaterialPtr getMaterialParams() const { return mMaterial; };
- bool isMatParamsInitFromServer() const { return mInitMatParamsFromServer; };
-
// *NOTE: it is possible for hasMedia() to return true, but getMediaData() to return NULL.
// CONVERSELY, it is also possible for hasMedia() to return false, but getMediaData()
// to NOT return NULL.
@@ -219,8 +217,6 @@ protected:
bool mMaterialUpdatePending;
LLMaterialID mMaterialID;
LLMaterialPtr mMaterial;
- bool mInitMatParamsFromServer; // Flag to identification when material paramas initialized from
-
// Note the media data is not sent via the same message structure as the rest of the TE
LLMediaEntry* mMediaEntry; // The media data for the face
diff --git a/indra/llprimitive/lltree_common.h b/indra/llprimitive/lltree_common.h
index df00ff1591..df00ff1591 100755..100644
--- a/indra/llprimitive/lltree_common.h
+++ b/indra/llprimitive/lltree_common.h
diff --git a/indra/llprimitive/lltreeparams.cpp b/indra/llprimitive/lltreeparams.cpp
index 19a6db20ae..19a6db20ae 100755..100644
--- a/indra/llprimitive/lltreeparams.cpp
+++ b/indra/llprimitive/lltreeparams.cpp
diff --git a/indra/llprimitive/lltreeparams.h b/indra/llprimitive/lltreeparams.h
index 6e2b47c0e9..6e2b47c0e9 100755..100644
--- a/indra/llprimitive/lltreeparams.h
+++ b/indra/llprimitive/lltreeparams.h
diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp
index 8d47a7147f..8d47a7147f 100755..100644
--- a/indra/llprimitive/llvolumemessage.cpp
+++ b/indra/llprimitive/llvolumemessage.cpp
diff --git a/indra/llprimitive/llvolumemessage.h b/indra/llprimitive/llvolumemessage.h
index f59ee79c60..f59ee79c60 100755..100644
--- a/indra/llprimitive/llvolumemessage.h
+++ b/indra/llprimitive/llvolumemessage.h
diff --git a/indra/llprimitive/material_codes.cpp b/indra/llprimitive/material_codes.cpp
index 2ea47eec36..2ea47eec36 100755..100644
--- a/indra/llprimitive/material_codes.cpp
+++ b/indra/llprimitive/material_codes.cpp
diff --git a/indra/llprimitive/material_codes.h b/indra/llprimitive/material_codes.h
index 84a6f2edd2..84a6f2edd2 100755..100644
--- a/indra/llprimitive/material_codes.h
+++ b/indra/llprimitive/material_codes.h
diff --git a/indra/llprimitive/object_flags.h b/indra/llprimitive/object_flags.h
index 88eaeb034a..88eaeb034a 100755..100644
--- a/indra/llprimitive/object_flags.h
+++ b/indra/llprimitive/object_flags.h
diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp
index b072ce3964..b072ce3964 100755..100644
--- a/indra/llprimitive/tests/llmediaentry_test.cpp
+++ b/indra/llprimitive/tests/llmediaentry_test.cpp
diff --git a/indra/llprimitive/tests/llmessagesystem_stub.cpp b/indra/llprimitive/tests/llmessagesystem_stub.cpp
index 04e70945c4..04e70945c4 100755..100644
--- a/indra/llprimitive/tests/llmessagesystem_stub.cpp
+++ b/indra/llprimitive/tests/llmessagesystem_stub.cpp
diff --git a/indra/llprimitive/tests/llprimitive_test.cpp b/indra/llprimitive/tests/llprimitive_test.cpp
index 0d60c7cd15..0d60c7cd15 100755..100644
--- a/indra/llprimitive/tests/llprimitive_test.cpp
+++ b/indra/llprimitive/tests/llprimitive_test.cpp