summaryrefslogtreecommitdiff
path: root/indra/newview/llvotree.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llvotree.h')
-rw-r--r--indra/newview/llvotree.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
new file mode 100644
index 0000000000..f962516803
--- /dev/null
+++ b/indra/newview/llvotree.h
@@ -0,0 +1,118 @@
+/**
+ * @file llvotree.h
+ * @brief LLVOTree class header file
+ *
+ * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#ifndef LL_LLVOTREE_H
+#define LL_LLVOTREE_H
+
+#include "llviewerobject.h"
+#include "lldarray.h"
+#include "xform.h"
+
+class LLFace;
+class LLDrawPool;
+
+
+class LLVOTree : public LLViewerObject
+{
+public:
+ LLVOTree(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
+ virtual ~LLVOTree();
+
+ // Initialize data that's only inited once per class.
+ static void initClass();
+ static void cleanupClass();
+
+ /*virtual*/ U32 processUpdateMessage(LLMessageSystem *mesgsys,
+ void **user_data,
+ U32 block_num, const EObjectUpdateType update_type,
+ LLDataPacker *dp);
+ /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
+
+ // Graphical stuff for objects - maybe broken out into render class later?
+ /*virtual*/ void render(LLAgent &agent);
+ /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);
+ /*virtual*/ void updateTextures(LLAgent &agent);
+
+ /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
+ /*virtual*/ BOOL updateGeometry(LLDrawable *drawable);
+
+ void updateRadius();
+
+ void drawBranchPipeline(LLDrawPool *draw_pool, S32 trunk_LOD, S32 stop_level, U16 depth, U16 trunk_depth, F32 scale, F32 twist, F32 droop, F32 branches, F32 alpha);
+
+ void drawBranch(S32 stop_level, U16 depth, U16 trunk_depth, F32 scale, F32 twist, F32 droop, F32 branches, F32 alpha, BOOL draw_leaves);
+
+ static S32 sMaxTreeSpecies;
+
+ struct TreeSpeciesData
+ {
+ LLUUID mTextureID;
+
+ F32 mBranchLength; // Scale (length) of tree branches
+ F32 mDroop; // Droop from vertical (degrees) at each branch recursion
+ F32 mTwist; // Twist
+ F32 mBranches; // Number of branches emitted at each recursion level
+ U8 mDepth; // Number of recursions to tips of branches
+ F32 mScaleStep; // Multiplier for scale at each recursion level
+ U8 mTrunkDepth;
+
+ F32 mLeafScale; // Scales leaf texture when rendering
+ F32 mTrunkLength; // Scales branch diameters when rendering
+ F32 mBillboardScale; // Scales the billboard representation
+ F32 mBillboardRatio; // Height to width aspect ratio
+ F32 mTrunkAspect;
+ F32 mBranchAspect;
+ F32 mRandomLeafRotate;
+ F32 mNoiseScale; // Scaling of noise function in perlin space (norm = 1.0)
+ F32 mNoiseMag; // amount of perlin noise to deform by (0 = none)
+ F32 mTaper; // amount of perlin noise to deform by (0 = none)
+ F32 mRepeatTrunkZ; // Times to repeat the trunk texture vertically along trunk
+ };
+
+ static F32 sTreeFactor; // Tree level of detail factor
+
+ friend class LLDrawPoolTree;
+protected:
+ LLVector3 mTrunkBend; // Accumulated wind (used for blowing trees)
+ LLVector3 mTrunkVel; //
+ LLVector3 mWind;
+
+ LLPointer<LLViewerImage> mTreeImagep; // Pointer to proper tree image
+
+ U8 mSpecies; // Species of tree
+ F32 mBranchLength; // Scale (length) of tree branches
+ F32 mTrunkLength; // Trunk length (first recursion)
+ F32 mDroop; // Droop from vertical (degrees) at each branch recursion
+ F32 mTwist; // Twist
+ F32 mBranches; // Number of branches emitted at each recursion level
+ U8 mDepth; // Number of recursions to tips of branches
+ F32 mScaleStep; // Multiplier for scale at each recursion level
+ U8 mTrunkDepth;
+
+ F32 mLeafScale; // Scales leaf texture when rendering
+
+ F32 mBillboardScale; // How big to draw the billboard?
+ F32 mBillboardRatio; // Height to width ratio of billboard
+ F32 mTrunkAspect; // Ratio between width/length of trunk
+ F32 mBranchAspect; // Ratio between width/length of branch
+ F32 mRandomLeafRotate; // How much to randomly rotate leaves about arbitrary axis
+
+ U32 mFrameCount;
+
+ typedef std::map<U32, TreeSpeciesData*> SpeciesMap;
+ static SpeciesMap sSpeciesTable;
+
+ static S32 sLODIndexOffset[4];
+ static S32 sLODIndexCount[4];
+ static S32 sLODVertexOffset[4];
+ static S32 sLODVertexCount[4];
+ static S32 sLODSlices[4];
+ static F32 sLODAngles[4];
+};
+
+#endif