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         enum
00046         {
00047                 VERTEX_DATA_MASK =      (1 << LLVertexBuffer::TYPE_VERTEX) |
00048                                                         (1 << LLVertexBuffer::TYPE_NORMAL) |
00049                                                         (1 << LLVertexBuffer::TYPE_TEXCOORD) |
00050                                                         (1 << LLVertexBuffer::TYPE_TEXCOORD2) |
00051                                                         (1 << LLVertexBuffer::TYPE_COLOR) 
00052         };
00053 
00054         LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
00055 
00056         /*virtual*/ void markDead();
00057 
00058         // Initialize data that's only inited once per class.
00059         static void initClass();
00060 
00061         virtual U32 getPartitionType() const;
00062 
00063         /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
00064         /*virtual*/ BOOL        updateGeometry(LLDrawable *drawable);
00065         /*virtual*/ BOOL                updateLOD();
00066         /*virtual*/ void                updateFaceSize(S32 idx);
00067         void getGeometry(LLStrider<LLVector3> &verticesp,
00068                                                                 LLStrider<LLVector3> &normalsp,
00069                                                                 LLStrider<LLColor4U> &colorsp,
00070                                                                 LLStrider<LLVector2> &texCoords0p,
00071                                                                 LLStrider<LLVector2> &texCoords1p,
00072                                                                 LLStrider<U32> &indicesp);
00073 
00074         /*virtual*/ void updateTextures(LLAgent &agent);
00075         /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
00076 
00077         /*virtual*/ void updateSpatialExtents(LLVector3& newMin, LLVector3& newMax);
00078         /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
00079 
00080         void setPatch(LLSurfacePatch *patchp);
00081         LLSurfacePatch  *getPatch() const               { return mPatchp; }
00082 
00083         void dirtyPatch();
00084         void dirtyGeom();
00085 
00086         BOOL                    mDirtiedPatch;
00087 protected:
00088         ~LLVOSurfacePatch();
00089 
00090         LLFacePool              *mPool;
00091         LLFacePool              *getPool();
00092         S32                             mBaseComp;
00093         LLSurfacePatch  *mPatchp;
00094         BOOL                    mDirtyTexture;
00095         BOOL                    mDirtyTerrain;
00096 
00097         S32                             mLastNorthStride;
00098         S32                             mLastEastStride;
00099         S32                             mLastStride;
00100         S32                             mLastLength;
00101 
00102         void calcColor(const LLVector3* vertex, const LLVector3* normal, LLColor4U* colorp);
00103         BOOL updateShadows(BOOL use_shadow_factor = FALSE);
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<U32> &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<U32> &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<U32> &indicesp,
00133                                            U32 &index_offset);
00134 };
00135 
00136 #endif // LL_VOSURFACEPATCH_H

Generated on Thu Jul 1 06:09:43 2010 for Second Life Viewer by  doxygen 1.4.7