summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerjoint.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewerjoint.h')
-rw-r--r--indra/newview/llviewerjoint.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h
new file mode 100644
index 0000000000..e38c1c8e7d
--- /dev/null
+++ b/indra/newview/llviewerjoint.h
@@ -0,0 +1,137 @@
+/**
+ * @file llviewerjoint.h
+ * @brief Implementation of LLViewerJoint class
+ *
+ * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLVIEWERJOINT_H
+#define LL_LLVIEWERJOINT_H
+
+//-----------------------------------------------------------------------------
+// Header Files
+//-----------------------------------------------------------------------------
+#include "lljoint.h"
+#include "llapr.h"
+
+class LLFace;
+
+//-----------------------------------------------------------------------------
+// class LLViewerJoint
+//-----------------------------------------------------------------------------
+class LLViewerJoint :
+ public LLJoint
+{
+public:
+ LLViewerJoint();
+ LLViewerJoint(const std::string &name, LLJoint *parent = NULL);
+ virtual ~LLViewerJoint();
+
+ // Gets the validity of this joint
+ BOOL getValid() { return mValid; }
+
+ // Sets the validity of this joint
+ virtual void setValid( BOOL valid, BOOL recursive=FALSE );
+
+ // Primarily for debugging and character setup
+ // Derived classes may add text/graphic output.
+ // Draw skeleton graphic for debugging and character setup
+ virtual void renderSkeleton(BOOL recursive=TRUE);
+
+ // Render character hierarchy.
+ // Traverses the entire joint hierarchy, setting up
+ // transforms and calling the drawShape().
+ // Derived classes may add text/graphic output.
+ virtual U32 render( F32 pixelArea ); // Returns triangle count
+
+ // Draws a bone graphic to the parent joint.
+ // Derived classes may add text/graphic output.
+ // Called by renderSkeleton().
+ virtual void drawBone();
+
+ // Returns true if this object is transparent.
+ // This is used to determine in which order to draw objects.
+ virtual BOOL isTransparent();
+
+ // Returns true if this object should inherit scale modifiers from its immediate parent
+ virtual BOOL inheritScale() { return FALSE; }
+
+ // Draws the shape attached to a joint.
+ // Called by render().
+ virtual U32 drawShape( F32 pixelArea );
+ virtual void drawNormals() {}
+
+ enum Components
+ {
+ SC_BONE = 1,
+ SC_JOINT = 2,
+ SC_AXES = 4
+ };
+
+ // Selects which skeleton components to draw
+ void setSkeletonComponents( U32 comp, BOOL recursive = TRUE );
+
+ // Returns which skeleton components are enables for drawing
+ U32 getSkeletonComponents() { return mComponents; }
+
+ // Sets the level of detail for this node as a minimum
+ // pixel area threshold. If the current pixel area for this
+ // object is less than the specified threshold, the node is
+ // not traversed. In additin, if a value is specified (not
+ // default of 0.0), and the pixel area is larger than the
+ // specified miniumn, the node is rendered, but no other siblings
+ // of this node under the same parent will be.
+ F32 getLOD() { return mMinPixelArea; }
+ void setLOD( F32 pixelArea ) { mMinPixelArea = pixelArea; }
+
+ // Sets the OpenGL selection stack name that is pushed and popped
+ // with this joint state. The default value indicates that no name
+ // should be pushed/popped.
+ enum PickName
+ {
+ PN_DEFAULT = -1,
+ PN_0 = 0,
+ PN_1 = 1,
+ PN_2 = 2,
+ PN_3 = 3,
+ PN_4 = 4,
+ PN_5 = 5
+ };
+ void setPickName(PickName name) { mPickName = name; }
+ PickName getPickName() { return mPickName; }
+
+ virtual void updateFaceSizes(U32 &num_vertices, F32 pixel_area);
+ virtual void updateFaceData(LLFace *face, F32 pixel_area, BOOL damp_wind = FALSE);
+ virtual BOOL updateLOD(F32 pixel_area, BOOL activate);
+ virtual void dump();
+
+ void setVisible( BOOL visible, BOOL recursive );
+ virtual void writeCAL3D(apr_file_t* fp);
+
+public:
+ static BOOL sDisableLOD;
+
+protected:
+ BOOL mValid;
+ U32 mComponents;
+ F32 mMinPixelArea;
+ PickName mPickName;
+ BOOL mVisible;
+};
+
+class LLViewerJointCollisionVolume : public LLViewerJoint
+{
+public:
+ LLViewerJointCollisionVolume();
+ LLViewerJointCollisionVolume(const std::string &name, LLJoint *parent = NULL);
+ virtual ~LLViewerJointCollisionVolume() {};
+
+ virtual BOOL inheritScale() { return TRUE; }
+
+ void render();
+ LLVector3 getVolumePos(LLVector3 &offset);
+};
+
+#endif // LL_LLVIEWERJOINT_H
+