aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
diff options
context:
space:
mode:
Diffstat (limited to 'linden')
-rw-r--r--linden/indra/llcommon/llversionviewer.h2
-rw-r--r--linden/indra/llimage/llimage.cpp5
-rw-r--r--linden/indra/llmath/llvolumemgr.cpp28
-rw-r--r--linden/indra/llmath/llvolumemgr.h1
-rw-r--r--linden/indra/llrender/llimagegl.cpp14
-rw-r--r--linden/indra/llxml/llcontrol.cpp33
-rw-r--r--linden/indra/llxml/llcontrol.h2
-rw-r--r--linden/indra/newview/app_settings/settings.xml2
-rw-r--r--linden/indra/newview/lldynamictexture.cpp6
-rw-r--r--linden/indra/newview/llfloateranimpreview.cpp3
-rw-r--r--linden/indra/newview/llfloaterimagepreview.cpp8
-rw-r--r--linden/indra/newview/llglsandbox.cpp35
-rw-r--r--linden/indra/newview/llimpanel.cpp4
-rw-r--r--linden/indra/newview/lltexlayer.cpp4
-rw-r--r--linden/indra/newview/lltoolmorph.cpp5
-rw-r--r--linden/indra/newview/llviewermenu.cpp4
-rw-r--r--linden/indra/newview/llviewermessage.cpp2
-rw-r--r--linden/indra/newview/llvovolume.cpp20
-rw-r--r--linden/indra/newview/releasenotes.txt8
19 files changed, 137 insertions, 49 deletions
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h
index 747526f..b81fb8d 100644
--- a/linden/indra/llcommon/llversionviewer.h
+++ b/linden/indra/llcommon/llversionviewer.h
@@ -34,7 +34,7 @@
34 34
35const S32 LL_VERSION_MAJOR = 1; 35const S32 LL_VERSION_MAJOR = 1;
36const S32 LL_VERSION_MINOR = 20; 36const S32 LL_VERSION_MINOR = 20;
37const S32 LL_VERSION_PATCH = 3; 37const S32 LL_VERSION_PATCH = 4;
38const S32 LL_VERSION_BUILD = 0; 38const S32 LL_VERSION_BUILD = 0;
39 39
40const char * const LL_CHANNEL = "Second Life Release"; 40const char * const LL_CHANNEL = "Second Life Release";
diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp
index 3600cce..65d19de 100644
--- a/linden/indra/llimage/llimage.cpp
+++ b/linden/indra/llimage/llimage.cpp
@@ -768,8 +768,8 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
768 LLMemType mt1((LLMemType::EMemType)mMemType); 768 LLMemType mt1((LLMemType::EMemType)mMemType);
769 LLImageRaw* dst = this; // Just for clarity. 769 LLImageRaw* dst = this; // Just for clarity.
770 770
771 llassert( (1 == src->getComponents()) || (3 == src->getComponents()) || (4 == src->getComponents()) ); 771 llassert_always( (1 == src->getComponents()) || (3 == src->getComponents()) || (4 == src->getComponents()) );
772 llassert( src->getComponents() == dst->getComponents() ); 772 llassert_always( src->getComponents() == dst->getComponents() );
773 773
774 if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) ) 774 if( (src->getWidth() == dst->getWidth()) && (src->getHeight() == dst->getHeight()) )
775 { 775 {
@@ -779,6 +779,7 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
779 779
780 // Vertical 780 // Vertical
781 S32 temp_data_size = src->getWidth() * dst->getHeight() * getComponents(); 781 S32 temp_data_size = src->getWidth() * dst->getHeight() * getComponents();
782 llassert_always(temp_data_size > 0);
782 U8* temp_buffer = new U8[ temp_data_size ]; 783 U8* temp_buffer = new U8[ temp_data_size ];
783 for( S32 col = 0; col < src->getWidth(); col++ ) 784 for( S32 col = 0; col < src->getWidth(); col++ )
784 { 785 {
diff --git a/linden/indra/llmath/llvolumemgr.cpp b/linden/indra/llmath/llvolumemgr.cpp
index 0b49bb3..0b5464c 100644
--- a/linden/indra/llmath/llvolumemgr.cpp
+++ b/linden/indra/llmath/llvolumemgr.cpp
@@ -77,11 +77,8 @@ BOOL LLVolumeMgr::cleanup()
77 iter != end; iter++) 77 iter != end; iter++)
78 { 78 {
79 LLVolumeLODGroup *volgroupp = iter->second; 79 LLVolumeLODGroup *volgroupp = iter->second;
80 if (volgroupp->getNumRefs() != 0) 80 if (volgroupp->cleanupRefs() == false)
81 { 81 {
82 llwarns << "Volume group " << volgroupp << " has "
83 << volgroupp->getNumRefs() << " remaining refs" << llendl;
84 llwarns << *volgroupp->getVolumeParams() << llendl;
85 no_refs = FALSE; 82 no_refs = FALSE;
86 } 83 }
87 delete volgroupp; 84 delete volgroupp;
@@ -274,6 +271,29 @@ LLVolumeLODGroup::~LLVolumeLODGroup()
274 } 271 }
275} 272}
276 273
274// Called from LLVolumeMgr::cleanup
275bool LLVolumeLODGroup::cleanupRefs()
276{
277 bool res = true;
278 if (mRefs != 0)
279 {
280 llwarns << "Volume group has remaining refs:" << getNumRefs() << llendl;
281 mRefs = 0;
282 for (S32 i = 0; i < NUM_LODS; i++)
283 {
284 if (mLODRefs[i] > 0)
285 {
286 llwarns << " LOD " << i << " refs = " << mLODRefs[i] << llendl;
287 mLODRefs[i] = 0;
288 mVolumeLODs[i] = NULL;
289 }
290 }
291 llwarns << *getVolumeParams() << llendl;
292 res = false;
293 }
294 return res;
295}
296
277LLVolume* LLVolumeLODGroup::getLODVolume(const S32 detail) 297LLVolume* LLVolumeLODGroup::getLODVolume(const S32 detail)
278{ 298{
279 llassert(detail >=0 && detail < NUM_LODS); 299 llassert(detail >=0 && detail < NUM_LODS);
diff --git a/linden/indra/llmath/llvolumemgr.h b/linden/indra/llmath/llvolumemgr.h
index 8f107f6..dcaca01 100644
--- a/linden/indra/llmath/llvolumemgr.h
+++ b/linden/indra/llmath/llvolumemgr.h
@@ -53,6 +53,7 @@ public:
53 53
54 LLVolumeLODGroup(const LLVolumeParams &params); 54 LLVolumeLODGroup(const LLVolumeParams &params);
55 ~LLVolumeLODGroup(); 55 ~LLVolumeLODGroup();
56 bool cleanupRefs();
56 57
57 static S32 getDetailFromTan(const F32 tan_angle); 58 static S32 getDetailFromTan(const F32 tan_angle);
58 static void getDetailProximity(const F32 tan_angle, F32 &to_lower, F32& to_higher); 59 static void getDetailProximity(const F32 tan_angle, F32 &to_lower, F32& to_higher);
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index c4b90a7..92d8eb4 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -615,18 +615,25 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
615 S32 w = width, h = height; 615 S32 w = width, h = height;
616 const U8* prev_mip_data = 0; 616 const U8* prev_mip_data = 0;
617 const U8* cur_mip_data = 0; 617 const U8* cur_mip_data = 0;
618 S32 prev_mip_size = 0;
619 S32 cur_mip_size = 0;
618 for (int m=0; m<nummips; m++) 620 for (int m=0; m<nummips; m++)
619 { 621 {
620 if (m==0) 622 if (m==0)
621 { 623 {
622 cur_mip_data = data_in; 624 cur_mip_data = data_in;
625 cur_mip_size = width * height * mComponents;
623 } 626 }
624 else 627 else
625 { 628 {
626 S32 bytes = w * h * mComponents; 629 S32 bytes = w * h * mComponents;
630 llassert(prev_mip_data);
631 llassert(prev_mip_size == bytes);
627 U8* new_data = new U8[bytes]; 632 U8* new_data = new U8[bytes];
633 llassert_always(new_data);
628 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents); 634 LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
629 cur_mip_data = new_data; 635 cur_mip_data = new_data;
636 cur_mip_size = bytes;
630 } 637 }
631 llassert(w > 0 && h > 0 && cur_mip_data); 638 llassert(w > 0 && h > 0 && cur_mip_data);
632 { 639 {
@@ -651,12 +658,14 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
651 delete[] prev_mip_data; 658 delete[] prev_mip_data;
652 } 659 }
653 prev_mip_data = cur_mip_data; 660 prev_mip_data = cur_mip_data;
661 prev_mip_size = cur_mip_size;
654 w >>= 1; 662 w >>= 1;
655 h >>= 1; 663 h >>= 1;
656 } 664 }
657 if (prev_mip_data && prev_mip_data != data_in) 665 if (prev_mip_data && prev_mip_data != data_in)
658 { 666 {
659 delete[] prev_mip_data; 667 delete[] prev_mip_data;
668 prev_mip_data = NULL;
660 } 669 }
661 } 670 }
662 } 671 }
@@ -1058,6 +1067,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1058 llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl; 1067 llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl;
1059 } 1068 }
1060 1069
1070 BOOL return_result = TRUE ;
1061 LLGLint is_compressed = 0; 1071 LLGLint is_compressed = 0;
1062 if (compressed_ok) 1072 if (compressed_ok)
1063 { 1073 {
@@ -1073,6 +1083,7 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1073 { 1083 {
1074 llwarns << "Error happens when reading back the compressed texture image." << llendl ; 1084 llwarns << "Error happens when reading back the compressed texture image." << llendl ;
1075 imageraw->deleteData() ; 1085 imageraw->deleteData() ;
1086 return_result = FALSE ;
1076 } 1087 }
1077 stop_glerror(); 1088 stop_glerror();
1078 } 1089 }
@@ -1084,11 +1095,12 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1084 { 1095 {
1085 llwarns << "Error happens when reading back the texture image." << llendl ; 1096 llwarns << "Error happens when reading back the texture image." << llendl ;
1086 imageraw->deleteData() ; 1097 imageraw->deleteData() ;
1098 return_result = FALSE ;
1087 } 1099 }
1088 stop_glerror(); 1100 stop_glerror();
1089 } 1101 }
1090 1102
1091 return TRUE; 1103 return return_result ;
1092} 1104}
1093 1105
1094void LLImageGL::destroyGLTexture() 1106void LLImageGL::destroyGLTexture()
diff --git a/linden/indra/llxml/llcontrol.cpp b/linden/indra/llxml/llcontrol.cpp
index 18292d2..8c74127 100644
--- a/linden/indra/llxml/llcontrol.cpp
+++ b/linden/indra/llxml/llcontrol.cpp
@@ -953,7 +953,7 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)
953 return num_saved; 953 return num_saved;
954} 954}
955 955
956U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declaration, eControlType declare_as) 956U32 LLControlGroup::loadFromFile(const LLString& filename)
957{ 957{
958 LLString name; 958 LLString name;
959 LLSD settings; 959 LLSD settings;
@@ -965,24 +965,47 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat
965 llwarns << "Cannot find file " << filename << " to load." << llendl; 965 llwarns << "Cannot find file " << filename << " to load." << llendl;
966 return 0; 966 return 0;
967 } 967 }
968
968 S32 ret = LLSDSerialize::fromXML(settings, infile); 969 S32 ret = LLSDSerialize::fromXML(settings, infile);
970
969 if (ret <= 0) 971 if (ret <= 0)
970 { 972 {
971 infile.close(); 973 infile.close();
972 llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl; 974 llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl;
973 return loadFromFileLegacy(filename, require_declaration, declare_as); 975 return loadFromFileLegacy(filename, TRUE, TYPE_STRING);
974 } 976 }
975 977
976 U32 validitems = 0; 978 U32 validitems = 0;
977 int persist = 1; 979 int persist = 1;
978 for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr) 980 for(LLSD::map_const_iterator itr = settings.beginMap(); itr != settings.endMap(); ++itr)
979 { 981 {
980 name = (*itr).first; 982 name = (*itr).first;
981 control_map = (*itr).second; 983 control_map = (*itr).second;
982 984
983 if(control_map.has("Persist")) persist = control_map["Persist"].asInteger(); 985 if(control_map.has("Persist"))
986 {
987 persist = control_map["Persist"].asInteger();
988 }
984 989
985 declareControl(name, typeStringToEnum(control_map["Type"].asString()), control_map["Value"], control_map["Comment"].asString(), persist); 990 // If the control exists just set the value from the input file.
991 LLControlVariable* existing_control = getControl(name);
992 if(existing_control)
993 {
994 // Check persistence. If not persisted, we shouldn't be loading.
995 if(existing_control->isPersisted())
996 {
997 existing_control->setValue(control_map["Value"]);
998 }
999 }
1000 else
1001 {
1002 declareControl(name,
1003 typeStringToEnum(control_map["Type"].asString()),
1004 control_map["Value"],
1005 control_map["Comment"].asString(),
1006 persist
1007 );
1008 }
986 1009
987 ++validitems; 1010 ++validitems;
988 } 1011 }
diff --git a/linden/indra/llxml/llcontrol.h b/linden/indra/llxml/llcontrol.h
index 9e11628..2511940 100644
--- a/linden/indra/llxml/llcontrol.h
+++ b/linden/indra/llxml/llcontrol.h
@@ -213,7 +213,7 @@ public:
213 // as the given type. 213 // as the given type.
214 U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING); 214 U32 loadFromFileLegacy(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
215 U32 saveToFile(const LLString& filename, BOOL nondefault_only); 215 U32 saveToFile(const LLString& filename, BOOL nondefault_only);
216 U32 loadFromFile(const LLString& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING); 216 U32 loadFromFile(const LLString& filename);
217 void resetToDefaults(); 217 void resetToDefaults();
218 218
219 219
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 7be1db3..2bfac48 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -5763,7 +5763,7 @@
5763 <key>RenderUseCleverUI</key> 5763 <key>RenderUseCleverUI</key>
5764 <map> 5764 <map>
5765 <key>Comment</key> 5765 <key>Comment</key>
5766 <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain (and enabled by default) on apple.</string> 5766 <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain on apple.</string>
5767 <key>Persist</key> 5767 <key>Persist</key>
5768 <integer>1</integer> 5768 <integer>1</integer>
5769 <key>Type</key> 5769 <key>Type</key>
diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp
index 14b80d6..6bcf140 100644
--- a/linden/indra/newview/lldynamictexture.cpp
+++ b/linden/indra/newview/lldynamictexture.cpp
@@ -223,17 +223,15 @@ BOOL LLDynamicTexture::updateAllInstances()
223 glClear(GL_DEPTH_BUFFER_BIT); 223 glClear(GL_DEPTH_BUFFER_BIT);
224 gDisplaySwapBuffers = FALSE; 224 gDisplaySwapBuffers = FALSE;
225 225
226 LLVertexBuffer::startRender();
227 gGL.start();
228
229 dynamicTexture->preRender(); // Must be called outside of startRender() 226 dynamicTexture->preRender(); // Must be called outside of startRender()
230 227
228 LLVertexBuffer::startRender();
229
231 if (dynamicTexture->render()) 230 if (dynamicTexture->render())
232 { 231 {
233 result = TRUE; 232 result = TRUE;
234 sNumRenders++; 233 sNumRenders++;
235 } 234 }
236 gGL.stop();
237 LLVertexBuffer::stopRender(); 235 LLVertexBuffer::stopRender();
238 236
239 dynamicTexture->postRender(result); 237 dynamicTexture->postRender(result);
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 1ea0495..317636e 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -1038,6 +1038,8 @@ BOOL LLPreviewAnimation::render()
1038{ 1038{
1039 mNeedsUpdate = FALSE; 1039 mNeedsUpdate = FALSE;
1040 LLVOAvatar* avatarp = mDummyAvatar; 1040 LLVOAvatar* avatarp = mDummyAvatar;
1041
1042 gGL.start();
1041 1043
1042 glMatrixMode(GL_PROJECTION); 1044 glMatrixMode(GL_PROJECTION);
1043 gGL.pushMatrix(); 1045 gGL.pushMatrix();
@@ -1108,7 +1110,6 @@ BOOL LLPreviewAnimation::render()
1108 avatarPoolp->renderAvatars(avatarp); // renders only one avatar 1110 avatarPoolp->renderAvatars(avatarp); // renders only one avatar
1109 } 1111 }
1110 1112
1111 gGL.start();
1112 return TRUE; 1113 return TRUE;
1113} 1114}
1114 1115
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index 7b1c8cc..f1f7ff6 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -667,6 +667,8 @@ void LLImagePreviewAvatar::setPreviewTarget(const char* joint_name, const char*
667//----------------------------------------------------------------------------- 667//-----------------------------------------------------------------------------
668BOOL LLImagePreviewAvatar::render() 668BOOL LLImagePreviewAvatar::render()
669{ 669{
670 gGL.start();
671
670 mNeedsUpdate = FALSE; 672 mNeedsUpdate = FALSE;
671 LLVOAvatar* avatarp = mDummyAvatar; 673 LLVOAvatar* avatarp = mDummyAvatar;
672 674
@@ -723,8 +725,6 @@ BOOL LLImagePreviewAvatar::render()
723 avatarPoolp->renderAvatars(avatarp); // renders only one avatar 725 avatarPoolp->renderAvatars(avatarp); // renders only one avatar
724 } 726 }
725 727
726 gGL.start();
727
728 return TRUE; 728 return TRUE;
729} 729}
730 730
@@ -823,6 +823,8 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance)
823//----------------------------------------------------------------------------- 823//-----------------------------------------------------------------------------
824BOOL LLImagePreviewSculpted::render() 824BOOL LLImagePreviewSculpted::render()
825{ 825{
826 gGL.start();
827
826 mNeedsUpdate = FALSE; 828 mNeedsUpdate = FALSE;
827 829
828 LLGLSUIDefault def; 830 LLGLSUIDefault def;
@@ -917,6 +919,8 @@ BOOL LLImagePreviewSculpted::render()
917 delete [] normals; 919 delete [] normals;
918 } 920 }
919 921
922 gGL.stop();
923
920 return TRUE; 924 return TRUE;
921} 925}
922 926
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index 28b92fd..f63eaf3 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -1006,17 +1006,17 @@ void LLViewerObjectList::renderObjectBeacons()
1006 return; 1006 return;
1007 } 1007 }
1008 1008
1009 S32 i;
1010 //const LLFontGL *font = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF); 1009 //const LLFontGL *font = LLResMgr::getInstance()->getRes(LLFONT_SANSSERIF);
1011 1010
1012 LLGLSUIDefault gls_ui; 1011 LLGLSUIDefault gls_ui;
1013 1012
1014 S32 last_line_width = -1;
1015
1016 { 1013 {
1017 LLGLSNoTexture gls_ui_no_texture; 1014 LLGLSNoTexture gls_ui_no_texture;
1018 gGL.begin(GL_LINES); 1015
1019 for (i = 0; i < mDebugBeacons.count(); i++) 1016 S32 last_line_width = -1;
1017 // gGL.begin(GL_LINES); // Always happens in (line_width != last_line_width)
1018
1019 for (S32 i = 0; i < mDebugBeacons.count(); i++)
1020 { 1020 {
1021 const LLDebugBeacon &debug_beacon = mDebugBeacons[i]; 1021 const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
1022 LLColor4 color = debug_beacon.mColor; 1022 LLColor4 color = debug_beacon.mColor;
@@ -1024,8 +1024,11 @@ void LLViewerObjectList::renderObjectBeacons()
1024 S32 line_width = debug_beacon.mLineWidth; 1024 S32 line_width = debug_beacon.mLineWidth;
1025 if (line_width != last_line_width) 1025 if (line_width != last_line_width)
1026 { 1026 {
1027 gGL.end(); 1027 if (i > 0)
1028 gGL.flush(); 1028 {
1029 gGL.end();
1030 gGL.flush();
1031 }
1029 glLineWidth( (F32)line_width ); 1032 glLineWidth( (F32)line_width );
1030 last_line_width = line_width; 1033 last_line_width = line_width;
1031 gGL.begin(GL_LINES); 1034 gGL.begin(GL_LINES);
@@ -1049,17 +1052,21 @@ void LLViewerObjectList::renderObjectBeacons()
1049 LLGLSNoTexture gls_ui_no_texture; 1052 LLGLSNoTexture gls_ui_no_texture;
1050 LLGLDepthTest gls_depth(GL_TRUE); 1053 LLGLDepthTest gls_depth(GL_TRUE);
1051 1054
1052 gGL.begin(GL_LINES); 1055 S32 last_line_width = -1;
1053 last_line_width = -1; 1056 // gGL.begin(GL_LINES); // Always happens in (line_width != last_line_width)
1054 for (i = 0; i < mDebugBeacons.count(); i++) 1057
1058 for (S32 i = 0; i < mDebugBeacons.count(); i++)
1055 { 1059 {
1056 const LLDebugBeacon &debug_beacon = mDebugBeacons[i]; 1060 const LLDebugBeacon &debug_beacon = mDebugBeacons[i];
1057 1061
1058 S32 line_width = debug_beacon.mLineWidth; 1062 S32 line_width = debug_beacon.mLineWidth;
1059 if (line_width != last_line_width) 1063 if (line_width != last_line_width)
1060 { 1064 {
1061 gGL.end(); 1065 if (i > 0)
1062 gGL.flush(); 1066 {
1067 gGL.end();
1068 gGL.flush();
1069 }
1063 glLineWidth( (F32)line_width ); 1070 glLineWidth( (F32)line_width );
1064 last_line_width = line_width; 1071 last_line_width = line_width;
1065 gGL.begin(GL_LINES); 1072 gGL.begin(GL_LINES);
@@ -1076,12 +1083,12 @@ void LLViewerObjectList::renderObjectBeacons()
1076 1083
1077 draw_line_cube(0.10f, thisline); 1084 draw_line_cube(0.10f, thisline);
1078 } 1085 }
1086
1079 gGL.end(); 1087 gGL.end();
1080
1081 gGL.flush(); 1088 gGL.flush();
1082 glLineWidth(1.f); 1089 glLineWidth(1.f);
1083 1090
1084 for (i = 0; i < mDebugBeacons.count(); i++) 1091 for (S32 i = 0; i < mDebugBeacons.count(); i++)
1085 { 1092 {
1086 LLDebugBeacon &debug_beacon = mDebugBeacons[i]; 1093 LLDebugBeacon &debug_beacon = mDebugBeacons[i];
1087 if (debug_beacon.mString == "") 1094 if (debug_beacon.mString == "")
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 6f06117..3cb9dfb 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -1061,7 +1061,7 @@ LLFloaterIMPanel::LLFloaterIMPanel(
1061 mSessionUUID(session_id), 1061 mSessionUUID(session_id),
1062 mVoiceChannel(NULL), 1062 mVoiceChannel(NULL),
1063 mSessionInitialized(FALSE), 1063 mSessionInitialized(FALSE),
1064 1064 mSessionStartMsgPos(0),
1065 mOtherParticipantUUID(other_participant_id), 1065 mOtherParticipantUUID(other_participant_id),
1066 mDialog(dialog), 1066 mDialog(dialog),
1067 mTyping(FALSE), 1067 mTyping(FALSE),
@@ -1090,6 +1090,7 @@ LLFloaterIMPanel::LLFloaterIMPanel(
1090 mSessionUUID(session_id), 1090 mSessionUUID(session_id),
1091 mVoiceChannel(NULL), 1091 mVoiceChannel(NULL),
1092 mSessionInitialized(FALSE), 1092 mSessionInitialized(FALSE),
1093 mSessionStartMsgPos(0),
1093 mOtherParticipantUUID(other_participant_id), 1094 mOtherParticipantUUID(other_participant_id),
1094 mDialog(dialog), 1095 mDialog(dialog),
1095 mTyping(FALSE), 1096 mTyping(FALSE),
@@ -1182,6 +1183,7 @@ void LLFloaterIMPanel::init(const LLString& session_label)
1182 //we don't need to need to wait for any responses 1183 //we don't need to need to wait for any responses
1183 //so we're already initialized 1184 //so we're already initialized
1184 mSessionInitialized = TRUE; 1185 mSessionInitialized = TRUE;
1186 mSessionStartMsgPos = 0;
1185 } 1187 }
1186 else 1188 else
1187 { 1189 {
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 66d9a33..5a0a843 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -244,6 +244,8 @@ BOOL LLTexLayerSetBuffer::render()
244 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal()); 244 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
245 BOOL success = TRUE; 245 BOOL success = TRUE;
246 246
247 gGL.start();
248
247 // Composite bump 249 // Composite bump
248 if( mBumpTexName ) 250 if( mBumpTexName )
249 { 251 {
@@ -295,6 +297,8 @@ BOOL LLTexLayerSetBuffer::render()
295 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 297 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
296 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 298 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
297 299
300 gGL.stop();
301
298 // we have valid texture data now 302 // we have valid texture data now
299 mInitialized = TRUE; 303 mInitialized = TRUE;
300 mNeedsUpdate = FALSE; 304 mNeedsUpdate = FALSE;
diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp
index 5b3f1eb..9acf3a0 100644
--- a/linden/indra/newview/lltoolmorph.cpp
+++ b/linden/indra/newview/lltoolmorph.cpp
@@ -163,6 +163,8 @@ void LLVisualParamHint::preRender(BOOL clear_depth)
163//----------------------------------------------------------------------------- 163//-----------------------------------------------------------------------------
164BOOL LLVisualParamHint::render() 164BOOL LLVisualParamHint::render()
165{ 165{
166 gGL.start();
167
166 LLVisualParamReset::sDirty = TRUE; 168 LLVisualParamReset::sDirty = TRUE;
167 LLVOAvatar* avatarp = gAgent.getAvatarObject(); 169 LLVOAvatar* avatarp = gAgent.getAvatarObject();
168 170
@@ -223,6 +225,7 @@ BOOL LLVisualParamHint::render()
223 LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation); 225 LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation);
224 226
225 gGL.stop(); 227 gGL.stop();
228
226 LLViewerCamera::getInstance()->setAspect((F32)mWidth / (F32)mHeight); 229 LLViewerCamera::getInstance()->setAspect((F32)mWidth / (F32)mHeight);
227 LLViewerCamera::getInstance()->setOriginAndLookAt( 230 LLViewerCamera::getInstance()->setOriginAndLookAt(
228 camera_pos, // camera 231 camera_pos, // camera
@@ -238,7 +241,7 @@ BOOL LLVisualParamHint::render()
238 avatarPoolp->renderAvatars(avatarp); // renders only one avatar 241 avatarPoolp->renderAvatars(avatarp); // renders only one avatar
239 } 242 }
240 avatarp->setVisualParamWeight(mVisualParam, mLastParamWeight); 243 avatarp->setVisualParamWeight(mVisualParam, mLastParamWeight);
241 gGL.start(); 244
242 return TRUE; 245 return TRUE;
243} 246}
244 247
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 6ee80a6..2459133 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -4897,12 +4897,12 @@ BOOL menu_check_build_tool( void* user_data )
4897void handle_reload_settings(void*) 4897void handle_reload_settings(void*)
4898{ 4898{
4899 gSavedSettings.resetToDefaults(); 4899 gSavedSettings.resetToDefaults();
4900 gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"), TRUE); 4900 gSavedSettings.loadFromFile(gSavedSettings.getString("ClientSettingsFile"));
4901 4901
4902 llinfos << "Loading colors from colors.xml" << llendl; 4902 llinfos << "Loading colors from colors.xml" << llendl;
4903 std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml"); 4903 std::string color_file = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"colors.xml");
4904 gColors.resetToDefaults(); 4904 gColors.resetToDefaults();
4905 gColors.loadFromFile(color_file, FALSE, TYPE_COL4U); 4905 gColors.loadFromFileLegacy(color_file, FALSE, TYPE_COL4U);
4906} 4906}
4907 4907
4908class LLWorldSetHomeLocation : public view_listener_t 4908class LLWorldSetHomeLocation : public view_listener_t
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 592ef39..e9f100e 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -5063,7 +5063,7 @@ void callback_load_url(S32 option, void* data)
5063 5063
5064 if (0 == option) 5064 if (0 == option)
5065 { 5065 {
5066 LLWeb::loadURL(infop->mUrl); 5066 LLWeb::loadURLExternal(infop->mUrl);
5067 } 5067 }
5068 5068
5069 delete infop; 5069 delete infop;
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index 188c277..6b5b9bb 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -766,9 +766,7 @@ void LLVOVolume::sculpt()
766 766
767 sculpt_height = raw_image->getHeight(); 767 sculpt_height = raw_image->getHeight();
768 sculpt_width = raw_image->getWidth(); 768 sculpt_width = raw_image->getWidth();
769 769 sculpt_components = raw_image->getComponents();
770 sculpt_components = raw_image->getComponents();
771 sculpt_data = raw_image->getData();
772 770
773 if(is_valid) 771 if(is_valid)
774 { 772 {
@@ -776,12 +774,18 @@ void LLVOVolume::sculpt()
776 } 774 }
777 if(!is_valid) 775 if(!is_valid)
778 { 776 {
779 sculpt_width = 0 ; 777 sculpt_width = 0;
780 sculpt_height = 0 ; 778 sculpt_height = 0;
779 sculpt_data = NULL ;
780 }
781 else
782 {
783 if (raw_image->getDataSize() < sculpt_height * sculpt_width * sculpt_components)
784 llerrs << "Sculpt: image data size = " << raw_image->getDataSize()
785 << " < " << sculpt_height << " x " << sculpt_width << " x " <<sculpt_components << llendl;
786
787 sculpt_data = raw_image->getData();
781 } 788 }
782
783 llassert_always(raw_image->getDataSize() >= sculpt_height * sculpt_width * sculpt_components);
784
785 getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level); 789 getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level);
786 } 790 }
787} 791}
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 0243fd7..c87e237 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,11 @@
1Release Notes for Second Life 1.20(4) April 24th, 2008
2=====================================
3Fixes:
4* VWR-6286 - changed the method LLControlGroup::loadFromFile to only load values of settings that are persistent
5* Instant Crash on Editing Appearance
6* Crash in LLFloaterIMPanel when starting conference
7* Crash on LLVOVolume::sculpt - newview/llvovolume.cpp
8
1Release Notes for Second Life 1.20(3) April 23th, 2008 9Release Notes for Second Life 1.20(3) April 23th, 2008
2===================================== 10=====================================
3Fixes: 11Fixes: