aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llviewerimagelist.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:44:56 -0500
committerJacek Antonelli2008-08-15 23:44:56 -0500
commitc07901e29ed545bbb02e3bddf148fe1104b94e9f (patch)
treef1ada64ce834acd7d92a425efb96c4b86bcf16b1 /linden/indra/newview/llviewerimagelist.cpp
parentSecond Life viewer sources 1.15.0.2 (diff)
downloadmeta-impy-c07901e29ed545bbb02e3bddf148fe1104b94e9f.zip
meta-impy-c07901e29ed545bbb02e3bddf148fe1104b94e9f.tar.gz
meta-impy-c07901e29ed545bbb02e3bddf148fe1104b94e9f.tar.bz2
meta-impy-c07901e29ed545bbb02e3bddf148fe1104b94e9f.tar.xz
Second Life viewer sources 1.15.1.3
Diffstat (limited to 'linden/indra/newview/llviewerimagelist.cpp')
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index 9da84fa..4e87905 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -125,6 +125,9 @@ void LLViewerImageList::doPreloadImages()
125 // Set the "white" image 125 // Set the "white" image
126 LLViewerImage::sWhiteImagep = preloadImage("white.tga", LLUUID::null, TRUE);; 126 LLViewerImage::sWhiteImagep = preloadImage("white.tga", LLUUID::null, TRUE);;
127 127
128 // Speeds up startup by 4-5 seconds. JC
129 if (!gPreloadImages) return;
130
128 // Preload some images 131 // Preload some images
129 preloadImage("button_anim_pause.tga", LLUUID::null, FALSE); 132 preloadImage("button_anim_pause.tga", LLUUID::null, FALSE);
130 preloadImage("button_anim_pause_selected.tga", LLUUID::null, FALSE); 133 preloadImage("button_anim_pause_selected.tga", LLUUID::null, FALSE);
@@ -1116,6 +1119,7 @@ LLPointer<LLImageJ2C> LLViewerImageList::convertToUploadFile(LLPointer<LLImageRa
1116S32 LLViewerImageList::getMaxVideoRamSetting(S32 max) 1119S32 LLViewerImageList::getMaxVideoRamSetting(S32 max)
1117{ 1120{
1118 const U32 vram_settings[] = { 16, 32, 64, 128, 256, 512 }; 1121 const U32 vram_settings[] = { 16, 32, 64, 128, 256, 512 };
1122 const S32 num_vram_settings = sizeof(vram_settings) / sizeof(vram_settings[0]);
1119 1123
1120 U32 max_vram; 1124 U32 max_vram;
1121 if (gGLManager.mVRAM != 0) 1125 if (gGLManager.mVRAM != 0)
@@ -1144,8 +1148,9 @@ S32 LLViewerImageList::getMaxVideoRamSetting(S32 max)
1144 { 1148 {
1145 max_vram = llmin(max_vram, (U32)((F32)system_ram/1.5f)); 1149 max_vram = llmin(max_vram, (U32)((F32)system_ram/1.5f));
1146 } 1150 }
1151
1147 S32 idx; 1152 S32 idx;
1148 for (idx=0; idx<=5; idx++) 1153 for (idx=0; idx < num_vram_settings; idx++)
1149 { 1154 {
1150 if (idx == max) 1155 if (idx == max)
1151 break; 1156 break;
@@ -1155,6 +1160,12 @@ S32 LLViewerImageList::getMaxVideoRamSetting(S32 max)
1155 break; 1160 break;
1156 } 1161 }
1157 } 1162 }
1163
1164 if( idx == num_vram_settings )
1165 {
1166 idx = num_vram_settings - 1;
1167 }
1168
1158 return idx; 1169 return idx;
1159} 1170}
1160 1171
@@ -1233,12 +1244,20 @@ void LLViewerImageList::receiveImageHeader(LLMessageSystem *msg, void **user_dat
1233 msg->getU16Fast(_PREHASH_ImageID, _PREHASH_Packets, packets); 1244 msg->getU16Fast(_PREHASH_ImageID, _PREHASH_Packets, packets);
1234 msg->getU32Fast(_PREHASH_ImageID, _PREHASH_Size, totalbytes); 1245 msg->getU32Fast(_PREHASH_ImageID, _PREHASH_Size, totalbytes);
1235 1246
1236 U16 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); 1247 S32 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data);
1237 if (!data_size) 1248 if (!data_size)
1238 { 1249 {
1239 return; 1250 return;
1240 } 1251 }
1241 1252 if (data_size < 0)
1253 {
1254 // msg->getSizeFast() is probably trying to tell us there
1255 // was an error.
1256 llerrs << "image header chunk size was negative: "
1257 << data_size << llendl;
1258 return;
1259 }
1260
1242 // this buffer gets saved off in the packet list 1261 // this buffer gets saved off in the packet list
1243 U8 *data = new U8[data_size]; 1262 U8 *data = new U8[data_size];
1244 msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); 1263 msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
@@ -1246,6 +1265,7 @@ void LLViewerImageList::receiveImageHeader(LLMessageSystem *msg, void **user_dat
1246 LLViewerImage *image = gImageList.getImage(id); 1265 LLViewerImage *image = gImageList.getImage(id);
1247 if (!image) 1266 if (!image)
1248 { 1267 {
1268 delete [] data;
1249 return; 1269 return;
1250 } 1270 }
1251 image->mLastPacketTimer.reset(); 1271 image->mLastPacketTimer.reset();
@@ -1284,15 +1304,24 @@ void LLViewerImageList::receiveImagePacket(LLMessageSystem *msg, void **user_dat
1284 //llprintline("Start decode, image header..."); 1304 //llprintline("Start decode, image header...");
1285 msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id); 1305 msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, id);
1286 msg->getU16Fast(_PREHASH_ImageID, _PREHASH_Packet, packet_num); 1306 msg->getU16Fast(_PREHASH_ImageID, _PREHASH_Packet, packet_num);
1287 U16 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data); 1307 S32 data_size = msg->getSizeFast(_PREHASH_ImageData, _PREHASH_Data);
1288 1308
1289 if (!data_size) 1309 if (!data_size)
1290 { 1310 {
1291 return; 1311 return;
1292 } 1312 }
1313 if (data_size < 0)
1314 {
1315 // msg->getSizeFast() is probably trying to tell us there
1316 // was an error.
1317 llerrs << "image data chunk size was negative: "
1318 << data_size << llendl;
1319 return;
1320 }
1293 if (data_size > MTUBYTES) 1321 if (data_size > MTUBYTES)
1294 { 1322 {
1295 llerrs << "image data chunk too large: " << data_size << " bytes" << llendl; 1323 llerrs << "image data chunk too large: " << data_size << " bytes" << llendl;
1324 return;
1296 } 1325 }
1297 U8 *data = new U8[data_size]; 1326 U8 *data = new U8[data_size];
1298 msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size); 1327 msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
@@ -1300,6 +1329,7 @@ void LLViewerImageList::receiveImagePacket(LLMessageSystem *msg, void **user_dat
1300 LLViewerImage *image = gImageList.getImage(id); 1329 LLViewerImage *image = gImageList.getImage(id);
1301 if (!image) 1330 if (!image)
1302 { 1331 {
1332 delete [] data;
1303 return; 1333 return;
1304 } 1334 }
1305 image->mLastPacketTimer.reset(); 1335 image->mLastPacketTimer.reset();