summaryrefslogtreecommitdiff
path: root/indra/llmath/llrigginginfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmath/llrigginginfo.h')
-rw-r--r--indra/llmath/llrigginginfo.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/indra/llmath/llrigginginfo.h b/indra/llmath/llrigginginfo.h
new file mode 100644
index 0000000000..b3d6bc2d19
--- /dev/null
+++ b/indra/llmath/llrigginginfo.h
@@ -0,0 +1,100 @@
+/**
+* @file llrigginginfo.h
+* @brief Functions for tracking rigged box extents
+*
+* $LicenseInfo:firstyear=2018&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2018, 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$
+*/
+
+// Stores information related to associated rigged mesh vertices
+// This lives in llmath because llvolume lives in llmath.
+
+#ifndef LL_LLRIGGINGINFO_H
+#define LL_LLRIGGINGINFO_H
+
+#include "llvector4a.h"
+
+// Extents are in joint space
+// isRiggedTo is based on the state of all currently associated rigged meshes
+LL_ALIGN_PREFIX(16)
+class LLJointRiggingInfo
+{
+public:
+ LLJointRiggingInfo();
+ bool isRiggedTo() const;
+ void setIsRiggedTo(bool val);
+ LLVector4a *getRiggedExtents();
+ const LLVector4a *getRiggedExtents() const;
+ void merge(const LLJointRiggingInfo& other);
+
+ void* operator new(size_t size)
+ {
+ return ll_aligned_malloc_16(size);
+ }
+
+ void operator delete(void* ptr)
+ {
+ ll_aligned_free_16(ptr);
+ }
+
+ void* operator new[](size_t size)
+ {
+ return ll_aligned_malloc_16(size);
+ }
+
+ void operator delete[](void* ptr)
+ {
+ ll_aligned_free_16(ptr);
+ }
+
+
+private:
+ LL_ALIGN_16(LLVector4a mRiggedExtents[2]);
+ bool mIsRiggedTo;
+} LL_ALIGN_POSTFIX(16);
+
+// For storing all the rigging info associated with a given avatar or
+// object, keyed by joint_num.
+// Using direct memory management instead of std::vector<> to avoid alignment issues.
+class LLJointRiggingInfoTab
+{
+public:
+ LLJointRiggingInfoTab();
+ ~LLJointRiggingInfoTab();
+ void resize(S32 size);
+ void clear();
+ S32 size() const { return mSize; }
+ void merge(const LLJointRiggingInfoTab& src);
+ LLJointRiggingInfo& operator[](S32 i) { return mRigInfoPtr[i]; }
+ const LLJointRiggingInfo& operator[](S32 i) const { return mRigInfoPtr[i]; };
+ bool needsUpdate() { return mNeedsUpdate; }
+ void setNeedsUpdate(bool val) { mNeedsUpdate = val; }
+private:
+ // Not implemented
+ LLJointRiggingInfoTab& operator=(const LLJointRiggingInfoTab& src);
+ LLJointRiggingInfoTab(const LLJointRiggingInfoTab& src);
+
+ LLJointRiggingInfo *mRigInfoPtr;
+ S32 mSize;
+ bool mNeedsUpdate;
+};
+
+#endif