llvosurfacepatch.h

Go to the documentation of this file.
00001 
00032 #ifndef LL_VOSURFACEPATCH_H
00033 #define LL_VOSURFACEPATCH_H
00034 
00035 #include "llviewerobject.h"
00036 #include "llstrider.h"
00037 
00038 class LLSurfacePatch;
00039 class LLDrawPool;
00040 class LLVector2;
00041 
00042 class LLVOSurfacePatch : public LLStaticViewerObject
00043 {
00044 public:
00045         static F32 sLODFactor;
00046 
00047         enum
00048         {
00049                 VERTEX_DATA_MASK =      (1 << LLVertexBuffer::TYPE_VERTEX) |
00050                                                         (1 << LLVertexBuffer::TYPE_NORMAL) |
00051                                                         (1 << LLVertexBuffer::TYPE_TEXCOORD) |
00052                                                         (1 << LLVertexBuffer::TYPE_TEXCOORD2) |
00053                                                         (1 << LLVertexBuffer::TYPE_COLOR) 
00054         };
00055 
00056         LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
00057 
00058         /*virtual*/ void markDead();
00059 
00060         // Initialize data that's only inited once per class.
00061         static void initClass();
00062 
00063         virtual U32 getPartitionType() const;
00064 
00065         /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
00066         /*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
00067         /*virtual*/ BOOL                updateLOD();
00068         /*virtual*/ void                updateFaceSize(S32 idx);
00069         void getGeometry(LLStrider<LLVector3> &verticesp,
00070                                                                 LLStrider<LLVector3> &normalsp,
00071                                                                 LLStrider<LLColor4U> &colorsp,
00072                                                                 LLStrider<LLVector2> &texCoords0p,
00073                                                                 LLStrider<LLVector2> &texCoords1p,
00074                                                                 LLStrider<U16> &indicesp);
00075 
00076         /*virtual*/ void updateTextures(LLAgent &agent);
00077         /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
00078 
00079         /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
00080         /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
00081 
00082         void setPatch(LLSurfacePatch *patchp);
00083         LLSurfacePatch  *getPatch() const               { return mPatchp; }
00084 
00085         void dirtyPatch();
00086         void dirtyGeom();
00087 
00088         BOOL                    mDirtiedPatch;
00089 protected:
00090         ~LLVOSurfacePatch();
00091 
00092         LLFacePool              *mPool;
00093         LLFacePool              *getPool();
00094         S32                             mBaseComp;
00095         LLSurfacePatch  *mPatchp;
00096         BOOL                    mDirtyTexture;
00097         BOOL                    mDirtyTerrain;
00098 
00099         S32                             mLastNorthStride;
00100         S32                             mLastEastStride;
00101         S32                             mLastStride;
00102         S32                             mLastLength;
00103 
00104         void getGeomSizesMain(const S32 stride, S32 &num_vertices, S32 &num_indices);
00105         void getGeomSizesNorth(const S32 stride, const S32 north_stride,
00106                                                                   S32 &num_vertices, S32 &num_indices);
00107         void getGeomSizesEast(const S32 stride, const S32 east_stride,
00108                                                                  S32 &num_vertices, S32 &num_indices);
00109 
00110         void updateMainGeometry(LLFace *facep,
00111                                            LLStrider<LLVector3> &verticesp,
00112                                            LLStrider<LLVector3> &normalsp,
00113                                            LLStrider<LLColor4U> &colorsp,
00114                                            LLStrider<LLVector2> &texCoords0p,
00115                                            LLStrider<LLVector2> &texCoords1p,
00116                                            LLStrider<U16> &indicesp,
00117                                            U32 &index_offset);
00118         void updateNorthGeometry(LLFace *facep,
00119                                            LLStrider<LLVector3> &verticesp,
00120                                            LLStrider<LLVector3> &normalsp,
00121                                            LLStrider<LLColor4U> &colorsp,
00122                                            LLStrider<LLVector2> &texCoords0p,
00123                                            LLStrider<LLVector2> &texCoords1p,
00124                                            LLStrider<U16> &indicesp,
00125                                            U32 &index_offset);
00126         void updateEastGeometry(LLFace *facep,
00127                                            LLStrider<LLVector3> &verticesp,
00128                                            LLStrider<LLVector3> &normalsp,
00129                                            LLStrider<LLColor4U> &colorsp,
00130                                            LLStrider<LLVector2> &texCoords0p,
00131                                            LLStrider<LLVector2> &texCoords1p,
00132                                            LLStrider<U16> &indicesp,
00133                                            U32 &index_offset);
00134 };
00135 
00136 #endif // LL_VOSURFACEPATCH_H

Generated on Fri May 16 08:34:23 2008 for SecondLife by  doxygen 1.5.5