aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/app_settings/colors_base.xml2
-rw-r--r--linden/indra/newview/app_settings/settings.xml11
-rw-r--r--linden/indra/newview/llappviewer.cpp102
-rw-r--r--linden/indra/newview/llcubemap.cpp70
-rw-r--r--linden/indra/newview/llcylinder.cpp1
-rw-r--r--linden/indra/newview/lldrawable.cpp7
-rw-r--r--linden/indra/newview/lldrawpool.cpp29
-rw-r--r--linden/indra/newview/lldrawpool.h5
-rw-r--r--linden/indra/newview/lldrawpoolalpha.cpp17
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp32
-rw-r--r--linden/indra/newview/lldrawpoolbump.cpp40
-rw-r--r--linden/indra/newview/lldrawpoolground.cpp3
-rw-r--r--linden/indra/newview/lldrawpoolsimple.cpp11
-rw-r--r--linden/indra/newview/lldrawpoolsky.cpp10
-rw-r--r--linden/indra/newview/lldrawpoolterrain.cpp108
-rw-r--r--linden/indra/newview/lldrawpooltree.cpp13
-rw-r--r--linden/indra/newview/lldrawpoolwater.cpp33
-rw-r--r--linden/indra/newview/lldrawpoolwlsky.cpp11
-rw-r--r--linden/indra/newview/llface.cpp67
-rw-r--r--linden/indra/newview/llface.h2
-rw-r--r--linden/indra/newview/llflexibleobject.cpp18
-rw-r--r--linden/indra/newview/llflexibleobject.h2
-rw-r--r--linden/indra/newview/llfloateranimpreview.cpp1
-rw-r--r--linden/indra/newview/llfloaterauction.cpp3
-rw-r--r--linden/indra/newview/llfloaterhud.cpp26
-rw-r--r--linden/indra/newview/llfloaterhud.h2
-rw-r--r--linden/indra/newview/llmemoryview.cpp2
-rw-r--r--linden/indra/newview/llpanellogin.cpp1
-rw-r--r--linden/indra/newview/llpostprocess.cpp3
-rw-r--r--linden/indra/newview/llspatialpartition.cpp21
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp13
-rw-r--r--linden/indra/newview/llviewerjointmesh.cpp29
-rw-r--r--linden/indra/newview/llviewerkeyboard.cpp22
-rw-r--r--linden/indra/newview/llvotree.cpp6
-rw-r--r--linden/indra/newview/llvovolume.cpp12
-rw-r--r--linden/indra/newview/llvowlsky.cpp33
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp30
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h8
-rw-r--r--linden/indra/newview/mozilla-theme/classic.jarbin281793 -> 190670 bytes
-rw-r--r--linden/indra/newview/pipeline.cpp58
-rw-r--r--linden/indra/newview/pipeline.h3
-rw-r--r--linden/indra/newview/releasenotes.txt24
-rw-r--r--linden/indra/newview/skins/xui/de/floater_active_speakers.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/menu_viewer.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_general.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml17
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_world_map.xml8
-rw-r--r--linden/indra/newview/skins/xui/es/panel_preferences_general.xml14
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_preferences_general.xml8
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_general.xml10
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_preferences_general.xml10
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_toolbar.xml7
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_preferences_general.xml8
53 files changed, 413 insertions, 574 deletions
diff --git a/linden/indra/newview/app_settings/colors_base.xml b/linden/indra/newview/app_settings/colors_base.xml
index d793116..42b119c 100644
--- a/linden/indra/newview/app_settings/colors_base.xml
+++ b/linden/indra/newview/app_settings/colors_base.xml
@@ -48,7 +48,7 @@
48 48
49<!-- TEXTFIELDS --> 49<!-- TEXTFIELDS -->
50<TextBgFocusColor value="255, 255, 255, 255" /> <!-- Text field background when receiving input (focused) --> 50<TextBgFocusColor value="255, 255, 255, 255" /> <!-- Text field background when receiving input (focused) -->
51<TextBgReadOnlyColor value="210, 220, 230, 255" /> <!-- Text field background when read-only --> 51<TextBgReadOnlyColor value="255, 255, 255, 140" /> <!-- Text field background when read-only -->
52<TextBgWriteableColor value="255, 255, 255, 255" /> <!-- Text field background when not receiving input (unfocused) --> 52<TextBgWriteableColor value="255, 255, 255, 255" /> <!-- Text field background when not receiving input (unfocused) -->
53<TextCursorColor value="0, 0, 0, 255" /> 53<TextCursorColor value="0, 0, 0, 255" />
54<TextFgColor value="45, 48, 45, 255" /> 54<TextFgColor value="45, 48, 45, 255" />
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 63d429f..7be1db3 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -9759,17 +9759,6 @@
9759 <integer>0</integer> 9759 <integer>0</integer>
9760 </array> 9760 </array>
9761 </map> 9761 </map>
9762 <key>AlertedUnsupportedHardware</key>
9763 <map>
9764 <key>Comment</key>
9765 <string>Toggle that lets us tell the user he's on old hardware only once</string>
9766 <key>Persist</key>
9767 <integer>1</integer>
9768 <key>Type</key>
9769 <string>Boolean</string>
9770 <key>Value</key>
9771 <integer>0</integer>
9772 </map>
9773 <key>RenderFastAlpha</key> 9762 <key>RenderFastAlpha</key>
9774 <map> 9763 <map>
9775 <key>Comment</key> 9764 <key>Comment</key>
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 7c71e46..4a9a158 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -64,6 +64,7 @@
64#include "llurldispatcher.h" 64#include "llurldispatcher.h"
65#include "llurlhistory.h" 65#include "llurlhistory.h"
66#include "llfirstuse.h" 66#include "llfirstuse.h"
67#include "llglimmediate.h"
67 68
68#include "llweb.h" 69#include "llweb.h"
69#include "llsecondlifeurls.h" 70#include "llsecondlifeurls.h"
@@ -409,10 +410,11 @@ static void settings_to_globals()
409static void settings_modify() 410static void settings_modify()
410{ 411{
411 LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderUseFBO"); 412 LLRenderTarget::sUseFBO = gSavedSettings.getBOOL("RenderUseFBO");
412 LLVOAvatar::sUseImpostors = FALSE; //gSavedSettings.getBOOL("RenderUseImpostors"); 413 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
413 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); 414 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
414 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4] 415 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4]
415 416 gGL.setClever(gSavedSettings.getBOOL("RenderUseCleverUI"));
417
416#if LL_VECTORIZE 418#if LL_VECTORIZE
417 if (gSysCPU.hasAltivec()) 419 if (gSysCPU.hasAltivec())
418 { 420 {
@@ -767,15 +769,6 @@ bool LLAppViewer::init()
767 return 1; 769 return 1;
768 } 770 }
769 771
770#if LL_DARWIN
771 // Display the release notes for the current version
772 if(!gHideLinks && gCurrentVersion != gLastRunVersion)
773 {
774 // Current version and last run version don't match exactly. Display the release notes.
775 DisplayReleaseNotes();
776 }
777#endif
778
779 // 772 //
780 // Initialize the window 773 // Initialize the window
781 // 774 //
@@ -814,51 +807,55 @@ bool LLAppViewer::init()
814 return 0; 807 return 0;
815 } 808 }
816 809
817 // alert the user if they are using unsupported hardware 810
818 if(!gSavedSettings.getBOOL("AlertedUnsupportedHardware")) 811 bool unsupported = false;
819 { 812 LLString::format_map_t args;
820 bool unsupported = false; 813 LLString minSpecs;
821 LLString::format_map_t args;
822 LLString minSpecs;
823 814
824 // get cpu data from xml 815 // get cpu data from xml
825 std::stringstream minCPUString(LLAlertDialog::getTemplateMessage("UnsupportedCPUAmount")); 816 std::stringstream minCPUString(LLAlertDialog::getTemplateMessage("UnsupportedCPUAmount"));
826 S32 minCPU = 0; 817 S32 minCPU = 0;
827 minCPUString >> minCPU; 818 minCPUString >> minCPU;
828 819
829 // get RAM data from XML 820 // get RAM data from XML
830 std::stringstream minRAMString(LLAlertDialog::getTemplateMessage("UnsupportedRAMAmount")); 821 std::stringstream minRAMString(LLAlertDialog::getTemplateMessage("UnsupportedRAMAmount"));
831 U64 minRAM = 0; 822 U64 minRAM = 0;
832 minRAMString >> minRAM; 823 minRAMString >> minRAM;
833 minRAM = minRAM * 1024 * 1024; 824 minRAM = minRAM * 1024 * 1024;
834 825
835 if(!LLFeatureManager::getInstance()->isGPUSupported()) 826 if(!LLFeatureManager::getInstance()->isGPUSupported() && LLFeatureManager::getInstance()->getGPUClass() != GPU_CLASS_UNKNOWN)
836 { 827 {
837 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedGPU"); 828 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedGPU");
838 minSpecs += "\n"; 829 minSpecs += "\n";
839 unsupported = true; 830 unsupported = true;
840 } 831 }
841 if(gSysCPU.getMhz() < minCPU) 832 if(gSysCPU.getMhz() < minCPU)
842 { 833 {
843 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedCPU"); 834 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedCPU");
844 minSpecs += "\n"; 835 minSpecs += "\n";
845 unsupported = true; 836 unsupported = true;
846 } 837 }
847 if(gSysMemory.getPhysicalMemoryClamped() < minRAM) 838 if(gSysMemory.getPhysicalMemoryClamped() < minRAM)
848 { 839 {
849 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedRAM"); 840 minSpecs += LLAlertDialog::getTemplateMessage("UnsupportedRAM");
850 minSpecs += "\n"; 841 minSpecs += "\n";
851 unsupported = true; 842 unsupported = true;
852 } 843 }
853 844
854 if(unsupported) 845 if (LLFeatureManager::getInstance()->getGPUClass() == GPU_CLASS_UNKNOWN)
846 {
847 gViewerWindow->alertXml("UnknownGPU");
848 }
849
850 if(unsupported)
851 {
852 if(!gSavedSettings.controlExists("WarnUnsupportedHardware")
853 || gSavedSettings.getBOOL("WarnUnsupportedHardware"))
855 { 854 {
856 args["MINSPECS"] = minSpecs; 855 args["MINSPECS"] = minSpecs;
857 gViewerWindow->alertXml("UnsupportedHardware", args ); 856 gViewerWindow->alertXml("UnsupportedHardware", args );
858
859 // turn off flag
860 gSavedSettings.setBOOL("AlertedUnsupportedHardware", TRUE);
861 } 857 }
858
862 } 859 }
863 860
864 // Save the current version to the prefs file 861 // Save the current version to the prefs file
@@ -1445,10 +1442,13 @@ void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
1445 1442
1446 LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file); 1443 LLString full_settings_path = gDirUtilp->getExpandedFilename(path_index, settings_file);
1447 1444
1448 if(settings_name == sGlobalSettingsName) 1445 if(settings_name == sGlobalSettingsName
1446 && path_index == LL_PATH_USER_SETTINGS)
1449 { 1447 {
1450 // The non-persistent setting, ClientSettingsFile, specifies a 1448 // The non-persistent setting, ClientSettingsFile, specifies a
1451 // custom name to use for the global settings file. 1449 // custom name to use for the global settings file.
1450 // Only apply this setting if this method is setting the 'Global'
1451 // settings from the user_settings path.
1452 std::string custom_path; 1452 std::string custom_path;
1453 if(gSettings[sGlobalSettingsName]->controlExists("ClientSettingsFile")) 1453 if(gSettings[sGlobalSettingsName]->controlExists("ClientSettingsFile"))
1454 { 1454 {
diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp
index e11f058..31937ba 100644
--- a/linden/indra/newview/llcubemap.cpp
+++ b/linden/indra/newview/llcubemap.cpp
@@ -185,12 +185,19 @@ void LLCubeMap::bind()
185 ) 185 )
186 { 186 {
187 // We assume that if they have cube mapping, they have multitexturing. 187 // We assume that if they have cube mapping, they have multitexturing.
188 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 188 if (mTextureStage > 0)
189 {
190 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage);
191 }
189 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 192 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
190 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName()); 193 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName());
191 194
192 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 195 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
193 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, (use_cube_mipmaps? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR)); 196 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, (use_cube_mipmaps? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
197 if (mTextureStage > 0)
198 {
199 glActiveTextureARB(GL_TEXTURE0_ARB);
200 }
194 } 201 }
195 else 202 else
196 { 203 {
@@ -212,9 +219,17 @@ void LLCubeMap::enableTexture(S32 stage)
212 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap") 219 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")
213 ) 220 )
214 { 221 {
215 glActiveTextureARB(GL_TEXTURE0_ARB + stage); // NOTE: leaves texture stage set 222 if (stage > 0)
223 {
224 glActiveTextureARB(GL_TEXTURE0_ARB + stage);
225 }
216 226
217 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 227 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
228
229 if (stage > 0)
230 {
231 glActiveTextureARB(GL_TEXTURE0_ARB);
232 }
218 } 233 }
219} 234}
220 235
@@ -223,7 +238,10 @@ void LLCubeMap::enableTextureCoords(S32 stage)
223 mTextureCoordStage = stage; 238 mTextureCoordStage = stage;
224 if (gGLManager.mHasCubeMap && stage >= 0) 239 if (gGLManager.mHasCubeMap && stage >= 0)
225 { 240 {
226 glActiveTextureARB(GL_TEXTURE0_ARB + stage); // NOTE: leaves texture stage set 241 if (stage > 0)
242 {
243 glActiveTextureARB(GL_TEXTURE0_ARB + stage);
244 }
227 245
228 glEnable(GL_TEXTURE_GEN_R); 246 glEnable(GL_TEXTURE_GEN_R);
229 glEnable(GL_TEXTURE_GEN_S); 247 glEnable(GL_TEXTURE_GEN_S);
@@ -233,7 +251,10 @@ void LLCubeMap::enableTextureCoords(S32 stage)
233 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); 251 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
234 glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); 252 glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
235 253
236 glActiveTextureARB(GL_TEXTURE0_ARB); 254 if (stage > 0)
255 {
256 glActiveTextureARB(GL_TEXTURE0_ARB);
257 }
237 } 258 }
238} 259}
239 260
@@ -249,9 +270,16 @@ void LLCubeMap::disableTexture(void)
249 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap") 270 //&& LLFeatureManager::getInstance()->isFeatureAvailable("RenderCubeMap")
250 ) 271 )
251 { 272 {
252 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 273 if (mTextureStage > 0)
274 {
275 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage);
276 }
253 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); 277 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
254 glDisable(GL_TEXTURE_CUBE_MAP_ARB); 278 glDisable(GL_TEXTURE_CUBE_MAP_ARB);
279 if (mTextureStage > 0)
280 {
281 glActiveTextureARB(GL_TEXTURE0_ARB);
282 }
255 } 283 }
256} 284}
257 285
@@ -259,17 +287,28 @@ void LLCubeMap::disableTextureCoords(void)
259{ 287{
260 if (gGLManager.mHasCubeMap && mTextureCoordStage >= 0) 288 if (gGLManager.mHasCubeMap && mTextureCoordStage >= 0)
261 { 289 {
262 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureCoordStage); 290 if (mTextureCoordStage > 0)
291 {
292 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureCoordStage);
293 }
263 glDisable(GL_TEXTURE_GEN_S); 294 glDisable(GL_TEXTURE_GEN_S);
264 glDisable(GL_TEXTURE_GEN_T); 295 glDisable(GL_TEXTURE_GEN_T);
265 glDisable(GL_TEXTURE_GEN_R); 296 glDisable(GL_TEXTURE_GEN_R);
297 if (mTextureCoordStage > 0)
298 {
299 glActiveTextureARB(GL_TEXTURE0_ARB);
300 }
266 } 301 }
267} 302}
268 303
269void LLCubeMap::setMatrix(S32 stage) 304void LLCubeMap::setMatrix(S32 stage)
270{ 305{
271 mMatrixStage = stage; 306 mMatrixStage = stage;
272 glActiveTextureARB(GL_TEXTURE0_ARB+stage); 307
308 if (stage > 0)
309 {
310 glActiveTextureARB(GL_TEXTURE0_ARB+stage);
311 }
273 312
274 LLVector3 x(LLVector3d(gGLModelView+0)); 313 LLVector3 x(LLVector3d(gGLModelView+0));
275 LLVector3 y(LLVector3d(gGLModelView+4)); 314 LLVector3 y(LLVector3d(gGLModelView+4));
@@ -284,16 +323,27 @@ void LLCubeMap::setMatrix(S32 stage)
284 glPushMatrix(); 323 glPushMatrix();
285 glLoadMatrixf((F32 *)trans.mMatrix); 324 glLoadMatrixf((F32 *)trans.mMatrix);
286 glMatrixMode(GL_MODELVIEW); 325 glMatrixMode(GL_MODELVIEW);
287 glActiveTextureARB(GL_TEXTURE0_ARB); 326
327 if (stage > 0)
328 {
329 glActiveTextureARB(GL_TEXTURE0_ARB);
330 }
288} 331}
289 332
290void LLCubeMap::restoreMatrix() 333void LLCubeMap::restoreMatrix()
291{ 334{
292 glActiveTextureARB(GL_TEXTURE0_ARB+mMatrixStage); 335 if (mMatrixStage > 0)
336 {
337 glActiveTextureARB(GL_TEXTURE0_ARB+mMatrixStage);
338 }
293 glMatrixMode(GL_TEXTURE); 339 glMatrixMode(GL_TEXTURE);
294 glPopMatrix(); 340 glPopMatrix();
295 glMatrixMode(GL_MODELVIEW); 341 glMatrixMode(GL_MODELVIEW);
296 glActiveTextureARB(GL_TEXTURE0_ARB); 342
343 if (mMatrixStage > 0)
344 {
345 glActiveTextureARB(GL_TEXTURE0_ARB);
346 }
297} 347}
298 348
299LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const 349LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const
diff --git a/linden/indra/newview/llcylinder.cpp b/linden/indra/newview/llcylinder.cpp
index 9b146a3..c05a380 100644
--- a/linden/indra/newview/llcylinder.cpp
+++ b/linden/indra/newview/llcylinder.cpp
@@ -255,7 +255,6 @@ void LLCone::render(S32 level_of_detail)
255 // center object at 0 255 // center object at 0
256 glTranslatef(0.f, 0.f, - height / 2.0f); 256 glTranslatef(0.f, 0.f, - height / 2.0f);
257 257
258 LLVertexBuffer::unbind();
259 drawSide(level_of_detail); 258 drawSide(level_of_detail);
260 drawBottom(level_of_detail); 259 drawBottom(level_of_detail);
261 260
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 3a2841d..d2b2a99 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -1188,10 +1188,11 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
1188 LLVector3 center = (mExtents[0] + mExtents[1]) * 0.5f; 1188 LLVector3 center = (mExtents[0] + mExtents[1]) * 0.5f;
1189 LLVector3 size = (mExtents[1]-mExtents[0]) * 0.5f; 1189 LLVector3 size = (mExtents[1]-mExtents[0]) * 0.5f;
1190 1190
1191 if (camera_in.AABBInFrustumNoFarClip(center, size) && 1191 if (LLPipeline::sImpostorRender ||
1192 AABBSphereIntersect(mExtents[0], mExtents[1], camera_in.getOrigin(), camera_in.mFrustumCornerDist)) 1192 (camera_in.AABBInFrustumNoFarClip(center, size) &&
1193 AABBSphereIntersect(mExtents[0], mExtents[1], camera_in.getOrigin(), camera_in.mFrustumCornerDist)))
1193 { 1194 {
1194 if (LLPipeline::calcPixelArea(center, size, camera_in) < FORCE_INVISIBLE_AREA) 1195 if (!LLPipeline::sImpostorRender && LLPipeline::calcPixelArea(center, size, camera_in) < FORCE_INVISIBLE_AREA)
1195 { 1196 {
1196 return; 1197 return;
1197 } 1198 }
diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp
index 409439a..c579c68 100644
--- a/linden/indra/newview/lldrawpool.cpp
+++ b/linden/indra/newview/lldrawpool.cpp
@@ -115,7 +115,6 @@ LLDrawPool::LLDrawPool(const U32 type)
115 sNumDrawPools++; 115 sNumDrawPools++;
116 mId = sNumDrawPools; 116 mId = sNumDrawPools;
117 mVertexShaderLevel = 0; 117 mVertexShaderLevel = 0;
118 mIndicesDrawn = 0;
119} 118}
120 119
121LLDrawPool::~LLDrawPool() 120LLDrawPool::~LLDrawPool()
@@ -136,24 +135,6 @@ void LLDrawPool::beginRenderPass( S32 pass )
136//virtual 135//virtual
137void LLDrawPool::endRenderPass( S32 pass ) 136void LLDrawPool::endRenderPass( S32 pass )
138{ 137{
139 glDisableClientState ( GL_TEXTURE_COORD_ARRAY );
140 glDisableClientState ( GL_COLOR_ARRAY );
141 glDisableClientState ( GL_NORMAL_ARRAY );
142}
143
144U32 LLDrawPool::getTrianglesDrawn() const
145{
146 return mIndicesDrawn / 3;
147}
148
149void LLDrawPool::resetTrianglesDrawn()
150{
151 mIndicesDrawn = 0;
152}
153
154void LLDrawPool::addIndicesDrawn(const U32 indices)
155{
156 mIndicesDrawn += indices;
157} 138}
158 139
159//============================= 140//=============================
@@ -224,7 +205,7 @@ void LLFacePool::drawLoop()
224{ 205{
225 if (!mDrawFace.empty()) 206 if (!mDrawFace.empty())
226 { 207 {
227 mIndicesDrawn += drawLoop(mDrawFace); 208 drawLoop(mDrawFace);
228 } 209 }
229} 210}
230 211
@@ -382,10 +363,6 @@ void LLRenderPass::renderTexture(U32 type, U32 mask)
382 363
383void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture) 364void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture)
384{ 365{
385#if !LL_RELEASE_FOR_DOWNLOAD
386 LLGLState::checkClientArrays(mask);
387#endif
388
389 for (LLCullResult::drawinfo_list_t::iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i) 366 for (LLCullResult::drawinfo_list_t::iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)
390 { 367 {
391 LLDrawInfo* pparams = *i; 368 LLDrawInfo* pparams = *i;
@@ -436,9 +413,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
436 if (params.mVertexBuffer.notNull()) 413 if (params.mVertexBuffer.notNull())
437 { 414 {
438 params.mVertexBuffer->setBuffer(mask); 415 params.mVertexBuffer->setBuffer(mask);
439 U16* indices_pointer = (U16*) params.mVertexBuffer->getIndicesPointer(); 416 params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
440 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount,
441 GL_UNSIGNED_SHORT, indices_pointer+params.mOffset);
442 gPipeline.addTrianglesDrawn(params.mCount/3); 417 gPipeline.addTrianglesDrawn(params.mCount/3);
443 } 418 }
444 419
diff --git a/linden/indra/newview/lldrawpool.h b/linden/indra/newview/lldrawpool.h
index bb354e3..3c80aef 100644
--- a/linden/indra/newview/lldrawpool.h
+++ b/linden/indra/newview/lldrawpool.h
@@ -90,15 +90,10 @@ public:
90 virtual BOOL isFacePool() { return FALSE; } 90 virtual BOOL isFacePool() { return FALSE; }
91 virtual void resetDrawOrders() = 0; 91 virtual void resetDrawOrders() = 0;
92 92
93 U32 getTrianglesDrawn() const;
94 void resetTrianglesDrawn();
95 void addIndicesDrawn(const U32 indices);
96
97protected: 93protected:
98 S32 mVertexShaderLevel; 94 S32 mVertexShaderLevel;
99 S32 mId; 95 S32 mId;
100 U32 mType; // Type of draw pool 96 U32 mType; // Type of draw pool
101 S32 mIndicesDrawn;
102}; 97};
103 98
104class LLRenderPass : public LLDrawPool 99class LLRenderPass : public LLDrawPool
diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp
index cc2600e..ddde578 100644
--- a/linden/indra/newview/lldrawpoolalpha.cpp
+++ b/linden/indra/newview/lldrawpoolalpha.cpp
@@ -77,9 +77,6 @@ void LLDrawPoolAlpha::prerender()
77void LLDrawPoolAlpha::beginRenderPass(S32 pass) 77void LLDrawPoolAlpha::beginRenderPass(S32 pass)
78{ 78{
79 LLFastTimer t(LLFastTimer::FTM_RENDER_ALPHA); 79 LLFastTimer t(LLFastTimer::FTM_RENDER_ALPHA);
80 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
81 glEnableClientState(GL_NORMAL_ARRAY);
82 glEnableClientState(GL_COLOR_ARRAY);
83 80
84 if (LLPipeline::sUnderWaterRender) 81 if (LLPipeline::sUnderWaterRender)
85 { 82 {
@@ -128,8 +125,6 @@ void LLDrawPoolAlpha::render(S32 pass)
128 { 125 {
129 glUseProgramObjectARB(0); 126 glUseProgramObjectARB(0);
130 } 127 }
131 glDisableClientState(GL_NORMAL_ARRAY);
132 glDisableClientState(GL_COLOR_ARRAY);
133 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); 128 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
134 glColor4f(1,0,0,1); 129 glColor4f(1,0,0,1);
135 LLViewerImage::sSmokeImagep->addTextureStats(1024.f*1024.f); 130 LLViewerImage::sSmokeImagep->addTextureStats(1024.f*1024.f);
@@ -141,10 +136,6 @@ void LLDrawPoolAlpha::render(S32 pass)
141 136
142void LLDrawPoolAlpha::renderAlpha(U32 mask) 137void LLDrawPoolAlpha::renderAlpha(U32 mask)
143{ 138{
144#if !LL_RELEASE_FOR_DOWNLOAD
145 LLGLState::checkClientArrays(mask);
146#endif
147
148 for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i) 139 for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)
149 { 140 {
150 LLSpatialGroup* group = *i; 141 LLSpatialGroup* group = *i;
@@ -182,9 +173,7 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
182 LLRenderPass::applyModelMatrix(params); 173 LLRenderPass::applyModelMatrix(params);
183 174
184 params.mVertexBuffer->setBuffer(mask); 175 params.mVertexBuffer->setBuffer(mask);
185 U16* indices_pointer = (U16*) params.mVertexBuffer->getIndicesPointer(); 176 params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
186 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount,
187 GL_UNSIGNED_SHORT, indices_pointer+params.mOffset);
188 gPipeline.addTrianglesDrawn(params.mCount/3); 177 gPipeline.addTrianglesDrawn(params.mCount/3);
189 } 178 }
190 } 179 }
@@ -303,9 +292,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
303 } 292 }
304 293
305 params.mVertexBuffer->setBuffer(mask); 294 params.mVertexBuffer->setBuffer(mask);
306 U16* indices_pointer = (U16*) params.mVertexBuffer->getIndicesPointer(); 295 params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
307 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount,
308 GL_UNSIGNED_SHORT, indices_pointer+params.mOffset);
309 gPipeline.addTrianglesDrawn(params.mCount/3); 296 gPipeline.addTrianglesDrawn(params.mCount/3);
310 297
311 if (params.mTextureMatrix && texture && params.mTexture.notNull()) 298 if (params.mTextureMatrix && texture && params.mTexture.notNull())
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index b461757..8e3341a 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -216,13 +216,11 @@ void LLDrawPoolAvatar::beginFootShadow()
216 } 216 }
217 217
218 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); 218 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
219 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
220} 219}
221 220
222void LLDrawPoolAvatar::endFootShadow() 221void LLDrawPoolAvatar::endFootShadow()
223{ 222{
224 gPipeline.enableLightsDynamic(); 223 gPipeline.enableLightsDynamic();
225 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
226} 224}
227 225
228void LLDrawPoolAvatar::beginRigid() 226void LLDrawPoolAvatar::beginRigid()
@@ -247,16 +245,11 @@ void LLDrawPoolAvatar::beginRigid()
247 { 245 {
248 sVertexProgram = NULL; 246 sVertexProgram = NULL;
249 } 247 }
250
251 glEnableClientState(GL_NORMAL_ARRAY);
252 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
253} 248}
254 249
255void LLDrawPoolAvatar::endRigid() 250void LLDrawPoolAvatar::endRigid()
256{ 251{
257 sShaderLevel = mVertexShaderLevel; 252 sShaderLevel = mVertexShaderLevel;
258 glDisableClientState(GL_NORMAL_ARRAY);
259 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
260 if (sVertexProgram != NULL) 253 if (sVertexProgram != NULL)
261 { 254 {
262 sVertexProgram->unbind(); 255 sVertexProgram->unbind();
@@ -265,9 +258,6 @@ void LLDrawPoolAvatar::endRigid()
265 258
266void LLDrawPoolAvatar::beginSkinned() 259void LLDrawPoolAvatar::beginSkinned()
267{ 260{
268 glEnableClientState(GL_NORMAL_ARRAY);
269 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
270
271 if (sShaderLevel > 0) 261 if (sShaderLevel > 0)
272 { 262 {
273 if (LLPipeline::sUnderWaterRender) 263 if (LLPipeline::sUnderWaterRender)
@@ -295,8 +285,7 @@ void LLDrawPoolAvatar::beginSkinned()
295 if (sShaderLevel > 0) // for hardware blending 285 if (sShaderLevel > 0) // for hardware blending
296 { 286 {
297 sRenderingSkinned = TRUE; 287 sRenderingSkinned = TRUE;
298 glClientActiveTextureARB(GL_TEXTURE1_ARB); 288
299
300 sVertexProgram->bind(); 289 sVertexProgram->bind();
301 if (sShaderLevel >= SHADER_LEVEL_CLOTH) 290 if (sShaderLevel >= SHADER_LEVEL_CLOTH)
302 { 291 {
@@ -331,7 +320,6 @@ void LLDrawPoolAvatar::endSkinned()
331 sRenderingSkinned = FALSE; 320 sRenderingSkinned = FALSE;
332 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP); 321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
333 glActiveTextureARB(GL_TEXTURE0_ARB); 322 glActiveTextureARB(GL_TEXTURE0_ARB);
334 glClientActiveTextureARB(GL_TEXTURE0_ARB);
335 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
336 if (sShaderLevel >= SHADER_LEVEL_BUMP) 324 if (sShaderLevel >= SHADER_LEVEL_BUMP)
337 { 325 {
@@ -356,10 +344,6 @@ void LLDrawPoolAvatar::endSkinned()
356 } 344 }
357 345
358 glActiveTextureARB(GL_TEXTURE0_ARB); 346 glActiveTextureARB(GL_TEXTURE0_ARB);
359 glClientActiveTextureARB(GL_TEXTURE0_ARB);
360
361 glDisableClientState(GL_NORMAL_ARRAY);
362 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
363} 347}
364 348
365 349
@@ -438,7 +422,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
438 } 422 }
439 else if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS)) 423 else if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS))
440 { 424 {
441 mIndicesDrawn += avatarp->renderFootShadows(); 425 avatarp->renderFootShadows();
442 } 426 }
443 return; 427 return;
444 } 428 }
@@ -451,7 +435,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
451 if (pass == 1) 435 if (pass == 1)
452 { 436 {
453 // render rigid meshes (eyeballs) first 437 // render rigid meshes (eyeballs) first
454 mIndicesDrawn += avatarp->renderRigid(); 438 avatarp->renderRigid();
455 return; 439 return;
456 } 440 }
457 441
@@ -548,7 +532,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
548 color.setColor(1.0f, 1.0f, 1.0f, 1.0f); 532 color.setColor(1.0f, 1.0f, 1.0f, 1.0f);
549 } 533 }
550 534
551 mIndicesDrawn += avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); 535 avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
552 } 536 }
553} 537}
554 538
@@ -609,9 +593,6 @@ void LLDrawPoolAvatar::renderForSelect()
609 return; 593 return;
610 } 594 }
611 595
612 glEnableClientState(GL_VERTEX_ARRAY);
613 glEnableClientState(GL_NORMAL_ARRAY);
614 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
615 sVertexProgram = &gAvatarPickProgram; 596 sVertexProgram = &gAvatarPickProgram;
616 if (sShaderLevel > 0) 597 if (sShaderLevel > 0)
617 { 598 {
@@ -624,13 +605,12 @@ void LLDrawPoolAvatar::renderForSelect()
624 605
625 if ((sShaderLevel > 0) && !gUseGLPick) // for hardware blending 606 if ((sShaderLevel > 0) && !gUseGLPick) // for hardware blending
626 { 607 {
627 glClientActiveTextureARB(GL_TEXTURE0_ARB);
628 sRenderingSkinned = TRUE; 608 sRenderingSkinned = TRUE;
629 sVertexProgram->bind(); 609 sVertexProgram->bind();
630 enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 610 enable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
631 } 611 }
632 612
633 mIndicesDrawn += avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE); 613 avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
634 614
635 // if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done 615 // if we're in software-blending, remember to set the fence _after_ we draw so we wait till this rendering is done
636 if ((sShaderLevel > 0) && !gUseGLPick) 616 if ((sShaderLevel > 0) && !gUseGLPick)
@@ -645,8 +625,6 @@ void LLDrawPoolAvatar::renderForSelect()
645 625
646 // restore texture mode 626 // restore texture mode
647 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 627 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
648 glDisableClientState(GL_NORMAL_ARRAY);
649 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
650} 628}
651 629
652//----------------------------------------------------------------------------- 630//-----------------------------------------------------------------------------
diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp
index 2345406..7e8b9d6 100644
--- a/linden/indra/newview/lldrawpoolbump.cpp
+++ b/linden/indra/newview/lldrawpoolbump.cpp
@@ -316,12 +316,8 @@ void LLDrawPoolBump::beginShiny(bool invisible)
316 mShiny = TRUE; 316 mShiny = TRUE;
317 sVertexMask = VERTEX_MASK_SHINY; 317 sVertexMask = VERTEX_MASK_SHINY;
318 // Second pass: environment map 318 // Second pass: environment map
319 glEnableClientState(GL_VERTEX_ARRAY);
320 glEnableClientState(GL_NORMAL_ARRAY);
321 glEnableClientState(GL_COLOR_ARRAY);
322 if (!invisible && mVertexShaderLevel > 1) 319 if (!invisible && mVertexShaderLevel > 1)
323 { 320 {
324 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
325 sVertexMask = VERTEX_MASK_SHINY | LLVertexBuffer::MAP_TEXCOORD; 321 sVertexMask = VERTEX_MASK_SHINY | LLVertexBuffer::MAP_TEXCOORD;
326 } 322 }
327 323
@@ -456,13 +452,7 @@ void LLDrawPoolBump::endShiny(bool invisible)
456 452
457 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 453 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
458 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 454 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
459 glDisableClientState(GL_NORMAL_ARRAY); 455
460 glDisableClientState(GL_COLOR_ARRAY);
461 if (!invisible && mVertexShaderLevel > 1)
462 {
463 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
464 }
465
466 diffuse_channel = -1; 456 diffuse_channel = -1;
467 cube_channel = 0; 457 cube_channel = 0;
468 mShiny = FALSE; 458 mShiny = FALSE;
@@ -479,10 +469,6 @@ void LLDrawPoolBump::beginFullbrightShiny()
479 sVertexMask = VERTEX_MASK_SHINY | LLVertexBuffer::MAP_TEXCOORD; 469 sVertexMask = VERTEX_MASK_SHINY | LLVertexBuffer::MAP_TEXCOORD;
480 470
481 // Second pass: environment map 471 // Second pass: environment map
482 glEnableClientState(GL_VERTEX_ARRAY);
483 glEnableClientState(GL_NORMAL_ARRAY);
484 glEnableClientState(GL_COLOR_ARRAY);
485 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
486 472
487 if (LLPipeline::sUnderWaterRender) 473 if (LLPipeline::sUnderWaterRender)
488 { 474 {
@@ -564,9 +550,6 @@ void LLDrawPoolBump::endFullbrightShiny()
564 550
565 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 551 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
566 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 552 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
567 glDisableClientState(GL_NORMAL_ARRAY);
568 glDisableClientState(GL_COLOR_ARRAY);
569 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
570 553
571 diffuse_channel = -1; 554 diffuse_channel = -1;
572 cube_channel = 0; 555 cube_channel = 0;
@@ -607,9 +590,7 @@ void LLDrawPoolBump::renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL
607 applyModelMatrix(params); 590 applyModelMatrix(params);
608 591
609 params.mVertexBuffer->setBuffer(mask); 592 params.mVertexBuffer->setBuffer(mask);
610 U16* indices_pointer = (U16*) params.mVertexBuffer->getIndicesPointer(); 593 params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
611 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount,
612 GL_UNSIGNED_SHORT, indices_pointer+params.mOffset);
613 gPipeline.addTrianglesDrawn(params.mCount/3); 594 gPipeline.addTrianglesDrawn(params.mCount/3);
614 } 595 }
615} 596}
@@ -670,8 +651,6 @@ void LLDrawPoolBump::beginBump()
670 // TEXTURE UNIT 0 651 // TEXTURE UNIT 0
671 // Output.rgb = texture at texture coord 0 652 // Output.rgb = texture at texture coord 0
672 glActiveTextureARB(GL_TEXTURE0_ARB); 653 glActiveTextureARB(GL_TEXTURE0_ARB);
673 glClientActiveTextureARB(GL_TEXTURE0_ARB);
674 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
675 654
676 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 655 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
677 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 656 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
@@ -686,8 +665,6 @@ void LLDrawPoolBump::beginBump()
686 665
687 // TEXTURE UNIT 1 666 // TEXTURE UNIT 1
688 glActiveTextureARB(GL_TEXTURE1_ARB); 667 glActiveTextureARB(GL_TEXTURE1_ARB);
689 glClientActiveTextureARB(GL_TEXTURE1_ARB);
690 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
691 668
692 glEnable(GL_TEXTURE_2D); // Texture unit 1 669 glEnable(GL_TEXTURE_2D); // Texture unit 1
693 670
@@ -752,15 +729,11 @@ void LLDrawPoolBump::endBump()
752 729
753 // Disable texture unit 1 730 // Disable texture unit 1
754 glActiveTextureARB(GL_TEXTURE1_ARB); 731 glActiveTextureARB(GL_TEXTURE1_ARB);
755 glClientActiveTextureARB(GL_TEXTURE1_ARB);
756 glDisable(GL_TEXTURE_2D); // Texture unit 1 732 glDisable(GL_TEXTURE_2D); // Texture unit 1
757 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
758 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 733 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
759 734
760 // Disable texture unit 0 735 // Disable texture unit 0
761 glActiveTextureARB(GL_TEXTURE0_ARB); 736 glActiveTextureARB(GL_TEXTURE0_ARB);
762 glClientActiveTextureARB(GL_TEXTURE0_ARB);
763 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
764 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 737 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
765 738
766 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 739 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
@@ -1091,10 +1064,6 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerImage *src_vi, LLIma
1091 1064
1092void LLDrawPoolBump::renderBump(U32 type, U32 mask) 1065void LLDrawPoolBump::renderBump(U32 type, U32 mask)
1093{ 1066{
1094#if !LL_RELEASE_FOR_DOWNLOAD
1095 LLGLState::checkClientArrays(mask);
1096#endif
1097
1098 LLCullResult::drawinfo_list_t::iterator begin = gPipeline.beginRenderMap(type); 1067 LLCullResult::drawinfo_list_t::iterator begin = gPipeline.beginRenderMap(type);
1099 LLCullResult::drawinfo_list_t::iterator end = gPipeline.endRenderMap(type); 1068 LLCullResult::drawinfo_list_t::iterator end = gPipeline.endRenderMap(type);
1100 1069
@@ -1178,11 +1147,8 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
1178 } 1147 }
1179 1148
1180 params.mVertexBuffer->setBuffer(mask); 1149 params.mVertexBuffer->setBuffer(mask);
1181 U16* indices_pointer = (U16*) params.mVertexBuffer->getIndicesPointer(); 1150 params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
1182 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount,
1183 GL_UNSIGNED_SHORT, indices_pointer+params.mOffset);
1184 gPipeline.addTrianglesDrawn(params.mCount/3); 1151 gPipeline.addTrianglesDrawn(params.mCount/3);
1185
1186 if (params.mTextureMatrix) 1152 if (params.mTextureMatrix)
1187 { 1153 {
1188 if (mShiny) 1154 if (mShiny)
diff --git a/linden/indra/newview/lldrawpoolground.cpp b/linden/indra/newview/lldrawpoolground.cpp
index a1c5a99..03b8a0c 100644
--- a/linden/indra/newview/lldrawpoolground.cpp
+++ b/linden/indra/newview/lldrawpoolground.cpp
@@ -68,9 +68,6 @@ void LLDrawPoolGround::render(S32 pass)
68 return; 68 return;
69 } 69 }
70 70
71 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
72 glEnableClientState(GL_VERTEX_ARRAY);
73
74 LLGLSPipelineSkyBox gls_skybox; 71 LLGLSPipelineSkyBox gls_skybox;
75 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 72 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
76 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 73 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
diff --git a/linden/indra/newview/lldrawpoolsimple.cpp b/linden/indra/newview/lldrawpoolsimple.cpp
index cdb22bf..330ac57 100644
--- a/linden/indra/newview/lldrawpoolsimple.cpp
+++ b/linden/indra/newview/lldrawpoolsimple.cpp
@@ -65,13 +65,10 @@ void LLDrawPoolGlow::render(S32 pass)
65 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); 65 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
66 } 66 }
67 67
68 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
69 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 68 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
70 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 69 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
71 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); 70 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
72 71
73 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
74
75 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 72 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
76 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 73 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
77 74
@@ -101,10 +98,6 @@ void LLDrawPoolSimple::prerender()
101void LLDrawPoolSimple::beginRenderPass(S32 pass) 98void LLDrawPoolSimple::beginRenderPass(S32 pass)
102{ 99{
103 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE); 100 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
104 glEnableClientState(GL_VERTEX_ARRAY);
105 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
106 glEnableClientState(GL_NORMAL_ARRAY);
107 glEnableClientState(GL_COLOR_ARRAY);
108 101
109 if (LLPipeline::sUnderWaterRender) 102 if (LLPipeline::sUnderWaterRender)
110 { 103 {
@@ -136,7 +129,6 @@ void LLDrawPoolSimple::endRenderPass(S32 pass)
136{ 129{
137 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE); 130 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
138 LLRenderPass::endRenderPass(pass); 131 LLRenderPass::endRenderPass(pass);
139 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
140 132
141 if (mVertexShaderLevel > 0){ 133 if (mVertexShaderLevel > 0){
142 134
@@ -177,7 +169,6 @@ void LLDrawPoolSimple::render(S32 pass)
177 } 169 }
178 LLFastTimer t(LLFastTimer::FTM_RENDER_FULLBRIGHT); 170 LLFastTimer t(LLFastTimer::FTM_RENDER_FULLBRIGHT);
179 U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD | LLVertexBuffer::MAP_COLOR; 171 U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD | LLVertexBuffer::MAP_COLOR;
180 glDisableClientState(GL_NORMAL_ARRAY);
181 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); 172 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
182 } 173 }
183 174
diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp
index ac5c389..e06bb6d 100644
--- a/linden/indra/newview/lldrawpoolsky.cpp
+++ b/linden/indra/newview/lldrawpoolsky.cpp
@@ -113,10 +113,6 @@ void LLDrawPoolSky::render(S32 pass)
113 LLVector3 origin = LLViewerCamera::getInstance()->getOrigin(); 113 LLVector3 origin = LLViewerCamera::getInstance()->getOrigin();
114 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]); 114 glTranslatef(origin.mV[0], origin.mV[1], origin.mV[2]);
115 115
116 glEnableClientState(GL_VERTEX_ARRAY);
117 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
118 glDisableClientState(GL_NORMAL_ARRAY);
119
120 S32 face_count = (S32)mDrawFace.size(); 116 S32 face_count = (S32)mDrawFace.size();
121 117
122 for (S32 i = 0; i < llmin(6, face_count); ++i) 118 for (S32 i = 0; i < llmin(6, face_count); ++i)
@@ -160,8 +156,6 @@ void LLDrawPoolSky::render(S32 pass)
160 // renderHeavenlyBody(1, hbfaces[1]); 156 // renderHeavenlyBody(1, hbfaces[1]);
161 } 157 }
162 158
163 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
164
165 glPopMatrix(); 159 glPopMatrix();
166} 160}
167 161
@@ -184,8 +178,6 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
184 glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled 178 glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled
185 face.renderIndexed(); 179 face.renderIndexed();
186 } 180 }
187
188 mIndicesDrawn += face.getIndicesCount();
189} 181}
190 182
191void LLDrawPoolSky::renderHeavenlyBody(U8 hb, LLFace* face) 183void LLDrawPoolSky::renderHeavenlyBody(U8 hb, LLFace* face)
@@ -198,7 +190,6 @@ void LLDrawPoolSky::renderHeavenlyBody(U8 hb, LLFace* face)
198 LLColor4 color(mHB[hb]->getInterpColor()); 190 LLColor4 color(mHB[hb]->getInterpColor());
199 LLOverrideFaceColor override(this, color); 191 LLOverrideFaceColor override(this, color);
200 face->renderIndexed(); 192 face->renderIndexed();
201 mIndicesDrawn += face->getIndicesCount();
202} 193}
203 194
204 195
@@ -215,7 +206,6 @@ void LLDrawPoolSky::renderSunHalo(LLFace* face)
215 206
216 LLOverrideFaceColor override(this, color); 207 LLOverrideFaceColor override(this, color);
217 face->renderIndexed(); 208 face->renderIndexed();
218 mIndicesDrawn += face->getIndicesCount();
219} 209}
220 210
221 211
diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp
index 1d43698..fdb27f9 100644
--- a/linden/indra/newview/lldrawpoolterrain.cpp
+++ b/linden/indra/newview/lldrawpoolterrain.cpp
@@ -217,14 +217,6 @@ void LLDrawPoolTerrain::render(S32 pass)
217 217
218void LLDrawPoolTerrain::renderFullShader() 218void LLDrawPoolTerrain::renderFullShader()
219{ 219{
220 glEnableClientState(GL_VERTEX_ARRAY);
221 glEnableClientState(GL_NORMAL_ARRAY);
222
223 if (gPipeline.getLightingDetail() >= 2)
224 {
225 glEnableClientState(GL_COLOR_ARRAY);
226 }
227
228 // Hack! Get the region that this draw pool is rendering from! 220 // Hack! Get the region that this draw pool is rendering from!
229 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion(); 221 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
230 LLVLComposition *compp = regionp->getComposition(); 222 LLVLComposition *compp = regionp->getComposition();
@@ -247,10 +239,8 @@ void LLDrawPoolTerrain::renderFullShader()
247 // 239 //
248 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0); 240 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
249 LLViewerImage::bindTexture(detail_texture0p,detail0); 241 LLViewerImage::bindTexture(detail_texture0p,detail0);
250 glClientActiveTextureARB(GL_TEXTURE0_ARB);
251 glActiveTextureARB(GL_TEXTURE0_ARB); 242 glActiveTextureARB(GL_TEXTURE0_ARB);
252 243
253 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
254 glEnable(GL_TEXTURE_GEN_S); 244 glEnable(GL_TEXTURE_GEN_S);
255 glEnable(GL_TEXTURE_GEN_T); 245 glEnable(GL_TEXTURE_GEN_T);
256 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 246 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -269,9 +259,7 @@ void LLDrawPoolTerrain::renderFullShader()
269 LLViewerImage::bindTexture(detail_texture1p,detail1); 259 LLViewerImage::bindTexture(detail_texture1p,detail1);
270 260
271 /// ALPHA TEXTURE COORDS 0: 261 /// ALPHA TEXTURE COORDS 0:
272 glClientActiveTextureARB(GL_TEXTURE1_ARB);
273 glActiveTextureARB(GL_TEXTURE1_ARB); 262 glActiveTextureARB(GL_TEXTURE1_ARB);
274 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
275 glMatrixMode(GL_TEXTURE); 263 glMatrixMode(GL_TEXTURE);
276 glLoadIdentity(); 264 glLoadIdentity();
277 glMatrixMode(GL_MODELVIEW); 265 glMatrixMode(GL_MODELVIEW);
@@ -283,9 +271,7 @@ void LLDrawPoolTerrain::renderFullShader()
283 glEnable(GL_TEXTURE_2D); 271 glEnable(GL_TEXTURE_2D);
284 272
285 /// ALPHA TEXTURE COORDS 1: 273 /// ALPHA TEXTURE COORDS 1:
286 glClientActiveTextureARB(GL_TEXTURE2_ARB);
287 glActiveTextureARB(GL_TEXTURE2_ARB); 274 glActiveTextureARB(GL_TEXTURE2_ARB);
288 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
289 glMatrixMode(GL_TEXTURE); 275 glMatrixMode(GL_TEXTURE);
290 glLoadIdentity(); 276 glLoadIdentity();
291 glTranslatef(-2.f, 0.f, 0.f); 277 glTranslatef(-2.f, 0.f, 0.f);
@@ -298,9 +284,7 @@ void LLDrawPoolTerrain::renderFullShader()
298 LLViewerImage::bindTexture(detail_texture3p,detail3); 284 LLViewerImage::bindTexture(detail_texture3p,detail3);
299 285
300 /// ALPHA TEXTURE COORDS 2: 286 /// ALPHA TEXTURE COORDS 2:
301 glClientActiveTextureARB(GL_TEXTURE3_ARB);
302 glActiveTextureARB(GL_TEXTURE3_ARB); 287 glActiveTextureARB(GL_TEXTURE3_ARB);
303 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
304 glMatrixMode(GL_TEXTURE); 288 glMatrixMode(GL_TEXTURE);
305 glLoadIdentity(); 289 glLoadIdentity();
306 glTranslatef(-1.f, 0.f, 0.f); 290 glTranslatef(-1.f, 0.f, 0.f);
@@ -323,7 +307,6 @@ void LLDrawPoolTerrain::renderFullShader()
323 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3); 307 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
324 308
325 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D); 309 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
326 glClientActiveTextureARB(GL_TEXTURE4_ARB);
327 glActiveTextureARB(GL_TEXTURE4_ARB); 310 glActiveTextureARB(GL_TEXTURE4_ARB);
328 glDisable(GL_TEXTURE_2D); // Texture unit 4 311 glDisable(GL_TEXTURE_2D); // Texture unit 4
329 glDisable(GL_TEXTURE_GEN_S); 312 glDisable(GL_TEXTURE_GEN_S);
@@ -333,10 +316,8 @@ void LLDrawPoolTerrain::renderFullShader()
333 glMatrixMode(GL_MODELVIEW); 316 glMatrixMode(GL_MODELVIEW);
334 317
335 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D); 318 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
336 glClientActiveTextureARB(GL_TEXTURE3_ARB);
337 glActiveTextureARB(GL_TEXTURE3_ARB); 319 glActiveTextureARB(GL_TEXTURE3_ARB);
338 glDisable(GL_TEXTURE_2D); 320 glDisable(GL_TEXTURE_2D);
339 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
340 glDisable(GL_TEXTURE_GEN_S); 321 glDisable(GL_TEXTURE_GEN_S);
341 glDisable(GL_TEXTURE_GEN_T); 322 glDisable(GL_TEXTURE_GEN_T);
342 glMatrixMode(GL_TEXTURE); 323 glMatrixMode(GL_TEXTURE);
@@ -344,10 +325,8 @@ void LLDrawPoolTerrain::renderFullShader()
344 glMatrixMode(GL_MODELVIEW); 325 glMatrixMode(GL_MODELVIEW);
345 326
346 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D); 327 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
347 glClientActiveTextureARB(GL_TEXTURE2_ARB);
348 glActiveTextureARB(GL_TEXTURE2_ARB); 328 glActiveTextureARB(GL_TEXTURE2_ARB);
349 glDisable(GL_TEXTURE_2D); 329 glDisable(GL_TEXTURE_2D);
350 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
351 glDisable(GL_TEXTURE_GEN_S); 330 glDisable(GL_TEXTURE_GEN_S);
352 glDisable(GL_TEXTURE_GEN_T); 331 glDisable(GL_TEXTURE_GEN_T);
353 glMatrixMode(GL_TEXTURE); 332 glMatrixMode(GL_TEXTURE);
@@ -355,10 +334,8 @@ void LLDrawPoolTerrain::renderFullShader()
355 glMatrixMode(GL_MODELVIEW); 334 glMatrixMode(GL_MODELVIEW);
356 335
357 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D); 336 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
358 glClientActiveTextureARB(GL_TEXTURE1_ARB);
359 glActiveTextureARB(GL_TEXTURE1_ARB); 337 glActiveTextureARB(GL_TEXTURE1_ARB);
360 glDisable(GL_TEXTURE_2D); 338 glDisable(GL_TEXTURE_2D);
361 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
362 glDisable(GL_TEXTURE_GEN_S); 339 glDisable(GL_TEXTURE_GEN_S);
363 glDisable(GL_TEXTURE_GEN_T); 340 glDisable(GL_TEXTURE_GEN_T);
364 glMatrixMode(GL_TEXTURE); 341 glMatrixMode(GL_TEXTURE);
@@ -369,7 +346,6 @@ void LLDrawPoolTerrain::renderFullShader()
369 // Restore Texture Unit 0 defaults 346 // Restore Texture Unit 0 defaults
370 347
371 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D); 348 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
372 glClientActiveTextureARB(GL_TEXTURE0_ARB);
373 glActiveTextureARB(GL_TEXTURE0_ARB); 349 glActiveTextureARB(GL_TEXTURE0_ARB);
374 glEnable(GL_TEXTURE_2D); 350 glEnable(GL_TEXTURE_2D);
375 glDisable(GL_TEXTURE_GEN_S); 351 glDisable(GL_TEXTURE_GEN_S);
@@ -377,14 +353,11 @@ void LLDrawPoolTerrain::renderFullShader()
377 glMatrixMode(GL_TEXTURE); 353 glMatrixMode(GL_TEXTURE);
378 glLoadIdentity(); 354 glLoadIdentity();
379 glMatrixMode(GL_MODELVIEW); 355 glMatrixMode(GL_MODELVIEW);
380
381 // Restore non Texture Unit specific defaults
382 glDisableClientState(GL_NORMAL_ARRAY);
383} 356}
384 357
385void LLDrawPoolTerrain::renderFull4TU() 358void LLDrawPoolTerrain::renderFull4TU()
386{ 359{
387 glEnableClientState(GL_VERTEX_ARRAY); 360 glEnableClientState(GL_VERTEX_ARRAY);
388 glEnableClientState(GL_NORMAL_ARRAY); 361 glEnableClientState(GL_NORMAL_ARRAY);
389 362
390 // Hack! Get the region that this draw pool is rendering from! 363 // Hack! Get the region that this draw pool is rendering from!
@@ -434,9 +407,8 @@ void LLDrawPoolTerrain::renderFull4TU()
434 // 407 //
435 // Stage 1: Generate alpha ramp for detail0/detail1 transition 408 // Stage 1: Generate alpha ramp for detail0/detail1 transition
436 // 409 //
437 glActiveTextureARB(GL_TEXTURE1_ARB);
438 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 410 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
439 411 glActiveTextureARB(GL_TEXTURE1_ARB);
440 glEnable(GL_TEXTURE_2D); // Texture unit 1 412 glEnable(GL_TEXTURE_2D); // Texture unit 1
441 glClientActiveTextureARB(GL_TEXTURE1_ARB); 413 glClientActiveTextureARB(GL_TEXTURE1_ARB);
442 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 414 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -454,8 +426,8 @@ void LLDrawPoolTerrain::renderFull4TU()
454 // 426 //
455 // Stage 2: Interpolate detail1 with existing based on ramp 427 // Stage 2: Interpolate detail1 with existing based on ramp
456 // 428 //
457 glActiveTextureARB(GL_TEXTURE2_ARB);
458 LLViewerImage::bindTexture(detail_texture1p,2); 429 LLViewerImage::bindTexture(detail_texture1p,2);
430 glActiveTextureARB(GL_TEXTURE2_ARB);
459 glEnable(GL_TEXTURE_2D); // Texture unit 2 431 glEnable(GL_TEXTURE_2D); // Texture unit 2
460 glClientActiveTextureARB(GL_TEXTURE2_ARB); 432 glClientActiveTextureARB(GL_TEXTURE2_ARB);
461 433
@@ -480,8 +452,8 @@ void LLDrawPoolTerrain::renderFull4TU()
480 // 452 //
481 // Stage 3: Modulate with primary (vertex) color for lighting 453 // Stage 3: Modulate with primary (vertex) color for lighting
482 // 454 //
483 glActiveTextureARB(GL_TEXTURE3_ARB);
484 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture 455 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
456 glActiveTextureARB(GL_TEXTURE3_ARB);
485 glEnable(GL_TEXTURE_2D); // Texture unit 3 457 glEnable(GL_TEXTURE_2D); // Texture unit 3
486 glClientActiveTextureARB(GL_TEXTURE3_ARB); 458 glClientActiveTextureARB(GL_TEXTURE3_ARB);
487 459
@@ -494,6 +466,7 @@ void LLDrawPoolTerrain::renderFull4TU()
494 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB); 466 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
495 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); 467 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
496 468
469 glActiveTextureARB(GL_TEXTURE0_ARB);
497 // GL_BLEND disabled by default 470 // GL_BLEND disabled by default
498 drawLoop(); 471 drawLoop();
499 472
@@ -524,9 +497,8 @@ void LLDrawPoolTerrain::renderFull4TU()
524 // 497 //
525 // Stage 1: Generate alpha ramp for detail2/detail3 transition 498 // Stage 1: Generate alpha ramp for detail2/detail3 transition
526 // 499 //
527 glActiveTextureARB(GL_TEXTURE1_ARB);
528 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 500 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
529 501 glActiveTextureARB(GL_TEXTURE1_ARB);
530 glEnable(GL_TEXTURE_2D); // Texture unit 1 502 glEnable(GL_TEXTURE_2D); // Texture unit 1
531 glClientActiveTextureARB(GL_TEXTURE1_ARB); 503 glClientActiveTextureARB(GL_TEXTURE1_ARB);
532 504
@@ -551,8 +523,8 @@ void LLDrawPoolTerrain::renderFull4TU()
551 // 523 //
552 // Stage 2: Interpolate detail2 with existing based on ramp 524 // Stage 2: Interpolate detail2 with existing based on ramp
553 // 525 //
554 glActiveTextureARB(GL_TEXTURE2_ARB);
555 LLViewerImage::bindTexture(detail_texture2p,2); 526 LLViewerImage::bindTexture(detail_texture2p,2);
527 glActiveTextureARB(GL_TEXTURE2_ARB);
556 glEnable(GL_TEXTURE_2D); // Texture unit 2 528 glEnable(GL_TEXTURE_2D); // Texture unit 2
557 glClientActiveTextureARB(GL_TEXTURE2_ARB); 529 glClientActiveTextureARB(GL_TEXTURE2_ARB);
558 530
@@ -578,9 +550,9 @@ void LLDrawPoolTerrain::renderFull4TU()
578 // 550 //
579 // Stage 3: Generate alpha ramp for detail1/detail2 transition 551 // Stage 3: Generate alpha ramp for detail1/detail2 transition
580 // 552 //
581 glActiveTextureARB(GL_TEXTURE3_ARB);
582 LLViewerImage::bindTexture(m2DAlphaRampImagep,3); 553 LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
583 554 glActiveTextureARB(GL_TEXTURE3_ARB);
555
584 glEnable(GL_TEXTURE_2D); // Texture unit 3 556 glEnable(GL_TEXTURE_2D); // Texture unit 3
585 glClientActiveTextureARB(GL_TEXTURE3_ARB); 557 glClientActiveTextureARB(GL_TEXTURE3_ARB);
586 558
@@ -603,7 +575,7 @@ void LLDrawPoolTerrain::renderFull4TU()
603 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); 575 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
604 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); 576 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
605 577
606 578 glActiveTextureARB(GL_TEXTURE0_ARB);
607 { 579 {
608 LLGLEnable blend(GL_BLEND); 580 LLGLEnable blend(GL_BLEND);
609 drawLoop(); 581 drawLoop();
@@ -611,6 +583,7 @@ void LLDrawPoolTerrain::renderFull4TU()
611 583
612 // Disable multitexture 584 // Disable multitexture
613 LLImageGL::unbindTexture(3, GL_TEXTURE_2D); 585 LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
586 glActiveTextureARB(GL_TEXTURE3_ARB);
614 glClientActiveTextureARB(GL_TEXTURE3_ARB); 587 glClientActiveTextureARB(GL_TEXTURE3_ARB);
615 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 588 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
616 glDisable(GL_TEXTURE_2D); // Texture unit 3 589 glDisable(GL_TEXTURE_2D); // Texture unit 3
@@ -619,6 +592,7 @@ void LLDrawPoolTerrain::renderFull4TU()
619 glMatrixMode(GL_MODELVIEW); 592 glMatrixMode(GL_MODELVIEW);
620 593
621 LLImageGL::unbindTexture(2, GL_TEXTURE_2D); 594 LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
595 glActiveTextureARB(GL_TEXTURE2_ARB);
622 glClientActiveTextureARB(GL_TEXTURE2_ARB); 596 glClientActiveTextureARB(GL_TEXTURE2_ARB);
623 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 597 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
624 glDisable(GL_TEXTURE_2D); // Texture unit 2 598 glDisable(GL_TEXTURE_2D); // Texture unit 2
@@ -629,6 +603,7 @@ void LLDrawPoolTerrain::renderFull4TU()
629 glMatrixMode(GL_MODELVIEW); 603 glMatrixMode(GL_MODELVIEW);
630 604
631 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 605 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
606 glActiveTextureARB(GL_TEXTURE1_ARB);
632 glClientActiveTextureARB(GL_TEXTURE1_ARB); 607 glClientActiveTextureARB(GL_TEXTURE1_ARB);
633 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 608 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
634 glDisable(GL_TEXTURE_2D); // Texture unit 1 609 glDisable(GL_TEXTURE_2D); // Texture unit 1
@@ -642,6 +617,7 @@ void LLDrawPoolTerrain::renderFull4TU()
642 //---------------------------------------------------------------------------- 617 //----------------------------------------------------------------------------
643 // Restore Texture Unit 0 defaults 618 // Restore Texture Unit 0 defaults
644 619
620 glActiveTextureARB(GL_TEXTURE0_ARB);
645 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 621 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
646 glClientActiveTextureARB(GL_TEXTURE0_ARB); 622 glClientActiveTextureARB(GL_TEXTURE0_ARB);
647 glActiveTextureARB(GL_TEXTURE0_ARB); 623 glActiveTextureARB(GL_TEXTURE0_ARB);
@@ -658,9 +634,6 @@ void LLDrawPoolTerrain::renderFull4TU()
658 634
659void LLDrawPoolTerrain::renderFull2TU() 635void LLDrawPoolTerrain::renderFull2TU()
660{ 636{
661 glEnableClientState(GL_VERTEX_ARRAY);
662 glEnableClientState(GL_NORMAL_ARRAY);
663
664 // Hack! Get the region that this draw pool is rendering from! 637 // Hack! Get the region that this draw pool is rendering from!
665 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion(); 638 LLViewerRegion *regionp = mDrawFace[0]->getDrawable()->getVObj()->getRegion();
666 LLVLComposition *compp = regionp->getComposition(); 639 LLVLComposition *compp = regionp->getComposition();
@@ -687,9 +660,6 @@ void LLDrawPoolTerrain::renderFull2TU()
687 // Stage 0: Render detail 0 into base 660 // Stage 0: Render detail 0 into base
688 // 661 //
689 LLViewerImage::bindTexture(detail_texture0p,0); 662 LLViewerImage::bindTexture(detail_texture0p,0);
690 glClientActiveTextureARB(GL_TEXTURE0_ARB);
691
692 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
693 glEnable(GL_TEXTURE_GEN_S); 663 glEnable(GL_TEXTURE_GEN_S);
694 glEnable(GL_TEXTURE_GEN_T); 664 glEnable(GL_TEXTURE_GEN_T);
695 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 665 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -715,12 +685,10 @@ void LLDrawPoolTerrain::renderFull2TU()
715 // Stage 0: Generate alpha ramp for detail0/detail1 transition 685 // Stage 0: Generate alpha ramp for detail0/detail1 transition
716 // 686 //
717 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 687 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
718 glClientActiveTextureARB(GL_TEXTURE0_ARB); 688
719
720 glDisable(GL_TEXTURE_GEN_S); 689 glDisable(GL_TEXTURE_GEN_S);
721 glDisable(GL_TEXTURE_GEN_T); 690 glDisable(GL_TEXTURE_GEN_T);
722 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 691
723
724 // Care about alpha only 692 // Care about alpha only
725 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 693 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
726 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 694 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
@@ -736,10 +704,8 @@ void LLDrawPoolTerrain::renderFull2TU()
736 // Stage 1: Write detail1 704 // Stage 1: Write detail1
737 // 705 //
738 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1 706 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
707 glActiveTextureARB(GL_TEXTURE1_ARB);
739 glEnable(GL_TEXTURE_2D); // Texture unit 1 708 glEnable(GL_TEXTURE_2D); // Texture unit 1
740 glClientActiveTextureARB(GL_TEXTURE1_ARB);
741
742 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
743 glEnable(GL_TEXTURE_GEN_S); 709 glEnable(GL_TEXTURE_GEN_S);
744 glEnable(GL_TEXTURE_GEN_T); 710 glEnable(GL_TEXTURE_GEN_T);
745 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 711 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -758,6 +724,7 @@ void LLDrawPoolTerrain::renderFull2TU()
758 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); 724 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
759 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); 725 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
760 726
727 glActiveTextureARB(GL_TEXTURE0_ARB);
761 { 728 {
762 LLGLEnable blend(GL_BLEND); 729 LLGLEnable blend(GL_BLEND);
763 drawLoop(); 730 drawLoop();
@@ -769,14 +736,11 @@ void LLDrawPoolTerrain::renderFull2TU()
769 // Stage 0: Generate alpha ramp for detail1/detail2 transition 736 // Stage 0: Generate alpha ramp for detail1/detail2 transition
770 // 737 //
771 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 738 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
772 glClientActiveTextureARB(GL_TEXTURE0_ARB);
773 // Set the texture matrix 739 // Set the texture matrix
774 glMatrixMode(GL_TEXTURE); 740 glMatrixMode(GL_TEXTURE);
775 glLoadIdentity(); 741 glLoadIdentity();
776 glTranslatef(-1.f, 0.f, 0.f); 742 glTranslatef(-1.f, 0.f, 0.f);
777 743
778 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
779
780 // Care about alpha only 744 // Care about alpha only
781 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 745 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
782 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 746 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
@@ -793,9 +757,7 @@ void LLDrawPoolTerrain::renderFull2TU()
793 757
794 LLViewerImage::bindTexture(detail_texture2p,1); 758 LLViewerImage::bindTexture(detail_texture2p,1);
795 glEnable(GL_TEXTURE_2D); // Texture unit 1 759 glEnable(GL_TEXTURE_2D); // Texture unit 1
796 glClientActiveTextureARB(GL_TEXTURE1_ARB); 760
797
798 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
799 glEnable(GL_TEXTURE_GEN_S); 761 glEnable(GL_TEXTURE_GEN_S);
800 glEnable(GL_TEXTURE_GEN_T); 762 glEnable(GL_TEXTURE_GEN_T);
801 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 763 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -826,14 +788,11 @@ void LLDrawPoolTerrain::renderFull2TU()
826 // Stage 0: Generate alpha ramp for detail2/detail3 transition 788 // Stage 0: Generate alpha ramp for detail2/detail3 transition
827 // 789 //
828 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 790 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
829 glClientActiveTextureARB(GL_TEXTURE0_ARB);
830 // Set the texture matrix 791 // Set the texture matrix
831 glMatrixMode(GL_TEXTURE); 792 glMatrixMode(GL_TEXTURE);
832 glLoadIdentity(); 793 glLoadIdentity();
833 glTranslatef(-2.f, 0.f, 0.f); 794 glTranslatef(-2.f, 0.f, 0.f);
834 795
835 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
836
837 // Care about alpha only 796 // Care about alpha only
838 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 797 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
839 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 798 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
@@ -847,10 +806,8 @@ void LLDrawPoolTerrain::renderFull2TU()
847 // Stage 1: Write detail3 806 // Stage 1: Write detail3
848 807
849 LLViewerImage::bindTexture(detail_texture3p,1); 808 LLViewerImage::bindTexture(detail_texture3p,1);
809 glActiveTextureARB(GL_TEXTURE1_ARB);
850 glEnable(GL_TEXTURE_2D); // Texture unit 1 810 glEnable(GL_TEXTURE_2D); // Texture unit 1
851 glClientActiveTextureARB(GL_TEXTURE1_ARB);
852
853 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
854 glEnable(GL_TEXTURE_GEN_S); 811 glEnable(GL_TEXTURE_GEN_S);
855 glEnable(GL_TEXTURE_GEN_T); 812 glEnable(GL_TEXTURE_GEN_T);
856 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 813 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -869,6 +826,7 @@ void LLDrawPoolTerrain::renderFull2TU()
869 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS); 826 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
870 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); 827 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
871 828
829 glActiveTextureARB(GL_TEXTURE0_ARB);
872 { 830 {
873 LLGLEnable blend(GL_BLEND); 831 LLGLEnable blend(GL_BLEND);
874 drawLoop(); 832 drawLoop();
@@ -879,8 +837,7 @@ void LLDrawPoolTerrain::renderFull2TU()
879 837
880 // Disable multitexture 838 // Disable multitexture
881 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 839 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
882 glClientActiveTextureARB(GL_TEXTURE1_ARB); 840 glActiveTextureARB(GL_TEXTURE1_ARB);
883 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
884 glDisable(GL_TEXTURE_2D); // Texture unit 1 841 glDisable(GL_TEXTURE_2D); // Texture unit 1
885 glDisable(GL_TEXTURE_GEN_S); 842 glDisable(GL_TEXTURE_GEN_S);
886 glDisable(GL_TEXTURE_GEN_T); 843 glDisable(GL_TEXTURE_GEN_T);
@@ -891,9 +848,9 @@ void LLDrawPoolTerrain::renderFull2TU()
891 //---------------------------------------------------------------------------- 848 //----------------------------------------------------------------------------
892 // Restore Texture Unit 0 defaults 849 // Restore Texture Unit 0 defaults
893 850
851 glActiveTextureARB(GL_TEXTURE0_ARB);
894 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 852 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
895 853
896 glClientActiveTextureARB(GL_TEXTURE0_ARB);
897 glActiveTextureARB(GL_TEXTURE0_ARB); 854 glActiveTextureARB(GL_TEXTURE0_ARB);
898 glDisable(GL_TEXTURE_GEN_S); 855 glDisable(GL_TEXTURE_GEN_S);
899 glDisable(GL_TEXTURE_GEN_T); 856 glDisable(GL_TEXTURE_GEN_T);
@@ -902,16 +859,12 @@ void LLDrawPoolTerrain::renderFull2TU()
902 glMatrixMode(GL_MODELVIEW); 859 glMatrixMode(GL_MODELVIEW);
903 860
904 // Restore non Texture Unit specific defaults 861 // Restore non Texture Unit specific defaults
905 glDisableClientState(GL_NORMAL_ARRAY);
906 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 862 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
907} 863}
908 864
909 865
910void LLDrawPoolTerrain::renderSimple() 866void LLDrawPoolTerrain::renderSimple()
911{ 867{
912 glEnableClientState(GL_VERTEX_ARRAY);
913 glEnableClientState(GL_NORMAL_ARRAY);
914
915 LLVector4 tp0, tp1; 868 LLVector4 tp0, tp1;
916 869
917 //---------------------------------------------------------------------------- 870 //----------------------------------------------------------------------------
@@ -923,14 +876,12 @@ void LLDrawPoolTerrain::renderSimple()
923 876
924 glActiveTextureARB(GL_TEXTURE0_ARB); 877 glActiveTextureARB(GL_TEXTURE0_ARB);
925 glEnable(GL_TEXTURE_2D); // Texture unit 2 878 glEnable(GL_TEXTURE_2D); // Texture unit 2
926 glClientActiveTextureARB(GL_TEXTURE0_ARB); 879
927
928 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent(); 880 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
929 F32 tscale = 1.f/256.f; 881 F32 tscale = 1.f/256.f;
930 tp0.setVec(tscale, 0.f, 0.0f, -1.f*(origin_agent.mV[0]/256.f)); 882 tp0.setVec(tscale, 0.f, 0.0f, -1.f*(origin_agent.mV[0]/256.f));
931 tp1.setVec(0.f, tscale, 0.0f, -1.f*(origin_agent.mV[1]/256.f)); 883 tp1.setVec(0.f, tscale, 0.0f, -1.f*(origin_agent.mV[1]/256.f));
932 884
933 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
934 glEnable(GL_TEXTURE_GEN_S); 885 glEnable(GL_TEXTURE_GEN_S);
935 glEnable(GL_TEXTURE_GEN_T); 886 glEnable(GL_TEXTURE_GEN_T);
936 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 887 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -952,7 +903,6 @@ void LLDrawPoolTerrain::renderSimple()
952 // Restore Texture Unit 0 defaults 903 // Restore Texture Unit 0 defaults
953 904
954 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 905 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
955 glClientActiveTextureARB(GL_TEXTURE0_ARB);
956 glActiveTextureARB(GL_TEXTURE0_ARB); 906 glActiveTextureARB(GL_TEXTURE0_ARB);
957 glDisable(GL_TEXTURE_GEN_S); 907 glDisable(GL_TEXTURE_GEN_S);
958 glDisable(GL_TEXTURE_GEN_T); 908 glDisable(GL_TEXTURE_GEN_T);
@@ -961,7 +911,6 @@ void LLDrawPoolTerrain::renderSimple()
961 glMatrixMode(GL_MODELVIEW); 911 glMatrixMode(GL_MODELVIEW);
962 912
963 // Restore non Texture Unit specific defaults 913 // Restore non Texture Unit specific defaults
964 glDisableClientState(GL_NORMAL_ARRAY);
965 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 914 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
966} 915}
967 916
@@ -986,14 +935,8 @@ void LLDrawPoolTerrain::renderOwnership()
986 LLViewerParcelOverlay *overlayp = regionp->getParcelOverlay(); 935 LLViewerParcelOverlay *overlayp = regionp->getParcelOverlay();
987 LLImageGL *texturep = overlayp->getTexture(); 936 LLImageGL *texturep = overlayp->getTexture();
988 937
989 glEnableClientState(GL_VERTEX_ARRAY);
990 glDisableClientState(GL_NORMAL_ARRAY);
991
992 LLViewerImage::bindTexture(texturep); 938 LLViewerImage::bindTexture(texturep);
993 939
994 glClientActiveTextureARB(GL_TEXTURE0_ARB);
995 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
996
997 // *NOTE: Because the region is 256 meters wide, but has 257 pixels, the 940 // *NOTE: Because the region is 256 meters wide, but has 257 pixels, the
998 // texture coordinates for pixel 256x256 is not 1,1. This makes the 941 // texture coordinates for pixel 256x256 is not 1,1. This makes the
999 // ownership map not line up with the selection. We address this with 942 // ownership map not line up with the selection. We address this with
@@ -1014,9 +957,6 @@ void LLDrawPoolTerrain::renderOwnership()
1014 glMatrixMode(GL_TEXTURE); 957 glMatrixMode(GL_TEXTURE);
1015 glPopMatrix(); 958 glPopMatrix();
1016 glMatrixMode(GL_MODELVIEW); 959 glMatrixMode(GL_MODELVIEW);
1017
1018 // Restore non Texture Unit specific defaults
1019 glDisableClientState(GL_NORMAL_ARRAY);
1020} 960}
1021 961
1022 962
diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp
index fd1ca8e..fd0a83c 100644
--- a/linden/indra/newview/lldrawpooltree.cpp
+++ b/linden/indra/newview/lldrawpooltree.cpp
@@ -67,9 +67,6 @@ void LLDrawPoolTree::prerender()
67void LLDrawPoolTree::beginRenderPass(S32 pass) 67void LLDrawPoolTree::beginRenderPass(S32 pass)
68{ 68{
69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
70 glEnableClientState(GL_VERTEX_ARRAY);
71 glEnableClientState(GL_NORMAL_ARRAY);
72 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
73 glAlphaFunc(GL_GREATER, 0.5f); 70 glAlphaFunc(GL_GREATER, 0.5f);
74 71
75 if (LLPipeline::sUnderWaterRender) 72 if (LLPipeline::sUnderWaterRender)
@@ -110,9 +107,7 @@ void LLDrawPoolTree::endRenderPass(S32 pass)
110{ 107{
111 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 108 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
112 glAlphaFunc(GL_GREATER, 0.01f); 109 glAlphaFunc(GL_GREATER, 0.01f);
113 glDisableClientState(GL_NORMAL_ARRAY); 110
114 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
115
116 if (gPipeline.canUseWindLightShadersOnObjects()) 111 if (gPipeline.canUseWindLightShadersOnObjects())
117 { 112 {
118 shader->unbind(); 113 shader->unbind();
@@ -126,9 +121,6 @@ void LLDrawPoolTree::renderForSelect()
126 return; 121 return;
127 } 122 }
128 123
129 glEnableClientState (GL_VERTEX_ARRAY);
130 glEnableClientState (GL_TEXTURE_COORD_ARRAY);
131
132 LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f); 124 LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
133 125
134 LLGLSObjectSelectAlpha gls_alpha; 126 LLGLSObjectSelectAlpha gls_alpha;
@@ -155,7 +147,6 @@ void LLDrawPoolTree::renderForSelect()
155 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 147 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
156 148
157 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 149 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
158 glDisableClientState (GL_TEXTURE_COORD_ARRAY);
159} 150}
160 151
161void LLDrawPoolTree::renderTree(BOOL selecting) 152void LLDrawPoolTree::renderTree(BOOL selecting)
@@ -278,8 +269,6 @@ void LLDrawPoolTree::renderTree(BOOL selecting)
278 //glPopMatrix(); 269 //glPopMatrix();
279 } 270 }
280 } 271 }
281
282 addIndicesDrawn(indices_drawn);
283} 272}
284 273
285BOOL LLDrawPoolTree::verify() const 274BOOL LLDrawPoolTree::verify() const
diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp
index 922a5d8..231d0e1 100644
--- a/linden/indra/newview/lldrawpoolwater.cpp
+++ b/linden/indra/newview/lldrawpoolwater.cpp
@@ -163,17 +163,11 @@ void LLDrawPoolWater::render(S32 pass)
163 163
164 LLGLDisable cullFace(GL_CULL_FACE); 164 LLGLDisable cullFace(GL_CULL_FACE);
165 165
166 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
167 glEnableClientState(GL_VERTEX_ARRAY);
168 glEnableClientState(GL_NORMAL_ARRAY);
169
170 // Set up second pass first 166 // Set up second pass first
171 glActiveTextureARB(GL_TEXTURE1_ARB);
172 mWaterImagep->addTextureStats(1024.f*1024.f); 167 mWaterImagep->addTextureStats(1024.f*1024.f);
173 mWaterImagep->bind(1); 168 mWaterImagep->bind(1);
174 169 glActiveTextureARB(GL_TEXTURE1_ARB);
175 glClientActiveTextureARB(GL_TEXTURE1_ARB); 170
176 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
177 glEnable(GL_TEXTURE_2D); // Texture unit 1 171 glEnable(GL_TEXTURE_2D); // Texture unit 1
178 172
179 LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis(); 173 LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
@@ -215,7 +209,6 @@ void LLDrawPoolWater::render(S32 pass)
215 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); 209 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
216 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); 210 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
217 211
218 glClientActiveTextureARB(GL_TEXTURE0_ARB);
219 glActiveTextureARB(GL_TEXTURE0_ARB); 212 glActiveTextureARB(GL_TEXTURE0_ARB);
220 213
221 glClearStencil(1); 214 glClearStencil(1);
@@ -234,11 +227,9 @@ void LLDrawPoolWater::render(S32 pass)
234 } 227 }
235 face->bindTexture(); 228 face->bindTexture();
236 face->renderIndexed(); 229 face->renderIndexed();
237 mIndicesDrawn += face->getIndicesCount();
238 } 230 }
239 231
240 // Now, disable texture coord generation on texture state 1 232 // Now, disable texture coord generation on texture state 1
241 glClientActiveTextureARB(GL_TEXTURE1_ARB);
242 glActiveTextureARB(GL_TEXTURE1_ARB); 233 glActiveTextureARB(GL_TEXTURE1_ARB);
243 glDisable(GL_TEXTURE_2D); // Texture unit 1 234 glDisable(GL_TEXTURE_2D); // Texture unit 1
244 glDisable(GL_TEXTURE_GEN_S); //texture unit 1 235 glDisable(GL_TEXTURE_GEN_S); //texture unit 1
@@ -246,11 +237,9 @@ void LLDrawPoolWater::render(S32 pass)
246 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 237 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
247 238
248 // Disable texture coordinate and color arrays 239 // Disable texture coordinate and color arrays
249 glClientActiveTextureARB(GL_TEXTURE0_ARB);
250 glActiveTextureARB(GL_TEXTURE0_ARB); 240 glActiveTextureARB(GL_TEXTURE0_ARB);
251 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 241 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
252 242
253 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
254 stop_glerror(); 243 stop_glerror();
255 244
256 if (gSky.mVOSkyp->getCubeMap()) 245 if (gSky.mVOSkyp->getCubeMap())
@@ -284,7 +273,6 @@ void LLDrawPoolWater::render(S32 pass)
284 if (face->getGeomCount() > 0) 273 if (face->getGeomCount() > 0)
285 { 274 {
286 face->renderIndexed(); 275 face->renderIndexed();
287 mIndicesDrawn += face->getIndicesCount();
288 } 276 }
289 } 277 }
290 278
@@ -310,9 +298,6 @@ void LLDrawPoolWater::render(S32 pass)
310 renderReflection(refl_face); 298 renderReflection(refl_face);
311 } 299 }
312 300
313 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
314 glDisableClientState(GL_NORMAL_ARRAY);
315
316 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 301 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
317} 302}
318 303
@@ -338,16 +323,10 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
338 323
339 LLGLSNoFog noFog; 324 LLGLSNoFog noFog;
340 325
341 glEnableClientState(GL_VERTEX_ARRAY);
342 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
343
344 LLViewerImage::bindTexture(mHBTex[dr]); 326 LLViewerImage::bindTexture(mHBTex[dr]);
345 327
346 LLOverrideFaceColor override(this, face->getFaceColor().mV); 328 LLOverrideFaceColor override(this, face->getFaceColor().mV);
347 face->renderIndexed(); 329 face->renderIndexed();
348 mIndicesDrawn += face->getIndicesCount();
349
350 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
351} 330}
352 331
353void LLDrawPoolWater::shade() 332void LLDrawPoolWater::shade()
@@ -361,10 +340,6 @@ void LLDrawPoolWater::shade()
361 return; 340 return;
362 } 341 }
363 342
364 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
365 glEnableClientState(GL_VERTEX_ARRAY);
366 glEnableClientState(GL_NORMAL_ARRAY);
367
368 LLGLDisable blend(GL_BLEND); 343 LLGLDisable blend(GL_BLEND);
369 344
370 LLColor3 light_diffuse(0,0,0); 345 LLColor3 light_diffuse(0,0,0);
@@ -562,8 +537,6 @@ void LLDrawPoolWater::shade()
562 face->renderIndexed(); 537 face->renderIndexed();
563 } 538 }
564 } 539 }
565
566 mIndicesDrawn += face->getIndicesCount();
567 } 540 }
568 } 541 }
569 542
@@ -576,8 +549,6 @@ void LLDrawPoolWater::shade()
576 shader->unbind(); 549 shader->unbind();
577 550
578 glActiveTextureARB(GL_TEXTURE0_ARB); 551 glActiveTextureARB(GL_TEXTURE0_ARB);
579 glClientActiveTextureARB(GL_TEXTURE0_ARB);
580 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
581 glEnable(GL_TEXTURE_2D); 552 glEnable(GL_TEXTURE_2D);
582 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 553 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE);
583 554
diff --git a/linden/indra/newview/lldrawpoolwlsky.cpp b/linden/indra/newview/lldrawpoolwlsky.cpp
index d18f0de..e10cd0a 100644
--- a/linden/indra/newview/lldrawpoolwlsky.cpp
+++ b/linden/indra/newview/lldrawpoolwlsky.cpp
@@ -159,9 +159,7 @@ void LLDrawPoolWLSky::renderStars(void) const
159 // combiners blending below requires something to be bound 159 // combiners blending below requires something to be bound
160 // and we might as well only bind once. 160 // and we might as well only bind once.
161 //LLGLEnable gl_texture_2d(GL_TEXTURE_2D); 161 //LLGLEnable gl_texture_2d(GL_TEXTURE_2D);
162 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 162
163 glDisableClientState(GL_NORMAL_ARRAY);
164
165 gPipeline.disableLights(); 163 gPipeline.disableLights();
166 164
167 if (!LLPipeline::sReflectionRender) 165 if (!LLPipeline::sReflectionRender)
@@ -224,9 +222,6 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
224 222
225void LLDrawPoolWLSky::renderHeavenlyBodies() 223void LLDrawPoolWLSky::renderHeavenlyBodies()
226{ 224{
227 glEnableClientState(GL_VERTEX_ARRAY);
228 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
229 glDisableClientState(GL_NORMAL_ARRAY);
230 LLGLSPipelineSkyBox gls_skybox; 225 LLGLSPipelineSkyBox gls_skybox;
231 LLGLEnable blend_on(GL_BLEND); 226 LLGLEnable blend_on(GL_BLEND);
232 gPipeline.disableLights(); 227 gPipeline.disableLights();
@@ -240,7 +235,6 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
240 LLColor4 color(gSky.mVOSkyp->getSun().getInterpColor()); 235 LLColor4 color(gSky.mVOSkyp->getSun().getInterpColor());
241 LLFacePool::LLOverrideFaceColor color_override(this, color); 236 LLFacePool::LLOverrideFaceColor color_override(this, color);
242 face->renderIndexed(); 237 face->renderIndexed();
243 mIndicesDrawn += face->getIndicesCount();
244 } 238 }
245#endif 239#endif
246 240
@@ -264,10 +258,7 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
264 258
265 LLFacePool::LLOverrideFaceColor color_override(this, color); 259 LLFacePool::LLOverrideFaceColor color_override(this, color);
266 face->renderIndexed(); 260 face->renderIndexed();
267 mIndicesDrawn += face->getIndicesCount();
268 } 261 }
269
270 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
271} 262}
272 263
273void LLDrawPoolWLSky::render(S32 pass) 264void LLDrawPoolWLSky::render(S32 pass)
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 0c8de14..f480d8d 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -263,8 +263,14 @@ void LLFace::setDrawable(LLDrawable *drawable)
263 263
264void LLFace::setSize(const S32 num_vertices, const S32 num_indices) 264void LLFace::setSize(const S32 num_vertices, const S32 num_indices)
265{ 265{
266 mGeomCount = num_vertices; 266 if (mGeomCount != num_vertices ||
267 mIndicesCount = num_indices; 267 mIndicesCount != num_indices)
268 {
269 mGeomCount = num_vertices;
270 mIndicesCount = num_indices;
271 mVertexBuffer = NULL;
272 mLastVertexBuffer = NULL;
273 }
268} 274}
269 275
270//============================================================================ 276//============================================================================
@@ -368,8 +374,6 @@ void LLFace::renderForSelect(U32 data_mask)
368#if !LL_RELEASE_FOR_DOWNLOAD 374#if !LL_RELEASE_FOR_DOWNLOAD
369 LLGLState::checkClientArrays(data_mask); 375 LLGLState::checkClientArrays(data_mask);
370#endif 376#endif
371 U16* indicesp = (U16*) mVertexBuffer->getIndicesPointer() + mIndicesIndex;
372
373 if (gPickFaces && mTEOffset != -1) 377 if (gPickFaces && mTEOffset != -1)
374 { 378 {
375 // mask off high 4 bits (16 total possible faces) 379 // mask off high 4 bits (16 total possible faces)
@@ -386,40 +390,26 @@ void LLFace::renderForSelect(U32 data_mask)
386 { 390 {
387 glPushMatrix(); 391 glPushMatrix();
388 glMultMatrixf((float*) mDrawablep->getRegion()->mRenderMatrix.mMatrix); 392 glMultMatrixf((float*) mDrawablep->getRegion()->mRenderMatrix.mMatrix);
389 glDrawElements(GL_TRIANGLES, mIndicesCount, GL_UNSIGNED_SHORT, indicesp); 393 mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
390 glPopMatrix(); 394 glPopMatrix();
391 } 395 }
392 else 396 else
393 { 397 {
394 glDrawElements(GL_TRIANGLES, mIndicesCount, GL_UNSIGNED_SHORT, indicesp); 398 mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
395 } 399 }
396 } 400 }
397 else 401 else
398 { 402 {
399 glPushMatrix(); 403 glPushMatrix();
400 glMultMatrixf((float*)getRenderMatrix().mMatrix); 404 glMultMatrixf((float*)getRenderMatrix().mMatrix);
401 glDrawElements(GL_TRIANGLES, mIndicesCount, GL_UNSIGNED_SHORT, indicesp); 405 mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
402 glPopMatrix();
403 }
404 }
405 else if (mGeomCount > 0)
406 {
407 if (isState(GLOBAL))
408 {
409 glDrawArrays(GL_TRIANGLES, mGeomIndex, mGeomCount);
410 }
411 else
412 {
413 glPushMatrix();
414 glMultMatrixf((float*)getRenderMatrix().mMatrix);
415 glDrawArrays(GL_TRIANGLES, mGeomIndex, mGeomCount);
416 glPopMatrix(); 406 glPopMatrix();
417 } 407 }
418 } 408 }
419 } 409 }
420} 410}
421 411
422void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color, const S32 offset, const S32 count) 412void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color)
423{ 413{
424 if(mDrawablep.isNull() || mVertexBuffer.isNull()) 414 if(mDrawablep.isNull() || mVertexBuffer.isNull())
425 { 415 {
@@ -443,27 +433,12 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color, const S32
443 glMultMatrixf((GLfloat*)mDrawablep->getRegion()->mRenderMatrix.mMatrix); 433 glMultMatrixf((GLfloat*)mDrawablep->getRegion()->mRenderMatrix.mMatrix);
444 } 434 }
445 435
446 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
447 glEnableClientState(GL_VERTEX_ARRAY);
448 glEnableClientState(GL_NORMAL_ARRAY);
449
450 mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD); 436 mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD);
451#if !LL_RELEASE_FOR_DOWNLOAD 437#if !LL_RELEASE_FOR_DOWNLOAD
452 LLGLState::checkClientArrays(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD); 438 LLGLState::checkClientArrays(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD);
453#endif 439#endif
454 U16* indicesp = ((U16*) mVertexBuffer->getIndicesPointer()) + mIndicesIndex; 440 mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
455 441
456 if (count)
457 {
458 glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, indicesp + offset);
459 }
460 else
461 {
462 glDrawElements(GL_TRIANGLES, mIndicesCount, GL_UNSIGNED_SHORT, indicesp);
463 }
464 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
465 glDisableClientState(GL_NORMAL_ARRAY);
466
467 glPopMatrix(); 442 glPopMatrix();
468 } 443 }
469} 444}
@@ -542,8 +517,6 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
542 } 517 }
543 else 518 else
544 { 519 {
545 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
546 glEnableClientState(GL_VERTEX_ARRAY);
547 llassert(mGeomIndex >= 0); 520 llassert(mGeomIndex >= 0);
548 if (count) 521 if (count)
549 { 522 {
@@ -568,7 +541,6 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
568 glDrawArrays(GL_TRIANGLES, mGeomIndex, mGeomCount); 541 glDrawArrays(GL_TRIANGLES, mGeomIndex, mGeomCount);
569 } 542 }
570 } 543 }
571 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
572 } 544 }
573 545
574 glDisable(GL_POLYGON_OFFSET_FILL); 546 glDisable(GL_POLYGON_OFFSET_FILL);
@@ -1251,16 +1223,7 @@ S32 LLFace::pushVertices(const U16* index_array) const
1251{ 1223{
1252 if (mIndicesCount) 1224 if (mIndicesCount)
1253 { 1225 {
1254 if (mGeomCount <= gGLManager.mGLMaxVertexRange && 1226 mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex);
1255 mIndicesCount <= (U32) gGLManager.mGLMaxIndexRange)
1256 {
1257 glDrawRangeElements(GL_TRIANGLES, mGeomIndex, mGeomIndex + mGeomCount-1, mIndicesCount,
1258 GL_UNSIGNED_SHORT, index_array + mIndicesIndex);
1259 }
1260 else
1261 {
1262 glDrawElements(GL_TRIANGLES, mIndicesCount, GL_UNSIGNED_SHORT, index_array+mIndicesIndex);
1263 }
1264 gPipeline.addTrianglesDrawn(mIndicesCount/3); 1227 gPipeline.addTrianglesDrawn(mIndicesCount/3);
1265 } 1228 }
1266 1229
diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h
index 4454bd6..f04d221 100644
--- a/linden/indra/newview/llface.h
+++ b/linden/indra/newview/llface.h
@@ -167,7 +167,7 @@ public:
167 void renderSelectedUV(const S32 offset = 0, const S32 count = 0); 167 void renderSelectedUV(const S32 offset = 0, const S32 count = 0);
168 168
169 void renderForSelect(U32 data_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD); 169 void renderForSelect(U32 data_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD);
170 void renderSelected(LLImageGL *image, const LLColor4 &color, const S32 offset = 0, const S32 count = 0); 170 void renderSelected(LLImageGL *image, const LLColor4 &color);
171 171
172 F32 getKey() const { return mDistance; } 172 F32 getKey() const { return mDistance; }
173 173
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index fe7fafa..ec49c1a 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -195,7 +195,7 @@ void LLVolumeImplFlexible::remapSections(LLFlexibleObjectSection *source, S32 so
195 195
196 196
197//----------------------------------------------------------------------------- 197//-----------------------------------------------------------------------------
198void LLVolumeImplFlexible::setAttributesOfAllSections() 198void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
199{ 199{
200 LLVector2 bottom_scale, top_scale; 200 LLVector2 bottom_scale, top_scale;
201 F32 begin_rot = 0, end_rot = 0; 201 F32 begin_rot = 0, end_rot = 0;
@@ -215,8 +215,16 @@ void LLVolumeImplFlexible::setAttributesOfAllSections()
215 215
216 S32 num_sections = 1 << mSimulateRes; 216 S32 num_sections = 1 << mSimulateRes;
217 217
218 LLVector3 scale = mVO->mDrawable->getScale(); 218 LLVector3 scale;
219 219 if (inScale == (LLVector3*)NULL)
220 {
221 scale = mVO->mDrawable->getScale();
222 }
223 else
224 {
225 scale = *inScale;
226 }
227
220 mSection[0].mPosition = getAnchorPosition(); 228 mSection[0].mPosition = getAnchorPosition();
221 mSection[0].mDirection = LLVector3::z_axis * getFrameRotation(); 229 mSection[0].mDirection = LLVector3::z_axis * getFrameRotation();
222 mSection[0].mdPosition = mSection[0].mDirection; 230 mSection[0].mdPosition = mSection[0].mDirection;
@@ -297,7 +305,7 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
297 new_res = mRenderRes; 305 new_res = mRenderRes;
298 } 306 }
299 307
300 if (!mInitialized || (mSimulateRes != new_res)) 308 if (!mInitialized)
301 { 309 {
302 mSimulateRes = new_res; 310 mSimulateRes = new_res;
303 setAttributesOfAllSections(); 311 setAttributesOfAllSections();
@@ -644,7 +652,7 @@ void LLVolumeImplFlexible::doFlexibleRebuild()
644 652
645void LLVolumeImplFlexible::onSetScale(const LLVector3& scale, BOOL damped) 653void LLVolumeImplFlexible::onSetScale(const LLVector3& scale, BOOL damped)
646{ 654{
647 setAttributesOfAllSections(); 655 setAttributesOfAllSections((LLVector3*) &scale);
648} 656}
649 657
650BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) 658BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
diff --git a/linden/indra/newview/llflexibleobject.h b/linden/indra/newview/llflexibleobject.h
index f6e68fc..843a8f8 100644
--- a/linden/indra/newview/llflexibleobject.h
+++ b/linden/indra/newview/llflexibleobject.h
@@ -138,7 +138,7 @@ class LLVolumeImplFlexible : public LLVolumeInterface
138 //-------------------------------------- 138 //--------------------------------------
139 // private methods 139 // private methods
140 //-------------------------------------- 140 //--------------------------------------
141 void setAttributesOfAllSections (); 141 void setAttributesOfAllSections (LLVector3* inScale = NULL);
142 142
143 void remapSections(LLFlexibleObjectSection *source, S32 source_sections, 143 void remapSections(LLFlexibleObjectSection *source, S32 source_sections,
144 LLFlexibleObjectSection *dest, S32 dest_sections); 144 LLFlexibleObjectSection *dest, S32 dest_sections);
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 6892b8d..1ea0495 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -293,7 +293,6 @@ BOOL LLFloaterAnimPreview::postBuild()
293 mAnimPreview = NULL; 293 mAnimPreview = NULL;
294 mMotionID.setNull(); 294 mMotionID.setNull();
295 childSetValue("bad_animation_text", getString("failed_to_initialize")); 295 childSetValue("bad_animation_text", getString("failed_to_initialize"));
296 setEnabled(FALSE);
297 } 296 }
298 } 297 }
299 else 298 else
diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp
index 6b1c3e0..7affff6 100644
--- a/linden/indra/newview/llfloaterauction.cpp
+++ b/linden/indra/newview/llfloaterauction.cpp
@@ -53,6 +53,7 @@
53#include "llviewerdisplay.h" 53#include "llviewerdisplay.h"
54#include "llviewercontrol.h" 54#include "llviewercontrol.h"
55#include "llui.h" 55#include "llui.h"
56#include "llglimmediate.h"
56 57
57///---------------------------------------------------------------------------- 58///----------------------------------------------------------------------------
58/// Local function declarations, constants, enums, and typedefs 59/// Local function declarations, constants, enums, and typedefs
@@ -153,7 +154,7 @@ void LLFloaterAuction::draw()
153 } 154 }
154 { 155 {
155 LLGLSUIDefault gls_ui; 156 LLGLSUIDefault gls_ui;
156 glColor3f(1.f, 1.f, 1.f); 157 gGL.color3f(1.f, 1.f, 1.f);
157 gl_draw_scaled_image(rect.mLeft, 158 gl_draw_scaled_image(rect.mLeft,
158 rect.mBottom, 159 rect.mBottom,
159 rect.getWidth(), 160 rect.getWidth(),
diff --git a/linden/indra/newview/llfloaterhud.cpp b/linden/indra/newview/llfloaterhud.cpp
index 2f192f7..d93e36a 100644
--- a/linden/indra/newview/llfloaterhud.cpp
+++ b/linden/indra/newview/llfloaterhud.cpp
@@ -51,16 +51,20 @@ LLFloaterHUD::LLFloaterHUD()
51: LLFloater("floater_hud"), 51: LLFloater("floater_hud"),
52 mWebBrowser(0) 52 mWebBrowser(0)
53{ 53{
54 // Create floater from its XML definition
55 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
56
54 // Don't grab the focus as it will impede performing in-world actions 57 // Don't grab the focus as it will impede performing in-world actions
55 // while using the HUD 58 // while using the HUD
56 setAutoFocus(FALSE); 59 setIsChrome(TRUE);
60
61 // Chrome doesn't show the window title by default, but here we
62 // want to show it.
63 setTitleVisible(true);
57 64
58 // Opaque background since we never get the focus 65 // Opaque background since we never get the focus
59 setBackgroundOpaque(TRUE); 66 setBackgroundOpaque(TRUE);
60 67
61 // Create floater from its XML definition
62 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hud.xml");
63
64 // Position floater based on saved location 68 // Position floater based on saved location
65 LLRect saved_position_rect = gSavedSettings.getRect("FloaterHUDRect"); 69 LLRect saved_position_rect = gSavedSettings.getRect("FloaterHUDRect");
66 reshape(saved_position_rect.getWidth(), saved_position_rect.getHeight(), FALSE); 70 reshape(saved_position_rect.getWidth(), saved_position_rect.getHeight(), FALSE);
@@ -69,12 +73,14 @@ LLFloaterHUD::LLFloaterHUD()
69 mWebBrowser = getChild<LLWebBrowserCtrl>("floater_hud_browser" ); 73 mWebBrowser = getChild<LLWebBrowserCtrl>("floater_hud_browser" );
70 if (mWebBrowser) 74 if (mWebBrowser)
71 { 75 {
72 // Always refresh the browser
73 mWebBrowser->setAlwaysRefresh(true);
74
75 // Open links in internal browser 76 // Open links in internal browser
76 mWebBrowser->setOpenInExternalBrowser(false); 77 mWebBrowser->setOpenInExternalBrowser(false);
77 78
79 // This is a "chrome" floater, so we don't want anything to
80 // take focus (as the user needs to be able to walk with
81 // arrow keys during tutorial).
82 mWebBrowser->setTakeFocusOnClick(false);
83
78 LLString language(gSavedSettings.getString("Language")); 84 LLString language(gSavedSettings.getString("Language"));
79 if(language == "default") 85 if(language == "default")
80 { 86 {
@@ -132,9 +138,3 @@ void LLFloaterHUD::close()
132{ 138{
133 if (sInstance) sInstance->close(); 139 if (sInstance) sInstance->close();
134} 140}
135
136void LLFloaterHUD::onFocusReceived()
137{
138 // Never get the focus
139 setFocus(FALSE);
140}
diff --git a/linden/indra/newview/llfloaterhud.h b/linden/indra/newview/llfloaterhud.h
index bd60d7b..95c0f8d 100644
--- a/linden/indra/newview/llfloaterhud.h
+++ b/linden/indra/newview/llfloaterhud.h
@@ -58,7 +58,7 @@ protected:
58 LLWebBrowserCtrl* mWebBrowser; ///< the actual web browser control 58 LLWebBrowserCtrl* mWebBrowser; ///< the actual web browser control
59 59
60 LLFloaterHUD(); ///< default constructor 60 LLFloaterHUD(); ///< default constructor
61 virtual void onFocusReceived(); ///< called when we get the focus 61
62private: 62private:
63 static LLFloaterHUD* sInstance; 63 static LLFloaterHUD* sInstance;
64}; 64};
diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp
index c7a929d..a19328a 100644
--- a/linden/indra/newview/llmemoryview.cpp
+++ b/linden/indra/newview/llmemoryview.cpp
@@ -121,6 +121,8 @@ static const struct mtv_display_info mtv_display_table[] =
121 { LLMemType::MTYPE_VERTEX_DATA, "Vertex Buffer", &LLColor4::blue3 }, 121 { LLMemType::MTYPE_VERTEX_DATA, "Vertex Buffer", &LLColor4::blue3 },
122 { LLMemType::MTYPE_AVATAR, "Avatar", &LLColor4::purple1 }, 122 { LLMemType::MTYPE_AVATAR, "Avatar", &LLColor4::purple1 },
123 { LLMemType::MTYPE_REGIONS, "Regions", &LLColor4::blue1 }, 123 { LLMemType::MTYPE_REGIONS, "Regions", &LLColor4::blue1 },
124 { LLMemType::MTYPE_VOLUME, "Volume", &LLColor4::pink1 },
125 { LLMemType::MTYPE_PRIMITIVE, "Profile", &LLColor4::pink2 },
124 { LLMemType::MTYPE_TEMP1, "Temp1", &LLColor4::red1 }, 126 { LLMemType::MTYPE_TEMP1, "Temp1", &LLColor4::red1 },
125 { LLMemType::MTYPE_TEMP2, "Temp2", &LLColor4::magenta1 }, 127 { LLMemType::MTYPE_TEMP2, "Temp2", &LLColor4::magenta1 },
126 { LLMemType::MTYPE_TEMP3, "Temp3", &LLColor4::red2 }, 128 { LLMemType::MTYPE_TEMP3, "Temp3", &LLColor4::red2 },
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index f403271..9fcd73d 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -951,6 +951,7 @@ void LLPanelLogin::loadLoginPage()
951 { 951 {
952 LLAppViewer::instance()->resetURIs(); 952 LLAppViewer::instance()->resetURIs();
953 gGridChoice = (EGridInfo)grid_index; 953 gGridChoice = (EGridInfo)grid_index;
954 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
954 gViewerWindow->setMenuBackgroundColor(false, 955 gViewerWindow->setMenuBackgroundColor(false,
955 !LLAppViewer::instance()->isInProductionGrid()); 956 !LLAppViewer::instance()->isInProductionGrid());
956 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor()); 957 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
diff --git a/linden/indra/newview/llpostprocess.cpp b/linden/indra/newview/llpostprocess.cpp
index 11a211a..c72b8ae 100644
--- a/linden/indra/newview/llpostprocess.cpp
+++ b/linden/indra/newview/llpostprocess.cpp
@@ -215,7 +215,6 @@ void LLPostProcess::applyColorFilterShader(void)
215{ 215{
216 gPostColorFilterProgram.bind(); 216 gPostColorFilterProgram.bind();
217 217
218 glClientActiveTextureARB(GL_TEXTURE0_ARB);
219 glActiveTextureARB(GL_TEXTURE0_ARB); 218 glActiveTextureARB(GL_TEXTURE0_ARB);
220 glEnable(GL_TEXTURE_RECTANGLE_ARB); 219 glEnable(GL_TEXTURE_RECTANGLE_ARB);
221 220
@@ -258,7 +257,6 @@ void LLPostProcess::applyNightVisionShader(void)
258{ 257{
259 gPostNightVisionProgram.bind(); 258 gPostNightVisionProgram.bind();
260 259
261 glClientActiveTextureARB(GL_TEXTURE0_ARB);
262 glActiveTextureARB(GL_TEXTURE0_ARB); 260 glActiveTextureARB(GL_TEXTURE0_ARB);
263 glEnable(GL_TEXTURE_RECTANGLE_ARB); 261 glEnable(GL_TEXTURE_RECTANGLE_ARB);
264 262
@@ -266,7 +264,6 @@ void LLPostProcess::applyNightVisionShader(void)
266 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); 264 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture);
267 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0); 265 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0);
268 266
269 glClientActiveTextureARB(GL_TEXTURE1_ARB);
270 glActiveTextureARB(GL_TEXTURE1_ARB); 267 glActiveTextureARB(GL_TEXTURE1_ARB);
271 glEnable(GL_TEXTURE_2D); 268 glEnable(GL_TEXTURE_2D);
272 269
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index 7d715be..c378aad 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -1906,9 +1906,8 @@ void pushVerts(LLDrawInfo* params, U32 mask)
1906{ 1906{
1907 LLRenderPass::applyModelMatrix(*params); 1907 LLRenderPass::applyModelMatrix(*params);
1908 params->mVertexBuffer->setBuffer(mask); 1908 params->mVertexBuffer->setBuffer(mask);
1909 U16* indicesp = (U16*) params->mVertexBuffer->getIndicesPointer(); 1909 params->mVertexBuffer->drawRange(params->mParticle ? LLVertexBuffer::POINTS : LLVertexBuffer::TRIANGLES,
1910 glDrawRangeElements(params->mParticle ? GL_POINTS : GL_TRIANGLES, params->mStart, params->mEnd, params->mCount, 1910 params->mStart, params->mEnd, params->mCount, params->mOffset);
1911 GL_UNSIGNED_SHORT, indicesp+params->mOffset);
1912} 1911}
1913 1912
1914void pushVerts(LLSpatialGroup* group, U32 mask) 1913void pushVerts(LLSpatialGroup* group, U32 mask)
@@ -1932,13 +1931,11 @@ void pushVerts(LLFace* face, U32 mask)
1932 if (buffer) 1931 if (buffer)
1933 { 1932 {
1934 buffer->setBuffer(mask); 1933 buffer->setBuffer(mask);
1935 U16* indicesp = (U16*) buffer->getIndicesPointer();
1936 U16 start = face->getGeomStart(); 1934 U16 start = face->getGeomStart();
1937 U16 end = start + face->getGeomCount()-1; 1935 U16 end = start + face->getGeomCount()-1;
1938 U32 count = face->getIndicesCount(); 1936 U32 count = face->getIndicesCount();
1939 U16 offset = face->getIndicesStart(); 1937 U16 offset = face->getIndicesStart();
1940 1938 buffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
1941 glDrawRangeElements(GL_TRIANGLES, start, end, count, GL_UNSIGNED_SHORT, indicesp + offset);
1942 } 1939 }
1943 1940
1944} 1941}
@@ -1948,9 +1945,7 @@ void pushBufferVerts(LLVertexBuffer* buffer, U32 mask)
1948 if (buffer) 1945 if (buffer)
1949 { 1946 {
1950 buffer->setBuffer(mask); 1947 buffer->setBuffer(mask);
1951 U16* indicesp = (U16*) buffer->getIndicesPointer(); 1948 buffer->drawRange(LLVertexBuffer::TRIANGLES, 0, buffer->getRequestedVerts()-1, buffer->getRequestedIndices(), 0);
1952 glDrawRangeElements(GL_TRIANGLES, 0, buffer->getRequestedVerts(), buffer->getRequestedIndices(),
1953 GL_UNSIGNED_SHORT, indicesp);
1954 } 1949 }
1955} 1950}
1956 1951
@@ -1999,9 +1994,8 @@ void pushVertsColorCoded(LLSpatialGroup* group, U32 mask)
1999 LLRenderPass::applyModelMatrix(*params); 1994 LLRenderPass::applyModelMatrix(*params);
2000 glColor4f(colors[col].mV[0], colors[col].mV[1], colors[col].mV[2], 0.5f); 1995 glColor4f(colors[col].mV[0], colors[col].mV[1], colors[col].mV[2], 0.5f);
2001 params->mVertexBuffer->setBuffer(mask); 1996 params->mVertexBuffer->setBuffer(mask);
2002 U16* indicesp = (U16*) params->mVertexBuffer->getIndicesPointer(); 1997 params->mVertexBuffer->drawRange(params->mParticle ? LLVertexBuffer::POINTS : LLVertexBuffer::TRIANGLES,
2003 glDrawRangeElements(params->mParticle ? GL_POINTS : GL_TRIANGLES, params->mStart, params->mEnd, params->mCount, 1998 params->mStart, params->mEnd, params->mCount, params->mOffset);
2004 GL_UNSIGNED_SHORT, indicesp+params->mOffset);
2005 col = (col+1)%col_count; 1999 col = (col+1)%col_count;
2006 } 2000 }
2007 } 2001 }
@@ -2070,8 +2064,7 @@ void renderOctree(LLSpatialGroup* group)
2070 face->mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX); 2064 face->mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX);
2071 //drawBox((face->mExtents[0] + face->mExtents[1])*0.5f, 2065 //drawBox((face->mExtents[0] + face->mExtents[1])*0.5f,
2072 // (face->mExtents[1]-face->mExtents[0])*0.5f); 2066 // (face->mExtents[1]-face->mExtents[0])*0.5f);
2073 glDrawElements(GL_TRIANGLES, face->getIndicesCount(), GL_UNSIGNED_SHORT, 2067 face->mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, face->getIndicesCount(), face->getIndicesStart());
2074 ((U16*) face->mVertexBuffer->getIndicesPointer())+face->getIndicesStart());
2075 } 2068 }
2076 } 2069 }
2077 2070
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index b4d6f27..72e3d5c 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -886,6 +886,11 @@ void render_ui_and_swap()
886 LLGLState::checkStates(); 886 LLGLState::checkStates();
887#endif 887#endif
888 888
889 glPushMatrix();
890 glLoadMatrixd(gGLLastModelView);
891 glh::matrix4f saved_view = glh_get_current_modelview();
892 glh_set_current_modelview(glh_copy_matrix(gGLLastModelView));
893
889 { 894 {
890 BOOL to_texture = gPipeline.canUseVertexShaders() && 895 BOOL to_texture = gPipeline.canUseVertexShaders() &&
891 LLPipeline::sRenderGlow && 896 LLPipeline::sRenderGlow &&
@@ -936,6 +941,9 @@ void render_ui_and_swap()
936 941
937 LLVertexBuffer::stopRender(); 942 LLVertexBuffer::stopRender();
938 } 943 }
944
945 glh_set_current_modelview(saved_view);
946 glPopMatrix();
939} 947}
940 948
941void render_ui_and_swap_if_needed() 949void render_ui_and_swap_if_needed()
@@ -1030,11 +1038,6 @@ void render_ui_3d()
1030 // so 3d elements requiring Z buffer are moved to LLDrawPoolHUD 1038 // so 3d elements requiring Z buffer are moved to LLDrawPoolHUD
1031 // 1039 //
1032 1040
1033 // Render selections
1034 //glDisableClientState(GL_COLOR_ARRAY);
1035 //glDisableClientState(GL_TEXTURE_COORD_ARRAY);
1036 //glDisableClientState(GL_NORMAL_ARRAY);
1037
1038 ///////////////////////////////////////////////////////////// 1041 /////////////////////////////////////////////////////////////
1039 // 1042 //
1040 // Render 2.5D elements (2D elements in the world) 1043 // Render 2.5D elements (2D elements in the world)
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index b87d564..4a0f0b8 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -501,21 +501,6 @@ int compare_int(const void *a, const void *b)
501 else return 0; 501 else return 0;
502} 502}
503 503
504void llDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices)
505{
506 if (end-start+1 > (U32) gGLManager.mGLMaxVertexRange ||
507 count > gGLManager.mGLMaxIndexRange)
508 {
509 glDrawElements(mode,count,type,indices);
510 }
511 else
512 {
513 glDrawRangeElements(mode,start,end,count,type,indices);
514 }
515
516 gPipeline.addTrianglesDrawn(count/3);
517}
518
519//-------------------------------------------------------------------- 504//--------------------------------------------------------------------
520// LLViewerJointMesh::drawShape() 505// LLViewerJointMesh::drawShape()
521//-------------------------------------------------------------------- 506//--------------------------------------------------------------------
@@ -626,7 +611,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
626 U32 start = mMesh->mFaceVertexOffset; 611 U32 start = mMesh->mFaceVertexOffset;
627 U32 end = start + mMesh->mFaceVertexCount - 1; 612 U32 end = start + mMesh->mFaceVertexCount - 1;
628 U32 count = mMesh->mFaceIndexCount; 613 U32 count = mMesh->mFaceIndexCount;
629 U16* indicesp = ((U16*) mFace->mVertexBuffer->getIndicesPointer()) + mMesh->mFaceIndexOffset; 614 U32 offset = mMesh->mFaceIndexOffset;
630 615
631 if (mMesh->hasWeights()) 616 if (mMesh->hasWeights())
632 { 617 {
@@ -636,23 +621,21 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
636 { 621 {
637 uploadJointMatrices(); 622 uploadJointMatrices();
638 } 623 }
639 llDrawRangeElements(GL_TRIANGLES, start, end, count, GL_UNSIGNED_SHORT, indicesp);
640 }
641 else
642 {
643 llDrawRangeElements(GL_TRIANGLES, start, end, count, GL_UNSIGNED_SHORT, indicesp);
644 } 624 }
625
626 mFace->mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
645 } 627 }
646 else 628 else
647 { 629 {
648 glPushMatrix(); 630 glPushMatrix();
649 LLMatrix4 jointToWorld = getWorldMatrix(); 631 LLMatrix4 jointToWorld = getWorldMatrix();
650 glMultMatrixf((GLfloat*)jointToWorld.mMatrix); 632 glMultMatrixf((GLfloat*)jointToWorld.mMatrix);
651 llDrawRangeElements(GL_TRIANGLES, start, end, count, GL_UNSIGNED_SHORT, indicesp); 633 mFace->mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
652 glPopMatrix(); 634 glPopMatrix();
653 } 635 }
636 gPipeline.addTrianglesDrawn(count/3);
654 637
655 triangle_count += mMesh->mFaceIndexCount; 638 triangle_count += count;
656 639
657 if (mTestImageName) 640 if (mTestImageName)
658 { 641 {
diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp
index 1c5d870..0d927ae 100644
--- a/linden/indra/newview/llviewerkeyboard.cpp
+++ b/linden/indra/newview/llviewerkeyboard.cpp
@@ -88,8 +88,6 @@ static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode m
88{ 88{
89 if (KEYSTATE_UP == s) 89 if (KEYSTATE_UP == s)
90 { 90 {
91 // Releasing a walk-key resets the double-tap timer
92 gAgent.mDoubleTapRunTimer.reset();
93 if (gAgent.mDoubleTapRunMode == mode && 91 if (gAgent.mDoubleTapRunMode == mode &&
94 gAgent.getRunning() && 92 gAgent.getRunning() &&
95 !gAgent.getAlwaysRun()) 93 !gAgent.getAlwaysRun())
@@ -98,17 +96,23 @@ static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode m
98 gAgent.clearRunning(); 96 gAgent.clearRunning();
99 gAgent.sendWalkRun(gAgent.getRunning()); 97 gAgent.sendWalkRun(gAgent.getRunning());
100 } 98 }
101 gAgent.mDoubleTapRunMode = mode;
102 } 99 }
103 else if (gAllowTapTapHoldRun && 100 else if (gAllowTapTapHoldRun &&
104 KEYSTATE_DOWN == s && 101 KEYSTATE_DOWN == s &&
105 gAgent.mDoubleTapRunMode == mode && 102 !gAgent.getRunning())
106 gAgent.mDoubleTapRunTimer.getElapsedTimeF32() < NUDGE_TIME)
107 { 103 {
108 // Same walk-key was pushed again quickly; this is a double-tap 104 if (gAgent.mDoubleTapRunMode == mode &&
109 // so engage temporary running. 105 gAgent.mDoubleTapRunTimer.getElapsedTimeF32() < NUDGE_TIME)
110 gAgent.setRunning(); 106 {
111 gAgent.sendWalkRun(gAgent.getRunning()); 107 // Same walk-key was pushed again quickly; this is a
108 // double-tap so engage temporary running.
109 gAgent.setRunning();
110 gAgent.sendWalkRun(gAgent.getRunning());
111 }
112
113 // Pressing any walk-key resets the double-tap timer
114 gAgent.mDoubleTapRunTimer.reset();
115 gAgent.mDoubleTapRunMode = mode;
112 } 116 }
113} 117}
114 118
diff --git a/linden/indra/newview/llvotree.cpp b/linden/indra/newview/llvotree.cpp
index a55afe1..993c2a0 100644
--- a/linden/indra/newview/llvotree.cpp
+++ b/linden/indra/newview/llvotree.cpp
@@ -821,7 +821,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
821 821
822 glLoadMatrixf((F32*) scale_mat.mMatrix); 822 glLoadMatrixf((F32*) scale_mat.mMatrix);
823 glDrawElements(GL_TRIANGLES, sLODIndexCount[trunk_LOD], GL_UNSIGNED_SHORT, indicesp + sLODIndexOffset[trunk_LOD]); 823 glDrawElements(GL_TRIANGLES, sLODIndexCount[trunk_LOD], GL_UNSIGNED_SHORT, indicesp + sLODIndexOffset[trunk_LOD]);
824 824 gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
825 stop_glerror(); 825 stop_glerror();
826 ret += sLODIndexCount[trunk_LOD]; 826 ret += sLODIndexCount[trunk_LOD];
827 } 827 }
@@ -871,7 +871,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
871 871
872 glLoadMatrixf((F32*) scale_mat.mMatrix); 872 glLoadMatrixf((F32*) scale_mat.mMatrix);
873 glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp); 873 glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
874 874 gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
875 stop_glerror(); 875 stop_glerror();
876 ret += LEAF_INDICES; 876 ret += LEAF_INDICES;
877 } 877 }
@@ -896,7 +896,7 @@ U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD
896 896
897 glLoadMatrixf((F32*) scale_mat.mMatrix); 897 glLoadMatrixf((F32*) scale_mat.mMatrix);
898 glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp); 898 glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
899 899 gPipeline.addTrianglesDrawn(LEAF_INDICES/3);
900 stop_glerror(); 900 stop_glerror();
901 ret += LEAF_INDICES; 901 ret += LEAF_INDICES;
902 902
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index 4b357e2..188c277 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -762,7 +762,7 @@ void LLVOVolume::sculpt()
762 return; 762 return;
763 763
764 LLPointer<LLImageRaw> raw_image = new LLImageRaw(); 764 LLPointer<LLImageRaw> raw_image = new LLImageRaw();
765 mSculptTexture->readBackRaw(discard_level, raw_image, FALSE); 765 BOOL is_valid = mSculptTexture->readBackRaw(discard_level, raw_image, FALSE);
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();
@@ -770,6 +770,16 @@ void LLVOVolume::sculpt()
770 sculpt_components = raw_image->getComponents(); 770 sculpt_components = raw_image->getComponents();
771 sculpt_data = raw_image->getData(); 771 sculpt_data = raw_image->getData();
772 772
773 if(is_valid)
774 {
775 is_valid = mSculptTexture->isValidForSculpt(discard_level, sculpt_width, sculpt_height, sculpt_components) ;
776 }
777 if(!is_valid)
778 {
779 sculpt_width = 0 ;
780 sculpt_height = 0 ;
781 }
782
773 llassert_always(raw_image->getDataSize() >= sculpt_height * sculpt_width * sculpt_components); 783 llassert_always(raw_image->getDataSize() >= sculpt_height * sculpt_width * sculpt_components);
774 784
775 getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level); 785 getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level);
diff --git a/linden/indra/newview/llvowlsky.cpp b/linden/indra/newview/llvowlsky.cpp
index 30d1397..159603e 100644
--- a/linden/indra/newview/llvowlsky.cpp
+++ b/linden/indra/newview/llvowlsky.cpp
@@ -484,17 +484,12 @@ BOOL LLVOWLSky::updateGeometry(LLDrawable * drawable)
484 484
485void LLVOWLSky::drawStars(void) 485void LLVOWLSky::drawStars(void)
486{ 486{
487 glEnableClientState(GL_COLOR_ARRAY);
488
489 // render the stars as a sphere centered at viewer camera 487 // render the stars as a sphere centered at viewer camera
490 if (mStarsVerts.notNull()) 488 if (mStarsVerts.notNull())
491 { 489 {
492 mStarsVerts->setBuffer(LLDrawPoolWLSky::STAR_VERTEX_DATA_MASK); 490 mStarsVerts->setBuffer(LLDrawPoolWLSky::STAR_VERTEX_DATA_MASK);
493 U16* indicesp = (U16*) mStarsVerts->getIndicesPointer(); 491 mStarsVerts->draw(LLVertexBuffer::POINTS, getStarsNumIndices(), 0);
494 glDrawElements(GL_POINTS, getStarsNumIndices(), GL_UNSIGNED_SHORT, indicesp);
495 } 492 }
496
497 glDisableClientState(GL_COLOR_ARRAY);
498} 493}
499 494
500void LLVOWLSky::drawDome(void) 495void LLVOWLSky::drawDome(void)
@@ -507,19 +502,8 @@ void LLVOWLSky::drawDome(void)
507 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 502 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
508 503
509 const U32 data_mask = LLDrawPoolWLSky::SKY_VERTEX_DATA_MASK; 504 const U32 data_mask = LLDrawPoolWLSky::SKY_VERTEX_DATA_MASK;
510 505
511 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
512
513#if DOME_SLICES 506#if DOME_SLICES
514 //mFanVerts->setBuffer(data_mask);
515 //glDrawRangeElements(
516 // GL_TRIANGLES,
517 // 0, getFanNumVerts()-1, getFanNumIndices(),
518 // GL_UNSIGNED_SHORT,
519 // mFanVerts->getIndicesPointer());
520
521 //gPipeline.addTrianglesDrawn(getFanNumIndices()/3);
522
523 std::vector< LLPointer<LLVertexBuffer> >::const_iterator strips_vbo_iter, end_strips; 507 std::vector< LLPointer<LLVertexBuffer> >::const_iterator strips_vbo_iter, end_strips;
524 end_strips = mStripsVerts.end(); 508 end_strips = mStripsVerts.end();
525 for(strips_vbo_iter = mStripsVerts.begin(); strips_vbo_iter != end_strips; ++strips_vbo_iter) 509 for(strips_vbo_iter = mStripsVerts.begin(); strips_vbo_iter != end_strips; ++strips_vbo_iter)
@@ -528,13 +512,10 @@ void LLVOWLSky::drawDome(void)
528 512
529 strips_segment->setBuffer(data_mask); 513 strips_segment->setBuffer(data_mask);
530 514
531 glDrawRangeElements( 515 strips_segment->drawRange(
532 //GL_TRIANGLES, 516 LLVertexBuffer::TRIANGLE_STRIP,
533 GL_TRIANGLE_STRIP, 517 0, strips_segment->getRequestedVerts()-1, strips_segment->getRequestedIndices(),
534 0, strips_segment->getRequestedVerts()-1, strips_segment->getRequestedIndices(), 518 0);
535 GL_UNSIGNED_SHORT,
536 strips_segment->getIndicesPointer());
537
538 gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices() - 2); 519 gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices() - 2);
539 } 520 }
540 521
@@ -547,8 +528,6 @@ void LLVOWLSky::drawDome(void)
547 mStripsVerts->getIndicesPointer()); 528 mStripsVerts->getIndicesPointer());
548#endif 529#endif
549 530
550 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
551
552 LLVertexBuffer::unbind(); 531 LLVertexBuffer::unbind();
553} 532}
554 533
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index a9c1ec8..fbbd827 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -71,7 +71,8 @@ LLWebBrowserCtrl::LLWebBrowserCtrl( const std::string& name, const LLRect& rect
71 mIgnoreUIScale( true ), 71 mIgnoreUIScale( true ),
72 mAlwaysRefresh( false ), 72 mAlwaysRefresh( false ),
73 mExternalUrl( "" ), 73 mExternalUrl( "" ),
74 mMediaSource( 0 ) 74 mMediaSource( 0 ),
75 mTakeFocusOnClick( true )
75{ 76{
76 S32 screen_width = mIgnoreUIScale ? 77 S32 screen_width = mIgnoreUIScale ?
77 llround((F32)getRect().getWidth() * LLUI::sGLScaleFactor.mV[VX]) : getRect().getWidth(); 78 llround((F32)getRect().getWidth() * LLUI::sGLScaleFactor.mV[VX]) : getRect().getWidth();
@@ -161,6 +162,13 @@ void LLWebBrowserCtrl::setBorderVisible( BOOL border_visible )
161}; 162};
162 163
163//////////////////////////////////////////////////////////////////////////////// 164////////////////////////////////////////////////////////////////////////////////
165//
166void LLWebBrowserCtrl::setTakeFocusOnClick( bool take_focus )
167{
168 mTakeFocusOnClick = take_focus;
169}
170
171////////////////////////////////////////////////////////////////////////////////
164// set flag that forces the embedded browser to open links in the external system browser 172// set flag that forces the embedded browser to open links in the external system browser
165void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn ) 173void LLWebBrowserCtrl::setOpenInExternalBrowser( bool valIn )
166{ 174{
@@ -209,7 +217,17 @@ BOOL LLWebBrowserCtrl::handleMouseUp( S32 x, S32 y, MASK mask )
209 convertInputCoords(x, y); 217 convertInputCoords(x, y);
210 218
211 if (mMediaSource) 219 if (mMediaSource)
220 {
212 mMediaSource->mouseUp(x, y); 221 mMediaSource->mouseUp(x, y);
222
223 // *HACK: LLMediaImplLLMozLib automatically takes focus on mouseup,
224 // in addition to the onFocusReceived() call below. Undo this. JC
225 if (!mTakeFocusOnClick)
226 {
227 mMediaSource->focus(false);
228 gViewerWindow->focusClient();
229 }
230 }
213 231
214 gViewerWindow->setMouseCapture( NULL ); 232 gViewerWindow->setMouseCapture( NULL );
215 233
@@ -227,7 +245,10 @@ BOOL LLWebBrowserCtrl::handleMouseDown( S32 x, S32 y, MASK mask )
227 245
228 gViewerWindow->setMouseCapture( this ); 246 gViewerWindow->setMouseCapture( this );
229 247
230 setFocus( TRUE ); 248 if (mTakeFocusOnClick)
249 {
250 setFocus( TRUE );
251 }
231 252
232 return TRUE; 253 return TRUE;
233} 254}
@@ -243,7 +264,10 @@ BOOL LLWebBrowserCtrl::handleDoubleClick( S32 x, S32 y, MASK mask )
243 264
244 gViewerWindow->setMouseCapture( this ); 265 gViewerWindow->setMouseCapture( this );
245 266
246 setFocus( TRUE ); 267 if (mTakeFocusOnClick)
268 {
269 setFocus( TRUE );
270 }
247 271
248 return TRUE; 272 return TRUE;
249} 273}
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index f7c9647..e1b5357 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -182,6 +182,12 @@ class LLWebBrowserCtrl :
182 182
183 void setBorderVisible( BOOL border_visible ); 183 void setBorderVisible( BOOL border_visible );
184 184
185 // For the tutorial window, we don't want to take focus on clicks,
186 // as the examples include how to move around with the arrow
187 // keys. Thus we keep focus on the app by setting this false.
188 // Defaults to true.
189 void setTakeFocusOnClick( bool take_focus );
190
185 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); 191 static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
186 192
187 // handle mouse related methods 193 // handle mouse related methods
@@ -263,6 +269,7 @@ class LLWebBrowserCtrl :
263 269
264 private: 270 private:
265 static void onClickLinkExternalTarget( S32 option, void* userdata ); 271 static void onClickLinkExternalTarget( S32 option, void* userdata );
272
266 LLWebBrowserCtrlEventEmitter< LLWebBrowserCtrlObserver > mEventEmitter; 273 LLWebBrowserCtrlEventEmitter< LLWebBrowserCtrlObserver > mEventEmitter;
267 const S32 mTextureDepthBytes; 274 const S32 mTextureDepthBytes;
268 int mEmbeddedBrowserWindowId; 275 int mEmbeddedBrowserWindowId;
@@ -278,6 +285,7 @@ class LLWebBrowserCtrl :
278 bool mIgnoreUIScale; 285 bool mIgnoreUIScale;
279 bool mAlwaysRefresh; 286 bool mAlwaysRefresh;
280 LLMediaBase* mMediaSource; 287 LLMediaBase* mMediaSource;
288 bool mTakeFocusOnClick;
281}; 289};
282 290
283//////////////////////////////////////////////////////////////////////////////// 291////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/mozilla-theme/classic.jar b/linden/indra/newview/mozilla-theme/classic.jar
index f9c03eb..0f33170 100644
--- a/linden/indra/newview/mozilla-theme/classic.jar
+++ b/linden/indra/newview/mozilla-theme/classic.jar
Binary files differ
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 5f45e26..92a9811 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -168,7 +168,7 @@ glh::matrix4f glh_get_current_projection()
168 return glh_copy_matrix(gGLProjection); 168 return glh_copy_matrix(gGLProjection);
169} 169}
170 170
171void glh_copy_matrix(glh::matrix4f& src, GLdouble* dst) 171void glh_copy_matrix(const glh::matrix4f& src, GLdouble* dst)
172{ 172{
173 for (U32 i = 0; i < 16; i++) 173 for (U32 i = 0; i < 16; i++)
174 { 174 {
@@ -176,7 +176,7 @@ void glh_copy_matrix(glh::matrix4f& src, GLdouble* dst)
176 } 176 }
177} 177}
178 178
179void glh_set_current_modelview(glh::matrix4f& mat) 179void glh_set_current_modelview(const glh::matrix4f& mat)
180{ 180{
181 glh_copy_matrix(mat, gGLModelView); 181 glh_copy_matrix(mat, gGLModelView);
182} 182}
@@ -2144,9 +2144,9 @@ void render_hud_elements()
2144 LLViewerParcelMgr::getInstance()->renderParcelCollision(); 2144 LLViewerParcelMgr::getInstance()->renderParcelCollision();
2145 2145
2146 // Render debugging beacons. 2146 // Render debugging beacons.
2147 gObjectList.renderObjectBeacons(); 2147 //gObjectList.renderObjectBeacons();
2148 LLHUDObject::renderAll(); 2148 //LLHUDObject::renderAll();
2149 gObjectList.resetObjectBeacons(); 2149 //gObjectList.resetObjectBeacons();
2150 } 2150 }
2151 else if (gForceRenderLandFence) 2151 else if (gForceRenderLandFence)
2152 { 2152 {
@@ -2253,11 +2253,11 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2253 // 2253 //
2254 // 2254 //
2255 2255
2256 glEnableClientState(GL_VERTEX_ARRAY);
2257
2258 stop_glerror(); 2256 stop_glerror();
2259 gFrameStats.start(LLFrameStats::RENDER_SYNC); 2257 gFrameStats.start(LLFrameStats::RENDER_SYNC);
2260 2258
2259 glEnableClientState(GL_VERTEX_ARRAY);
2260
2261 // Do verification of GL state 2261 // Do verification of GL state
2262#ifndef LL_RELEASE_FOR_DOWNLOAD 2262#ifndef LL_RELEASE_FOR_DOWNLOAD
2263 LLGLState::checkStates(); 2263 LLGLState::checkStates();
@@ -2377,10 +2377,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2377 break; 2377 break;
2378 } 2378 }
2379 2379
2380 p->resetTrianglesDrawn();
2381 p->render(i); 2380 p->render(i);
2382 } 2381 }
2383 poolp->endRenderPass(i); 2382 poolp->endRenderPass(i);
2383 LLVertexBuffer::unbind();
2384#ifndef LL_RELEASE_FOR_DOWNLOAD 2384#ifndef LL_RELEASE_FOR_DOWNLOAD
2385# if LL_DEBUG_GL 2385# if LL_DEBUG_GL
2386 GLint depth; 2386 GLint depth;
@@ -2413,6 +2413,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2413 } 2413 }
2414 } 2414 }
2415 2415
2416 LLVertexBuffer::unbind();
2416#ifndef LL_RELEASE_FOR_DOWNLOAD 2417#ifndef LL_RELEASE_FOR_DOWNLOAD
2417 LLGLState::checkStates(); 2418 LLGLState::checkStates();
2418 LLGLState::checkTextureChannels(); 2419 LLGLState::checkTextureChannels();
@@ -2452,6 +2453,15 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2452 LLVertexBuffer::stopRender(); 2453 LLVertexBuffer::stopRender();
2453 LLVertexBuffer::unbind(); 2454 LLVertexBuffer::unbind();
2454 2455
2456 if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
2457 {
2458 gGL.start();
2459 // Render debugging beacons.
2460 gObjectList.renderObjectBeacons();
2461 LLHUDObject::renderAll();
2462 gObjectList.resetObjectBeacons();
2463 gGL.stop();
2464 }
2455 2465
2456 //HACK: preserve/restore matrices around HUD render 2466 //HACK: preserve/restore matrices around HUD render
2457 if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) 2467 if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
@@ -2472,15 +2482,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2472 2482
2473void LLPipeline::renderGeomDeferred() 2483void LLPipeline::renderGeomDeferred()
2474{ 2484{
2475 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2476 glEnableClientState(GL_NORMAL_ARRAY);
2477 glEnableClientState(GL_COLOR_ARRAY);
2478 gDeferredDiffuseProgram.bind(); 2485 gDeferredDiffuseProgram.bind();
2479 gPipeline.renderObjects(LLRenderPass::PASS_SIMPLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_NORMAL, TRUE); 2486 gPipeline.renderObjects(LLRenderPass::PASS_SIMPLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_NORMAL, TRUE);
2480 gDeferredDiffuseProgram.unbind(); 2487 gDeferredDiffuseProgram.unbind();
2481 glDisableClientState(GL_COLOR_ARRAY);
2482 glDisableClientState(GL_NORMAL_ARRAY);
2483 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
2484} 2488}
2485 2489
2486void LLPipeline::addTrianglesDrawn(S32 count) 2490void LLPipeline::addTrianglesDrawn(S32 count)
@@ -2506,11 +2510,6 @@ void LLPipeline::renderDebug()
2506 2510
2507 gGL.start(); 2511 gGL.start();
2508 2512
2509 // Disable all client state
2510 //glDisableClientState(GL_TEXTURE_COORD_ARRAY);
2511 //glDisableClientState(GL_NORMAL_ARRAY);
2512 //glDisableClientState(GL_COLOR_ARRAY);
2513
2514 gGLLastMatrix = NULL; 2513 gGLLastMatrix = NULL;
2515 glLoadMatrixd(gGLModelView); 2514 glLoadMatrixd(gGLModelView);
2516 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2515 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
@@ -2603,8 +2602,6 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2603 LLGLDepthTest gls_depth(GL_TRUE,GL_TRUE); 2602 LLGLDepthTest gls_depth(GL_TRUE,GL_TRUE);
2604 disableLights(); 2603 disableLights();
2605 2604
2606 glEnableClientState ( GL_VERTEX_ARRAY );
2607
2608 //for each drawpool 2605 //for each drawpool
2609#ifndef LL_RELEASE_FOR_DOWNLOAD 2606#ifndef LL_RELEASE_FOR_DOWNLOAD
2610 LLGLState::checkStates(); 2607 LLGLState::checkStates();
@@ -2619,7 +2616,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2619 { 2616 {
2620 LLFacePool* face_pool = (LLFacePool*) poolp; 2617 LLFacePool* face_pool = (LLFacePool*) poolp;
2621 face_pool->renderForSelect(); 2618 face_pool->renderForSelect();
2622 2619 LLVertexBuffer::unbind();
2623 gGLLastMatrix = NULL; 2620 gGLLastMatrix = NULL;
2624 glLoadMatrixd(gGLModelView); 2621 glLoadMatrixd(gGLModelView);
2625 2622
@@ -2635,7 +2632,6 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2635 } 2632 }
2636 } 2633 }
2637 2634
2638 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2639 LLGLEnable alpha_test(GL_ALPHA_TEST); 2635 LLGLEnable alpha_test(GL_ALPHA_TEST);
2640 if (gPickTransparent) 2636 if (gPickTransparent)
2641 { 2637 {
@@ -2759,10 +2755,10 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2759 } 2755 }
2760 2756
2761 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 2757 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
2762 glDisableClientState( GL_TEXTURE_COORD_ARRAY );
2763 2758
2759 LLVertexBuffer::unbind();
2764 LLVertexBuffer::stopRender(); 2760 LLVertexBuffer::stopRender();
2765 2761
2766 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 2762 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
2767} 2763}
2768 2764
@@ -4866,6 +4862,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4866{ 4862{
4867 if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate) 4863 if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)
4868 { 4864 {
4865#ifndef LL_RELEASE_FOR_DOWNLOAD
4866 LLGLState::checkStates();
4867 LLGLState::checkTextureChannels();
4868 LLGLState::checkClientArrays();
4869#endif
4870
4869 LLCamera camera = camera_in; 4871 LLCamera camera = camera_in;
4870 camera.setFar(camera.getFar()*0.87654321f); 4872 camera.setFar(camera.getFar()*0.87654321f);
4871 LLPipeline::sReflectionRender = TRUE; 4873 LLPipeline::sReflectionRender = TRUE;
@@ -5052,6 +5054,12 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5052 LLDrawPoolWater::sNeedsDistortionUpdate = FALSE; 5054 LLDrawPoolWater::sNeedsDistortionUpdate = FALSE;
5053 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd)); 5055 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd));
5054 LLPipeline::sUseOcclusion = occlusion; 5056 LLPipeline::sUseOcclusion = occlusion;
5057
5058#ifndef LL_RELEASE_FOR_DOWNLOAD
5059 LLGLState::checkStates();
5060 LLGLState::checkTextureChannels();
5061 LLGLState::checkClientArrays();
5062#endif
5055 } 5063 }
5056} 5064}
5057 5065
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index a2a404f..9896a4a 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -67,8 +67,9 @@ BOOL compute_min_max(LLMatrix4& box, LLVector2& min, LLVector2& max); // Shouldn
67bool LLRayAABB(const LLVector3 &center, const LLVector3 &size, const LLVector3& origin, const LLVector3& dir, LLVector3 &coord, F32 epsilon = 0); 67bool LLRayAABB(const LLVector3 &center, const LLVector3 &size, const LLVector3& origin, const LLVector3& dir, LLVector3 &coord, F32 epsilon = 0);
68BOOL LLLineSegmentAABB(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size); 68BOOL LLLineSegmentAABB(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size);
69BOOL setup_hud_matrices(BOOL for_select); 69BOOL setup_hud_matrices(BOOL for_select);
70glh::matrix4f glh_copy_matrix(GLdouble* src);
70glh::matrix4f glh_get_current_modelview(); 71glh::matrix4f glh_get_current_modelview();
71void glh_set_current_modelview(glh::matrix4f& mat); 72void glh_set_current_modelview(const glh::matrix4f& mat);
72glh::matrix4f glh_get_current_projection(); 73glh::matrix4f glh_get_current_projection();
73void glh_set_current_projection(glh::matrix4f& mat); 74void glh_set_current_projection(glh::matrix4f& mat);
74glh::matrix4f gl_ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat znear, GLfloat zfar); 75glh::matrix4f gl_ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat znear, GLfloat zfar);
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 040c1da..0243fd7 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,27 @@
1Release Notes for Second Life 1.20(3) April 23th, 2008
2=====================================
3Fixes:
4* Fixed: removed mac release notes dialog from LLAppviewer::init
5* Fixed: Scrollbar channel missing in 1.20
6* Fixed: VWR-5080: Certain color combinations hard on visually impaired (and the not-visually-impaired)
7* Fixed: VWR-2404: lossless texture compression on small textures not lossless
8* Fixed: Window opens large, then small, then large on startup
9* Fixed: Imposters sometimes render without attachments
10* Fixed: VWR-380: Resized Flexible Prims Render Improperly
11* Fixed: Yellow edit outline detached from selected prim
12* Language tweaks to World Map UI
13* Fixed: Help > Tutorial makes the world disappear
14* Fixed: Help > Tutorial kills the keyboard.
15* Fixed: VWR-5869: Broken BVH Animation upload causes dialog / interface error, and crash.
16* Fixed: VWR-6275: Character runs when not supposed to.
17* Fix for vibrating name tags.
18* Fixed issue with mozilla scrollbars
19* Fixed: Background and Foreground color are the same in all scroll lists
20
21Localization Fixes:
22* Fixed: main Toolbar will not match to its Korean localization xml
23* Fixed: erroneous German translation for Active Speakers
24
1Release Notes for Second Life 1.20(2) April 18th, 2008 25Release Notes for Second Life 1.20(2) April 18th, 2008
2===================================== 26=====================================
3Changes: 27Changes:
diff --git a/linden/indra/newview/skins/xui/de/floater_active_speakers.xml b/linden/indra/newview/skins/xui/de/floater_active_speakers.xml
index 88c3e15..9ec58c1 100644
--- a/linden/indra/newview/skins/xui/de/floater_active_speakers.xml
+++ b/linden/indra/newview/skins/xui/de/floater_active_speakers.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="active_speakers" title="Aktive Lautsprecher"> 2<floater name="active_speakers" title="Aktive Sprecher">
3 <panel name="active_speakers_panel"> 3 <panel name="active_speakers_panel">
4 <scroll_list name="speakers_list"> 4 <scroll_list name="speakers_list">
5 <column label="Name" name="speaker_name" /> 5 <column label="Name" name="speaker_name" />
diff --git a/linden/indra/newview/skins/xui/de/menu_viewer.xml b/linden/indra/newview/skins/xui/de/menu_viewer.xml
index d72e7b7..d4a569c 100644
--- a/linden/indra/newview/skins/xui/de/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/de/menu_viewer.xml
@@ -77,7 +77,7 @@
77 <menu_item_check label="Lokaler Chat" name="Chat History" /> 77 <menu_item_check label="Lokaler Chat" name="Chat History" />
78 <menu_item_check label="Unterhalten" name="Instant Message" /> 78 <menu_item_check label="Unterhalten" name="Instant Message" />
79 <menu_item_call label="Inventar" name="Inventory" /> 79 <menu_item_call label="Inventar" name="Inventory" />
80 <menu_item_check label="Aktive Lautsprecher" name="Active Speakers" /> 80 <menu_item_check label="Aktive Sprecher" name="Active Speakers" />
81 <menu_item_check label="Stummschalten-Liste" name="Mute List" /> 81 <menu_item_check label="Stummschalten-Liste" name="Mute List" />
82 <menu_item_separator label="-----------" name="separator2" /> 82 <menu_item_separator label="-----------" name="separator2" />
83 <menu_item_check label="Kamerasteuerung" name="Camera Controls" /> 83 <menu_item_check label="Kamerasteuerung" name="Camera Controls" />
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_general.xml b/linden/indra/newview/skins/xui/de/panel_preferences_general.xml
index 635f43e..b7779b6 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_general.xml
@@ -86,22 +86,22 @@
86 汉语/漢語 (Chinesisch) - Beta 86 汉语/漢語 (Chinesisch) - Beta
87 </combo_item> 87 </combo_item>
88 <combo_item type="string" length="1" name="Deutsch(German)"> 88 <combo_item type="string" length="1" name="Deutsch(German)">
89 Deutsch 89 Deutsch - Beta
90 </combo_item> 90 </combo_item>
91 <combo_item type="string" length="1" name="French"> 91 <combo_item type="string" length="1" name="French">
92 Français (Französisch) 92 Français (Französisch) - Beta
93 </combo_item> 93 </combo_item>
94 <combo_item type="string" length="1" name="(Japanese)"> 94 <combo_item type="string" length="1" name="(Japanese)">
95 日本語 (Japanisch) 95 日本語 (Japanisch) - Beta
96 </combo_item> 96 </combo_item>
97 <combo_item type="string" length="1" name="(Korean)"> 97 <combo_item type="string" length="1" name="(Korean)">
98 한국어 (Koreanisch) 98 한국어 (Koreanisch) - Beta
99 </combo_item> 99 </combo_item>
100 <combo_item type="string" length="1" name="Portugese"> 100 <combo_item type="string" length="1" name="Portugese">
101 Português (Portugiesisch) - Beta 101 Português (Portugiesisch) - Beta
102 </combo_item> 102 </combo_item>
103 <combo_item type="string" length="1" name="Spanish"> 103 <combo_item type="string" length="1" name="Spanish">
104 Español (Spanisch) 104 Español (Spanisch) - Beta
105 </combo_item> 105 </combo_item>
106 </combo_box> 106 </combo_box>
107</panel> 107</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index d0ee7f0..b36a4ea 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -1032,6 +1032,9 @@ If you continue to have problems, please visit: http://www.secondlife.com/suppor
1032MINSPECS 1032MINSPECS
1033Do you wish to visit [_URL] for more information? 1033Do you wish to visit [_URL] for more information?
1034 </message> 1034 </message>
1035 <ignore message="ignore">
1036 Ignore unsupported hardware
1037 </ignore>
1035 <option name="Yes"> 1038 <option name="Yes">
1036 Yes 1039 Yes
1037 </option> 1040 </option>
@@ -1067,6 +1070,20 @@ Do you wish to visit [_URL] for more information?
1067 510 1070 510
1068 </message> 1071 </message>
1069 </alert> 1072 </alert>
1073
1074 <alert modal="true" name="UnknownGPU">
1075 <message name="message">
1076Your system contains a graphics card that is unknown to us at this time.
1077This is often the case with new hardware we haven't had a chance to
1078test. Second Life will most likely run properly, but you may need to
1079adjust your graphics settings to something more appropriate.
1080(Edit->Preferences->Graphics).
1081 </message>
1082 <ignore name="ignore">
1083 Ignore unknown graphics card
1084 </ignore>
1085 </alert>
1086
1070 <alert modal="true" name="DisplaySettingsRecommended"> 1087 <alert modal="true" name="DisplaySettingsRecommended">
1071 <message name="message"> 1088 <message name="message">
1072 Display settings have been set to recommended levels 1089 Display settings have been set to recommended levels
diff --git a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
index b8341f2..4e26986 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
@@ -149,20 +149,20 @@
149 image_name="map_track_16.tga" left="1013" mouse_opaque="true" 149 image_name="map_track_16.tga" left="1013" mouse_opaque="true"
150 name="avatar_icon" width="16" /> 150 name="avatar_icon" width="16" />
151 <combo_box allow_text_entry="true" bottom_delta="0" follows="top|right" height="20" 151 <combo_box allow_text_entry="true" bottom_delta="0" follows="top|right" height="20"
152 label="My Friends" left_delta="20" max_chars="60" mouse_opaque="true" 152 label="Online Friends" left_delta="20" max_chars="60" mouse_opaque="true"
153 name="friend combo" tool_tip="Friend to Show on Map" width="202"> 153 name="friend combo" tool_tip="Friend to Show on Map" width="202">
154 <combo_item name="none_selected" value="None"> 154 <combo_item name="none_selected" value="None">
155 My Friends 155 Online Friends
156 </combo_item> 156 </combo_item>
157 </combo_box> 157 </combo_box>
158 <icon bottom_delta="-25" color="0.5, 0, 0, 1" follows="top|right" height="16" 158 <icon bottom_delta="-25" color="0.5, 0, 0, 1" follows="top|right" height="16"
159 image_name="map_track_16.tga" left="1013" mouse_opaque="true" 159 image_name="map_track_16.tga" left="1013" mouse_opaque="true"
160 name="landmark_icon" width="16" /> 160 name="landmark_icon" width="16" />
161 <combo_box allow_text_entry="true" bottom_delta="0" follows="top|right" height="20" 161 <combo_box allow_text_entry="true" bottom_delta="0" follows="top|right" height="20"
162 label="My Landmarks" left_delta="20" max_chars="60" mouse_opaque="true" 162 label="Landmarks" left_delta="20" max_chars="60" mouse_opaque="true"
163 name="landmark combo" tool_tip="Landmark to Show on Map" width="202"> 163 name="landmark combo" tool_tip="Landmark to Show on Map" width="202">
164 <combo_item name="none_selected" value="None"> 164 <combo_item name="none_selected" value="None">
165 My Landmarks 165 Landmarks
166 </combo_item> 166 </combo_item>
167 </combo_box> 167 </combo_box>
168 <icon bottom_delta="-25" color="0.5, 0, 0, 1" follows="top|right" height="16" 168 <icon bottom_delta="-25" color="0.5, 0, 0, 1" follows="top|right" height="16"
diff --git a/linden/indra/newview/skins/xui/es/panel_preferences_general.xml b/linden/indra/newview/skins/xui/es/panel_preferences_general.xml
index 7703e0b..66fb9bd 100644
--- a/linden/indra/newview/skins/xui/es/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/es/panel_preferences_general.xml
@@ -69,16 +69,22 @@
69 Inglés 69 Inglés
70 </combo_item> 70 </combo_item>
71 <combo_item type="string" length="1" name="Deutsch(German)"> 71 <combo_item type="string" length="1" name="Deutsch(German)">
72 Deutsch (German) 72 Deutsch (Alemán) - Beta
73 </combo_item>
74 <combo_item type="string" length="1" name="French">
75 Français (Francés) - Beta
73 </combo_item> 76 </combo_item>
74 <combo_item type="string" length="1" name="(Japanese)"> 77 <combo_item type="string" length="1" name="(Japanese)">
75 日本語 (Japanese) 78 日本語 (Japonés) - Beta
76 </combo_item> 79 </combo_item>
77 <combo_item type="string" length="1" name="(Korean)"> 80 <combo_item type="string" length="1" name="(Korean)">
78 한국어 (Korean) 81 한국어 (Coreano) - Beta
79 </combo_item> 82 </combo_item>
80 <combo_item type="string" length="1" name="Chinese"> 83 <combo_item type="string" length="1" name="Chinese">
81 Chino 84 汉语/漢語 (Chino) - Beta
85 </combo_item>
86 <combo_item type="string" name="Spanish">
87 Español - Beta
82 </combo_item> 88 </combo_item>
83 </combo_box> 89 </combo_box>
84</panel> 90</panel>
diff --git a/linden/indra/newview/skins/xui/fr/panel_preferences_general.xml b/linden/indra/newview/skins/xui/fr/panel_preferences_general.xml
index c17fd3b..acf89cd 100644
--- a/linden/indra/newview/skins/xui/fr/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/fr/panel_preferences_general.xml
@@ -70,16 +70,16 @@
70 Anglais 70 Anglais
71 </combo_item> 71 </combo_item>
72 <combo_item type="string" length="1" name="Deutsch(German)"> 72 <combo_item type="string" length="1" name="Deutsch(German)">
73 Deutsch (German) 73 Deutsch (German) - Beta
74 </combo_item> 74 </combo_item>
75 <combo_item type="string" length="1" name="(Japanese)"> 75 <combo_item type="string" length="1" name="(Japanese)">
76 日本語 (Japanese) 76 日本語 (Japanese) - Beta
77 </combo_item> 77 </combo_item>
78 <combo_item type="string" length="1" name="(Korean)"> 78 <combo_item type="string" length="1" name="(Korean)">
79 한국어 (Korean) 79 한국어 (Korean) - Beta
80 </combo_item> 80 </combo_item>
81 <combo_item type="string" length="1" name="Chinese"> 81 <combo_item type="string" length="1" name="Chinese">
82 Chinois 82 Chinois - Beta
83 </combo_item> 83 </combo_item>
84 </combo_box> 84 </combo_box>
85</panel> 85</panel>
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
index e5deeb3..5017f37 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
@@ -92,22 +92,22 @@
92 汉语/漢語(中国語) – ベータ 92 汉语/漢語(中国語) – ベータ
93 </combo_item> 93 </combo_item>
94 <combo_item type="string" length="1" name="Deutsch(German)"> 94 <combo_item type="string" length="1" name="Deutsch(German)">
95 Deutsch (ドイツ語) 95 Deutsch (ドイツ語) – ベータ
96 </combo_item> 96 </combo_item>
97 <combo_item type="string" length="1" name="French"> 97 <combo_item type="string" length="1" name="French">
98 Français (フランス語) 98 Français (フランス語) – ベータ
99 </combo_item> 99 </combo_item>
100 <combo_item type="string" length="1" name="(Japanese)"> 100 <combo_item type="string" length="1" name="(Japanese)">
101 日本語 101 日本語 – ベータ
102 </combo_item> 102 </combo_item>
103 <combo_item type="string" length="1" name="(Korean)"> 103 <combo_item type="string" length="1" name="(Korean)">
104 한국어 (韓国語) 104 한국어 (韓国語) – ベータ
105 </combo_item> 105 </combo_item>
106 <combo_item type="string" length="1" name="Portugese"> 106 <combo_item type="string" length="1" name="Portugese">
107 Português (ポルトガル語) – ベータ 107 Português (ポルトガル語) – ベータ
108 </combo_item> 108 </combo_item>
109 <combo_item type="string" length="1" name="Spanish"> 109 <combo_item type="string" length="1" name="Spanish">
110 Español (スペイン語) 110 Español (スペイン語) – ベータ
111 </combo_item> 111 </combo_item>
112 </combo_box> 112 </combo_box>
113</panel> 113</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
index 15e1e31..9c02484 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
@@ -87,22 +87,22 @@
87 汉语/漢語(중국어) - 베타 87 汉语/漢語(중국어) - 베타
88 </combo_item> 88 </combo_item>
89 <combo_item type="string" length="1" name="Deutsch(German)"> 89 <combo_item type="string" length="1" name="Deutsch(German)">
90 Deutsch (독일어) 90 Deutsch (독일어) - 베타
91 </combo_item> 91 </combo_item>
92 <combo_item type="string" length="1" name="French"> 92 <combo_item type="string" length="1" name="French">
93 Français (불어) 93 Français (불어) - 베타
94 </combo_item> 94 </combo_item>
95 <combo_item type="string" length="1" name="(Japanese)"> 95 <combo_item type="string" length="1" name="(Japanese)">
96 日本語 (일본어) 96 日本語 (일본어) - 베타
97 </combo_item> 97 </combo_item>
98 <combo_item type="string" length="1" name="(Korean)"> 98 <combo_item type="string" length="1" name="(Korean)">
99 한국어 99 한국어 - 베타
100 </combo_item> 100 </combo_item>
101 <combo_item type="string" length="1" name="Portugese"> 101 <combo_item type="string" length="1" name="Portugese">
102 Português(포르투갈어) - 베타 102 Português(포르투갈어) - 베타
103 </combo_item> 103 </combo_item>
104 <combo_item type="string" length="1" name="Spanish"> 104 <combo_item type="string" length="1" name="Spanish">
105 Español (스페인어) 105 Español (스페인어) - 베타
106 </combo_item> 106 </combo_item>
107 </combo_box> 107 </combo_box>
108</panel> 108</panel>
diff --git a/linden/indra/newview/skins/xui/ko/panel_toolbar.xml b/linden/indra/newview/skins/xui/ko/panel_toolbar.xml
index 1a61390..1c92f88 100644
--- a/linden/indra/newview/skins/xui/ko/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_toolbar.xml
@@ -1,9 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="toolbar"> 2<panel name="toolbar">
3 <button label="메신저" name="im_btn" tool_tip="친구들과 메신저 하기." /> 3 <string name="Redock Windows">창 합치기</string>
4 <string name="Redock Windows"> 4 <layout_stack name="toolbar_stack">
5 창 합치기
6 </string>
7 <button label="통신" name="communicate_btn" 5 <button label="통신" name="communicate_btn"
8 tool_tip="친구 및 그룹과 통신합니다." /> 6 tool_tip="친구 및 그룹과 통신합니다." />
9 <button label="" name="chat_btn" tool_tip="채팅 표시줄 표시 (입력)" /> 7 <button label="" name="chat_btn" tool_tip="채팅 표시줄 표시 (입력)" />
@@ -20,4 +18,5 @@
20 tool_tip="내 주변 영역의 지도 (Ctrl-Shift-M)" /> 18 tool_tip="내 주변 영역의 지도 (Ctrl-Shift-M)" />
21 <button label="지도" name="map_btn" tool_tip="월드 지도 (Ctrl-M)" /> 19 <button label="지도" name="map_btn" tool_tip="월드 지도 (Ctrl-M)" />
22 <button label="인벤토리" name="inventory_btn" tool_tip="아이템. (Ctrl-I)" /> 20 <button label="인벤토리" name="inventory_btn" tool_tip="아이템. (Ctrl-I)" />
21 </layout_stack>
23</panel> 22</panel>
diff --git a/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml b/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
index 3eccaab..77460f2 100644
--- a/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_preferences_general.xml
@@ -68,16 +68,16 @@
68 英语 68 英语
69 </combo_item> 69 </combo_item>
70 <combo_item type="string" length="1" name="Deutsch(German)"> 70 <combo_item type="string" length="1" name="Deutsch(German)">
71 Deutsch (German) 71 Deutsch (German) - Beta
72 </combo_item> 72 </combo_item>
73 <combo_item type="string" length="1" name="(Japanese)"> 73 <combo_item type="string" length="1" name="(Japanese)">
74 日本語 (Japanese) 74 日本語 (Japanese) - Beta
75 </combo_item> 75 </combo_item>
76 <combo_item type="string" length="1" name="(Korean)"> 76 <combo_item type="string" length="1" name="(Korean)">
77 한국어 (Korean) 77 한국어 (Korean) - Beta
78 </combo_item> 78 </combo_item>
79 <combo_item type="string" length="1" name="Chinese"> 79 <combo_item type="string" length="1" name="Chinese">
80 中文 80 中文 - Beta
81 </combo_item> 81 </combo_item>
82 </combo_box> 82 </combo_box>
83</panel> 83</panel>