aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra')
-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
17 files changed, 176 insertions, 103 deletions
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: