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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llvoavatar.h
  3.  * @brief Declaration of LLVOAvatar class which is a derivation fo
  4.  * LLViewerObject
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LLVOAVATAR_DEFINES_H
  34. #define LLVOAVATAR_DEFINES_H
  35. #include <vector>
  36. #include "llwearable.h"
  37. #include "llviewerjoint.h"
  38. #include "lldictionary.h"
  39. namespace LLVOAvatarDefines
  40. {
  41. extern const S32 SCRATCH_TEX_WIDTH;
  42. extern const S32 SCRATCH_TEX_HEIGHT;
  43. extern const S32 IMPOSTOR_PERIOD;
  44. //--------------------------------------------------------------------
  45. // Enums
  46. //--------------------------------------------------------------------
  47. enum ETextureIndex
  48. {
  49. TEX_HEAD_BODYPAINT = 0,
  50. TEX_UPPER_SHIRT,
  51. TEX_LOWER_PANTS,
  52. TEX_EYES_IRIS,
  53. TEX_HAIR,
  54. TEX_UPPER_BODYPAINT,
  55. TEX_LOWER_BODYPAINT,
  56. TEX_LOWER_SHOES,
  57. TEX_HEAD_BAKED, // Pre-composited
  58. TEX_UPPER_BAKED, // Pre-composited
  59. TEX_LOWER_BAKED, // Pre-composited
  60. TEX_EYES_BAKED, // Pre-composited
  61. TEX_LOWER_SOCKS,
  62. TEX_UPPER_JACKET,
  63. TEX_LOWER_JACKET,
  64. TEX_UPPER_GLOVES,
  65. TEX_UPPER_UNDERSHIRT,
  66. TEX_LOWER_UNDERPANTS,
  67. TEX_SKIRT,
  68. TEX_SKIRT_BAKED, // Pre-composited
  69. TEX_HAIR_BAKED,     // Pre-composited
  70. TEX_LOWER_ALPHA,
  71. TEX_UPPER_ALPHA,
  72. TEX_HEAD_ALPHA,
  73. TEX_EYES_ALPHA,
  74. TEX_HAIR_ALPHA,
  75. TEX_HEAD_TATTOO,
  76. TEX_UPPER_TATTOO,
  77. TEX_LOWER_TATTOO,
  78. TEX_NUM_INDICES
  79. }; 
  80. enum EBakedTextureIndex
  81. {
  82. BAKED_HEAD = 0,
  83. BAKED_UPPER,
  84. BAKED_LOWER,
  85. BAKED_EYES,
  86. BAKED_SKIRT,
  87. BAKED_HAIR,
  88. BAKED_NUM_INDICES
  89. };
  90. // Reference IDs for each mesh. Used as indices for vector of joints
  91. enum EMeshIndex
  92. {
  93. MESH_ID_HAIR = 0,
  94. MESH_ID_HEAD,
  95. MESH_ID_EYELASH,
  96. MESH_ID_UPPER_BODY,
  97. MESH_ID_LOWER_BODY,
  98. MESH_ID_EYEBALL_LEFT,
  99. MESH_ID_EYEBALL_RIGHT,
  100. MESH_ID_SKIRT,
  101. MESH_ID_NUM_INDICES
  102. };
  103. //--------------------------------------------------------------------
  104. // Vector Types
  105. //--------------------------------------------------------------------
  106. typedef std::vector<ETextureIndex> texture_vec_t;
  107. typedef std::vector<EBakedTextureIndex> bakedtexture_vec_t;
  108. typedef std::vector<EMeshIndex> mesh_vec_t;
  109. typedef std::vector<EWearableType> wearables_vec_t;
  110. //------------------------------------------------------------------------
  111. // LLVOAvatarDictionary
  112. // 
  113. // Holds dictionary static entries for textures, baked textures, meshes, etc.; i.e.
  114. // information that is common to all avatars.
  115. // 
  116. // This holds const data - it is initialized once and the contents never change after that.
  117. //------------------------------------------------------------------------
  118. class LLVOAvatarDictionary : public LLSingleton<LLVOAvatarDictionary>
  119. {
  120. //--------------------------------------------------------------------
  121. // Constructors and Destructors
  122. //--------------------------------------------------------------------
  123. public:
  124. LLVOAvatarDictionary();
  125. virtual ~LLVOAvatarDictionary();
  126. private:
  127. void createAssociations();
  128. //--------------------------------------------------------------------
  129. // Local and baked textures
  130. //--------------------------------------------------------------------
  131. public:
  132. struct TextureEntry : public LLDictionaryEntry
  133. {
  134. TextureEntry(const std::string &name, // this must match the xml name used by LLTexLayerInfo::parseXml
  135.  bool is_local_texture, 
  136.  EBakedTextureIndex baked_texture_index = BAKED_NUM_INDICES,
  137.  const std::string& default_image_name = "",
  138.  EWearableType wearable_type = WT_INVALID);
  139. const std::string  mDefaultImageName;
  140. const EWearableType mWearableType;
  141. // It's either a local texture xor baked
  142. BOOL  mIsLocalTexture;
  143. BOOL  mIsBakedTexture;
  144. // If it's a local texture, it may be used by a baked texture
  145. BOOL  mIsUsedByBakedTexture;
  146. EBakedTextureIndex  mBakedTextureIndex;
  147. };
  148. struct Textures : public LLDictionary<ETextureIndex, TextureEntry>
  149. {
  150. Textures();
  151. } mTextures;
  152. const TextureEntry* getTexture(ETextureIndex index) const { return mTextures.lookup(index); }
  153. const Textures& getTextures() const { return mTextures; }
  154. //--------------------------------------------------------------------
  155. // Meshes
  156. //--------------------------------------------------------------------
  157. public:
  158. struct MeshEntry : public LLDictionaryEntry
  159. {
  160. MeshEntry(EBakedTextureIndex baked_index, 
  161.   const std::string &name, // names of mesh types as they are used in avatar_lad.xml
  162.   U8 level,
  163.   LLViewerJoint::PickName pick);
  164. // Levels of Detail for each mesh.  Must match levels of detail present in avatar_lad.xml
  165.         // Otherwise meshes will be unable to be found, or levels of detail will be ignored
  166. const U8  mLOD;
  167. const EBakedTextureIndex  mBakedID;
  168. const LLViewerJoint::PickName  mPickName;
  169. };
  170. struct Meshes : public LLDictionary<EMeshIndex, MeshEntry>
  171. {
  172. Meshes();
  173. } mMeshes;
  174. const MeshEntry* getMesh(EMeshIndex index) const { return mMeshes.lookup(index); }
  175. const Meshes& getMeshes() const { return mMeshes; }
  176. //--------------------------------------------------------------------
  177. // Baked Textures
  178. //--------------------------------------------------------------------
  179. public:
  180. struct BakedEntry : public LLDictionaryEntry
  181. {
  182. BakedEntry(ETextureIndex tex_index, 
  183.    const std::string &name, // unused, but necessary for templating.
  184.    const std::string &hash_name,
  185.    U32 num_local_textures, ... ); // # local textures, local texture list, # wearables, wearable list
  186. // Local Textures
  187. const ETextureIndex mTextureIndex;
  188. texture_vec_t  mLocalTextures;
  189. // Wearables
  190. const LLUUID  mWearablesHashID;
  191. wearables_vec_t  mWearables;
  192. };
  193. struct BakedTextures: public LLDictionary<EBakedTextureIndex, BakedEntry>
  194. {
  195. BakedTextures();
  196. } mBakedTextures;
  197. const BakedEntry* getBakedTexture(EBakedTextureIndex index) const { return mBakedTextures.lookup(index); }
  198. const BakedTextures& getBakedTextures() const { return mBakedTextures; }
  199. //--------------------------------------------------------------------
  200. // Convenience Functions
  201. //--------------------------------------------------------------------
  202. public:
  203. // Convert from baked texture to associated texture; e.g. BAKED_HEAD -> TEX_HEAD_BAKED
  204. static ETextureIndex  bakedToLocalTextureIndex(EBakedTextureIndex t);
  205. // find a baked texture index based on its name
  206. static EBakedTextureIndex  findBakedByRegionName(std::string name);
  207. static const LLUUID getDefaultTextureImageID(ETextureIndex index);
  208. // Given a texture entry, determine which wearable type owns it.
  209. static EWearableType  getTEWearableType(ETextureIndex index);
  210. }; // End LLVOAvatarDictionary
  211. } // End namespace LLVOAvatarDefines
  212. #endif //LL_VO_AVATARDEFINES_H