00001
00032 #ifndef LL_LLVOPARTGROUP_H
00033 #define LL_LLVOPARTGROUP_H
00034
00035 #include "llviewerobject.h"
00036 #include "v3math.h"
00037 #include "v3color.h"
00038 #include "llframetimer.h"
00039
00040 class LLViewerPartGroup;
00041
00042 class LLVOPartGroup : public LLAlphaObject
00043 {
00044 public:
00045 enum
00046 {
00047 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) |
00048 (1 << LLVertexBuffer::TYPE_NORMAL) |
00049 (1 << LLVertexBuffer::TYPE_TEXCOORD) |
00050 (1 << LLVertexBuffer::TYPE_COLOR)
00051 };
00052
00053 LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
00054
00055 BOOL isActive() const;
00056 BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
00057 BOOL isParticle();
00058
00059 virtual F32 getBinRadius();
00060 virtual void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
00061 virtual U32 getPartitionType() const;
00062
00063 void setPixelAreaAndAngle(LLAgent &agent);
00064 void updateTextures(LLAgent &agent);
00065
00066 LLDrawable* createDrawable(LLPipeline *pipeline);
00067 BOOL updateGeometry(LLDrawable *drawable);
00068 void getGeometry(S32 idx,
00069 LLStrider<LLVector3>& verticesp,
00070 LLStrider<LLVector3>& normalsp,
00071 LLStrider<LLVector2>& texcoordsp,
00072 LLStrider<LLColor4U>& colorsp,
00073 LLStrider<U32>& indicesp);
00074
00075 void updateFaceSize(S32 idx) { }
00076 F32 getPartSize(S32 idx);
00077 void setViewerPartGroup(LLViewerPartGroup *part_groupp) { mViewerPartGroupp = part_groupp; }
00078 LLViewerPartGroup* getViewerPartGroup() { return mViewerPartGroupp; }
00079
00080 protected:
00081 ~LLVOPartGroup();
00082
00083 LLViewerPartGroup *mViewerPartGroupp;
00084 LLVector3 mExtents[2];
00085 LLColor4 mDebugColor;
00086 };
00087
00088 #endif // LL_LLVOPARTGROUP_H