diff options
author | Jacek Antonelli | 2008-08-15 23:44:56 -0500 |
---|---|---|
committer | Jacek Antonelli | 2008-08-15 23:44:56 -0500 |
commit | c07901e29ed545bbb02e3bddf148fe1104b94e9f (patch) | |
tree | f1ada64ce834acd7d92a425efb96c4b86bcf16b1 /linden/indra/newview/llviewerimagelist.cpp | |
parent | Second Life viewer sources 1.15.0.2 (diff) | |
download | meta-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.cpp | 38 |
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 | |||
1116 | S32 LLViewerImageList::getMaxVideoRamSetting(S32 max) | 1119 | S32 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(); |