lldrawpool.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lldrawpool.h
  3.  * @brief LLDrawPool class definition
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLDRAWPOOL_H
  33. #define LL_LLDRAWPOOL_H
  34. #include "v4coloru.h"
  35. #include "v2math.h"
  36. #include "v3math.h"
  37. #include "llvertexbuffer.h"
  38. class LLFace;
  39. class LLViewerTexture;
  40. class LLViewerFetchedTexture;
  41. class LLSpatialGroup;
  42. class LLDrawInfo;
  43. class LLDrawPool
  44. {
  45. public:
  46. static S32 sNumDrawPools;
  47. enum
  48. {
  49. // Correspond to LLPipeline render type
  50. POOL_SIMPLE = 1,
  51. POOL_TERRAIN,
  52. POOL_TREE,
  53. POOL_SKY,
  54. POOL_WL_SKY,
  55. POOL_GROUND,
  56. POOL_GRASS,
  57. POOL_FULLBRIGHT,
  58. POOL_BUMP,
  59. POOL_INVISIBLE, // see below *
  60. POOL_AVATAR,
  61. POOL_WATER,
  62. POOL_GLOW,
  63. POOL_ALPHA,
  64. NUM_POOL_TYPES,
  65. // * invisiprims work by rendering to the depth buffer but not the color buffer, occluding anything rendered after them
  66. // - and the LLDrawPool types enum controls what order things are rendered in
  67. // - so, it has absolute control over what invisprims block
  68. // ...invisiprims being rendered in pool_invisible
  69. // ...shiny/bump mapped objects in rendered in POOL_BUMP
  70. };
  71. LLDrawPool(const U32 type);
  72. virtual ~LLDrawPool();
  73. virtual BOOL isDead() = 0;
  74. S32 getId() const { return mId; }
  75. U32 getType() const { return mType; }
  76. virtual LLViewerTexture *getDebugTexture();
  77. virtual void beginRenderPass( S32 pass );
  78. virtual void endRenderPass( S32 pass );
  79. virtual S32  getNumPasses();
  80. virtual void beginDeferredPass(S32 pass);
  81. virtual void endDeferredPass(S32 pass);
  82. virtual S32 getNumDeferredPasses();
  83. virtual void renderDeferred(S32 pass = 0);
  84. virtual void beginPostDeferredPass(S32 pass);
  85. virtual void endPostDeferredPass(S32 pass);
  86. virtual S32 getNumPostDeferredPasses();
  87. virtual void renderPostDeferred(S32 pass = 0);
  88. virtual void beginShadowPass(S32 pass);
  89. virtual void endShadowPass(S32 pass);
  90. virtual S32 getNumShadowPasses();
  91. virtual void renderShadow(S32 pass = 0);
  92. virtual void render(S32 pass = 0) = 0;
  93. virtual void prerender() = 0;
  94. virtual U32 getVertexDataMask() = 0;
  95. virtual BOOL verify() const { return TRUE; } // Verify that all data in the draw pool is correct!
  96. virtual S32 getVertexShaderLevel() const { return mVertexShaderLevel; }
  97. static LLDrawPool* createPool(const U32 type, LLViewerTexture *tex0 = NULL);
  98. virtual LLDrawPool *instancePool() = 0; // Create an empty new instance of the pool.
  99. virtual LLViewerTexture* getTexture() = 0;
  100. virtual BOOL isFacePool() { return FALSE; }
  101. virtual void resetDrawOrders() = 0;
  102. protected:
  103. S32 mVertexShaderLevel;
  104. S32 mId;
  105. U32 mType; // Type of draw pool
  106. };
  107. class LLRenderPass : public LLDrawPool
  108. {
  109. public:
  110. enum
  111. {
  112. PASS_SIMPLE = NUM_POOL_TYPES,
  113. PASS_GRASS,
  114. PASS_FULLBRIGHT,
  115. PASS_INVISIBLE,
  116. PASS_INVISI_SHINY,
  117. PASS_FULLBRIGHT_SHINY,
  118. PASS_SHINY,
  119. PASS_BUMP,
  120. PASS_GLOW,
  121. PASS_ALPHA,
  122. PASS_ALPHA_MASK,
  123. PASS_FULLBRIGHT_ALPHA_MASK,
  124. PASS_ALPHA_SHADOW,
  125. NUM_RENDER_TYPES,
  126. };
  127. LLRenderPass(const U32 type);
  128. virtual ~LLRenderPass();
  129. /*virtual*/ LLDrawPool* instancePool();
  130. /*virtual*/ LLViewerTexture* getDebugTexture() { return NULL; }
  131. LLViewerTexture* getTexture() { return NULL; }
  132. BOOL isDead() { return FALSE; }
  133. void resetDrawOrders() { }
  134. static void applyModelMatrix(LLDrawInfo& params);
  135. virtual void pushBatches(U32 type, U32 mask, BOOL texture = TRUE);
  136. virtual void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture);
  137. virtual void renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture = TRUE);
  138. virtual void renderGroups(U32 type, U32 mask, BOOL texture = TRUE);
  139. virtual void renderTexture(U32 type, U32 mask);
  140. };
  141. class LLFacePool : public LLDrawPool
  142. {
  143. public:
  144. typedef std::vector<LLFace*> face_array_t;
  145. enum
  146. {
  147. SHADER_LEVEL_SCATTERING = 2
  148. };
  149. public:
  150. LLFacePool(const U32 type);
  151. virtual ~LLFacePool();
  152. virtual void renderForSelect() = 0;
  153. BOOL isDead() { return mReferences.empty(); }
  154. virtual LLViewerTexture *getTexture();
  155. virtual void dirtyTextures(const std::set<LLViewerFetchedTexture*>& textures);
  156. virtual void enqueue(LLFace *face);
  157. virtual BOOL addFace(LLFace *face);
  158. virtual BOOL removeFace(LLFace *face);
  159. virtual BOOL verify() const; // Verify that all data in the draw pool is correct!
  160. virtual void resetDrawOrders();
  161. void resetAll();
  162. BOOL moveFace(LLFace *face, LLDrawPool *poolp, BOOL copy_data = FALSE);
  163. void destroy();
  164. void buildEdges();
  165. static S32 drawLoop(face_array_t& face_list);
  166. static S32 drawLoopSetTex(face_array_t& face_list, S32 stage);
  167. void drawLoop();
  168. void addFaceReference(LLFace *facep);
  169. void removeFaceReference(LLFace *facep);
  170. void printDebugInfo() const;
  171. BOOL isFacePool() { return TRUE; }
  172. friend class LLFace;
  173. friend class LLPipeline;
  174. public:
  175. face_array_t mDrawFace;
  176. face_array_t mMoveFace;
  177. face_array_t mReferences;
  178. public:
  179. class LLOverrideFaceColor
  180. {
  181. public:
  182. LLOverrideFaceColor(LLDrawPool* pool)
  183. : mOverride(sOverrideFaceColor), mPool(pool)
  184. {
  185. sOverrideFaceColor = TRUE;
  186. }
  187. LLOverrideFaceColor(LLDrawPool* pool, const LLColor4& color)
  188. : mOverride(sOverrideFaceColor), mPool(pool)
  189. {
  190. sOverrideFaceColor = TRUE;
  191. setColor(color);
  192. }
  193. LLOverrideFaceColor(LLDrawPool* pool, const LLColor4U& color)
  194. : mOverride(sOverrideFaceColor), mPool(pool)
  195. {
  196. sOverrideFaceColor = TRUE;
  197. setColor(color);
  198. }
  199. LLOverrideFaceColor(LLDrawPool* pool, F32 r, F32 g, F32 b, F32 a)
  200. : mOverride(sOverrideFaceColor), mPool(pool)
  201. {
  202. sOverrideFaceColor = TRUE;
  203. setColor(r, g, b, a);
  204. }
  205. ~LLOverrideFaceColor()
  206. {
  207. sOverrideFaceColor = mOverride;
  208. }
  209. void setColor(const LLColor4& color);
  210. void setColor(const LLColor4U& color);
  211. void setColor(F32 r, F32 g, F32 b, F32 a);
  212. BOOL mOverride;
  213. LLDrawPool* mPool;
  214. static BOOL sOverrideFaceColor;
  215. };
  216. };
  217. #endif //LL_LLDRAWPOOL_H