summaryrefslogtreecommitdiff
path: root/indra/newview/llvlmanager.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llvlmanager.cpp
Print done when done.
Diffstat (limited to 'indra/newview/llvlmanager.cpp')
-rw-r--r--indra/newview/llvlmanager.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp
new file mode 100644
index 0000000000..9a5c1e533b
--- /dev/null
+++ b/indra/newview/llvlmanager.cpp
@@ -0,0 +1,147 @@
+/**
+ * @file llvlmanager.cpp
+ * @brief LLVLManager class implementation
+ *
+ * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llvlmanager.h"
+
+#include "indra_constants.h"
+#include "bitpack.h"
+#include "patch_code.h"
+#include "patch_dct.h"
+#include "llviewerregion.h"
+#include "llframetimer.h"
+#include "llagent.h"
+#include "llsurface.h"
+
+LLVLManager gVLManager;
+
+LLVLManager::~LLVLManager()
+{
+ S32 i;
+ for (i = 0; i < mPacketData.count(); i++)
+ {
+ delete mPacketData[i];
+ }
+ mPacketData.reset();
+}
+
+void LLVLManager::addLayerData(LLVLData *vl_datap, const S32 mesg_size)
+{
+ if (LAND_LAYER_CODE == vl_datap->mType)
+ {
+ mLandBits += mesg_size * 8;
+ }
+ else if (WIND_LAYER_CODE == vl_datap->mType)
+ {
+ mWindBits += mesg_size * 8;
+ }
+ else if (CLOUD_LAYER_CODE == vl_datap->mType)
+ {
+ mCloudBits += mesg_size * 8;
+ }
+ else
+ {
+ llerrs << "Unknown layer type!" << (S32)vl_datap->mType << llendl;
+ }
+
+ mPacketData.put(vl_datap);
+}
+
+void LLVLManager::unpackData(const S32 num_packets)
+{
+ static LLFrameTimer decode_timer;
+
+ S32 i;
+ for (i = 0; i < mPacketData.count(); i++)
+ {
+ LLVLData *datap = mPacketData[i];
+
+ LLBitPack bit_pack(datap->mData, datap->mSize);
+ LLGroupHeader goph;
+
+ decode_patch_group_header(bit_pack, &goph);
+ if (LAND_LAYER_CODE == datap->mType)
+ {
+ datap->mRegionp->getLand().decompressDCTPatch(bit_pack, &goph, FALSE);
+ }
+ else if (WIND_LAYER_CODE == datap->mType)
+ {
+ datap->mRegionp->mWind.decompress(bit_pack, &goph);
+
+ }
+ else if (CLOUD_LAYER_CODE == datap->mType)
+ {
+ datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph);
+ }
+ }
+
+ for (i = 0; i < mPacketData.count(); i++)
+ {
+ delete mPacketData[i];
+ }
+ mPacketData.reset();
+
+}
+
+void LLVLManager::resetBitCounts()
+{
+ mLandBits = mWindBits = mCloudBits = 0;
+}
+
+S32 LLVLManager::getLandBits() const
+{
+ return mLandBits;
+}
+
+S32 LLVLManager::getWindBits() const
+{
+ return mWindBits;
+}
+
+S32 LLVLManager::getCloudBits() const
+{
+ return mCloudBits;
+}
+
+S32 LLVLManager::getTotalBytes() const
+{
+ return mLandBits + mWindBits + mCloudBits;
+}
+
+void LLVLManager::cleanupData(LLViewerRegion *regionp)
+{
+ S32 cur = 0;
+ while (cur < mPacketData.count())
+ {
+ if (mPacketData[cur]->mRegionp == regionp)
+ {
+ delete mPacketData[cur];
+ mPacketData.remove(cur);
+ }
+ else
+ {
+ cur++;
+ }
+ }
+}
+
+LLVLData::LLVLData(LLViewerRegion *regionp, const S8 type, U8 *data, const S32 size)
+{
+ mType = type;
+ mData = data;
+ mRegionp = regionp;
+ mSize = size;
+}
+
+LLVLData::~LLVLData()
+{
+ delete [] mData;
+ mData = NULL;
+ mRegionp = NULL;
+}