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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llvlmanager.cpp
  3.  * @brief LLVLManager class implementation
  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. #include "llviewerprecompiledheaders.h"
  33. #include "llvlmanager.h"
  34. #include "indra_constants.h"
  35. #include "bitpack.h"
  36. #include "patch_code.h"
  37. #include "patch_dct.h"
  38. #include "llviewerregion.h"
  39. #include "llframetimer.h"
  40. #include "llsurface.h"
  41. LLVLManager gVLManager;
  42. LLVLManager::~LLVLManager()
  43. {
  44. S32 i;
  45. for (i = 0; i < mPacketData.count(); i++)
  46. {
  47. delete mPacketData[i];
  48. }
  49. mPacketData.reset();
  50. }
  51. void LLVLManager::addLayerData(LLVLData *vl_datap, const S32 mesg_size)
  52. {
  53. if (LAND_LAYER_CODE == vl_datap->mType)
  54. {
  55. mLandBits += mesg_size * 8;
  56. }
  57. else if (WIND_LAYER_CODE == vl_datap->mType)
  58. {
  59. mWindBits += mesg_size * 8;
  60. }
  61. else if (CLOUD_LAYER_CODE == vl_datap->mType)
  62. {
  63. mCloudBits += mesg_size * 8;
  64. }
  65. else
  66. {
  67. llerrs << "Unknown layer type!" << (S32)vl_datap->mType << llendl;
  68. }
  69. mPacketData.put(vl_datap);
  70. }
  71. void LLVLManager::unpackData(const S32 num_packets)
  72. {
  73. static LLFrameTimer decode_timer;
  74. S32 i;
  75. for (i = 0; i < mPacketData.count(); i++)
  76. {
  77. LLVLData *datap = mPacketData[i];
  78. LLBitPack bit_pack(datap->mData, datap->mSize);
  79. LLGroupHeader goph;
  80. decode_patch_group_header(bit_pack, &goph);
  81. if (LAND_LAYER_CODE == datap->mType)
  82. {
  83. datap->mRegionp->getLand().decompressDCTPatch(bit_pack, &goph, FALSE);
  84. }
  85. else if (WIND_LAYER_CODE == datap->mType)
  86. {
  87. datap->mRegionp->mWind.decompress(bit_pack, &goph);
  88. }
  89. else if (CLOUD_LAYER_CODE == datap->mType)
  90. {
  91. datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph);
  92. }
  93. }
  94. for (i = 0; i < mPacketData.count(); i++)
  95. {
  96. delete mPacketData[i];
  97. }
  98. mPacketData.reset();
  99. }
  100. void LLVLManager::resetBitCounts()
  101. {
  102. mLandBits = mWindBits = mCloudBits = 0;
  103. }
  104. S32 LLVLManager::getLandBits() const
  105. {
  106. return mLandBits;
  107. }
  108. S32 LLVLManager::getWindBits() const
  109. {
  110. return mWindBits;
  111. }
  112. S32 LLVLManager::getCloudBits() const
  113. {
  114. return mCloudBits;
  115. }
  116. S32 LLVLManager::getTotalBytes() const
  117. {
  118. return mLandBits + mWindBits + mCloudBits;
  119. }
  120. void LLVLManager::cleanupData(LLViewerRegion *regionp)
  121. {
  122. S32 cur = 0;
  123. while (cur < mPacketData.count())
  124. {
  125. if (mPacketData[cur]->mRegionp == regionp)
  126. {
  127. delete mPacketData[cur];
  128. mPacketData.remove(cur);
  129. }
  130. else
  131. {
  132. cur++;
  133. }
  134. }
  135. }
  136. LLVLData::LLVLData(LLViewerRegion *regionp, const S8 type, U8 *data, const S32 size)
  137. {
  138. mType = type;
  139. mData = data;
  140. mRegionp = regionp;
  141. mSize = size;
  142. }
  143. LLVLData::~LLVLData()
  144. {
  145. delete [] mData;
  146. mData = NULL;
  147. mRegionp = NULL;
  148. }