00001 00032 #ifndef LL_LLDRAWPOOLAVATAR_H 00033 #define LL_LLDRAWPOOLAVATAR_H 00034 00035 #include "lldrawpool.h" 00036 00037 class LLVOAvatar; 00038 00039 class LLDrawPoolAvatar : public LLFacePool 00040 { 00041 protected: 00042 S32 mNumFaces; 00043 public: 00044 enum 00045 { 00046 SHADER_LEVEL_BUMP = 2, 00047 SHADER_LEVEL_CLOTH = 3 00048 }; 00049 00050 enum 00051 { 00052 VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX | 00053 LLVertexBuffer::MAP_NORMAL | 00054 LLVertexBuffer::MAP_TEXCOORD | 00055 LLVertexBuffer::MAP_WEIGHT | 00056 LLVertexBuffer::MAP_CLOTHWEIGHT | 00057 LLVertexBuffer::MAP_BINORMAL 00058 00059 }; 00060 00061 virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; } 00062 00063 virtual S32 getVertexShaderLevel() const; 00064 00065 LLDrawPoolAvatar(); 00066 00067 static LLMatrix4& getModelView(); 00068 00069 /*virtual*/ LLDrawPool *instancePool(); 00070 00071 /*virtual*/ S32 getNumPasses(); 00072 /*virtual*/ void beginRenderPass(S32 pass); 00073 /*virtual*/ void endRenderPass(S32 pass); 00074 /*virtual*/ void prerender(); 00075 /*virtual*/ void render(S32 pass = 0); 00076 /*virtual*/ void renderForSelect(); 00077 00078 void beginRigid(); 00079 void beginFootShadow(); 00080 void beginSkinned(); 00081 00082 void endRigid(); 00083 void endFootShadow(); 00084 void endSkinned(); 00085 00086 /*virtual*/ LLViewerImage *getDebugTexture(); 00087 /*virtual*/ LLColor3 getDebugColor() const; // For AGP debug display 00088 00089 virtual S32 getMaterialAttribIndex() { return 0; } 00090 00091 void renderAvatars(LLVOAvatar *single_avatar, S32 pass = -1); // renders only one avatar if single_avatar is not null. 00092 }; 00093 00094 00095 00096 extern S32 AVATAR_OFFSET_POS; 00097 extern S32 AVATAR_OFFSET_NORMAL; 00098 extern S32 AVATAR_OFFSET_TEX0; 00099 extern S32 AVATAR_OFFSET_TEX1; 00100 extern S32 AVATAR_VERTEX_BYTES; 00101 const S32 AVATAR_BUFFER_ELEMENTS = 8192; // Needs to be enough to store all avatar vertices. 00102 00103 extern BOOL gAvatarEmbossBumpMap; 00104 #endif // LL_LLDRAWPOOLAVATAR_H