aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:44:52 -0500
committerJacek Antonelli2008-08-15 23:44:52 -0500
commit0340e6d3dea28e7bb1da9dc67ac4c2b57354279f (patch)
treedf9029fa98b28a23c44409598764f282c14c4e16 /linden
parentSecond Life viewer sources 1.14.0.0 (diff)
downloadmeta-impy-0340e6d3dea28e7bb1da9dc67ac4c2b57354279f.zip
meta-impy-0340e6d3dea28e7bb1da9dc67ac4c2b57354279f.tar.gz
meta-impy-0340e6d3dea28e7bb1da9dc67ac4c2b57354279f.tar.bz2
meta-impy-0340e6d3dea28e7bb1da9dc67ac4c2b57354279f.tar.xz
Second Life viewer sources 1.14.0.1
Diffstat (limited to 'linden')
-rw-r--r--linden/doc/contributions.txt6
-rw-r--r--linden/indra/SConstruct20
-rw-r--r--linden/indra/llmessage/llcircuit.cpp2
-rw-r--r--linden/indra/llmessage/llpumpio.cpp15
-rw-r--r--linden/indra/llrender/llfontgl.cpp90
-rw-r--r--linden/indra/newview/featuretable.txt2
-rw-r--r--linden/indra/newview/lleventpoll.cpp6
-rw-r--r--linden/indra/newview/llfolderview.cpp21
-rw-r--r--linden/indra/newview/llfolderview.h3
-rw-r--r--linden/indra/newview/llinventoryview.cpp4
-rw-r--r--linden/indra/newview/llpolymesh.cpp2
-rw-r--r--linden/indra/newview/llstartup.cpp8
-rw-r--r--linden/indra/newview/lltexturectrl.cpp2
-rw-r--r--linden/indra/newview/lltoolpie.cpp22
-rw-r--r--linden/indra/newview/lltoolpie.h1
-rw-r--r--linden/indra/newview/llviewerstats.cpp52
-rw-r--r--linden/indra/newview/llvlcomposition.cpp17
-rw-r--r--linden/indra/newview/releasenotes.txt12
18 files changed, 179 insertions, 106 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 494e3fe..3c495f7 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -1,4 +1,4 @@
1Linden Lab would like to acknowledge source code contributions from the 1 Linden Lab would like to acknowledge source code contributions from the
2following residents. The Second Life resident name is given below, 2following residents. The Second Life resident name is given below,
3along with the issue identifier corresponding to the patches we've 3along with the issue identifier corresponding to the patches we've
4received from them. To see more about these contributions, visit 4received from them. To see more about these contributions, visit
@@ -9,14 +9,14 @@ blino Nakamura - VWR-17
9Drewan Keats - VWR-28 9Drewan Keats - VWR-28
10Dylan Haskell - VWR-72 10Dylan Haskell - VWR-72
11Eddy Stryker - VWR-15, VWR-23 11Eddy Stryker - VWR-15, VWR-23
12Hiro Sommambulist - VWR-66 12Hiro Sommambulist - VWR-66, VWR-97, VWR-100, VWR-105, VWR-108, VWR-118
13Joghert LeSabre - VWR-64 13Joghert LeSabre - VWR-64
14Kage Pixel - VWR-11 14Kage Pixel - VWR-11
15Kunnis Basiat - VWR-82 15Kunnis Basiat - VWR-82
16Paul Churchill - VWR-20 16Paul Churchill - VWR-20
17Paula Innis - VWR-30 17Paula Innis - VWR-30
18Peekay Semyorka - VWR-7, VWR-19, VWR-49 18Peekay Semyorka - VWR-7, VWR-19, VWR-49
19SpacedOut Frye - VWR-57, VWR-123 19SpacedOut Frye - VWR-57, VWR-94, VWR-121, VWR-123
20Strife Onizuka - VWR-74, VWR-85, SVC-9 20Strife Onizuka - VWR-74, VWR-85, SVC-9
21Zipherius Turas - VWR-76, VWR-77 21Zipherius Turas - VWR-76, VWR-77
22 22
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 2aeee01..66a0231 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -49,7 +49,7 @@ opts = Options()
49opts.Add(EnumOption('BUILD', 'Set build type', 'releasefordownload', 49opts.Add(EnumOption('BUILD', 'Set build type', 'releasefordownload',
50 allowed_values=('debug', 'release', 'releasenoopt', 'releasefordownload'))) 50 allowed_values=('debug', 'release', 'releasenoopt', 'releasefordownload')))
51opts.Add(EnumOption('ARCH', 'Set architecture', 'i686', 51opts.Add(EnumOption('ARCH', 'Set architecture', 'i686',
52 allowed_values=('i686', 'powerpc', 'x86_64'))) 52 allowed_values=('i686', 'powerpc', 'x86_64', 'x86_64cross')))
53opts.Add(EnumOption('BTARGET', 'Set build target', 'server', 53opts.Add(EnumOption('BTARGET', 'Set build target', 'server',
54 allowed_values=('client', 'server', 'all'))) 54 allowed_values=('client', 'server', 'all')))
55opts.Add(EnumOption('DISTCC', 'Enabled distcc', 'yes', 55opts.Add(EnumOption('DISTCC', 'Enabled distcc', 'yes',
@@ -183,8 +183,10 @@ for build_target in targets:
183 # Linux-only flags 183 # Linux-only flags
184 flags += '-DLL_LINUX=1 ' 184 flags += '-DLL_LINUX=1 '
185 if build_target == 'client': 185 if build_target == 'client':
186 flags += '-DAPPID=secondlife -DLL_SDL=1 -DLL_X11=1 ' 186 flags += '-DAPPID=secondlife -DLL_SDL=1 '
187 flags += '-DLL_GTK=1 ' 187 if arch == 'x86_64' or arch == 'x86_64cross':
188 flags += '-DLL_FMOD=0 '
189 flags += '-DLL_X11=1 -DLL_GTK=1 '
188 client_external_libs += [ 'gtk-x11-2.0', 'elfio' ] 190 client_external_libs += [ 'gtk-x11-2.0', 'elfio' ]
189 include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ] 191 include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ]
190 include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0'] 192 include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0']
@@ -202,7 +204,7 @@ for build_target in targets:
202 flags += '-DLL_LIBXUL_ENABLED=0 ' 204 flags += '-DLL_LIBXUL_ENABLED=0 '
203 else: 205 else:
204 # Mac-only flags 206 # Mac-only flags
205 flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -O2 -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk ' 207 flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
206 208
207 ### Build type-specific flags ### 209 ### Build type-specific flags ###
208 210
@@ -234,7 +236,7 @@ for build_target in targets:
234 if build_target != 'client': 236 if build_target != 'client':
235 gcc_bin = 'g++-3.3' 237 gcc_bin = 'g++-3.3'
236 238
237 if arch == 'x86_64': 239 if arch == 'x86_64cross':
238 gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc' 240 gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
239 strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE' 241 strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
240 242
@@ -273,7 +275,7 @@ for build_target in targets:
273 275
274 if enable_distcc == 'yes': 276 if enable_distcc == 'yes':
275 hosts = 'localhost/2 station9.lindenlab.com,lzo station7.lindenlab.com,lzo station6.lindenlab.com,lzo station11.lindenlab.com,lzo station5.lindenlab.com,lzo station15.lindenlab.com,lzo station10.lindenlab.com,lzo station13.lindenlab.com,lzo station12.lindenlab.com,lzo' 277 hosts = 'localhost/2 station9.lindenlab.com,lzo station7.lindenlab.com,lzo station6.lindenlab.com,lzo station11.lindenlab.com,lzo station5.lindenlab.com,lzo station15.lindenlab.com,lzo station10.lindenlab.com,lzo station13.lindenlab.com,lzo station12.lindenlab.com,lzo'
276 if arch == 'x86_64': 278 if arch == 'x86_64' or arch == 'x86_64cross':
277 hosts = 'localhost' 279 hosts = 'localhost'
278 print "Distributing to hosts: " + hosts 280 print "Distributing to hosts: " + hosts
279 env['ENV']['DISTCC_HOSTS'] = hosts 281 env['ENV']['DISTCC_HOSTS'] = hosts
@@ -415,7 +417,11 @@ for build_target in targets:
415 ################## 417 ##################
416 output_bin = 'newview/secondlife-' + arch + '-bin' 418 output_bin = 'newview/secondlife-' + arch + '-bin'
417 419
418 external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'fmod-3.75', 'db-4.2', 'openjpeg' ] 420 external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db-4.2', 'openjpeg' ]
421
422 if arch != 'x86_64' and arch != 'x86_64cross':
423 external_libs += [ 'fmod-3.75' ]
424
419 external_libs.remove('cares') 425 external_libs.remove('cares')
420 426
421 internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive', 427 internal_libs = [ 'lscript', 'llwindow', 'llrender', 'llprimitive',
diff --git a/linden/indra/llmessage/llcircuit.cpp b/linden/indra/llmessage/llcircuit.cpp
index 5187948..d73cc22 100644
--- a/linden/indra/llmessage/llcircuit.cpp
+++ b/linden/indra/llmessage/llcircuit.cpp
@@ -967,7 +967,7 @@ BOOL LLCircuitData::updateWatchDogTimers(LLMessageSystem *msgsys)
967 << (*it).first; 967 << (*it).first;
968 llinfos << str.str().c_str() << llendl; 968 llinfos << str.str().c_str() << llendl;
969 } 969 }
970 mPotentialLostPackets.erase((*(it++)).first); 970 mPotentialLostPackets.erase(it++);
971 } 971 }
972 else 972 else
973 { 973 {
diff --git a/linden/indra/llmessage/llpumpio.cpp b/linden/indra/llmessage/llpumpio.cpp
index c1f1821..4ce15b9 100644
--- a/linden/indra/llmessage/llpumpio.cpp
+++ b/linden/indra/llmessage/llpumpio.cpp
@@ -221,16 +221,15 @@ bool LLPumpIO::setConditional(LLIOPipe* pipe, const apr_pollfd_t* poll)
221 { 221 {
222 // remove any matching poll file descriptors for this pipe. 222 // remove any matching poll file descriptors for this pipe.
223 LLIOPipe::ptr_t pipe_ptr(pipe); 223 LLIOPipe::ptr_t pipe_ptr(pipe);
224 224 LLChainInfo::conditionals_t::iterator it;
225 LLChainInfo::conditionals_t::iterator it = (*mCurrentChain).mDescriptors.begin(); 225 it = (*mCurrentChain).mDescriptors.begin();
226 LLChainInfo::conditionals_t::iterator end = (*mCurrentChain).mDescriptors.end(); 226 while(it != (*mCurrentChain).mDescriptors.end())
227 while (it != end)
228 { 227 {
229 LLChainInfo::pipe_conditional_t& value = (*it); 228 LLChainInfo::pipe_conditional_t& value = (*it);
230 if ( pipe_ptr == value.first ) 229 if(pipe_ptr == value.first)
231 { 230 {
232 ll_delete_apr_pollset_fd_client_data()(value); 231 ll_delete_apr_pollset_fd_client_data()(value);
233 (*mCurrentChain).mDescriptors.erase(it++); 232 it = (*mCurrentChain).mDescriptors.erase(it);
234 mRebuildPollset = true; 233 mRebuildPollset = true;
235 } 234 }
236 else 235 else
@@ -472,7 +471,7 @@ void LLPumpIO::pump()
472// << (*run_chain).mChainLinks[0].mPipe 471// << (*run_chain).mChainLinks[0].mPipe
473// << " because we reached the end." << llendl; 472// << " because we reached the end." << llendl;
474#endif 473#endif
475 mRunningChains.erase(run_chain++); 474 run_chain = mRunningChains.erase(run_chain);
476 continue; 475 continue;
477 } 476 }
478 } 477 }
@@ -551,7 +550,7 @@ void LLPumpIO::pump()
551 (*run_chain).mDescriptors.begin(), 550 (*run_chain).mDescriptors.begin(),
552 (*run_chain).mDescriptors.end(), 551 (*run_chain).mDescriptors.end(),
553 ll_delete_apr_pollset_fd_client_data()); 552 ll_delete_apr_pollset_fd_client_data());
554 mRunningChains.erase(run_chain++); 553 run_chain = mRunningChains.erase(run_chain);
555 554
556 // *NOTE: may not always need to rebuild the pollset. 555 // *NOTE: may not always need to rebuild the pollset.
557 mRebuildPollset = true; 556 mRebuildPollset = true;
diff --git a/linden/indra/llrender/llfontgl.cpp b/linden/indra/llrender/llfontgl.cpp
index 2740c6c..f72a7de 100644
--- a/linden/indra/llrender/llfontgl.cpp
+++ b/linden/indra/llrender/llfontgl.cpp
@@ -304,14 +304,18 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
304 sSansSerifHuge->reset(); 304 sSansSerifHuge->reset();
305 } 305 }
306 306
307 if (!sSSHugeFallback) 307 if (sSSHugeFallback)
308 { 308 {
309 sSSHugeFallback = new LLFontList(); 309 delete sSSHugeFallback;
310 if (!loadFaceFallback(sSSHugeFallback, sanserif_fallback_file, huge_size*ss_fallback_scale)) 310 }
311 { 311 sSSHugeFallback = new LLFontList();
312 delete sSSHugeFallback; 312 if (!loadFaceFallback(
313 sSSHugeFallback = NULL; 313 sSSHugeFallback,
314 } 314 sanserif_fallback_file,
315 huge_size*ss_fallback_scale))
316 {
317 delete sSSHugeFallback;
318 sSSHugeFallback = NULL;
315 } 319 }
316 320
317 failed |= !loadFace(sSansSerifHuge, sansserif_file, huge_size, sSSHugeFallback); 321 failed |= !loadFace(sSansSerifHuge, sansserif_file, huge_size, sSSHugeFallback);
@@ -326,14 +330,18 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
326 sSansSerifBig->reset(); 330 sSansSerifBig->reset();
327 } 331 }
328 332
329 if (!sSSBigFallback) 333 if (sSSBigFallback)
330 { 334 {
331 sSSBigFallback = new LLFontList(); 335 delete sSSBigFallback;
332 if (!loadFaceFallback(sSSBigFallback, sanserif_fallback_file, big_size*ss_fallback_scale)) 336 }
333 { 337 sSSBigFallback = new LLFontList();
334 delete sSSBigFallback; 338 if (!loadFaceFallback(
335 sSSBigFallback = NULL; 339 sSSBigFallback,
336 } 340 sanserif_fallback_file,
341 big_size*ss_fallback_scale))
342 {
343 delete sSSBigFallback;
344 sSSBigFallback = NULL;
337 } 345 }
338 346
339 failed |= !loadFace(sSansSerifBig, sansserif_file, big_size, sSSBigFallback); 347 failed |= !loadFace(sSansSerifBig, sansserif_file, big_size, sSSBigFallback);
@@ -348,14 +356,18 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
348 sSansSerif->reset(); 356 sSansSerif->reset();
349 } 357 }
350 358
351 if (!sSSFallback) 359 if (sSSFallback)
352 { 360 {
353 sSSFallback = new LLFontList(); 361 delete sSSFallback;
354 if (!loadFaceFallback(sSSFallback, sanserif_fallback_file, medium_size*ss_fallback_scale)) 362 }
355 { 363 sSSFallback = new LLFontList();
356 delete sSSFallback; 364 if (!loadFaceFallback(
357 sSSFallback = NULL; 365 sSSFallback,
358 } 366 sanserif_fallback_file,
367 medium_size*ss_fallback_scale))
368 {
369 delete sSSFallback;
370 sSSFallback = NULL;
359 } 371 }
360 failed |= !loadFace(sSansSerif, sansserif_file, medium_size, sSSFallback); 372 failed |= !loadFace(sSansSerif, sansserif_file, medium_size, sSSFallback);
361 373
@@ -369,14 +381,18 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
369 sSansSerifSmall->reset(); 381 sSansSerifSmall->reset();
370 } 382 }
371 383
372 if (!sSSSmallFallback) 384 if(sSSSmallFallback)
373 { 385 {
374 sSSSmallFallback = new LLFontList(); 386 delete sSSSmallFallback;
375 if (!loadFaceFallback(sSSSmallFallback, sanserif_fallback_file, small_size*ss_fallback_scale)) 387 }
376 { 388 sSSSmallFallback = new LLFontList();
377 delete sSSSmallFallback; 389 if (!loadFaceFallback(
378 sSSSmallFallback = NULL; 390 sSSSmallFallback,
379 } 391 sanserif_fallback_file,
392 small_size*ss_fallback_scale))
393 {
394 delete sSSSmallFallback;
395 sSSSmallFallback = NULL;
380 } 396 }
381 failed |= !loadFace(sSansSerifSmall, sansserif_file, small_size, sSSSmallFallback); 397 failed |= !loadFace(sSansSerifSmall, sansserif_file, small_size, sSSSmallFallback);
382 398
@@ -393,14 +409,18 @@ BOOL LLFontGL::initDefaultFonts(F32 screen_dpi, F32 x_scale, F32 y_scale,
393 sSansSerifBold->reset(); 409 sSansSerifBold->reset();
394 } 410 }
395 411
396 if (!sSSBoldFallback) 412 if (sSSBoldFallback)
397 { 413 {
398 sSSBoldFallback = new LLFontList(); 414 delete sSSBoldFallback;
399 if (!loadFaceFallback(sSSBoldFallback, sanserif_fallback_file, medium_size*ss_fallback_scale)) 415 }
400 { 416 sSSBoldFallback = new LLFontList();
401 delete sSSBoldFallback; 417 if (!loadFaceFallback(
402 sSSBoldFallback = NULL; 418 sSSBoldFallback,
403 } 419 sanserif_fallback_file,
420 medium_size*ss_fallback_scale))
421 {
422 delete sSSBoldFallback;
423 sSSBoldFallback = NULL;
404 } 424 }
405 failed |= !loadFace(sSansSerifBold, sansserif_bold_file, medium_size, sSSBoldFallback); 425 failed |= !loadFace(sSansSerifBold, sansserif_bold_file, medium_size, sSSBoldFallback);
406 426
diff --git a/linden/indra/newview/featuretable.txt b/linden/indra/newview/featuretable.txt
index 59e816d..17e2427 100644
--- a/linden/indra/newview/featuretable.txt
+++ b/linden/indra/newview/featuretable.txt
@@ -40,7 +40,7 @@ VertexShaderEnable 1 1
40// 40//
41list Class0 41list Class0
42VertexShaderEnable 1 0 42VertexShaderEnable 1 0
43RenderVBO 1 1 43RenderVBO 1 0
44RenderDistance 1 64 44RenderDistance 1 64
45RenderAvatarVP 1 0 45RenderAvatarVP 1 0
46RenderAvatarMode 1 0 46RenderAvatarMode 1 0
diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp
index ece0958..5407ee2 100644
--- a/linden/indra/newview/lleventpoll.cpp
+++ b/linden/indra/newview/lleventpoll.cpp
@@ -49,8 +49,8 @@ public:
49 49
50 void stop() 50 void stop()
51 { 51 {
52 llinfos << "LLEventPoll::Impl::stop <" << mCount << "> " 52 lldebugs << "LLEventPoll::Impl::stop <" << mCount << "> "
53 << mPollURL << llendl; 53 << mPollURL << llendl;
54 // there should be a way to stop a LLHTTPClient request in progress 54 // there should be a way to stop a LLHTTPClient request in progress
55 mDone = true; 55 mDone = true;
56 mPtr = NULL; 56 mPtr = NULL;
@@ -69,7 +69,7 @@ private:
69 ~Impl() 69 ~Impl()
70 { 70 {
71 lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> " 71 lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> "
72 << mPollURL << llendl; 72 << mPollURL << llendl;
73 } 73 }
74 74
75 75
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 377e620..1007bc4 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -1245,7 +1245,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
1245 } 1245 }
1246 1246
1247 // when applying a filter, matching folders get their contents downloaded first 1247 // when applying a filter, matching folders get their contents downloaded first
1248 if (getRoot()->isFilterActive() && getFiltered(filter.getMinRequiredGeneration()) && !gInventory.isCategoryComplete(mListener->getUUID())) 1248 if (filter.isNotDefault() && getFiltered(filter.getMinRequiredGeneration()) && !gInventory.isCategoryComplete(mListener->getUUID()))
1249 { 1249 {
1250 gInventory.startBackgroundFetch(mListener->getUUID()); 1250 gInventory.startBackgroundFetch(mListener->getUUID());
1251 } 1251 }
@@ -2543,6 +2543,7 @@ LLFolderView::LLFolderView( const LLString& name, LLViewerImage* root_folder_ico
2543 mShowSingleSelection(FALSE), 2543 mShowSingleSelection(FALSE),
2544 mArrangeGeneration(0), 2544 mArrangeGeneration(0),
2545 mSelectCallback(NULL), 2545 mSelectCallback(NULL),
2546 mSelectionChanged(FALSE),
2546 mMinWidth(0), 2547 mMinWidth(0),
2547 mDragAndDropThisFrame(FALSE) 2548 mDragAndDropThisFrame(FALSE)
2548{ 2549{
@@ -4237,7 +4238,7 @@ void LLFolderView::idle(void* user_data)
4237 4238
4238 self->mFilter.clearModified(); 4239 self->mFilter.clearModified();
4239 BOOL filter_modified_and_active = self->mCompletedFilterGeneration < self->mFilter.getCurrentGeneration() && 4240 BOOL filter_modified_and_active = self->mCompletedFilterGeneration < self->mFilter.getCurrentGeneration() &&
4240 self->mFilter.isActive(); 4241 self->mFilter.isNotDefault();
4241 self->mNeedsAutoSelect = filter_modified_and_active && 4242 self->mNeedsAutoSelect = filter_modified_and_active &&
4242 !(gFocusMgr.childHasKeyboardFocus(self) || gFocusMgr.getMouseCapture()); 4243 !(gFocusMgr.childHasKeyboardFocus(self) || gFocusMgr.getMouseCapture());
4243 4244
@@ -4427,9 +4428,11 @@ LLInventoryFilter::LLInventoryFilter(const LLString& name) :
4427 mFilterGeneration = 0; 4428 mFilterGeneration = 0;
4428 mMustPassGeneration = S32_MAX; 4429 mMustPassGeneration = S32_MAX;
4429 mMinRequiredGeneration = 0; 4430 mMinRequiredGeneration = 0;
4431 mFilterCount = 0;
4430 mNextFilterGeneration = mFilterGeneration + 1; 4432 mNextFilterGeneration = mFilterGeneration + 1;
4431 4433
4432 mLastLogoff = gSavedPerAccountSettings.getU32("LastLogoff"); 4434 mLastLogoff = gSavedPerAccountSettings.getU32("LastLogoff");
4435 mFilterBehavior = FILTER_NONE;
4433} 4436}
4434 4437
4435LLInventoryFilter::~LLInventoryFilter() 4438LLInventoryFilter::~LLInventoryFilter()
@@ -4469,7 +4472,7 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const
4469} 4472}
4470 4473
4471// has user modified default filter params? 4474// has user modified default filter params?
4472BOOL LLInventoryFilter::isActive() 4475BOOL LLInventoryFilter::isNotDefault()
4473{ 4476{
4474 return mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes 4477 return mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes
4475 || mFilterSubString.size() 4478 || mFilterSubString.size()
@@ -4479,6 +4482,16 @@ BOOL LLInventoryFilter::isActive()
4479 || mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo; 4482 || mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo;
4480} 4483}
4481 4484
4485BOOL LLInventoryFilter::isActive()
4486{
4487 return mFilterOps.mFilterTypes != 0xffffffff
4488 || mFilterSubString.size()
4489 || mFilterOps.mPermissions != PERM_NONE
4490 || mFilterOps.mMinDate != 0
4491 || mFilterOps.mMaxDate != U32_MAX
4492 || mFilterOps.mHoursAgo != 0;
4493}
4494
4482BOOL LLInventoryFilter::isModified() 4495BOOL LLInventoryFilter::isModified()
4483{ 4496{
4484 return mModified; 4497 return mModified;
@@ -4688,7 +4701,7 @@ void LLInventoryFilter::setModified(EFilterBehavior behavior)
4688 mFilterBehavior = FILTER_RESTART; 4701 mFilterBehavior = FILTER_RESTART;
4689 } 4702 }
4690 4703
4691 if (isActive()) 4704 if (isNotDefault())
4692 { 4705 {
4693 // if not keeping current filter results, update last valid as well 4706 // if not keeping current filter results, update last valid as well
4694 switch(mFilterBehavior) 4707 switch(mFilterBehavior)
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index ccadba9..eb67373 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -210,6 +210,7 @@ public:
210 BOOL check(LLFolderViewItem* item); 210 BOOL check(LLFolderViewItem* item);
211 std::string::size_type getStringMatchOffset() const; 211 std::string::size_type getStringMatchOffset() const;
212 BOOL isActive(); 212 BOOL isActive();
213 BOOL isNotDefault();
213 BOOL isModified(); 214 BOOL isModified();
214 BOOL isModifiedAndClear(); 215 BOOL isModifiedAndClear();
215 BOOL isSinceLogoff(); 216 BOOL isSinceLogoff();
@@ -697,7 +698,7 @@ public:
697 PermissionMask getFilterPermissions() const { return mFilter.getFilterPermissions(); } 698 PermissionMask getFilterPermissions() const { return mFilter.getFilterPermissions(); }
698 LLInventoryFilter::EFolderShow getShowFolderState() { return mFilter.getShowFolderState(); } 699 LLInventoryFilter::EFolderShow getShowFolderState() { return mFilter.getShowFolderState(); }
699 U32 getSortOrder() const; 700 U32 getSortOrder() const;
700 BOOL isFilterActive() { return mFilter.isActive(); } 701 BOOL isFilterModified() { return mFilter.isNotDefault(); }
701 BOOL getAllowMultiSelect() { return mAllowMultiSelect; } 702 BOOL getAllowMultiSelect() { return mAllowMultiSelect; }
702 703
703 // Close all folders in the view 704 // Close all folders in the view
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index afeb3be..162cf9f 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -622,7 +622,7 @@ void LLInventoryView::onClose(bool app_quitting)
622 gSavedSettings.setBOOL("ShowInventory", FALSE); 622 gSavedSettings.setBOOL("ShowInventory", FALSE);
623 } 623 }
624 // clear filters, but save user's folder state first 624 // clear filters, but save user's folder state first
625 if (!mActivePanel->getRootFolder()->isFilterActive()) 625 if (!mActivePanel->getRootFolder()->isFilterModified())
626 { 626 {
627 mSavedFolderState->setApply(FALSE); 627 mSavedFolderState->setApply(FALSE);
628 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); 628 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
@@ -868,7 +868,7 @@ void LLInventoryView::onSearchEdit(const LLString& search_string, void* user_dat
868 } 868 }
869 869
870 // save current folder open state if no filter currently applied 870 // save current folder open state if no filter currently applied
871 if (!self->mActivePanel->getRootFolder()->isFilterActive()) 871 if (!self->mActivePanel->getRootFolder()->isFilterModified())
872 { 872 {
873 self->mSavedFolderState->setApply(FALSE); 873 self->mSavedFolderState->setApply(FALSE);
874 self->mActivePanel->getRootFolder()->applyFunctorRecursively(*self->mSavedFolderState); 874 self->mActivePanel->getRootFolder()->applyFunctorRecursively(*self->mSavedFolderState);
diff --git a/linden/indra/newview/llpolymesh.cpp b/linden/indra/newview/llpolymesh.cpp
index 4f339ac..2f3dfce 100644
--- a/linden/indra/newview/llpolymesh.cpp
+++ b/linden/indra/newview/llpolymesh.cpp
@@ -340,7 +340,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const char *fileName )
340 } 340 }
341 341
342 U8 rotationOrder; 342 U8 rotationOrder;
343 numRead = fread(&rotationOrder, 1, 1, fp); 343 numRead = fread(&rotationOrder, sizeof(U8), 1, fp);
344 344
345 if (numRead != 1) 345 if (numRead != 1)
346 { 346 {
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index cfdf899..2fe1190 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -633,6 +633,8 @@ BOOL idle_startup()
633 633
634 if (STATE_LOGIN_SHOW == gStartupState) 634 if (STATE_LOGIN_SHOW == gStartupState)
635 { 635 {
636 llinfos << "Initializing Window" << llendl;
637
636 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 638 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
637 // Push our window frontmost 639 // Push our window frontmost
638 gViewerWindow->getWindow()->show(); 640 gViewerWindow->getWindow()->show();
@@ -2550,13 +2552,19 @@ BOOL idle_startup()
2550 2552
2551void login_show() 2553void login_show()
2552{ 2554{
2555 llinfos << "Initializing Login Screen" << llendl;
2556
2553 LLPanelLogin::show( gViewerWindow->getVirtualWindowRect(), 2557 LLPanelLogin::show( gViewerWindow->getVirtualWindowRect(),
2554 gSavedSettings.getBOOL("UseDebugLogin"), 2558 gSavedSettings.getBOOL("UseDebugLogin"),
2555 login_callback, NULL ); 2559 login_callback, NULL );
2556 2560
2561 llinfos << "Decoding Images" << llendl;
2562
2557 // Make sure all the UI textures are present and decoded. 2563 // Make sure all the UI textures are present and decoded.
2558 gImageList.decodeAllImages(2.f); 2564 gImageList.decodeAllImages(2.f);
2559 2565
2566 llinfos << "Setting Servers" << llendl;
2567
2560 if( USERSERVER_OTHER == gUserServerChoice ) 2568 if( USERSERVER_OTHER == gUserServerChoice )
2561 { 2569 {
2562 LLPanelLogin::addServer( gUserServerName, USERSERVER_OTHER ); 2570 LLPanelLogin::addServer( gUserServerName, USERSERVER_OTHER );
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index 666b5d2..8ae6862 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -821,7 +821,7 @@ void LLFloaterTexturePicker::onSearchEdit(const LLString& search_string, void* u
821 else if (picker->mInventoryPanel->getFilterSubString().empty()) 821 else if (picker->mInventoryPanel->getFilterSubString().empty())
822 { 822 {
823 // first letter in search term, save existing folder open state 823 // first letter in search term, save existing folder open state
824 if (!picker->mInventoryPanel->getRootFolder()->isFilterActive()) 824 if (!picker->mInventoryPanel->getRootFolder()->isFilterModified())
825 { 825 {
826 picker->mSavedFolderState.setApply(FALSE); 826 picker->mSavedFolderState.setApply(FALSE);
827 picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(picker->mSavedFolderState); 827 picker->mInventoryPanel->getRootFolder()->applyFunctorRecursively(picker->mSavedFolderState);
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 3eaa275..4b29303 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -63,6 +63,7 @@ LLToolPie *gToolPie = NULL;
63 63
64LLViewerObject* LLToolPie::sClickActionObject = NULL; 64LLViewerObject* LLToolPie::sClickActionObject = NULL;
65LLHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL; 65LLHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL;
66U8 LLToolPie::sClickAction = 0;
66 67
67extern void handle_buy(void*); 68extern void handle_buy(void*);
68 69
@@ -164,17 +165,17 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
164 // If it's a left-click, and we have a special action, do it. 165 // If it's a left-click, and we have a special action, do it.
165 if (useClickAction(always_show, mask, object, parent)) 166 if (useClickAction(always_show, mask, object, parent))
166 { 167 {
167 U8 click_action = 0; 168 sClickAction = 0;
168 if (object && object->getClickAction()) 169 if (object && object->getClickAction())
169 { 170 {
170 click_action = object->getClickAction(); 171 sClickAction = object->getClickAction();
171 } 172 }
172 else if (parent && parent->getClickAction()) 173 else if (parent && parent->getClickAction())
173 { 174 {
174 click_action = parent->getClickAction(); 175 sClickAction = parent->getClickAction();
175 } 176 }
176 177
177 switch(click_action) 178 switch(sClickAction)
178 { 179 {
179 case CLICK_ACTION_TOUCH: 180 case CLICK_ACTION_TOUCH:
180 default: 181 default:
@@ -187,8 +188,9 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show)
187 if (object && object->flagTakesMoney() 188 if (object && object->flagTakesMoney()
188 || parent && parent->flagTakesMoney()) 189 || parent && parent->flagTakesMoney())
189 { 190 {
190 sClickActionObject = parent; 191 // pay event goes to object actually clicked on
191 sLeftClickSelection = LLToolSelect::handleObjectSelection(parent, MASK_NONE, FALSE, TRUE); 192 sClickActionObject = object;
193 sLeftClickSelection = LLToolSelect::handleObjectSelection(object, MASK_NONE, FALSE, TRUE);
192 return TRUE; 194 return TRUE;
193 } 195 }
194 break; 196 break;
@@ -417,13 +419,12 @@ void LLToolPie::selectionPropertiesReceived()
417 419
418 if (!sLeftClickSelection->isEmpty()) 420 if (!sLeftClickSelection->isEmpty())
419 { 421 {
420 LLViewerObject* root = sLeftClickSelection->getFirstRootObject(); 422 LLViewerObject* selected_object = sLeftClickSelection->getPrimaryObject();
421 // since we don't currently have a way to lock a selection, it could have changed 423 // since we don't currently have a way to lock a selection, it could have changed
422 // after we initially clicked on the object 424 // after we initially clicked on the object
423 if (root == sClickActionObject) 425 if (selected_object == sClickActionObject)
424 { 426 {
425 U8 action = root->getClickAction(); 427 switch (sClickAction)
426 switch (action)
427 { 428 {
428 case CLICK_ACTION_BUY: 429 case CLICK_ACTION_BUY:
429 handle_buy(NULL); 430 handle_buy(NULL);
@@ -441,6 +442,7 @@ void LLToolPie::selectionPropertiesReceived()
441 } 442 }
442 sLeftClickSelection = NULL; 443 sLeftClickSelection = NULL;
443 sClickActionObject = NULL; 444 sClickActionObject = NULL;
445 sClickAction = 0;
444} 446}
445 447
446BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) 448BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
diff --git a/linden/indra/newview/lltoolpie.h b/linden/indra/newview/lltoolpie.h
index dd54b5c..fbfd1a6 100644
--- a/linden/indra/newview/lltoolpie.h
+++ b/linden/indra/newview/lltoolpie.h
@@ -73,6 +73,7 @@ protected:
73 LLUUID mHitObjectID; 73 LLUUID mHitObjectID;
74 BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region 74 BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region
75 static LLViewerObject* sClickActionObject; 75 static LLViewerObject* sClickActionObject;
76 static U8 sClickAction;
76 static LLHandle<LLObjectSelection> sLeftClickSelection; 77 static LLHandle<LLObjectSelection> sLeftClickSelection;
77}; 78};
78 79
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index f09b297..c7d2ee2 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -68,7 +68,7 @@ const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
68 // ST_IM_COUNT 68 // ST_IM_COUNT
69 StatAttributes("IMs sent", FALSE, FALSE), 69 StatAttributes("IMs sent", FALSE, FALSE),
70 // ST_FULLSCREEN_BOOL 70 // ST_FULLSCREEN_BOOL
71 StatAttributes("Fullscreen mode", TRUE, FALSE), 71 StatAttributes("Fullscreen mode", FALSE, FALSE),
72 // ST_RELEASE_COUNT 72 // ST_RELEASE_COUNT
73 StatAttributes("Object release count", FALSE, FALSE), 73 StatAttributes("Object release count", FALSE, FALSE),
74 // ST_CREATE_COUNT 74 // ST_CREATE_COUNT
@@ -118,61 +118,61 @@ const StatAttributes STAT_INFO[LLViewerStats::ST_COUNT] =
118 // ST_UPLOAD_ANIM_COUNT 118 // ST_UPLOAD_ANIM_COUNT
119 StatAttributes("Animations uploaded", FALSE, FALSE), 119 StatAttributes("Animations uploaded", FALSE, FALSE),
120 // ST_FPS_8_SECONDS 120 // ST_FPS_8_SECONDS
121 StatAttributes("Seconds below 8 FPS", TRUE, TRUE), 121 StatAttributes("Seconds below 8 FPS", FALSE, TRUE),
122 // ST_SIM_FPS_20_SECONDS 122 // ST_SIM_FPS_20_SECONDS
123 StatAttributes("Seconds with sim FPS below 20", TRUE, TRUE), 123 StatAttributes("Seconds with sim FPS below 20", FALSE, TRUE),
124 // ST_PHYS_FPS_20_SECONDS 124 // ST_PHYS_FPS_20_SECONDS
125 StatAttributes("Seconds with physics FPS below 20", FALSE, TRUE), 125 StatAttributes("Seconds with physics FPS below 20", FALSE, TRUE),
126 // ST_LOSS_05_SECONDS 126 // ST_LOSS_05_SECONDS
127 StatAttributes("Seconds with packet loss > 5%", TRUE, TRUE), 127 StatAttributes("Seconds with packet loss > 5%", FALSE, TRUE),
128 // ST_FPS_DROP_50_RATIO 128 // ST_FPS_DROP_50_RATIO
129 StatAttributes("Ratio of frames 2x longer than previous", FALSE, FALSE), 129 StatAttributes("Ratio of frames 2x longer than previous", FALSE, FALSE),
130 // ST_ENABLE_VBO 130 // ST_ENABLE_VBO
131 StatAttributes("Vertex Buffers Enabled", TRUE, FALSE), 131 StatAttributes("Vertex Buffers Enabled", TRUE, FALSE),
132 // ST_DELTA_BANDWIDTH 132 // ST_DELTA_BANDWIDTH
133 StatAttributes("Increase/Decrease in bandwidth based on packet loss", TRUE, FALSE), 133 StatAttributes("Increase/Decrease in bandwidth based on packet loss", FALSE, FALSE),
134 // ST_MAX_BANDWIDTH 134 // ST_MAX_BANDWIDTH
135 StatAttributes("Max bandwidth setting", TRUE, FALSE), 135 StatAttributes("Max bandwidth setting", FALSE, FALSE),
136 // ST_LIGHTING_DETAIL 136 // ST_LIGHTING_DETAIL
137 StatAttributes("Lighting Detail", TRUE, FALSE), 137 StatAttributes("Lighting Detail", FALSE, FALSE),
138 // ST_VISIBLE_AVATARS 138 // ST_VISIBLE_AVATARS
139 StatAttributes("Visible Avatars", TRUE, FALSE), 139 StatAttributes("Visible Avatars", FALSE, FALSE),
140 // ST_SHADER_OJECTS 140 // ST_SHADER_OJECTS
141 StatAttributes("Object Shaders", TRUE, FALSE), 141 StatAttributes("Object Shaders", FALSE, FALSE),
142 // ST_SHADER_ENVIRONMENT 142 // ST_SHADER_ENVIRONMENT
143 StatAttributes("Environment Shaders", TRUE, FALSE), 143 StatAttributes("Environment Shaders", FALSE, FALSE),
144 // ST_VISIBLE_DRAW_DIST 144 // ST_VISIBLE_DRAW_DIST
145 StatAttributes("Draw Distance", TRUE, FALSE), 145 StatAttributes("Draw Distance", FALSE, FALSE),
146 // ST_VISIBLE_CHAT_BUBBLES 146 // ST_VISIBLE_CHAT_BUBBLES
147 StatAttributes("Chat Bubbles Enabled", TRUE, FALSE), 147 StatAttributes("Chat Bubbles Enabled", FALSE, FALSE),
148 // ST_SHADER_AVATAR 148 // ST_SHADER_AVATAR
149 StatAttributes("Avatar Shaders", TRUE, FALSE), 149 StatAttributes("Avatar Shaders", FALSE, FALSE),
150 // ST_FRAME_SECS 150 // ST_FRAME_SECS
151 StatAttributes("FRAME_SECS", TRUE, FALSE), 151 StatAttributes("FRAME_SECS", FALSE, FALSE),
152 // ST_UPDATE_SECS 152 // ST_UPDATE_SECS
153 StatAttributes("UPDATE_SECS", TRUE, FALSE), 153 StatAttributes("UPDATE_SECS", FALSE, FALSE),
154 // ST_NETWORK_SECS 154 // ST_NETWORK_SECS
155 StatAttributes("NETWORK_SECS", TRUE, FALSE), 155 StatAttributes("NETWORK_SECS", FALSE, FALSE),
156 // ST_IMAGE_SECS 156 // ST_IMAGE_SECS
157 StatAttributes("IMAGE_SECS", TRUE, FALSE), 157 StatAttributes("IMAGE_SECS", FALSE, FALSE),
158 // ST_REBUILD_SECS 158 // ST_REBUILD_SECS
159 StatAttributes("REBUILD_SECS", TRUE, FALSE), 159 StatAttributes("REBUILD_SECS", FALSE, FALSE),
160 // ST_RENDER_SECS 160 // ST_RENDER_SECS
161 StatAttributes("RENDER_SECS", TRUE, FALSE), 161 StatAttributes("RENDER_SECS", FALSE, FALSE),
162 // ST_CROSSING_AVG 162 // ST_CROSSING_AVG
163 StatAttributes("CROSSING_AVG", TRUE, FALSE), 163 StatAttributes("CROSSING_AVG", FALSE, FALSE),
164 // ST_CROSSING_MAX 164 // ST_CROSSING_MAX
165 StatAttributes("CROSSING_MAX", TRUE, FALSE), 165 StatAttributes("CROSSING_MAX", FALSE, FALSE),
166 // ST_LIBXUL_WIDGET_USED 166 // ST_LIBXUL_WIDGET_USED
167 StatAttributes("LibXUL Widget used", TRUE, FALSE), 167 StatAttributes("LibXUL Widget used", FALSE, FALSE),
168 // ST_WINDOW_WIDTH 168 // ST_WINDOW_WIDTH
169 StatAttributes("Window width", TRUE, FALSE), 169 StatAttributes("Window width", FALSE, FALSE),
170 // ST_WINDOW_HEIGHT 170 // ST_WINDOW_HEIGHT
171 StatAttributes("Window height", TRUE, FALSE), 171 StatAttributes("Window height", FALSE, FALSE),
172 // ST_TEX_BAKES 172 // ST_TEX_BAKES
173 StatAttributes("Texture Bakes", TRUE, FALSE), 173 StatAttributes("Texture Bakes", FALSE, FALSE),
174 // ST_TEX_REBAKES 174 // ST_TEX_REBAKES
175 StatAttributes("Texture Rebakes", TRUE, FALSE) 175 StatAttributes("Texture Rebakes", FALSE, FALSE)
176}; 176};
177 177
178LLViewerStats::LLViewerStats() 178LLViewerStats::LLViewerStats()
diff --git a/linden/indra/newview/llvlcomposition.cpp b/linden/indra/newview/llvlcomposition.cpp
index f2fa1e6..e0cb40d 100644
--- a/linden/indra/newview/llvlcomposition.cpp
+++ b/linden/indra/newview/llvlcomposition.cpp
@@ -269,6 +269,7 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
269 269
270 // These have already been validated by generateComposition. 270 // These have already been validated by generateComposition.
271 U8* st_data[4]; 271 U8* st_data[4];
272 S32 st_data_size[4]; // for debugging
272 273
273 for (S32 i = 0; i < 4; i++) 274 for (S32 i = 0; i < 4; i++)
274 { 275 {
@@ -299,6 +300,7 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
299 } 300 }
300 } 301 }
301 st_data[i] = mRawImages[i]->getData(); 302 st_data[i] = mRawImages[i]->getData();
303 st_data_size[i] = mRawImages[i]->getDataSize();
302 } 304 }
303 305
304 /////////////////////////////////////// 306 ///////////////////////////////////////
@@ -413,9 +415,18 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,
413 for (U32 k = 0; k < tex_comps; k++) 415 for (U32 k = 0; k < tex_comps; k++)
414 { 416 {
415 // Linearly interpolate based on composition. 417 // Linearly interpolate based on composition.
416 F32 a = *(st_data[tex0] + st_offset); 418 if (st_offset >= st_data_size[tex0] || st_offset >= st_data_size[tex1])
417 F32 b = *(st_data[tex1] + st_offset); 419 {
418 rawp[ offset ] = (U8)lltrunc( a + composition * (b - a) ); 420 // SJB: This shouldn't be happening, but does... Rounding error?
421 //llwarns << "offset 0 [" << tex0 << "] =" << st_offset << " >= size=" << st_data_size[tex0] << llendl;
422 //llwarns << "offset 1 [" << tex1 << "] =" << st_offset << " >= size=" << st_data_size[tex1] << llendl;
423 }
424 else
425 {
426 F32 a = *(st_data[tex0] + st_offset);
427 F32 b = *(st_data[tex1] + st_offset);
428 rawp[ offset ] = (U8)lltrunc( a + composition * (b - a) );
429 }
419 offset++; 430 offset++;
420 st_offset++; 431 st_offset++;
421 } 432 }
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index b8822dc..5fd9230 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,15 @@
1Release Notes for Second Life 1.14.0(1) March 30, 2007
2=====================================
3Fixes:
4* Fixed: When going to recent items tab in inventory, inventory contents do not download
5* Fixed: Crash in llvlcomposition
6* Fixed: VWR-200: money(); events in a linked sets fail to trigger
7* Fixed: VWR-109: Characters from fallback fonts don't scale properly
8* Fixed: VWR-100: Messages form OpenJPEG only in debug mode
9* Fixed: VWR-97: Several iterator bugs in llmessage
10* Fixed: VWR-45: trivial patch, initialize variables
11* Fixed: VWR-14: Inconsistancy with reading binary data in llpolymesh.cpp
12
1Release Notes for Second Life 1.14.0(0) March 27, 2007 13Release Notes for Second Life 1.14.0(0) March 27, 2007
2===================================== 14=====================================
3New feature: 15New feature: