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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llviewertexturelist.h
  3.  * @brief Object for managing the list of images within a region
  4.  *
  5.  * $LicenseInfo:firstyear=2000&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2000-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_LLVIEWERTEXTURELIST_H
  33. #define LL_LLVIEWERTEXTURELIST_H
  34. #include "lluuid.h"
  35. //#include "message.h"
  36. #include "llgl.h"
  37. #include "llstat.h"
  38. #include "llviewertexture.h"
  39. #include "llui.h"
  40. #include <list>
  41. #include <set>
  42. const U32 LL_IMAGE_REZ_LOSSLESS_CUTOFF = 128;
  43. const BOOL MIPMAP_YES = TRUE;
  44. const BOOL MIPMAP_NO = FALSE;
  45. const BOOL GL_TEXTURE_YES = TRUE;
  46. const BOOL GL_TEXTURE_NO = FALSE;
  47. const BOOL IMMEDIATE_YES = TRUE;
  48. const BOOL IMMEDIATE_NO = FALSE;
  49. class LLImageJ2C;
  50. class LLMessageSystem;
  51. class LLTextureView;
  52. typedef void (*LLImageCallback)(BOOL success,
  53. LLViewerFetchedTexture *src_vi,
  54. LLImageRaw* src,
  55. LLImageRaw* src_aux,
  56. S32 discard_level,
  57. BOOL final,
  58. void* userdata);
  59. class LLViewerTextureList
  60. {
  61.     LOG_CLASS(LLViewerTextureList);
  62. friend class LLTextureView;
  63. friend class LLViewerTextureManager;
  64. public:
  65. static BOOL createUploadFile(const std::string& filename, const std::string& out_filename, const U8 codec);
  66. static LLPointer<LLImageJ2C> convertToUploadFile(LLPointer<LLImageRaw> raw_image);
  67. static void processImageNotInDatabase( LLMessageSystem *msg, void **user_data );
  68. static S32 calcMaxTextureRAM();
  69. static void receiveImageHeader(LLMessageSystem *msg, void **user_data);
  70. static void receiveImagePacket(LLMessageSystem *msg, void **user_data);
  71. public:
  72. LLViewerTextureList();
  73. ~LLViewerTextureList();
  74. void init();
  75. void shutdown();
  76. void dump();
  77. void destroyGL(BOOL save_state = TRUE);
  78. void restoreGL();
  79. LLViewerFetchedTexture *findImage(const LLUUID &image_id);
  80. void dirtyImage(LLViewerFetchedTexture *image);
  81. // Using image stats, determine what images are necessary, and perform image updates.
  82. void updateImages(F32 max_time);
  83. void forceImmediateUpdate(LLViewerFetchedTexture* imagep) ;
  84. // Decode and create textures for all images currently in list.
  85. void decodeAllImages(F32 max_decode_time); 
  86. void handleIRCallback(void **data, const S32 number);
  87. void setUpdateStats(BOOL b) { mUpdateStats = b; }
  88. S32 getMaxResidentTexMem() const { return mMaxResidentTexMemInMegaBytes; }
  89. S32 getMaxTotalTextureMem() const   { return mMaxTotalTextureMemInMegaBytes;}
  90. S32 getNumImages() { return mImageList.size(); }
  91. void updateMaxResidentTexMem(S32 mem);
  92. void doPreloadImages();
  93. void doPrefetchImages();
  94. static S32 getMinVideoRamSetting();
  95. static S32 getMaxVideoRamSetting(bool get_recommended = false);
  96. private:
  97. void updateImagesDecodePriorities();
  98. F32  updateImagesCreateTextures(F32 max_time);
  99. F32  updateImagesFetchTextures(F32 max_time);
  100. void updateImagesUpdateStats();
  101. void addImage(LLViewerFetchedTexture *image);
  102. void deleteImage(LLViewerFetchedTexture *image);
  103. void addImageToList(LLViewerFetchedTexture *image);
  104. void removeImageFromList(LLViewerFetchedTexture *image);
  105. LLViewerFetchedTexture * getImage(const LLUUID &image_id,  
  106.  BOOL usemipmap = TRUE,
  107.  LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation.
  108.  S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
  109.  LLGLint internal_format = 0,
  110.  LLGLenum primary_format = 0,
  111.  LLHost request_from_host = LLHost()
  112.  );
  113. LLViewerFetchedTexture * getImageFromFile(const std::string& filename,  
  114.  BOOL usemipmap = TRUE,
  115.  LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation.
  116.  S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
  117.  LLGLint internal_format = 0,
  118.  LLGLenum primary_format = 0,
  119.  const LLUUID& force_id = LLUUID::null
  120.  );
  121. LLViewerFetchedTexture* getImageFromUrl(const std::string& url,
  122.  BOOL usemipmap = TRUE,
  123.  LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation.
  124.  S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
  125.  LLGLint internal_format = 0,
  126.  LLGLenum primary_format = 0,
  127.  const LLUUID& force_id = LLUUID::null
  128.  );
  129. LLViewerFetchedTexture* createImage(const LLUUID &image_id,
  130.  BOOL usemipmap = TRUE,
  131.  LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_NONE, // Get the requested level immediately upon creation.
  132.  S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
  133.  LLGLint internal_format = 0,
  134.  LLGLenum primary_format = 0,
  135.  LLHost request_from_host = LLHost()
  136.  );
  137. // Request image from a specific host, used for baked avatar textures.
  138. // Implemented in header in case someone changes default params above. JC
  139. LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host)
  140. { return getImage(image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
  141. public:
  142. typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t;
  143. image_list_t mLoadingStreamList;
  144. image_list_t mCreateTextureList;
  145. image_list_t mCallbackList;
  146. // Note: just raw pointers because they are never referenced, just compared against
  147. std::set<LLViewerFetchedTexture*> mDirtyTextureList;
  148. BOOL mForceResetTextureStats;
  149.     
  150. private:
  151. typedef std::map< LLUUID, LLPointer<LLViewerFetchedTexture> > uuid_map_t;
  152. uuid_map_t mUUIDMap;
  153. LLUUID mLastUpdateUUID;
  154. LLUUID mLastFetchUUID;
  155. typedef std::set<LLPointer<LLViewerFetchedTexture>, LLViewerFetchedTexture::Compare> image_priority_list_t;
  156. image_priority_list_t mImageList;
  157. // simply holds on to LLViewerFetchedTexture references to stop them from being purged too soon
  158. std::set<LLPointer<LLViewerFetchedTexture> > mImagePreloads;
  159. BOOL mUpdateStats;
  160. S32 mMaxResidentTexMemInMegaBytes;
  161. S32 mMaxTotalTextureMemInMegaBytes;
  162. LLFrameTimer mForceDecodeTimer;
  163. public:
  164. static U32 sTextureBits;
  165. static U32 sTexturePackets;
  166. static LLStat sNumImagesStat;
  167. static LLStat sNumRawImagesStat;
  168. static LLStat sGLTexMemStat;
  169. static LLStat sGLBoundMemStat;
  170. static LLStat sRawMemStat;
  171. static LLStat sFormattedMemStat;
  172. private:
  173. static S32 sNumImages;
  174. static void (*sUUIDCallback)(void**, const LLUUID &);
  175. };
  176. class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
  177. {
  178. public:
  179. // LLImageProviderInterface
  180. /*virtual*/ LLUIImagePtr getUIImageByID(const LLUUID& id, S32 priority);
  181. /*virtual*/ LLUIImagePtr getUIImage(const std::string& name, S32 priority);
  182. void cleanUp();
  183. bool initFromFile();
  184. LLUIImagePtr preloadUIImage(const std::string& name, const std::string& filename, BOOL use_mips, const LLRect& scale_rect);
  185. static void onUIImageLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
  186. private:
  187. LLUIImagePtr loadUIImageByName(const std::string& name, const std::string& filename,
  188.                            BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null, 
  189.                            LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_UI);
  190. LLUIImagePtr loadUIImageByID(const LLUUID& id,
  191.  BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null, 
  192.  LLViewerTexture::EBoostLevel boost_priority = LLViewerTexture::BOOST_UI);
  193. LLUIImagePtr loadUIImage(LLViewerFetchedTexture* imagep, const std::string& name, BOOL use_mips = FALSE, const LLRect& scale_rect = LLRect::null);
  194. struct LLUIImageLoadData
  195. {
  196. std::string mImageName;
  197. LLRect mImageScaleRegion;
  198. };
  199. typedef std::map< std::string, LLPointer<LLUIImage> > uuid_ui_image_map_t;
  200. uuid_ui_image_map_t mUIImages;
  201. //
  202. //keep a copy of UI textures to prevent them to be deleted.
  203. //mGLTexturep of each UI texture equals to some LLUIImage.mImage.
  204. std::list< LLPointer<LLViewerFetchedTexture> > mUITextureList ;
  205. };
  206. const BOOL GLTEXTURE_TRUE = TRUE;
  207. const BOOL GLTEXTURE_FALSE = FALSE;
  208. const BOOL MIPMAP_TRUE = TRUE;
  209. const BOOL MIPMAP_FALSE = FALSE;
  210. extern LLViewerTextureList gTextureList;
  211. #endif