summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt3
-rw-r--r--indra/newview/app_settings/settings.xml108
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleV.glsl2
-rw-r--r--indra/newview/featuretable.txt15
-rw-r--r--indra/newview/featuretable_linux.txt15
-rw-r--r--indra/newview/featuretable_mac.txt15
-rw-r--r--indra/newview/gpu_table.txt23
-rw-r--r--indra/newview/llagent.cpp42
-rw-r--r--indra/newview/llagent.h4
-rw-r--r--indra/newview/llbox.cpp2
-rw-r--r--indra/newview/llchatbar.cpp10
-rw-r--r--indra/newview/lldrawable.cpp6
-rw-r--r--indra/newview/lldrawpool.cpp9
-rw-r--r--indra/newview/lldrawpoolalpha.cpp8
-rw-r--r--indra/newview/lldrawpoolavatar.cpp14
-rw-r--r--indra/newview/lldrawpoolbump.cpp54
-rw-r--r--indra/newview/lldrawpoolground.cpp5
-rw-r--r--indra/newview/lldrawpoolsky.cpp4
-rw-r--r--indra/newview/lldrawpoolterrain.cpp124
-rw-r--r--indra/newview/lldrawpooltree.cpp5
-rw-r--r--indra/newview/lldrawpoolwater.cpp38
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp13
-rw-r--r--indra/newview/lldynamictexture.cpp19
-rw-r--r--indra/newview/lldynamictexture.h4
-rw-r--r--indra/newview/llface.cpp16
-rw-r--r--indra/newview/llface.h2
-rw-r--r--indra/newview/llface.inl1
-rw-r--r--indra/newview/llfasttimerview.cpp13
-rw-r--r--indra/newview/llfeaturemanager.cpp2
-rw-r--r--indra/newview/llfloateranimpreview.cpp9
-rw-r--r--indra/newview/llfloaterauction.cpp4
-rw-r--r--indra/newview/llfloaterbeacons.cpp150
-rw-r--r--indra/newview/llfloaterbeacons.h56
-rw-r--r--indra/newview/llfloaterbuy.cpp12
-rw-r--r--indra/newview/llfloaterbuy.h3
-rw-r--r--indra/newview/llfloatercolorpicker.cpp6
-rw-r--r--indra/newview/llfloaterimagepreview.cpp28
-rw-r--r--indra/newview/llfloaterjoystick.cpp2
-rw-r--r--indra/newview/llfloaterland.cpp2
-rw-r--r--indra/newview/llfloaterpostcard.cpp12
-rw-r--r--indra/newview/llfloaterpreference.cpp4
-rw-r--r--indra/newview/llfloatersnapshot.cpp285
-rw-r--r--indra/newview/llfloatertopobjects.cpp2
-rw-r--r--indra/newview/llfolderview.cpp4
-rw-r--r--indra/newview/llglsandbox.cpp59
-rw-r--r--indra/newview/llhudeffectbeam.cpp2
-rw-r--r--indra/newview/llhudeffectlookat.cpp4
-rw-r--r--indra/newview/llhudeffectpointat.cpp4
-rw-r--r--indra/newview/llhudicon.cpp6
-rw-r--r--indra/newview/llhudtext.cpp127
-rw-r--r--indra/newview/llhudtext.h2
-rw-r--r--indra/newview/lljoystickbutton.cpp4
-rw-r--r--indra/newview/llmanip.cpp8
-rw-r--r--indra/newview/llmaniprotate.cpp12
-rw-r--r--indra/newview/llmanipscale.cpp14
-rw-r--r--indra/newview/llmaniptranslate.cpp44
-rw-r--r--indra/newview/llmemoryview.cpp2
-rw-r--r--indra/newview/llnetmap.cpp20
-rw-r--r--indra/newview/llpanellogin.cpp7
-rw-r--r--indra/newview/llpanelobject.cpp14
-rw-r--r--indra/newview/llpolymesh.h2
-rw-r--r--indra/newview/llpreviewtexture.cpp26
-rw-r--r--indra/newview/llprogressview.cpp6
-rw-r--r--indra/newview/llselectmgr.cpp8
-rw-r--r--indra/newview/llsky.cpp6
-rw-r--r--indra/newview/llspatialpartition.cpp77
-rw-r--r--indra/newview/llspatialpartition.h7
-rw-r--r--indra/newview/llstartup.cpp20
-rw-r--r--indra/newview/llsurface.cpp6
-rw-r--r--indra/newview/lltexlayer.cpp131
-rw-r--r--indra/newview/lltexlayer.h4
-rw-r--r--indra/newview/lltexturectrl.cpp4
-rw-r--r--indra/newview/lltextureview.cpp4
-rw-r--r--indra/newview/lltool.cpp6
-rw-r--r--indra/newview/lltoolbrush.cpp4
-rw-r--r--indra/newview/lltoolmorph.cpp7
-rw-r--r--indra/newview/lltoolselectrect.cpp2
-rw-r--r--indra/newview/lltracker.cpp7
-rw-r--r--indra/newview/llviewerdisplay.cpp24
-rw-r--r--indra/newview/llviewerjoint.cpp71
-rw-r--r--indra/newview/llviewerjointattachment.cpp2
-rw-r--r--indra/newview/llviewerjointmesh.cpp18
-rw-r--r--indra/newview/llviewermenu.cpp189
-rw-r--r--indra/newview/llviewermessage.cpp4
-rw-r--r--indra/newview/llviewerobject.cpp70
-rw-r--r--indra/newview/llviewerobject.h10
-rw-r--r--indra/newview/llviewerobjectlist.cpp21
-rw-r--r--indra/newview/llviewerparcelmedia.cpp2
-rw-r--r--indra/newview/llviewerparceloverlay.cpp8
-rw-r--r--indra/newview/llviewerpartsim.cpp22
-rw-r--r--indra/newview/llviewerpartsim.h6
-rw-r--r--indra/newview/llviewerpartsource.cpp9
-rw-r--r--indra/newview/llviewerregion.cpp11
-rw-r--r--indra/newview/llviewerregion.h1
-rw-r--r--indra/newview/llviewershadermgr.cpp38
-rw-r--r--indra/newview/llviewerwindow.cpp240
-rw-r--r--indra/newview/llviewerwindow.h9
-rw-r--r--indra/newview/llvoavatar.cpp138
-rw-r--r--indra/newview/llvoavatar.h10
-rw-r--r--indra/newview/llvograss.cpp143
-rw-r--r--indra/newview/llvograss.h10
-rw-r--r--indra/newview/llvoground.cpp2
-rw-r--r--indra/newview/llvoicevisualizer.cpp17
-rw-r--r--indra/newview/llvopartgroup.cpp45
-rw-r--r--indra/newview/llvopartgroup.h17
-rw-r--r--indra/newview/llvosky.cpp4
-rw-r--r--indra/newview/llvosurfacepatch.cpp81
-rw-r--r--indra/newview/llvosurfacepatch.h10
-rw-r--r--indra/newview/llvotree.cpp44
-rw-r--r--indra/newview/llvotree.h11
-rw-r--r--indra/newview/llvovolume.cpp109
-rw-r--r--indra/newview/llvovolume.h1
-rw-r--r--indra/newview/llvowlsky.cpp6
-rw-r--r--indra/newview/llwaterparammanager.cpp85
-rw-r--r--indra/newview/llwaterparammanager.h3
-rw-r--r--indra/newview/llwlparammanager.cpp128
-rw-r--r--indra/newview/llwlparammanager.h3
-rw-r--r--indra/newview/llworld.cpp3
-rw-r--r--indra/newview/llworldmap.cpp5
-rw-r--r--indra/newview/llworldmapview.cpp40
-rw-r--r--indra/newview/pipeline.cpp167
-rw-r--r--indra/newview/pipeline.h2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_chat.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_chat.xml2
125 files changed, 2386 insertions, 1270 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index d2730c5a95..4dd4c74ea3 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -124,6 +124,7 @@ set(viewer_SOURCE_FILES
llfloateravatarinfo.cpp
llfloateravatarpicker.cpp
llfloateravatartextures.cpp
+ llfloaterbeacons.cpp
llfloaterbuildoptions.cpp
llfloaterbump.cpp
llfloaterbuycontents.cpp
@@ -518,6 +519,7 @@ set(viewer_HEADER_FILES
llfloateravatarinfo.h
llfloateravatarpicker.h
llfloateravatartextures.h
+ llfloaterbeacons.h
llfloaterbuildoptions.h
llfloaterbump.h
llfloaterbuy.h
@@ -1025,6 +1027,7 @@ set(viewer_XUI_FILES
skins/default/xui/en-us/floater_audio_volume.xml
skins/default/xui/en-us/floater_avatar_picker.xml
skins/default/xui/en-us/floater_avatar_textures.xml
+ skins/default/xui/en-us/floater_beacons.xml
skins/default/xui/en-us/floater_build_options.xml
skins/default/xui/en-us/floater_bumps.xml
skins/default/xui/en-us/floater_buy_contents.xml
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 72e16ea70c..4d4ce6c326 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1838,17 +1838,6 @@
<integer>0</integer>
</array>
</map>
- <key>CompressSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>ConnectAsGod</key>
<map>
<key>Comment</key>
@@ -2660,6 +2649,22 @@
<integer>0</integer>
</array>
</map>
+ <key>FloaterBeaconsRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Rectangle for beacon and highlight controls</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>200</integer>
+ <integer>250</integer>
+ <integer>250</integer>
+ <integer>200</integer>
+ </array>
+ </map>
<key>FloaterBuildOptionsRect</key>
<map>
<key>Comment</key>
@@ -4279,10 +4284,11 @@
<key>Value</key>
<string>0.0.0</string>
</map>
- <key>LastSnapshotHeight</key>
+
+ <key>LastSnapshotToEmailHeight</key>
<map>
<key>Comment</key>
- <string>The height of the last snapshot, in px</string>
+ <string>The height of the last email snapshot, in px</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -4290,21 +4296,32 @@
<key>Value</key>
<integer>768</integer>
</map>
- <key>LastSnapshotType</key>
+ <key>LastSnapshotToEmailWidth</key>
<map>
<key>Comment</key>
- <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
+ <string>The width of the last email snapshot, in px</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1024</integer>
</map>
- <key>LastSnapshotWidth</key>
+ <key>LastSnapshotToDiskHeight</key>
<map>
<key>Comment</key>
- <string>The width of the last snapshot, in px</string>
+ <string>The height of the last disk snapshot, in px</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>768</integer>
+ </map>
+ <key>LastSnapshotToDiskWidth</key>
+ <map>
+ <key>Comment</key>
+ <string>The width of the last disk snapshot, in px</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -4312,6 +4329,39 @@
<key>Value</key>
<integer>1024</integer>
</map>
+ <key>LastSnapshotToInventoryHeight</key>
+ <map>
+ <key>Comment</key>
+ <string>The height of the last texture snapshot, in px</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>512</integer>
+ </map>
+ <key>LastSnapshotToInventoryWidth</key>
+ <map>
+ <key>Comment</key>
+ <string>The width of the last texture snapshot, in px</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>512</integer>
+ </map>
+ <key>LastSnapshotType</key>
+ <map>
+ <key>Comment</key>
+ <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>LeftClickShowMenu</key>
<map>
<key>Comment</key>
@@ -4488,17 +4538,6 @@
<key>Value</key>
<real>20.0</real>
</map>
- <key>MainloopTimeoutDefault</key>
- <map>
- <key>Comment</key>
- <string>Timeout duration for mainloop lock detection, in seconds.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>10.0</real>
- </map>
<key>MapOverlayIndex</key>
<map>
<key>Comment</key>
@@ -6066,6 +6105,17 @@
<key>Value</key>
<real>1.3</real>
</map>
+ <key>RenderGround</key>
+ <map>
+ <key>Comment</key>
+ <string>Determines whether we can render the ground pool or not</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RenderHUDInSnapshot</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
index 0df89c8fc3..78b96b3025 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
@@ -11,7 +11,7 @@ void calcAtmospherics(vec3 inPositionEye);
void main()
{
//transform vertex
- gl_Position = ftransform(); //gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_Position = ftransform();
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
vec4 pos = (gl_ModelViewMatrix * gl_Vertex);
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index b227043413..8a8ef0deac 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -33,6 +33,7 @@ RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
RenderGlowResolutionPow 1 9
+RenderGround 1 1
RenderLightingDetail 1 1
RenderMaxPartCount 1 8192
RenderNightBrightness 1 1.0
@@ -347,21 +348,7 @@ RenderVBOEnable 0 0
list ATI_All-in-Wonder_7500
RenderVBOEnable 0 0
-
-list ATI_Mobility_Radeon_9800
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
-list ATI_Mobility_Radeon_9700
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
list ATI_Mobility_Radeon_9600
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
Disregard96DefaultDrawDistance 1 0
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index 3eaa781206..08a9794c61 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -33,6 +33,7 @@ RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
RenderGlowResolutionPow 1 9
+RenderGround 1 1
RenderLightingDetail 1 1
RenderMaxPartCount 1 8192
RenderNightBrightness 1 1.0
@@ -343,21 +344,7 @@ RenderVBOEnable 0 0
list ATI_All-in-Wonder_7500
RenderVBOEnable 0 0
-
-list ATI_Mobility_Radeon_9800
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
-list ATI_Mobility_Radeon_9700
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
list ATI_Mobility_Radeon_9600
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
Disregard96DefaultDrawDistance 1 0
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index fab8ea9173..323683462a 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -33,6 +33,7 @@ RenderFlexTimeFactor 1 1.0
RenderFogRatio 1 4.0
RenderGamma 1 0
RenderGlowResolutionPow 1 9
+RenderGround 1 1
RenderLightingDetail 1 1
RenderMaxPartCount 1 8192
RenderNightBrightness 1 1.0
@@ -291,6 +292,7 @@ RenderVBOEnable 1 0
list Intel_950
RenderTerrainDetail 1 0
RenderVBOEnable 1 0
+RenderGround 1 0
list Intel_965
RenderTerrainDetail 1 0
@@ -324,20 +326,7 @@ list Intel_Springdale
RenderTerrainDetail 1 0
RenderVBOEnable 1 0
-list ATI_Mobility_Radeon_9800
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
-list ATI_Mobility_Radeon_9700
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
-
list ATI_Mobility_Radeon_9600
-RenderAvatarCloth 0 0
-VertexShaderEnable 0 0
-WindLightUseAtmosShaders 0 0
Disregard96DefaultDrawDistance 1 0
list NVIDIA_GeForce_8600
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
index 48af543aa4..44d66a606b 100644
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -36,6 +36,7 @@ ATI ASUS A9xxx .*ATI.*ASUS.*A9.* 1 1
ATI ASUS AH24xx .*ATI.*ASUS.*AH24.* 1 1
ATI ASUS AH26xx .*ATI.*ASUS.*AH26.* 3 1
ATI ASUS AH36xx .*ATI.*ASUS.*AH36.* 3 1
+ATI ASUS AH46xx .*ATI.*ASUS.*AH46.* 3 1
ATI ASUS AX3xx .*ATI.*ASUS.*AX3.* 1 1
ATI ASUS AX5xx .*ATI.*ASUS.*AX5.* 1 1
ATI ASUS AX8xx .*ATI.*ASUS.*AX8.* 2 1
@@ -51,6 +52,7 @@ ATI Diamond X550 .*ATI.*Diamond X550.* 1 1
ATI Diamond X13xx .*ATI.*Diamond X13.* 1 1
ATI Diamond X16xx .*ATI.*Diamond X16.* 1 1
ATI Diamond X19xx .*ATI.*Diamond X19.* 1 1
+ATI Display Adapter .*ATI.*display adapter.* 0 1
ATI FireGL 5200 .*ATI.*FireGL V52.* 0 1
ATI FireGL 5xxx .*ATI.*FireGL V5.* 1 1
ATI FireGL .*ATI.*Fire.*GL.* 0 1
@@ -104,13 +106,14 @@ ATI Radeon RV250 .*ATI.*RV250.* 0 1
ATI Radeon RV600 .*ATI.*RV6.* 1 1
ATI Radeon RX700 .*ATI.*RX70.* 1 1
ATI Radeon RX800 .*ATI.*Radeon *RX80.* 2 1
+ATI Radeon RX9550 .*ATI.*RX9550.* 1 1
ATI Radeon VE .*ATI.*Radeon.*VE.* 0 0
ATI Radeon X1000 .*ATI.*Radeon *X10.* 0 1
ATI Radeon X1200 .*ATI.*Radeon *X12.* 0 1
ATI Radeon X1300 .*ATI.*Radeon *X13.* 1 1
ATI Radeon X1400 .*ATI.*Radeon X14.* 1 1
ATI Radeon X1500 .*ATI.*Radeon X15.* 1 1
-ATI Radeon X1600 .*ATI.*Radeon X16.* 1 1
+ATI Radeon X1600 .*ATI.*Radeon *X16.* 1 1
ATI Radeon X1700 .*ATI.*Radeon X17.* 1 1
ATI Radeon X1800 .*ATI.*Radeon X18.* 3 1
ATI Radeon X1900 .*ATI.*Radeon X19.* 3 1
@@ -143,15 +146,20 @@ Intel G45 .*Intel.*G45.* 0 1
Intel Bear Lake .*Intel.*Bear Lake.* 0 0
Intel Broadwater .*Intel.*Broadwater.* 0 0
Intel Brookdale .*Intel.*Brookdale.* 0 0
-Intel Eaglelake .*Intel.*Eaglelake.* 0 1
+Intel Cantiga .*Intel.*Cantiga.* 0 0
+Intel Eaglelake .*Intel.*Eaglelake.* 0 0
Intel Montara .*Intel.*Montara.* 0 0
Intel Springdale .*Intel.*Springdale.* 0 0
Matrox .*Matrox.* 0 0
Mesa .*Mesa.* 0 0
NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*260.* 3 1
NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*280.* 3 1
+NVIDIA C51 .*NVIDIA.*C51.* 0 1
NVIDIA G72 .*NVIDIA.*G72.* 1 1
NVIDIA G73 .*NVIDIA.*G73.* 1 1
+NVIDIA G84 .*NVIDIA.*G84.* 3 1
+NVIDIA G86 .*NVIDIA.*G86.* 3 1
+NVIDIA G92 .*NVIDIA.*G92.* 3 1
NVIDIA GeForce .*GeForce 256.* 0 0
NVIDIA GeForce 2 .*GeForce2.* 0 1
NVIDIA GeForce 3 .*GeForce3.* 0 1
@@ -170,7 +178,7 @@ NVIDIA GeForce 7200 .*NVIDIA.*GeForce 72.* 1 1
NVIDIA GeForce 7300 .*NVIDIA.*GeForce 73.* 1 1
NVIDIA GeForce 7500 .*NVIDIA.*GeForce 75.* 1 1
NVIDIA GeForce 7600 .*NVIDIA.*GeForce 76.* 2 1
-NVIDIA GeForce 7800 .*NVIDIA.*GeForce 78.* 2 1
+NVIDIA GeForce 7800 .*NVIDIA.*GeForce.*78.* 2 1
NVIDIA GeForce 7900 .*NVIDIA.*GeForce 79.* 2 1
NVIDIA GeForce 8200 .*NVIDIA.*GeForce 82.* 1 1
NVIDIA GeForce 8300 .*NVIDIA.*GeForce 83.* 1 1
@@ -181,6 +189,9 @@ NVIDIA GeForce 8700 .*NVIDIA.*GeForce 87.* 3 1
NVIDIA GeForce 8800 .*NVIDIA.*GeForce 88.* 3 1
NVIDIA GeForce 9300M .*NVIDIA.*GeForce 9300M.* 1 1
NVIDIA GeForce 9500M .*NVIDIA.*GeForce 9500M.* 2 1
+NVIDIA GeForce 9700M .*NVIDIA.*GeForce 9700M.* 2 1
+NVIDIA GeForce 9300 .*NVIDIA.*GeForce 93.* 1 1
+NVIDIA GeForce 9500 .*NVIDIA.*GeForce 95.* 2 1
NVIDIA GeForce 9600 .*NVIDIA.*GeForce 96.* 3 1
NVIDIA GeForce 9800 .*NVIDIA.*GeForce 98.* 3 1
NVIDIA GeForce FX 5100 .*NVIDIA.*GeForce FX 51.* 0 1
@@ -212,10 +223,16 @@ NVIDIA GeForce Go 7600 .*NVIDIA.*GeForce Go 76.* 2 1
NVIDIA GeForce Go 7700 .*NVIDIA.*GeForce Go 77.* 2 1
NVIDIA GeForce Go 7800 .*NVIDIA.*GeForce Go 78.* 2 1
NVIDIA GeForce Go 7900 .*NVIDIA.*GeForce Go 79.* 2 1
+NVIDIA GeForce GTX 260 .*NVIDIA.*GeForce GTX 26.* 3 1
+NVIDIA GeForce GTX 280 .*NVIDIA.*GeForce GTX 28.* 3 1
NVIDIA GeForce Go 6 .*GeForce Go 6.* 1 1
+NVIDIA NB9M .*GeForce NB9M.* 1 1
+NVIDIA NB9P .*GeForce NB9P.* 1 1
NVIDIA GeForce PCX .*GeForce PCX.* 0 1
NVIDIA Generic .*NVIDIA.*Unknown.* 0 0
+NVIDIA NV17 .*GeForce NV17.* 0 1
NVIDIA NV34 .*NVIDIA.*NV34.* 0 1
+NVIDIA NV36 .*GeForce NV36.* 1 1
NVIDIA NV43 .*NVIDIA.*NV43.* 1 1
NVIDIA MCP78 .*NVIDIA.*MCP78.* 1 1
NVIDIA Quadro2 .*Quadro2.* 0 1
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 36e4182e37..0fa680e753 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -492,7 +492,7 @@ LLAgent::~LLAgent()
//-----------------------------------------------------------------------------
// resetView()
//-----------------------------------------------------------------------------
-void LLAgent::resetView(BOOL reset_camera)
+void LLAgent::resetView(BOOL reset_camera, BOOL change_camera)
{
if (mAutoPilot)
{
@@ -517,6 +517,30 @@ void LLAgent::resetView(BOOL reset_camera)
gMenuHolder->hideMenus();
}
+ if (change_camera && !gSavedSettings.getBOOL("FreezeTime"))
+ {
+ changeCameraToDefault();
+
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ handle_toggle_flycam();
+ }
+
+ // reset avatar mode from eventual residual motion
+ if (LLToolMgr::getInstance()->inBuildMode())
+ {
+ LLViewerJoystick::getInstance()->moveAvatar(true);
+ }
+
+ gFloaterTools->close();
+
+ gViewerWindow->showCursor();
+
+ // Switch back to basic toolset
+ LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ }
+
+
if (reset_camera && !gSavedSettings.getBOOL("FreezeTime"))
{
if (!gViewerWindow->getLeftMouseDown() && cameraThirdPerson())
@@ -1296,7 +1320,7 @@ LLQuaternion LLAgent::getQuat() const
//-----------------------------------------------------------------------------
// calcFocusOffset()
//-----------------------------------------------------------------------------
-LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
+LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y)
{
// calculate offset based on view direction
BOOL is_avatar = object->isAvatar();
@@ -1399,7 +1423,7 @@ LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
if (!is_avatar)
{
//unproject relative clicked coordinate from window coordinate using GL
- GLint viewport[4];
+ /*GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
@@ -1421,11 +1445,9 @@ LLVector3 LLAgent::calcFocusOffset(LLViewerObject *object, S32 x, S32 y)
winY = ((F32)y) * gViewerWindow->getDisplayScale().mV[VY];
glReadPixels( llfloor(winX), llfloor(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );
- gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
+ gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);*/
- LLVector3 obj_rel((F32)posX, (F32)posY, (F32)posZ);
- obj_rel = obj_rel * object->getRenderMatrix();
- obj_rel -= object->getRenderPosition();
+ LLVector3 obj_rel = pos_agent - object->getRenderPosition();
LLVector3 obj_center = LLVector3(0, 0, 0) * object->getRenderMatrix();
@@ -1940,6 +1962,8 @@ void LLAgent::cameraPanIn(F32 meters)
mFocusGlobal = mFocusTargetGlobal;
// don't enforce zoom constraints as this is the only way for users to get past them easily
updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
}
//-----------------------------------------------------------------------------
@@ -1958,6 +1982,8 @@ void LLAgent::cameraPanLeft(F32 meters)
cameraZoomIn(1.f);
updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind - Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
}
//-----------------------------------------------------------------------------
@@ -1976,6 +2002,8 @@ void LLAgent::cameraPanUp(F32 meters)
cameraZoomIn(1.f);
updateFocusOffset();
+ // NOTE: panning movements expect the camera to move exactly with the focus target, not animated behind -Nyx
+ mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal();
}
//-----------------------------------------------------------------------------
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 851c47cbd5..f6d983b3a3 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -139,7 +139,7 @@ public:
// Called whenever the agent moves. Puts camera back in default position,
// deselects items, etc.
- void resetView(BOOL reset_camera = TRUE);
+ void resetView(BOOL reset_camera = TRUE, BOOL change_camera = FALSE);
// Called on camera movement, to allow the camera to be unlocked from the
// default position behind the avatar.
@@ -378,7 +378,7 @@ public:
void sendAnimationRequests(LLDynamicArray<LLUUID> &anim_ids, EAnimRequest request);
void sendAnimationRequest(const LLUUID &anim_id, EAnimRequest request);
- LLVector3 calcFocusOffset(LLViewerObject *object, S32 x, S32 y);
+ LLVector3 calcFocusOffset(LLViewerObject *object, LLVector3 pos_agent, S32 x, S32 y);
BOOL calcCameraMinDistance(F32 &obj_min_distance);
void startCameraAnimation();
diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp
index 95e16cf872..77979765ea 100644
--- a/indra/newview/llbox.cpp
+++ b/indra/newview/llbox.cpp
@@ -81,7 +81,7 @@ void LLBox::renderface(S32 which_face)
{7, 4, 0, 3}
};
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
//gGL.normal3fv(&normals[which_face][0]);
gGL.texCoord2f(1,0);
gGL.vertex3fv(&mVertex[ faces[which_face][0] ][0]);
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
index d6b2a9e28e..9138ad2644 100644
--- a/indra/newview/llchatbar.cpp
+++ b/indra/newview/llchatbar.cpp
@@ -553,15 +553,17 @@ void LLChatBar::onInputEditorGainFocus( LLFocusableElement* caller, void* userda
// static
void LLChatBar::onClickSay( LLUICtrl* ctrl, void* userdata )
{
- LLChatBar* self = (LLChatBar*) userdata;
+ e_chat_type chat_type = CHAT_TYPE_NORMAL;
if (ctrl->getValue().asString() == "shout")
{
- self->sendChat( CHAT_TYPE_SHOUT );
+ chat_type = CHAT_TYPE_SHOUT;
}
- else
+ else if (ctrl->getValue().asString() == "whisper")
{
- self->sendChat( CHAT_TYPE_NORMAL );
+ chat_type = CHAT_TYPE_WHISPER;
}
+ LLChatBar* self = (LLChatBar*) userdata;
+ self->sendChat(chat_type);
}
void LLChatBar::sendChatFromViewer(const std::string &utf8text, EChatType type, BOOL animate)
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index b207c44e95..1592cc0a8b 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -362,6 +362,7 @@ void LLDrawable::makeActive()
if (pcode == LLViewerObject::LL_VO_WATER ||
pcode == LLViewerObject::LL_VO_SURFACE_PATCH ||
pcode == LLViewerObject::LL_VO_PART_GROUP ||
+ pcode == LLViewerObject::LL_VO_HUD_PART_GROUP ||
pcode == LLViewerObject::LL_VO_CLOUDS ||
pcode == LLViewerObject::LL_VO_GROUND ||
pcode == LLViewerObject::LL_VO_SKY)
@@ -1380,7 +1381,10 @@ BOOL LLDrawable::isAnimating() const
{
return TRUE;
}
-
+ if (mVObjp->getPCode() == LLViewerObject::LL_VO_HUD_PART_GROUP)
+ {
+ return TRUE;
+ }
if (mVObjp->getPCode() == LLViewerObject::LL_VO_CLOUDS)
{
return TRUE;
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index b7966f2b20..38a59f67c2 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -194,7 +194,8 @@ S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage)
iter != face_list.end(); iter++)
{
LLFace *facep = *iter;
- facep->bindTexture(stage);
+ gGL.getTexUnit(stage)->bind(facep->getTexture());
+ gGL.getTexUnit(0)->activate();
res += facep->renderIndexed();
}
}
@@ -395,7 +396,7 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
{
if (params.mTexture.notNull())
{
- params.mTexture->bind();
+ gGL.getTexUnit(0)->bind(params.mTexture.get());
if (params.mTextureMatrix)
{
glMatrixMode(GL_TEXTURE);
@@ -406,14 +407,14 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
}
else
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
if (params.mVertexBuffer.notNull())
{
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount/3);
}
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index e7c8903561..f8acb21e5d 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -129,7 +129,7 @@ void LLDrawPoolAlpha::render(S32 pass)
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
glColor4f(1,0,0,1);
LLViewerImage::sSmokeImagep->addTextureStats(1024.f*1024.f);
- LLViewerImage::sSmokeImagep->bind();
+ gGL.getTexUnit(0)->bind(LLViewerImage::sSmokeImagep.get());
renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD);
}
@@ -170,7 +170,7 @@ void LLDrawPoolAlpha::renderAlphaHighlight(U32 mask)
LLRenderPass::applyModelMatrix(params);
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount/3);
}
}
@@ -231,7 +231,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
if (texture && params.mTexture.notNull())
{
gGL.getTexUnit(0)->activate();
- params.mTexture->bind();
+ gGL.getTexUnit(0)->bind(params.mTexture.get());
params.mTexture->addTextureStats(params.mVSize);
if (params.mTextureMatrix)
{
@@ -288,7 +288,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount/3);
if (params.mTextureMatrix && texture && params.mTexture.notNull())
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index bb4af2268d..d68afa6632 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -396,7 +396,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
{
/* // debug code to draw a cube in place of avatar
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLVector3 pos = avatarp->getPositionAgent();
gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f);
@@ -495,17 +495,17 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
{
if (LLVOAvatar::sShowCollisionVolumes)
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
avatarp->renderCollisionVolumes();
}
if (avatarp->mIsSelf && LLAgent::sDebugDisplayTarget)
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLVector3 pos = avatarp->getPositionAgent();
gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
@@ -517,7 +517,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
pos = avatarp->mDrawable->getPositionAgent();
gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
@@ -529,7 +529,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
pos = avatarp->mRoot.getWorldPosition();
gGL.color4f(1.0f, 1.0f, 1.0f, 0.8f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
@@ -541,7 +541,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
pos = avatarp->mPelvisp->getWorldPosition();
gGL.color4f(0.0f, 0.0f, 1.0f, 0.8f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 2556462cb4..ccf130be7a 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -349,27 +349,29 @@ void LLDrawPoolBump::beginShiny(bool invisible)
cube_map->setMatrix(1);
// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for
// the cube map in the one pass shiny shaders
- cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
cube_map->enableTexture(cube_channel);
cube_map->enableTextureCoords(1);
diffuse_channel = shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
}
else
{
- cube_channel = 0;
+ cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
diffuse_channel = -1;
cube_map->setMatrix(0);
- cube_map->enable(shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB));
+ cube_map->enable(cube_channel);
}
- cube_map->bind();
+ gGL.getTexUnit(cube_channel)->bind(cube_map);
+ gGL.getTexUnit(0)->activate();
}
else
{
cube_channel = 0;
diffuse_channel = -1;
+ gGL.getTexUnit(0)->disable();
cube_map->enable(0);
cube_map->setMatrix(0);
- cube_map->bind();
+ gGL.getTexUnit(0)->bind(cube_map);
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA);
@@ -423,7 +425,7 @@ void LLDrawPoolBump::endShiny(bool invisible)
if (!invisible && mVertexShaderLevel > 1)
{
- shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 0)
{
@@ -435,18 +437,21 @@ void LLDrawPoolBump::endShiny(bool invisible)
shader->unbind();
gGL.getTexUnit(0)->activate();
- glEnable(GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
}
if (cube_channel >= 0)
{
+ gGL.getTexUnit(cube_channel)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT);
}
}
- gGL.getTexUnit(0)->activate();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(diffuse_channel)->disable();
+ gGL.getTexUnit(cube_channel)->disable();
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
-
+
diffuse_channel = -1;
cube_channel = 0;
mShiny = FALSE;
@@ -489,12 +494,14 @@ void LLDrawPoolBump::beginFullbrightShiny()
cube_map->setMatrix(1);
// Make sure that texture coord generation happens for tex unit 1, as that's the one we use for
// the cube map in the one pass shiny shaders
- cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ gGL.getTexUnit(1)->disable();
+ cube_channel = shader->enableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
cube_map->enableTexture(cube_channel);
cube_map->enableTextureCoords(1);
diffuse_channel = shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
- cube_map->bind();
+ gGL.getTexUnit(cube_channel)->bind(cube_map);
+ gGL.getTexUnit(0)->activate();
}
mShiny = TRUE;
}
@@ -535,14 +542,13 @@ void LLDrawPoolBump::endFullbrightShiny()
shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
}
gGL.getTexUnit(0)->activate();
- glEnable(GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
shader->unbind();
-
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
diffuse_channel = -1;
@@ -561,7 +567,7 @@ void LLDrawPoolBump::renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL
applyModelMatrix(params);
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount/3);
}
}
@@ -599,8 +605,8 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params)
if (bump)
{
- bump->bind(1);
- bump->bind(0);
+ gGL.getTexUnit(1)->bind(bump);
+ gGL.getTexUnit(0)->bind(bump);
return TRUE;
}
return FALSE;
@@ -629,7 +635,7 @@ void LLDrawPoolBump::beginBump()
// TEXTURE UNIT 1
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
@@ -648,7 +654,7 @@ void LLDrawPoolBump::beginBump()
gGL.getTexUnit(0)->activate();
stop_glerror();
- LLViewerImage::unbindTexture(1, GL_TEXTURE_2D);
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
}
//static
@@ -680,7 +686,7 @@ void LLDrawPoolBump::endBump()
// Disable texture unit 1
gGL.getTexUnit(1)->activate();
- glDisable(GL_TEXTURE_2D); // Texture unit 1
+ gGL.getTexUnit(1)->disable();
gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
// Disable texture unit 0
@@ -1083,17 +1089,17 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
{
if (params.mTexture.notNull())
{
- params.mTexture->bind(diffuse_channel);
+ gGL.getTexUnit(diffuse_channel)->bind(params.mTexture.get());
params.mTexture->addTextureStats(params.mVSize);
}
else
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
params.mVertexBuffer->setBuffer(mask);
- params.mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
+ params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset);
gPipeline.addTrianglesDrawn(params.mCount/3);
if (params.mTextureMatrix)
{
diff --git a/indra/newview/lldrawpoolground.cpp b/indra/newview/lldrawpoolground.cpp
index c7e8aa32b7..5c719339b9 100644
--- a/indra/newview/lldrawpoolground.cpp
+++ b/indra/newview/lldrawpoolground.cpp
@@ -63,13 +63,14 @@ void LLDrawPoolGround::prerender()
void LLDrawPoolGround::render(S32 pass)
{
- if (mDrawFace.empty())
+ if (mDrawFace.empty() || !gSavedSettings.getBOOL("RenderGround"))
{
return;
}
LLGLSPipelineSkyBox gls_skybox;
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
LLGLClampToFarClip far_clip(glh_get_current_projection());
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 2687e6d2c0..1210391360 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -186,7 +186,7 @@ void LLDrawPoolSky::renderHeavenlyBody(U8 hb, LLFace* face)
if (! face->getGeomCount()) return;
LLImageGL* tex = face->getTexture();
- tex->bind();
+ gGL.getTexUnit(0)->bind(tex);
LLColor4 color(mHB[hb]->getInterpColor());
LLOverrideFaceColor override(this, color);
face->renderIndexed();
@@ -200,7 +200,7 @@ void LLDrawPoolSky::renderSunHalo(LLFace* face)
if (! face->getGeomCount()) return;
LLImageGL* tex = face->getTexture();
- tex->bind();
+ gGL.getTexUnit(0)->bind(tex);
LLColor4 color(mHB[0]->getInterpColor());
color.mV[3] = llclamp(mHB[0]->getHaloBrighness(), 0.f, 1.f);
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index e5850a0057..4a27b7f6a7 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -72,19 +72,19 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
- mAlphaRampImagep->bind(0);
+ gGL.getTexUnit(0)->bind(mAlphaRampImagep.get());
mAlphaRampImagep->setClamp(TRUE, TRUE);
m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
- m2DAlphaRampImagep->bind(0);
+ gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
m2DAlphaRampImagep->setClamp(TRUE, TRUE);
mTexturep->setBoostLevel(LLViewerImage::BOOST_TERRAIN);
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
LLDrawPoolTerrain::~LLDrawPoolTerrain()
@@ -240,7 +240,7 @@ void LLDrawPoolTerrain::renderFullShader()
// detail texture 0
//
S32 detail0 = sShader->enableTexture(LLViewerShaderMgr::TERRAIN_DETAIL0);
- LLViewerImage::bindTexture(detail_texture0p,detail0);
+ gGL.getTexUnit(detail0)->bind(detail_texture0p);
gGL.getTexUnit(0)->activate();
glEnable(GL_TEXTURE_GEN_S);
@@ -258,7 +258,7 @@ void LLDrawPoolTerrain::renderFullShader()
// detail texture 1
//
S32 detail1 = sShader->enableTexture(LLViewerShaderMgr::TERRAIN_DETAIL1);
- LLViewerImage::bindTexture(detail_texture1p,detail1);
+ gGL.getTexUnit(detail1)->bind(detail_texture1p);
/// ALPHA TEXTURE COORDS 0:
gGL.getTexUnit(1)->activate();
@@ -269,11 +269,11 @@ void LLDrawPoolTerrain::renderFullShader()
// detail texture 2
//
S32 detail2 = sShader->enableTexture(LLViewerShaderMgr::TERRAIN_DETAIL2);
- LLViewerImage::bindTexture(detail_texture2p,detail2);
- glEnable(GL_TEXTURE_2D);
+ gGL.getTexUnit(detail2)->bind(detail_texture2p);
+
+ gGL.getTexUnit(2)->activate();
/// ALPHA TEXTURE COORDS 1:
- gGL.getTexUnit(2)->activate();
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(-2.f, 0.f, 0.f);
@@ -283,7 +283,7 @@ void LLDrawPoolTerrain::renderFullShader()
// detail texture 3
//
S32 detail3 = sShader->enableTexture(LLViewerShaderMgr::TERRAIN_DETAIL3);
- LLViewerImage::bindTexture(detail_texture3p,detail3);
+ gGL.getTexUnit(detail3)->bind(detail_texture3p);
/// ALPHA TEXTURE COORDS 2:
gGL.getTexUnit(3)->activate();
@@ -296,7 +296,7 @@ void LLDrawPoolTerrain::renderFullShader()
// Alpha Ramp
//
S32 alpha_ramp = sShader->enableTexture(LLViewerShaderMgr::TERRAIN_ALPHARAMP);
- LLViewerImage::bindTexture(m2DAlphaRampImagep,alpha_ramp);
+ gGL.getTexUnit(alpha_ramp)->bind(m2DAlphaRampImagep.get());
// GL_BLEND disabled by default
drawLoop();
@@ -308,36 +308,36 @@ void LLDrawPoolTerrain::renderFullShader()
sShader->disableTexture(LLViewerShaderMgr::TERRAIN_DETAIL2);
sShader->disableTexture(LLViewerShaderMgr::TERRAIN_DETAIL3);
- LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
+ gGL.getTexUnit(alpha_ramp)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(4)->disable();
gGL.getTexUnit(4)->activate();
- glDisable(GL_TEXTURE_2D); // Texture unit 4
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
+ gGL.getTexUnit(detail3)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(3)->disable();
gGL.getTexUnit(3)->activate();
- glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
+ gGL.getTexUnit(detail2)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(2)->disable();
gGL.getTexUnit(2)->activate();
- glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
+ gGL.getTexUnit(detail1)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->disable();
gGL.getTexUnit(1)->activate();
- glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -347,9 +347,9 @@ void LLDrawPoolTerrain::renderFullShader()
//----------------------------------------------------------------------------
// Restore Texture Unit 0 defaults
- LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
+ gGL.getTexUnit(detail0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(0)->activate();
- glEnable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -388,7 +388,7 @@ void LLDrawPoolTerrain::renderFull4TU()
// Stage 0: detail texture 0
//
gGL.getTexUnit(0)->activate();
- LLViewerImage::bindTexture(detail_texture0p,0);
+ gGL.getTexUnit(0)->bind(detail_texture0p);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_GEN_S);
@@ -405,9 +405,9 @@ void LLDrawPoolTerrain::renderFull4TU()
// Stage 1: Generate alpha ramp for detail0/detail1 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
+ gGL.getTexUnit(1)->bind(m2DAlphaRampImagep.get());
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -418,12 +418,13 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 2: Interpolate detail1 with existing based on ramp
//
- LLViewerImage::bindTexture(detail_texture1p,2);
+ gGL.getTexUnit(2)->bind(detail_texture1p);
+ gGL.getTexUnit(2)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(2)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 2
- glClientActiveTextureARB(GL_TEXTURE2_ARB);
+ glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -436,9 +437,9 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 3: Modulate with primary (vertex) color for lighting
//
- LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
+ gGL.getTexUnit(3)->bind(detail_texture1p);
+ gGL.getTexUnit(3)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(3)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 3
glClientActiveTextureARB(GL_TEXTURE3_ARB);
// Set alpha texture and do lighting modulation
@@ -456,7 +457,7 @@ void LLDrawPoolTerrain::renderFull4TU()
// Stage 0: Write detail3 into base
//
gGL.getTexUnit(0)->activate();
- LLViewerImage::bindTexture(detail_texture3p,0);
+ gGL.getTexUnit(0)->bind(detail_texture3p);
glClientActiveTextureARB(GL_TEXTURE0_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -472,9 +473,9 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 1: Generate alpha ramp for detail2/detail3 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
+ gGL.getTexUnit(1)->bind(m2DAlphaRampImagep.get());
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -492,9 +493,9 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 2: Interpolate detail2 with existing based on ramp
//
- LLViewerImage::bindTexture(detail_texture2p,2);
+ gGL.getTexUnit(2)->bind(detail_texture2p);
+ gGL.getTexUnit(2)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(2)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 2
glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -511,9 +512,9 @@ void LLDrawPoolTerrain::renderFull4TU()
//
// Stage 3: Generate alpha ramp for detail1/detail2 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
+ gGL.getTexUnit(3)->bind(m2DAlphaRampImagep.get());
+ gGL.getTexUnit(3)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(3)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 3
glClientActiveTextureARB(GL_TEXTURE3_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -536,21 +537,21 @@ void LLDrawPoolTerrain::renderFull4TU()
LLVertexBuffer::unbind();
// Disable multitexture
- LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
+ gGL.getTexUnit(3)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(3)->disable();
gGL.getTexUnit(3)->activate();
glClientActiveTextureARB(GL_TEXTURE3_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisable(GL_TEXTURE_2D); // Texture unit 3
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
+ gGL.getTexUnit(2)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(2)->disable();
gGL.getTexUnit(2)->activate();
glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisable(GL_TEXTURE_2D); // Texture unit 2
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -558,11 +559,11 @@ void LLDrawPoolTerrain::renderFull4TU()
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
- LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->disable();
gGL.getTexUnit(1)->activate();
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisable(GL_TEXTURE_2D); // Texture unit 1
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
@@ -575,9 +576,9 @@ void LLDrawPoolTerrain::renderFull4TU()
// Restore Texture Unit 0 defaults
gGL.getTexUnit(0)->activate();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
glClientActiveTextureARB(GL_TEXTURE0_ARB);
- gGL.getTexUnit(0)->activate();
glDisableClientState(GL_NORMAL_ARRAY);
glDisable(GL_TEXTURE_GEN_S);
@@ -616,7 +617,7 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 0: Render detail 0 into base
//
- LLViewerImage::bindTexture(detail_texture0p,0);
+ gGL.getTexUnit(0)->bind(detail_texture0p);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -635,7 +636,7 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 0: Generate alpha ramp for detail0/detail1 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+ gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -648,9 +649,9 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 1: Write detail1
//
- LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
+ gGL.getTexUnit(1)->bind(detail_texture1p);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
@@ -673,7 +674,7 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 0: Generate alpha ramp for detail1/detail2 transition
//
- LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+ gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
// Set the texture matrix
glMatrixMode(GL_TEXTURE);
@@ -687,9 +688,9 @@ void LLDrawPoolTerrain::renderFull2TU()
//
// Stage 1: Write detail2
//
- LLViewerImage::bindTexture(detail_texture2p,1);
+ gGL.getTexUnit(1)->bind(detail_texture2p);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
@@ -713,7 +714,7 @@ void LLDrawPoolTerrain::renderFull2TU()
// Stage 0: Generate alpha ramp for detail2/detail3 transition
//
gGL.getTexUnit(0)->activate();
- LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
+ gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
// Set the texture matrix
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
@@ -724,9 +725,9 @@ void LLDrawPoolTerrain::renderFull2TU()
gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
// Stage 1: Write detail3
- LLViewerImage::bindTexture(detail_texture3p,1);
+ gGL.getTexUnit(1)->bind(detail_texture3p);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 1
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
@@ -749,9 +750,9 @@ void LLDrawPoolTerrain::renderFull2TU()
// Disable multitexture
- LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->disable();
gGL.getTexUnit(1)->activate();
- glDisable(GL_TEXTURE_2D); // Texture unit 1
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
@@ -763,9 +764,8 @@ void LLDrawPoolTerrain::renderFull2TU()
// Restore Texture Unit 0 defaults
gGL.getTexUnit(0)->activate();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.getTexUnit(0)->activate();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -784,10 +784,10 @@ void LLDrawPoolTerrain::renderSimple()
// Stage 0: Base terrain texture pass
mTexturep->addTextureStats(1024.f*1024.f);
- mTexturep->bind(0);
gGL.getTexUnit(0)->activate();
- glEnable(GL_TEXTURE_2D); // Texture unit 2
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->bind(mTexturep.get());
LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
F32 tscale = 1.f/256.f;
@@ -808,8 +808,8 @@ void LLDrawPoolTerrain::renderSimple()
//----------------------------------------------------------------------------
// Restore Texture Unit 0 defaults
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glMatrixMode(GL_TEXTURE);
@@ -839,7 +839,7 @@ void LLDrawPoolTerrain::renderOwnership()
LLViewerParcelOverlay *overlayp = regionp->getParcelOverlay();
LLImageGL *texturep = overlayp->getTexture();
- LLViewerImage::bindTexture(texturep);
+ gGL.getTexUnit(0)->bind(texturep);
// *NOTE: Because the region is 256 meters wide, but has 257 pixels, the
// texture coordinates for pixel 256x256 is not 1,1. This makes the
@@ -872,7 +872,7 @@ void LLDrawPoolTerrain::renderForSelect()
}
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
iter != mDrawFace.end(); iter++)
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 33f23ab6fa..cb4a0b9fd6 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -50,7 +50,7 @@ LLDrawPoolTree::LLDrawPoolTree(LLViewerImage *texturep) :
LLFacePool(POOL_TREE),
mTexturep(texturep)
{
- mTexturep->bind(0);
+ gGL.getTexUnit(0)->bind(mTexturep.get());
mTexturep->setClamp(FALSE, FALSE);
}
@@ -124,6 +124,7 @@ void LLDrawPoolTree::renderForSelect()
LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
LLGLSObjectSelectAlpha gls_alpha;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
@@ -144,7 +145,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting)
LLGLState normalize(GL_NORMALIZE, TRUE);
// Bind the texture for this tree.
- LLViewerImage::bindTexture(mTexturep,sDiffTex);
+ gGL.getTexUnit(sDiffTex)->bind(mTexturep.get());
U32 indices_drawn = 0;
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index f7770f001c..018092373a 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -68,11 +68,11 @@ LLDrawPoolWater::LLDrawPoolWater() :
LLFacePool(POOL_WATER)
{
mHBTex[0] = gImageList.getImage(gSunTextureID, TRUE, TRUE);
- mHBTex[0]->bind();
+ gGL.getTexUnit(0)->bind(mHBTex[0].get());
mHBTex[0]->setClamp(TRUE, TRUE);
mHBTex[1] = gImageList.getImage(gMoonTextureID, TRUE, TRUE);
- mHBTex[1]->bind();
+ gGL.getTexUnit(0)->bind(mHBTex[1].get());
mHBTex[1]->setClamp(TRUE, TRUE);
mWaterImagep = gImageList.getImage(WATER_TEST);
@@ -166,10 +166,9 @@ void LLDrawPoolWater::render(S32 pass)
// Set up second pass first
mWaterImagep->addTextureStats(1024.f*1024.f);
- mWaterImagep->bind(1);
gGL.getTexUnit(1)->activate();
-
- glEnable(GL_TEXTURE_2D); // Texture unit 1
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->bind(mWaterImagep.get());
LLVector3 camera_up = LLViewerCamera::getInstance()->getUpAxis();
F32 up_dot = camera_up * LLVector3::z_axis;
@@ -218,20 +217,20 @@ void LLDrawPoolWater::render(S32 pass)
{
continue;
}
- face->bindTexture();
+ gGL.getTexUnit(0)->bind(face->getTexture());
face->renderIndexed();
}
// Now, disable texture coord generation on texture state 1
gGL.getTexUnit(1)->activate();
- glDisable(GL_TEXTURE_2D); // Texture unit 1
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->disable();
glDisable(GL_TEXTURE_GEN_S); //texture unit 1
glDisable(GL_TEXTURE_GEN_T); //texture unit 1
- LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
// Disable texture coordinate and color arrays
gGL.getTexUnit(0)->activate();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
stop_glerror();
@@ -275,8 +274,9 @@ void LLDrawPoolWater::render(S32 pass)
{
gSky.mVOSkyp->getCubeMap()->disable();
}
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
- glEnable(GL_TEXTURE_2D);
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
@@ -316,7 +316,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
LLGLSNoFog noFog;
- LLViewerImage::bindTexture(mHBTex[dr]);
+ gGL.getTexUnit(0)->bind(mHBTex[dr].get());
LLOverrideFaceColor override(this, face->getFaceColor().mV);
face->renderIndexed();
@@ -390,7 +390,7 @@ void LLDrawPoolWater::shade()
if (reftex > -1)
{
gGL.getTexUnit(reftex)->activate();
- gPipeline.mWaterRef.bindTexture();
+ gGL.getTexUnit(reftex)->bind(&gPipeline.mWaterRef);
gGL.getTexUnit(0)->activate();
}
@@ -406,7 +406,7 @@ void LLDrawPoolWater::shade()
}
mWaterNormp->addTextureStats(1024.f*1024.f);
- mWaterNormp->bind(bumpTex);
+ gGL.getTexUnit(bumpTex)->bind(mWaterNormp.get());
mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(),
!gSavedSettings.getBOOL("RenderWaterMipNormal"));
@@ -421,8 +421,8 @@ void LLDrawPoolWater::shade()
shader->uniform1f(LLViewerShaderMgr::WATER_FOGDENSITY,
param_mgr->getFogDensity());
}
-
- gPipeline.mWaterDis.bindTexture();
+
+ gGL.getTexUnit(screentex)->bind(&gPipeline.mWaterDis);
if (mVertexShaderLevel == 1)
{
@@ -502,7 +502,7 @@ void LLDrawPoolWater::shade()
}
LLVOWater* water = (LLVOWater*) face->getViewerObject();
- face->bindTexture(diffTex);
+ gGL.getTexUnit(diffTex)->bind(face->getTexture());
sNeedsReflectionUpdate = TRUE;
@@ -527,7 +527,7 @@ void LLDrawPoolWater::shade()
}
}
- shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, GL_TEXTURE_CUBE_MAP_ARB);
+ shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
shader->disableTexture(LLViewerShaderMgr::WATER_SCREENTEX);
shader->disableTexture(LLViewerShaderMgr::BUMP_MAP);
shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
@@ -536,7 +536,7 @@ void LLDrawPoolWater::shade()
shader->unbind();
gGL.getTexUnit(0)->activate();
- glEnable(GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gGL.setColorMask(true, false);
}
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index 9f22d2aa0f..d8aa555752 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -159,7 +159,7 @@ void LLDrawPoolWLSky::renderStars(void) const
// *NOTE: have to have bound the cloud noise texture already since register
// combiners blending below requires something to be bound
// and we might as well only bind once.
- //LLGLEnable gl_texture_2d(GL_TEXTURE_2D);
+ //gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gPipeline.disableLights();
@@ -202,7 +202,8 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
- sCloudNoiseTexture->bind();
+ gGL.getTexUnit(0)->bind(sCloudNoiseTexture);
+
shader->bind();
/// Render the skydome
@@ -223,7 +224,7 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
if (gSky.mVOSkyp->getSun().getDraw() && face->getGeomCount())
{
LLImageGL * tex = face->getTexture();
- tex->bind();
+ gGL.getTexUnit(0)->bind(tex);
LLColor4 color(gSky.mVOSkyp->getSun().getInterpColor());
LLFacePool::LLOverrideFaceColor color_override(this, color);
face->renderIndexed();
@@ -238,7 +239,7 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
// stars register combiners, we bind again here for defensive reasons,
// since LLImageGL::bind detects that it's a noop, and optimizes it out.
LLImageGL * tex = face->getTexture();
- tex->bind();
+ gGL.getTexUnit(0)->bind(tex);
LLColor4 color(gSky.mVOSkyp->getMoon().getInterpColor());
F32 a = gSky.mVOSkyp->getMoon().getDirection().mV[2];
if (a > 0.f)
@@ -280,7 +281,7 @@ void LLDrawPoolWLSky::render(S32 pass)
// renderStars() requires something to be bound and we might as well only
// bind the moon's texture once.
LLImageGL * tex = gSky.mVOSkyp->mFace[LLVOSky::FACE_MOON]->getTexture();
- tex->bind();
+ gGL.getTexUnit(0)->bind(tex);
renderHeavenlyBodies();
@@ -291,7 +292,7 @@ void LLDrawPoolWLSky::render(S32 pass)
renderSkyClouds(camHeightLocal);
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
void LLDrawPoolWLSky::prerender()
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index d29ac9b43a..f8ba382a74 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -32,7 +32,6 @@
#include "llviewerprecompiledheaders.h"
#include "lldynamictexture.h"
-#include "llimagegl.h"
#include "llglheaders.h"
#include "llviewerwindow.h"
#include "llviewercamera.h"
@@ -105,7 +104,7 @@ void LLDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum prima
}
releaseGLTexture();
LLPointer<LLImageRaw> raw_image = new LLImageRaw(mWidth, mHeight, mComponents);
- mTexture = new LLImageGL(mWidth, mHeight, mComponents, FALSE);
+ mTexture = new LLViewerImage(mWidth, mHeight, mComponents, FALSE);
if (internal_format >= 0)
{
mTexture->setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
@@ -113,6 +112,7 @@ void LLDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum prima
// llinfos << "ALLOCATING " << (mWidth*mHeight*mComponents)/1024 << "K" << llendl;
mTexture->createGLTexture(0, raw_image);
mTexture->setClamp(mClamp, mClamp);
+ mTexture->setInitialized(false);
}
//-----------------------------------------------------------------------------
@@ -144,7 +144,7 @@ void LLDynamicTexture::preRender(BOOL clear_depth)
mOrigin.mY = llmax(mOrigin.mY, 0) ;
}
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
// Set up camera
mCamera.setOrigin(*LLViewerCamera::getInstance());
@@ -184,19 +184,6 @@ void LLDynamicTexture::postRender(BOOL success)
}
//-----------------------------------------------------------------------------
-// bindTexture()
-//-----------------------------------------------------------------------------
-void LLDynamicTexture::bindTexture()
-{
- LLViewerImage::bindTexture(mTexture,0);
-}
-
-void LLDynamicTexture::unbindTexture()
-{
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
-}
-
-//-----------------------------------------------------------------------------
// static
// updateDynamicTextures()
// Calls update on each dynamic texture. Calls each group in order: "first," then "middle," then "last."
diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h
index 9f647232c5..2e7ba1d422 100644
--- a/indra/newview/lldynamictexture.h
+++ b/indra/newview/lldynamictexture.h
@@ -60,8 +60,8 @@ public:
virtual void preRender(BOOL clear_depth = TRUE);
virtual BOOL render();
virtual void postRender(BOOL success);
- virtual void bindTexture();
- virtual void unbindTexture();
+
+ LLImageGL* getTexture(void) const { return mTexture; }
static BOOL updateAllInstances();
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 05b873eae4..4f49aa584f 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -362,10 +362,10 @@ void LLFace::renderForSelect(U32 data_mask)
switch (getPoolType())
{
case LLDrawPool::POOL_ALPHA:
- getTexture()->bind();
+ gGL.getTexUnit(0)->bind(getTexture());
break;
default:
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
break;
}
}
@@ -390,19 +390,19 @@ void LLFace::renderForSelect(U32 data_mask)
{
glPushMatrix();
glMultMatrixf((float*) mDrawablep->getRegion()->mRenderMatrix.mMatrix);
- mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
+ mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
glPopMatrix();
}
else
{
- mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
+ mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
}
}
else
{
glPushMatrix();
glMultMatrixf((float*)getRenderMatrix().mMatrix);
- mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
+ mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
glPopMatrix();
}
}
@@ -419,7 +419,7 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color)
if (mGeomCount > 0 && mIndicesCount > 0)
{
- LLViewerImage::bindTexture(imagep);
+ gGL.getTexUnit(0)->bind(imagep);
gGL.pushMatrix();
if (mDrawablep->isActive())
@@ -438,7 +438,7 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color)
#if !LL_RELEASE_FOR_DOWNLOAD
LLGLState::checkClientArrays("", LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD);
#endif
- mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
+ mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
unsetFaceColor();
gGL.popMatrix();
@@ -1203,7 +1203,7 @@ S32 LLFace::pushVertices(const U16* index_array) const
{
if (mIndicesCount)
{
- mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex);
+ mVertexBuffer->drawRange(LLRender::TRIANGLES, mGeomIndex, mGeomIndex+mGeomCount-1, mIndicesCount, mIndicesIndex);
gPipeline.addTrianglesDrawn(mIndicesCount/3);
}
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index 9e7a33eb7b..9253bb46fb 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -101,7 +101,6 @@ public:
void setPixelArea(F32 area) { mPixelArea = area; }
F32 getVirtualSize() const { return mVSize; }
F32 getPixelArea() const { return mPixelArea; }
- void bindTexture(S32 stage = 0) const { LLViewerImage::bindTexture(mTexture, stage); }
void renderSetColor() const;
S32 renderElements(const U16 *index_array) const;
@@ -120,6 +119,7 @@ public:
LLVertexBuffer* getVertexBuffer() const { return mVertexBuffer; }
void setPoolType(U32 type) { mPoolType = type; }
S32 getTEOffset() { return mTEOffset; }
+ LLViewerImage* getTexture() { return mTexture; }
void setViewerObject(LLViewerObject* object);
void setPool(LLFacePool *pool, LLViewerImage *texturep);
diff --git a/indra/newview/llface.inl b/indra/newview/llface.inl
index aa94493196..38f38f5466 100644
--- a/indra/newview/llface.inl
+++ b/indra/newview/llface.inl
@@ -33,6 +33,7 @@
#define LL_LLFACE_INL
#include "llglheaders.h"
+#include "llrender.h"
inline BOOL LLFace::getDirty() const
{
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index e224ee57c0..54730af145 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -116,6 +116,7 @@ static struct ft_display_info ft_display_table[] =
{ LLFastTimer::FTM_VFILE_WAIT, " VFile Wait", &LLColor4::cyan6, 0 },
// { LLFastTimer::FTM_IDLE_CB, " Callbacks", &LLColor4::pink1, 0 },
{ LLFastTimer::FTM_RENDER, " Render", &green0, 1 },
+ { LLFastTimer::FTM_PICK, " Pick", &LLColor4::purple, 1 },
{ LLFastTimer::FTM_HUD_EFFECTS, " HUD Effects", &LLColor4::orange1, 0 },
{ LLFastTimer::FTM_HUD_UPDATE, " HUD Update", &LLColor4::orange2, 0 },
{ LLFastTimer::FTM_UPDATE_SKY, " Sky Update", &LLColor4::cyan1, 0 },
@@ -463,7 +464,7 @@ void LLFastTimerView::draw()
// Draw the window background
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(0, getRect().getHeight(), getRect().getWidth(), 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
}
@@ -755,7 +756,7 @@ void LLFastTimerView::draw()
LLRect graph_rect;
// Draw borders
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f(0.5f,0.5f,0.5f,0.5f);
S32 by = y + 2;
@@ -792,7 +793,7 @@ void LLFastTimerView::draw()
// Draw bars for each history entry
// Special: -1 = show running average
- LLViewerImage::bindTexture(box_imagep->getImage());
+ gGL.getTexUnit(0)->bind(box_imagep->getImage());
for (S32 j=-1; j<histmax && y > LINE_GRAPH_HEIGHT; j++)
{
int sublevel_dx[FTV_DISPLAY_NUM+1];
@@ -936,7 +937,7 @@ void LLFastTimerView::draw()
//draw line graph history
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLLocalClipRect clip(graph_rect);
//normalize based on last frame's maximum
@@ -980,7 +981,7 @@ void LLFastTimerView::draw()
gGL.color4f(0.5f,0.5f,0.5f,1);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex2i((S32)bar, graph_rect.mBottom);
gGL.vertex2i((S32)bar, graph_rect.mTop);
gGL.end();
@@ -1016,7 +1017,7 @@ void LLFastTimerView::draw()
}
gGL.color4f(col[0], col[1], col[2], alpha);
- gGL.begin(LLVertexBuffer::LINE_STRIP);
+ gGL.begin(LLRender::LINE_STRIP);
for (U32 j = 0; j < LLFastTimer::FTM_HISTORY_NUM; j++)
{
U64 ticks = ticks_sum[j+1][idx];
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index ecc40aa094..b43838a3a4 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -447,8 +447,6 @@ void LLFeatureManager::applyRecommendedSettings()
{
gSavedSettings.setF32("RenderFarClip", 128.0f);
}
-
-
}
void LLFeatureManager::applyFeatures(bool skipFeatures)
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 2d595bc492..6c42a71fe6 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -384,9 +384,10 @@ void LLFloaterAnimPreview::draw()
if (mMotionID.notNull() && mAnimPreview)
{
gGL.color3f(1.f, 1.f, 1.f);
- mAnimPreview->bindTexture();
- gGL.begin( LLVertexBuffer::QUADS );
+ gGL.getTexUnit(0)->bind(mAnimPreview->getTexture());
+
+ gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
@@ -399,7 +400,7 @@ void LLFloaterAnimPreview::draw()
}
gGL.end();
- mAnimPreview->unbindTexture();
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar();
if (!avatarp->areAnimationsPaused())
@@ -1068,7 +1069,7 @@ BOOL LLPreviewAnimation::render()
glLoadIdentity();
LLGLSUIDefault def;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f(0.15f, 0.2f, 0.3f, 1.f);
gl_rect_2d_simple( mWidth, mHeight );
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index 480ef708d6..a90d11f6ea 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -148,7 +148,7 @@ void LLFloaterAuction::draw()
if (childGetRect("snapshot_icon", rect))
{
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
rect.stretch(-1);
}
@@ -205,7 +205,7 @@ void LLFloaterAuction::onClickSnapshot(void* data)
LLVFile::writeFile(j2c->getData(), j2c->getDataSize(), gVFS, self->mImageID, LLAssetType::AT_TEXTURE);
self->mImage = new LLImageGL((LLImageRaw*)raw, FALSE);
- self->mImage->bind();
+ gGL.getTexUnit(0)->bind(self->mImage);
self->mImage->setClamp(TRUE, TRUE);
}
else
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
new file mode 100644
index 0000000000..a49995adae
--- /dev/null
+++ b/indra/newview/llfloaterbeacons.cpp
@@ -0,0 +1,150 @@
+/**
+ * @file llfloaterbeacons.cpp
+ * @brief Front-end to LLPipeline controls for highlighting various kinds of objects.
+ * @author Coco
+ *
+ * $LicenseInfo:firstyear=2001&license=viewergpl$
+ *
+ * Copyright (c) 2001-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llfloaterbeacons.h"
+#include "llviewercontrol.h"
+#include "lluictrlfactory.h"
+#include "llcheckboxctrl.h"
+#include "pipeline.h"
+
+
+LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_beacons.xml");
+
+ // Initialize pipeline states from saved settings.
+ // OK to do at floater constructor time because beacons do not display unless the floater is open
+ // therefore it is OK to not initialize the pipeline state before needed.
+ // Note also that we should replace those pipeline statics with direct lookup of the saved settings
+ // eliminating the need to keep these states in sync.
+ LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
+ LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon"));
+ LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon"));
+ LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon"));
+ LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon"));
+ LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights"));
+ LLPipeline::setRenderBeacons( gSavedSettings.getBOOL("renderbeacons"));
+}
+
+BOOL LLFloaterBeacons::postBuild()
+{
+ childSetCommitCallback("touch_only", onClickUICheck, this);
+ childSetCommitCallback("scripted", onClickUICheck, this);
+ childSetCommitCallback("physical", onClickUICheck, this);
+ childSetCommitCallback("sounds", onClickUICheck, this);
+ childSetCommitCallback("particles", onClickUICheck, this);
+ childSetCommitCallback("highlights", onClickUICheck, this);
+ childSetCommitCallback("beacons", onClickUICheck, this);
+ return TRUE;
+}
+
+// Needed to make the floater visibility toggle the beacons.
+// Too bad we can't just add control_name="BeaconAlwaysOn" to the XML.
+void LLFloaterBeacons::open()
+{
+ LLFloater::open();
+ gSavedSettings.setBOOL( "BeaconAlwaysOn", TRUE);
+}
+void LLFloaterBeacons::close(bool app_quitting)
+{
+ LLFloater::close(app_quitting);
+ if(!app_quitting)
+ {
+ gSavedSettings.setBOOL( "BeaconAlwaysOn", FALSE);
+ }
+}
+
+// Callback attached to each check box control to both affect their main purpose
+// and to implement the couple screwy interdependency rules that some have.
+//static
+void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl, void* data)
+{
+ LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
+ std::string name = check->getName();
+ LLFloaterBeacons* view = (LLFloaterBeacons*)data;
+ if( name == "touch_only")
+ {
+ LLPipeline::toggleRenderScriptedTouchBeacons(NULL);
+ // Don't allow both to be ON at the same time. Toggle the other one off if both now on.
+ if (
+ LLPipeline::getRenderScriptedTouchBeacons(NULL) &&
+ LLPipeline::getRenderScriptedBeacons(NULL) )
+ {
+ LLPipeline::setRenderScriptedBeacons(FALSE);
+ view->getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(FALSE));
+ view->getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
+ }
+ }
+ else if(name == "scripted")
+ {
+ LLPipeline::toggleRenderScriptedBeacons(NULL);
+ // Don't allow both to be ON at the same time. Toggle the other one off if both now on.
+ if (
+ LLPipeline::getRenderScriptedTouchBeacons(NULL) &&
+ LLPipeline::getRenderScriptedBeacons(NULL) )
+ {
+ LLPipeline::setRenderScriptedTouchBeacons(FALSE);
+ view->getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(FALSE));
+ view->getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
+ }
+ }
+ else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
+ else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get());
+ else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get());
+ else if(name == "highlights")
+ {
+ LLPipeline::toggleRenderHighlights(NULL);
+ // Don't allow both to be OFF at the same time. Toggle the other one on if both now off.
+ if (
+ !LLPipeline::getRenderBeacons(NULL) &&
+ !LLPipeline::getRenderHighlights(NULL) )
+ {
+ LLPipeline::setRenderBeacons(TRUE);
+ view->getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(TRUE));
+ view->getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
+ }
+ }
+ else if(name == "beacons")
+ {
+ LLPipeline::toggleRenderBeacons(NULL);
+ // Don't allow both to be OFF at the same time. Toggle the other one on if both now off.
+ if (
+ !LLPipeline::getRenderBeacons(NULL) &&
+ !LLPipeline::getRenderHighlights(NULL) )
+ {
+ LLPipeline::setRenderHighlights(TRUE);
+ view->getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(TRUE));
+ view->getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
+ }
+ }
+}
diff --git a/indra/newview/llfloaterbeacons.h b/indra/newview/llfloaterbeacons.h
new file mode 100644
index 0000000000..3ba6783a30
--- /dev/null
+++ b/indra/newview/llfloaterbeacons.h
@@ -0,0 +1,56 @@
+/**
+ * @file llfloaterbeacons.h
+ * @brief Front-end to LLPipeline controls for highlighting various kinds of objects.
+ * @author Coco
+ *
+ * $LicenseInfo:firstyear=2002&license=viewergpl$
+ *
+ * Copyright (c) 2002-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERBEACONS_H
+#define LL_LLFLOATERBEACONS_H
+
+#include "llfloater.h"
+
+class LLFloaterBeacons : public LLFloater, public LLFloaterSingleton<LLFloaterBeacons>
+{
+ friend class LLUISingleton<LLFloaterBeacons, VisibilityPolicy<LLFloater> >;
+
+public:
+ /*virtual*/ BOOL postBuild();
+
+ // Needed to make the floater visibility toggle the beacons.
+ // Too bad we can't just add control_name="BeaconAlwaysOn" to the XML.
+ /*virtual*/ void open();
+ /*virtual*/ void close(bool app_quitting);
+
+private:
+ LLFloaterBeacons(const LLSD& seed);
+
+ static void onClickUICheck(LLUICtrl *ctrl, void* data);
+};
+
+#endif
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
index ed2cc2b7c3..9edb0afb5c 100644
--- a/indra/newview/llfloaterbuy.cpp
+++ b/indra/newview/llfloaterbuy.cpp
@@ -289,11 +289,6 @@ void LLFloaterBuy::inventoryChanged(LLViewerObject* obj,
removeVOInventoryListener();
}
-void LLFloaterBuy::close(bool app_quitting)
-{
- LLSelectMgr::getInstance()->deselectAll();
- LLFloater::close(app_quitting);
-}
// static
void LLFloaterBuy::onClickBuy(void*)
@@ -325,3 +320,10 @@ void LLFloaterBuy::onClickCancel(void*)
sInstance->close();
}
}
+
+void LLFloaterBuy::onClose(bool app_quitting)
+{
+ // drop reference to current selection so selection goes away
+ mObjectSelection = NULL;
+ LLFloater::onClose(app_quitting);
+}
diff --git a/indra/newview/llfloaterbuy.h b/indra/newview/llfloaterbuy.h
index 1506b465d6..b1678c7c9f 100644
--- a/indra/newview/llfloaterbuy.h
+++ b/indra/newview/llfloaterbuy.h
@@ -57,6 +57,7 @@ protected:
LLFloaterBuy();
~LLFloaterBuy();
+ /*virtual*/ void onClose(bool app_quitting);
void reset();
void requestObjectInventories();
@@ -65,8 +66,6 @@ protected:
S32 serial_num,
void* data);
- /*virtual*/ void close(bool app_quitting = false);
-
static void onClickBuy(void*);
static void onClickCancel(void*);
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 4218c4c65a..9790b5a7af 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -165,7 +165,7 @@ createUI ()
}
}
mRGBImage = new LLImageGL ( (LLImageRaw*)raw, FALSE );
- mRGBImage->bind();
+ gGL.getTexUnit(0)->bind(mRGBImage);
mRGBImage->setClamp(TRUE, TRUE);
// create palette
@@ -543,9 +543,9 @@ void LLFloaterColorPicker::draw()
LLRect local_rect = getLocalRect();
if (gFocusMgr.childHasKeyboardFocus(this) && mSwatch->isInVisibleChain() && mContextConeOpacity > 0.001f)
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLEnable(GL_CULL_FACE);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
gGL.vertex2i(swatch_rect.mLeft, swatch_rect.mTop);
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 4b0afd6db3..ef27a6d5f4 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -232,14 +232,14 @@ void LLFloaterImagePreview::draw()
if (mGLName)
{
- LLImageGL::bindExternalTexture( mGLName, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mGLName);
}
else
{
glGenTextures(1, &mGLName );
stop_glerror();
- LLImageGL::bindExternalTexture( mGLName, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mGLName);
stop_glerror();
glTexImage2D(
@@ -251,8 +251,7 @@ void LLFloaterImagePreview::draw()
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
if (mAvatarPreview)
{
mAvatarPreview->setTexture(mGLName);
@@ -261,7 +260,7 @@ void LLFloaterImagePreview::draw()
}
gGL.color3f(1.f, 1.f, 1.f);
- gGL.begin( LLVertexBuffer::QUADS );
+ gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(mPreviewImageRect.mLeft, mPreviewImageRect.mTop);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
@@ -274,7 +273,7 @@ void LLFloaterImagePreview::draw()
}
gGL.end();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
stop_glerror();
}
@@ -285,11 +284,15 @@ void LLFloaterImagePreview::draw()
gGL.color3f(1.f, 1.f, 1.f);
if (selected == 9)
- mSculptedPreview->bindTexture();
+ {
+ gGL.getTexUnit(0)->bind(mSculptedPreview->getTexture());
+ }
else
- mAvatarPreview->bindTexture();
+ {
+ gGL.getTexUnit(0)->bind(mAvatarPreview->getTexture());
+ }
- gGL.begin( LLVertexBuffer::QUADS );
+ gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2i(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT);
@@ -302,10 +305,7 @@ void LLFloaterImagePreview::draw()
}
gGL.end();
- if (selected == 9)
- mSculptedPreview->unbindTexture();
- else
- mAvatarPreview->unbindTexture();
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
}
@@ -907,7 +907,7 @@ BOOL LLImagePreviewSculpted::render()
gGL.scalef(SCALE, SCALE, SCALE);
const F32 BRIGHTNESS = 0.9f;
gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
- mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, num_indices, 0);
+ mVertexBuffer->draw(LLRender::TRIANGLES, num_indices, 0);
gGL.popMatrix();
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
index e912431323..9c3463010e 100644
--- a/indra/newview/llfloaterjoystick.cpp
+++ b/indra/newview/llfloaterjoystick.cpp
@@ -46,7 +46,7 @@
#include "llviewerjoystick.h"
LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)
- : LLFloater(std::string("floater_joystick"))
+ : LLFloater("floater_joystick")
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml");
center();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 6ba78285ba..f4a515e0a0 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -1448,7 +1448,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
msg->getBOOLFast(_PREHASH_Data, _PREHASH_IsGroupOwned, is_group_owned, i);
msg->getS32Fast (_PREHASH_Data, _PREHASH_Count, object_count, i);
msg->getBOOLFast(_PREHASH_Data, _PREHASH_OnlineStatus, is_online, i);
- if(msg->getNumberOfBlocks("DataExtended"))
+ if(msg->has("DataExtended"))
{
msg->getU32("DataExtended", "TimeStamp", most_recent_time, i);
}
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index d97023e256..3e12c2e47c 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -63,6 +63,8 @@
#include "llassetuploadresponders.h"
+#include <boost/regex.hpp> //boost.regex lib
+
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
@@ -180,7 +182,7 @@ void LLFloaterPostcard::draw()
rect.mBottom = (S32)((F32)rect.mTop - ((F32)rect.getWidth() / ratio));
}
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(rect, LLColor4(0.f, 0.f, 0.f, 1.f));
rect.stretch(-1);
}
@@ -242,14 +244,16 @@ void LLFloaterPostcard::onClickSend(void* data)
std::string from(self->childGetValue("from_form").asString());
std::string to(self->childGetValue("to_form").asString());
-
- if (to.empty() || to.find('@') == std::string::npos)
+
+ boost::regex emailFormat("[A-Za-z0-9.%+-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}");
+
+ if (to.empty() || !boost::regex_match(to, emailFormat))
{
gViewerWindow->alertXml("PromptRecipientEmail");
return;
}
- if (from.empty() || from.find('@') == std::string::npos)
+ if (from.empty() || !boost::regex_match(from, emailFormat))
{
gViewerWindow->alertXml("PromptSelfEmail");
return;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 37a0fde367..15d4d30221 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -424,8 +424,6 @@ void LLFloaterPreference::onClickAbout(void*)
// static
void LLFloaterPreference::onBtnOK( void* userdata )
{
- LLPanelLogin::refreshLocation( false );
-
LLFloaterPreference *fp =(LLFloaterPreference *)userdata;
// commit any outstanding text entry
if (fp->hasFocus())
@@ -453,6 +451,8 @@ void LLFloaterPreference::onBtnOK( void* userdata )
// Show beep, pop up dialog, etc.
llinfos << "Can't close preferences!" << llendl;
}
+
+ LLPanelLogin::refreshLocation( false );
}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 462f05ff27..f4843ea1a5 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -151,7 +151,8 @@ public:
void resetThumbnailImage() { mThumbnailImage = NULL ; }
void drawPreviewRect(S32 offset_x, S32 offset_y) ;
- static void onIdle( void* snapshot_preview );
+ // Returns TRUE when snapshot generated, FALSE otherwise.
+ static BOOL onIdle( void* snapshot_preview );
private:
LLColor4 mColor;
@@ -203,6 +204,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
mCurImageIndex(0),
mPreviewImage(NULL),
mThumbnailImage(NULL) ,
+ mThumbnailWidth(0),
+ mThumbnailHeight(0),
mPreviewImageEncoded(NULL),
mFormattedImage(NULL),
mShineCountdown(0),
@@ -342,14 +345,11 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail
mSnapshotDelayTimer.start();
mSnapshotDelayTimer.setTimerExpirySec(delay);
}
- else if(new_thumbnail)
+ if(new_thumbnail)
{
mThumbnailUpToDate = FALSE ;
}
- else
- {
- setThumbnailImageSize() ;
- }
+ setThumbnailImageSize();
}
void LLSnapshotLivePreview::setSnapshotQuality(S32 quality)
@@ -417,14 +417,14 @@ void LLSnapshotLivePreview::draw()
LLColor4 image_color(1.f, 1.f, 1.f, 1.f);
gGL.color4fv(image_color.mV);
- LLViewerImage::bindTexture(mViewerImage[mCurImageIndex]);
+ gGL.getTexUnit(0)->bind(mViewerImage[mCurImageIndex]);
// calculate UV scale
F32 uv_width = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mWidth[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getWidth(), 1.f);
F32 uv_height = mImageScaled[mCurImageIndex] ? 1.f : llmin((F32)mHeight[mCurImageIndex] / (F32)mViewerImage[mCurImageIndex]->getHeight(), 1.f);
glPushMatrix();
{
glTranslatef((F32)rect.mLeft, (F32)rect.mBottom, 0.f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.texCoord2f(uv_width, uv_height);
gGL.vertex2i(rect.getWidth(), rect.getHeight() );
@@ -486,8 +486,8 @@ void LLSnapshotLivePreview::draw()
S32 y1 = 0;
S32 y2 = gViewerWindow->getWindowHeight();
- LLGLSNoTexture no_texture;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.begin(LLRender::QUADS);
{
gGL.color4f(1.f, 1.f, 1.f, 0.f);
gGL.vertex2i(x1, y1);
@@ -515,10 +515,10 @@ void LLSnapshotLivePreview::draw()
// draw framing rectangle
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
LLRect outline_rect = mImageRect[mCurImageIndex];
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.vertex2i(outline_rect.mLeft - BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
gGL.vertex2i(outline_rect.mRight + BORDER_WIDTH, outline_rect.mTop + BORDER_WIDTH);
@@ -553,7 +553,7 @@ void LLSnapshotLivePreview::draw()
F32 alpha = clamp_rescale(fall_interp, 0.f, 1.f, 0.8f, 0.4f);
LLColor4 image_color(1.f, 1.f, 1.f, alpha);
gGL.color4fv(image_color.mV);
- LLViewerImage::bindTexture(mViewerImage[old_image_index]);
+ gGL.getTexUnit(0)->bind(mViewerImage[old_image_index]);
// calculate UV scale
// *FIX get this to work with old image
BOOL rescale = !mImageScaled[old_image_index] && mViewerImage[mCurImageIndex].notNull();
@@ -564,7 +564,7 @@ void LLSnapshotLivePreview::draw()
LLRect& rect = mImageRect[old_image_index];
glTranslatef((F32)rect.mLeft, (F32)rect.mBottom - llround(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f);
glRotatef(-45.f * fall_interp, 0.f, 0.f, 1.f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.texCoord2f(uv_width, uv_height);
gGL.vertex2i(rect.getWidth(), rect.getHeight() );
@@ -719,8 +719,11 @@ void LLSnapshotLivePreview::generateThumbnailImage(BOOL force_update)
mThumbnailUpdateLock = FALSE ;
}
+
+// Called often. Checks whether it's time to grab a new snapshot and if so, does it.
+// Returns TRUE if new snapshot generated, FALSE otherwise.
//static
-void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
+BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
{
LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)snapshot_preview;
@@ -733,7 +736,10 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mCameraRot = new_camera_rot;
// request a new snapshot whenever the camera moves, with a time delay
BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot");
- previewp->updateSnapshot(autosnap, FALSE, autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f);
+ previewp->updateSnapshot(
+ autosnap, // whether a new snapshot is needed or merely invalidate the existing one
+ FALSE, // or if 1st arg is false, whether to produce a new thumbnail image.
+ autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f); // shutter delay if 1st arg is true.
}
// see if it's time yet to snap the shot and bomb out otherwise.
@@ -742,7 +748,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
&& !LLToolCamera::getInstance()->hasMouseCapture(); // don't take snapshots while ALT-zoom active
if ( ! previewp->mSnapshotActive)
{
- return;
+ return FALSE;
}
// time to produce a snapshot
@@ -819,6 +825,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
}
if (previewp->mFormattedImage->encode(previewp->mPreviewImage, 0))
{
+ previewp->mDataSize = previewp->mFormattedImage->getDataSize();
// special case BMP to copy instead of decode otherwise decode will crash.
if(format == LLFloaterSnapshot::SNAPSHOT_FORMAT_BMP)
{
@@ -826,7 +833,6 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
}
else
{
- previewp->mDataSize = previewp->mFormattedImage->getDataSize();
previewp->mFormattedImage->decode(previewp->mPreviewImageEncoded, 0);
}
}
@@ -855,7 +861,7 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mViewerImage[previewp->mCurImageIndex] = new LLImageGL(scaled, FALSE);
previewp->mViewerImage[previewp->mCurImageIndex]->setMipFilterNearest(previewp->getSnapshotType() != SNAPSHOT_TEXTURE);
- LLViewerImage::bindTexture(previewp->mViewerImage[previewp->mCurImageIndex]);
+ gGL.getTexUnit(0)->bind(previewp->mViewerImage[previewp->mCurImageIndex]);
previewp->mViewerImage[previewp->mCurImageIndex]->setClamp(TRUE, TRUE);
previewp->mSnapshotUpToDate = TRUE;
@@ -875,6 +881,8 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
{
previewp->generateThumbnailImage() ;
}
+
+ return TRUE;
}
void LLSnapshotLivePreview::setSize(S32 w, S32 h)
@@ -952,7 +960,7 @@ void LLSnapshotLivePreview::saveTexture()
llwarns << "Error encoding snapshot" << llendl;
}
- LLViewerStats::getInstance()->incStat(LLViewerStats::ST_SNAPSHOT_COUNT );
+ LLViewerStats::getInstance()->incStat(LLViewerStats::ST_SNAPSHOT_COUNT );
}
BOOL LLSnapshotLivePreview::saveLocal()
@@ -996,7 +1004,8 @@ public:
static void onClickKeepOpenCheck(LLUICtrl *ctrl, void* data);
static void onClickKeepAspectCheck(LLUICtrl *ctrl, void* data);
static void onCommitQuality(LLUICtrl* ctrl, void* data);
- static void onCommitResolution(LLUICtrl* ctrl, void* data);
+ static void onCommitResolution(LLUICtrl* ctrl, void* data) { updateResolution(ctrl, data); }
+ static void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE);
static void onCommitFreezeFrame(LLUICtrl* ctrl, void* data);
static void onCommitLayerTypes(LLUICtrl* ctrl, void*data);
static void onCommitSnapshotType(LLUICtrl* ctrl, void* data);
@@ -1093,11 +1102,8 @@ LLViewerWindow::ESnapshotType LLFloaterSnapshot::Impl::getLayerType(LLFloaterSna
void LLFloaterSnapshot::Impl::setResolution(LLFloaterSnapshot* floater, const std::string& comboname)
{
LLComboBox* combo = floater->getChild<LLComboBox>(comboname);
- if (combo)
- {
combo->setVisible(TRUE);
- onCommitResolution(combo, floater);
- }
+ updateResolution(combo, floater, FALSE); // to sync spinners with combo
}
//static
@@ -1107,22 +1113,18 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
S32 delta_height = gSavedSettings.getBOOL("AdvanceSnapshot") ? 0 : floaterp->getUIWinHeightShort() - floaterp->getUIWinHeightLong() ;
- LLComboBox* combo;
if(!gSavedSettings.getBOOL("AdvanceSnapshot")) //set to original window resolution
{
- previewp->mKeepAspectRatio = TRUE ;
+ previewp->mKeepAspectRatio = TRUE;
- combo = floaterp->getChild<LLComboBox>("postcard_size_combo");
- combo->setCurrentByIndex(0) ;
- gSavedSettings.setS32("SnapshotPostcardLastResolution", 0) ;
+ floaterp->getChild<LLComboBox>("postcard_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", 0);
- combo = floaterp->getChild<LLComboBox>("texture_size_combo");
- combo->setCurrentByIndex(0) ;
- gSavedSettings.setS32("SnapshotTextureLastResolution", 0) ;
+ floaterp->getChild<LLComboBox>("texture_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotTextureLastResolution", 0);
- combo = floaterp->getChild<LLComboBox>("local_size_combo");
- combo->setCurrentByIndex(0) ;
- gSavedSettings.setS32("SnapshotLocalLastResolution", 0) ;
+ floaterp->getChild<LLComboBox>("local_size_combo")->setCurrentByIndex(0);
+ gSavedSettings.setS32("SnapshotLocalLastResolution", 0);
LLSnapshotLivePreview* previewp = getPreviewView(floaterp);
previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
@@ -1187,7 +1189,11 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
}
}
-
+// This is the main function that keeps all the GUI controls in sync with the saved settings.
+// It should be called anytime a setting is changed that could affect the controls.
+// No other methods should be changing any of the controls directly except for helpers called by this method.
+// The basic pattern for programmatically changing the GUI settings is to first set the
+// appropriate saved settings and then call this method to sync the GUI with them.
// static
void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
{
@@ -1201,15 +1207,10 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
floater->childSetVisible("texture_size_combo", FALSE);
floater->childSetVisible("local_size_combo", FALSE);
- LLComboBox* combo;
- combo = floater->getChild<LLComboBox>("postcard_size_combo");
- if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
- combo = floater->getChild<LLComboBox>("texture_size_combo");
- if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
- combo = floater->getChild<LLComboBox>("local_size_combo");
- if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
- combo = floater->getChild<LLComboBox>("local_format_combo");
- if (combo) combo->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
+ floater->getChild<LLComboBox>("postcard_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotPostcardLastResolution"));
+ floater->getChild<LLComboBox>("texture_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotTextureLastResolution"));
+ floater->getChild<LLComboBox>("local_size_combo")->selectNthItem(gSavedSettings.getS32("SnapshotLocalLastResolution"));
+ floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
floater->childSetVisible("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE);
floater->childSetVisible("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD);
@@ -1240,6 +1241,23 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
floater->childSetVisible("auto_snapshot_check", is_advance);
floater->childSetVisible("image_quality_slider", is_advance && show_slider);
+ LLSnapshotLivePreview* previewp = getPreviewView(floater);
+ BOOL got_bytes = previewp && previewp->getDataSize() > 0;
+ BOOL got_snap = previewp->getSnapshotUpToDate();
+
+ floater->childSetEnabled("send_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD && got_bytes && got_snap && previewp->getDataSize() <= MAX_POSTCARD_DATASIZE);
+ floater->childSetEnabled("upload_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_TEXTURE && got_bytes && got_snap);
+ floater->childSetEnabled("save_btn", shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL && got_bytes && got_snap);
+
+ LLLocale locale(LLLocale::USER_LOCALE);
+ std::string bytes_string;
+ LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
+ floater->childSetTextArg("file_size_label", "[SIZE]", got_snap ? bytes_string : got_bytes ? floater->getString("unknown") : std::string("???"));
+ floater->childSetColor("file_size_label",
+ shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD
+ && got_bytes
+ && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLColor4::red : gColors.getColor( "LabelTextColor" ));
+
switch(shot_type)
{
case LLSnapshotLivePreview::SNAPSHOT_POSTCARD:
@@ -1270,7 +1288,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
updateResolutionTextEntry(floater);
- LLSnapshotLivePreview* previewp = getPreviewView(floater);
if (previewp)
{
previewp->setSnapshotType(shot_type);
@@ -1389,6 +1406,7 @@ void LLFloaterSnapshot::Impl::onClickAutoSnap(LLUICtrl *ctrl, void* data)
if (view)
{
checkAutoSnapshot(getPreviewView(view));
+ updateControls(view);
}
}
@@ -1401,9 +1419,12 @@ void LLFloaterSnapshot::Impl::onClickMore(void* data)
{
view->translate( 0, view->getUIWinHeightShort() - view->getUIWinHeightLong() );
view->reshape(view->getRect().getWidth(), view->getUIWinHeightLong());
-
updateControls(view) ;
updateLayout(view) ;
+ if(getPreviewView(view))
+ {
+ getPreviewView(view)->setThumbnailImageSize() ;
+ }
}
}
void LLFloaterSnapshot::Impl::onClickLess(void* data)
@@ -1415,10 +1436,8 @@ void LLFloaterSnapshot::Impl::onClickLess(void* data)
{
view->translate( 0, view->getUIWinHeightLong() - view->getUIWinHeightShort() );
view->reshape(view->getRect().getWidth(), view->getUIWinHeightShort());
-
updateControls(view) ;
updateLayout(view) ;
-
if(getPreviewView(view))
{
getPreviewView(view)->setThumbnailImageSize() ;
@@ -1436,6 +1455,7 @@ void LLFloaterSnapshot::Impl::onClickUICheck(LLUICtrl *ctrl, void* data)
if (view)
{
checkAutoSnapshot(getPreviewView(view), TRUE);
+ updateControls(view);
}
}
@@ -1449,6 +1469,7 @@ void LLFloaterSnapshot::Impl::onClickHUDCheck(LLUICtrl *ctrl, void* data)
if (view)
{
checkAutoSnapshot(getPreviewView(view), TRUE);
+ updateControls(view);
}
}
@@ -1482,6 +1503,7 @@ void LLFloaterSnapshot::Impl::onClickKeepAspectCheck(LLUICtrl* ctrl, void* data)
}
previewp->setSize(w, h) ;
+ previewp->updateSnapshot(FALSE, TRUE);
checkAutoSnapshot(previewp, TRUE);
}
}
@@ -1531,7 +1553,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
}
#endif
- if(!index) //current window size
+ if(0 == index) //current window size
{
sAspectRatioCheckOff = TRUE ;
view->childSetEnabled("keep_aspect_check", FALSE) ;
@@ -1568,8 +1590,27 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
return ;
}
+static std::string lastSnapshotWidthName()
+{
+ switch(gSavedSettings.getS32("LastSnapshotType"))
+ {
+ case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailWidth";
+ case LLSnapshotLivePreview::SNAPSHOT_TEXTURE: return "LastSnapshotToInventoryWidth";
+ default: return "LastSnapshotToDiskWidth";
+ }
+}
+static std::string lastSnapshotHeightName()
+{
+ switch(gSavedSettings.getS32("LastSnapshotType"))
+ {
+ case LLSnapshotLivePreview::SNAPSHOT_POSTCARD: return "LastSnapshotToEmailHeight";
+ case LLSnapshotLivePreview::SNAPSHOT_TEXTURE: return "LastSnapshotToInventoryHeight";
+ default: return "LastSnapshotToDiskHeight";
+ }
+}
+
// static
-void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
+void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)
{
LLComboBox* combobox = (LLComboBox*)ctrl;
LLFloaterSnapshot *view = (LLFloaterSnapshot *)data;
@@ -1580,13 +1621,9 @@ void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
}
// save off all selected resolution values
- LLComboBox* combo;
- combo = view->getChild<LLComboBox>("postcard_size_combo");
- gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex());
- combo = view->getChild<LLComboBox>("texture_size_combo");
- gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex());
- combo = view->getChild<LLComboBox>("local_size_combo");
- gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex());
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", view->getChild<LLComboBox>("postcard_size_combo")->getCurrentIndex());
+ gSavedSettings.setS32("SnapshotTextureLastResolution", view->getChild<LLComboBox>("texture_size_combo")->getCurrentIndex());
+ gSavedSettings.setS32("SnapshotLocalLastResolution", view->getChild<LLComboBox>("local_size_combo")->getCurrentIndex());
std::string sdstring = combobox->getSelectedValue();
LLSD sdres;
@@ -1601,15 +1638,17 @@ void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
{
if (width == 0 || height == 0)
{
+ // take resolution from current window size
previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
}
else if (width == -1 || height == -1)
{
// load last custom value
- previewp->setSize(gSavedSettings.getS32("LastSnapshotWidth"), gSavedSettings.getS32("LastSnapshotHeight"));
+ previewp->setSize(gSavedSettings.getS32(lastSnapshotWidthName()), gSavedSettings.getS32(lastSnapshotHeightName()));
}
else
{
+ // use the resolution from the selected pre-canned drop-down choice
previewp->setSize(width, height);
}
@@ -1623,10 +1662,18 @@ void LLFloaterSnapshot::Impl::onCommitResolution(LLUICtrl* ctrl, void* data)
}
previewp->setSize(width, height);
+ if(view->childGetValue("snapshot_width").asInteger() != width || view->childGetValue("snapshot_height").asInteger() != height)
+ {
view->childSetValue("snapshot_width", width);
view->childSetValue("snapshot_height", height);
// hide old preview as the aspect ratio could be wrong
checkAutoSnapshot(previewp, FALSE);
+ getPreviewView(view)->updateSnapshot(FALSE, TRUE);
+ if(do_update)
+ {
+ updateControls(view);
+ }
+ }
}
}
@@ -1675,17 +1722,28 @@ void LLFloaterSnapshot::Impl::onCommitSnapshotFormat(LLUICtrl* ctrl, void* data)
-
+// Sets the named size combo to "custom" mode.
// static
void LLFloaterSnapshot::Impl::comboSetCustom(LLFloaterSnapshot* floater, const std::string& comboname)
{
LLComboBox* combo = floater->getChild<LLComboBox>(comboname);
- if (combo)
- {
- combo->setCurrentByIndex(combo->getItemCount() - 1);
- checkAspectRatio(floater, -1);//combo->getCurrentIndex()) ;
+ combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index
+
+ if(comboname == "postcard_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotPostcardLastResolution", combo->getCurrentIndex());
+ }
+ else if(comboname == "texture_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotTextureLastResolution", combo->getCurrentIndex());
}
+ else if(comboname == "local_size_combo")
+ {
+ gSavedSettings.setS32("SnapshotLocalLastResolution", combo->getCurrentIndex());
+ }
+
+ checkAspectRatio(floater, -1); // -1 means custom
}
@@ -1711,8 +1769,8 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3
//round to nearest power of 2 based on the direction of movement
// i.e. higher power of two if increasing texture resolution
- if(gSavedSettings.getS32("LastSnapshotWidth") < width ||
- gSavedSettings.getS32("LastSnapshotHeight") < height)
+ if(gSavedSettings.getS32("LastSnapshotToInventoryWidth") < width ||
+ gSavedSettings.getS32("LastSnapshotToInventoryHeight") < height)
{
// Up arrow pressed
width = get_next_power_two(width, MAX_TEXTURE_SIZE) ;
@@ -1772,20 +1830,10 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3
//static
void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32 width, S32 height)
{
- LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ;
- if(sctrl)
- {
- sctrl->forceSetValue(width) ;
- }
-
- sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ;
- if(sctrl)
- {
- sctrl->forceSetValue(height) ;
- }
-
- gSavedSettings.setS32("LastSnapshotWidth", width);
- gSavedSettings.setS32("LastSnapshotHeight", height);
+ view->getChild<LLSpinCtrl>("snapshot_width")->forceSetValue(width);
+ view->getChild<LLSpinCtrl>("snapshot_height")->forceSetValue(height);
+ gSavedSettings.setS32(lastSnapshotWidthName(), width);
+ gSavedSettings.setS32(lastSnapshotHeightName(), height);
}
//static
@@ -1839,15 +1887,17 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
previewp->setSize(w,h);
checkAutoSnapshot(previewp, FALSE);
+ previewp->updateSnapshot(FALSE, TRUE);
comboSetCustom(view, "postcard_size_combo");
comboSetCustom(view, "texture_size_combo");
comboSetCustom(view, "local_size_combo");
}
}
- gSavedSettings.setS32("LastSnapshotWidth", w);
- gSavedSettings.setS32("LastSnapshotHeight", h);
+ gSavedSettings.setS32(lastSnapshotWidthName(), w);
+ gSavedSettings.setS32(lastSnapshotHeightName(), h);
+ updateControls(view);
}
}
@@ -1883,6 +1933,7 @@ LLFloaterSnapshot::~LLFloaterSnapshot()
delete &impl;
}
+
BOOL LLFloaterSnapshot::postBuild()
{
childSetCommitCallback("snapshot_type_radio", Impl::onCommitSnapshotType, this);
@@ -1890,11 +1941,6 @@ BOOL LLFloaterSnapshot::postBuild()
childSetAction("new_snapshot_btn", Impl::onClickNewSnapshot, this);
- childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot"));
- childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
-
- //childSetValue("advance_snapshot_check", gSavedSettings.getBOOL("AdvanceSnapshot"));
- //childSetCommitCallback("advance_snapshot_check", Impl::onClickAdvanceSnap, this);
childSetAction("more_btn", Impl::onClickMore, this);
childSetAction("less_btn", Impl::onClickLess, this);
@@ -1907,10 +1953,10 @@ BOOL LLFloaterSnapshot::postBuild()
childSetValue("image_quality_slider", gSavedSettings.getS32("SnapshotQuality"));
childSetCommitCallback("snapshot_width", Impl::onCommitCustomResolution, this);
-
childSetCommitCallback("snapshot_height", Impl::onCommitCustomResolution, this);
childSetCommitCallback("ui_check", Impl::onClickUICheck, this);
+ childSetValue("ui_check", gSavedSettings.getBOOL("RenderUIInSnapshot"));
childSetCommitCallback("hud_check", Impl::onClickHUDCheck, this);
childSetValue("hud_check", gSavedSettings.getBOOL("RenderHUDInSnapshot"));
@@ -1925,12 +1971,15 @@ BOOL LLFloaterSnapshot::postBuild()
childSetValue("layer_types", "colors");
childSetEnabled("layer_types", FALSE);
- childSetValue("snapshot_width", gSavedSettings.getS32("LastSnapshotWidth"));
- childSetValue("snapshot_height", gSavedSettings.getS32("LastSnapshotHeight"));
+ childSetValue("snapshot_width", gSavedSettings.getS32(lastSnapshotWidthName()));
+ childSetValue("snapshot_height", gSavedSettings.getS32(lastSnapshotHeightName()));
childSetValue("freeze_frame_check", gSavedSettings.getBOOL("UseFreezeFrame"));
childSetCommitCallback("freeze_frame_check", Impl::onCommitFreezeFrame, this);
+ childSetValue("auto_snapshot_check", gSavedSettings.getBOOL("AutoSnapshot"));
+ childSetCommitCallback("auto_snapshot_check", Impl::onClickAutoSnap, this);
+
childSetCommitCallback("postcard_size_combo", Impl::onCommitResolution, this);
childSetCommitCallback("texture_size_combo", Impl::onCommitResolution, this);
childSetCommitCallback("local_size_combo", Impl::onCommitResolution, this);
@@ -1960,53 +2009,6 @@ void LLFloaterSnapshot::draw()
return;
}
- if(!isMinimized())
- {
- if (previewp && previewp->getDataSize() > 0)
- {
- LLLocale locale(LLLocale::USER_LOCALE);
-
- std::string bytes_string;
- if (previewp->getSnapshotType() == LLSnapshotLivePreview::SNAPSHOT_POSTCARD &&
- previewp->getDataSize() > MAX_POSTCARD_DATASIZE)
- {
- childSetColor("file_size_label", LLColor4::red);
- childSetEnabled("send_btn", FALSE);
- }
- else
- {
- childSetColor("file_size_label", gColors.getColor( "LabelTextColor" ));
- childSetEnabled("send_btn", previewp->getSnapshotUpToDate());
- }
-
- if (previewp->getSnapshotUpToDate())
- {
- std::string bytes_string;
- LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 );
- childSetTextArg("file_size_label", "[SIZE]", bytes_string);
- }
- else
- {
- childSetTextArg("file_size_label", "[SIZE]", getString("unknown"));
- childSetColor("file_size_label", gColors.getColor( "LabelTextColor" ));
- }
- childSetEnabled("upload_btn", previewp->getSnapshotUpToDate());
- childSetEnabled("save_btn", previewp->getSnapshotUpToDate());
-
- }
- else
- {
- childSetTextArg("file_size_label", "[SIZE]", std::string("???"));
- childSetEnabled("upload_btn", FALSE);
- childSetEnabled("send_btn", FALSE);
- childSetEnabled("save_btn", FALSE);
- }
-
- BOOL ui_in_snapshot = gSavedSettings.getBOOL("RenderUIInSnapshot");
- childSetValue("ui_check", ui_in_snapshot);
- childSetToolTip("ui_check", std::string("If selected shows the UI in the snapshot"));
- }
-
LLFloater::draw();
if (previewp)
@@ -2071,10 +2073,15 @@ void LLFloaterSnapshot::hide(void*)
//static
void LLFloaterSnapshot::update()
{
+ BOOL changed = FALSE;
for (std::set<LLSnapshotLivePreview*>::iterator iter = LLSnapshotLivePreview::sList.begin();
iter != LLSnapshotLivePreview::sList.end(); ++iter)
{
- LLSnapshotLivePreview::onIdle(*iter);
+ changed |= LLSnapshotLivePreview::onIdle(*iter);
+ }
+ if(changed)
+ {
+ sInstance->impl.updateControls(sInstance);
}
}
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 02ea02a291..617d4d010f 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -180,7 +180,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
msg->getF32Fast(_PREHASH_ReportData, _PREHASH_Score, score, block);
msg->getStringFast(_PREHASH_ReportData, _PREHASH_TaskName, name_buf, block);
msg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block);
- if(msg->getNumberOfBlocks("DataExtended"))
+ if(msg->has("DataExtended"))
{
have_extended_data = true;
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 4a55e0b860..c671a70b4a 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -821,7 +821,7 @@ void LLFolderViewItem::draw()
// mShowSingleSelection is FALSE
if( mIsSelected )
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLColor4 bg_color = sHighlightBgColor;
//const S32 TRAILING_PAD = 5; // It just looks better with this.
if (!mIsCurSelection)
@@ -876,7 +876,7 @@ void LLFolderViewItem::draw()
}
if (mDragAndDropTarget)
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(
0,
getRect().getHeight(),
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index a021a66af2..d595a22336 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -142,7 +142,7 @@ void LLAgent::renderAutoPilotTarget()
gGL.pushMatrix();
// not textured
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// lovely green
glColor4f(0.f, 1.f, 1.f, 1.f);
@@ -355,10 +355,11 @@ void LLCompass::draw()
if (mBkgndTexture)
{
- mBkgndTexture->bind();
+ gGL.getTexUnit(0)->bind(mBkgndTexture.get());
+
gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(1.f, 1.f);
gGL.vertex2i(width, height);
@@ -381,10 +382,10 @@ void LLCompass::draw()
if (mTexture)
{
- mTexture->bind();
+ gGL.getTexUnit(0)->bind(mTexture.get());
gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(1.f, 1.f);
gGL.vertex2i(width, height);
@@ -426,9 +427,9 @@ void LLHorizontalCompass::draw()
F32 left = center - COMPASS_RANGE;
F32 right = center + COMPASS_RANGE;
- mTexture->bind();
+ gGL.getTexUnit(0)->bind(mTexture.get());
gGL.color4f(1.0f, 1.0f, 1.0f, 1.0f );
- gGL.begin( LLVertexBuffer::QUADS );
+ gGL.begin( LLRender::QUADS );
gGL.texCoord2f(right, 1.f);
gGL.vertex2i(width, height);
@@ -447,7 +448,7 @@ void LLHorizontalCompass::draw()
// Draw the focus line
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4fv( mFocusColor.mV );
gl_line_2d( half_width, 0, half_width, height );
}
@@ -465,7 +466,7 @@ void LLWind::renderVectors()
F32 region_width_meters = LLWorld::getInstance()->getRegionWidthInMeters();
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.pushMatrix();
LLVector3 origin_agent;
origin_agent = gAgent.getPosAgentFromGlobal(mOriginGlobal);
@@ -479,11 +480,11 @@ void LLWind::renderVectors()
gGL.pushMatrix();
gGL.translatef((F32)i * region_width_meters/mSize, (F32)j * region_width_meters/mSize, 0.0);
gGL.color3f(0,1,0);
- gGL.begin(LLVertexBuffer::POINTS);
+ gGL.begin(LLRender::POINTS);
gGL.vertex3f(0,0,0);
gGL.end();
gGL.color3f(1,0,0);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f(x * 0.1f, y * 0.1f ,0.f);
gGL.vertex3f(x, y, 0.f);
gGL.end();
@@ -501,7 +502,7 @@ void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
const LLVector3d &east_north_top_global )
{
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
LLVector3 west_south_bottom_agent = gAgent.getPosAgentFromGlobal(west_south_bottom_global);
@@ -532,7 +533,7 @@ void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
gGL.color4f(1.f, 1.f, 0.f, 1.f);
// Cheat and give this the same pick-name as land
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f(west, north, nw_bottom);
gGL.vertex3f(west, north, nw_top);
@@ -549,7 +550,7 @@ void LLViewerParcelMgr::renderRect(const LLVector3d &west_south_bottom_global,
gGL.end();
gGL.color4f(1.f, 1.f, 0.f, 0.2f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.vertex3f(west, north, nw_bottom);
gGL.vertex3f(west, north, nw_top);
@@ -609,14 +610,14 @@ void LLViewerParcelMgr::renderParcel(LLParcel* parcel )
F32 ne_top = ne_bottom + POST_HEIGHT;
F32 nw_top = nw_bottom + POST_HEIGHT;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
LLUI::setLineWidth(2.f);
gGL.color4f(0.f, 1.f, 1.f, 1.f);
// Cheat and give this the same pick-name as land
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f(west, north, nw_bottom);
gGL.vertex3f(west, north, nw_top);
@@ -633,7 +634,7 @@ void LLViewerParcelMgr::renderParcel(LLParcel* parcel )
gGL.end();
gGL.color4f(0.f, 1.f, 1.f, 0.2f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.vertex3f(west, north, nw_bottom);
gGL.vertex3f(west, north, nw_top);
@@ -759,7 +760,7 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi
bool has_segments = false;
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
gGL.color4f(1.f, 1.f, 0.f, 0.2f);
@@ -786,7 +787,7 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi
if (!has_segments)
{
has_segments = true;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
}
renderOneSegment(x1, y1, x2, y2, PARCEL_POST_HEIGHT, SOUTH_MASK, regionp);
}
@@ -802,7 +803,7 @@ void LLViewerParcelMgr::renderHighlightSegments(const U8* segments, LLViewerRegi
if (!has_segments)
{
has_segments = true;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
}
renderOneSegment(x1, y1, x2, y2, PARCEL_POST_HEIGHT, WEST_MASK, regionp);
}
@@ -850,14 +851,14 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
if (use_pass && (mCollisionBanned == BA_NOT_ON_LIST))
{
- LLViewerImage::bindTexture(mPassImage);
+ gGL.getTexUnit(0)->bind(mPassImage);
}
else
{
- LLViewerImage::bindTexture(mBlockedImage);
+ gGL.getTexUnit(0)->bind(mBlockedImage);
}
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
for (y = 0; y < STRIDE; y++)
{
@@ -1011,10 +1012,10 @@ void LLViewerObjectList::renderObjectBeacons()
LLGLSUIDefault gls_ui;
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
S32 last_line_width = -1;
- // gGL.begin(LLVertexBuffer::LINES); // Always happens in (line_width != last_line_width)
+ // gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
for (S32 i = 0; i < mDebugBeacons.count(); i++)
{
@@ -1031,7 +1032,7 @@ void LLViewerObjectList::renderObjectBeacons()
}
glLineWidth( (F32)line_width );
last_line_width = line_width;
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
}
const LLVector3 &thisline = debug_beacon.mPositionAgent;
@@ -1049,11 +1050,11 @@ void LLViewerObjectList::renderObjectBeacons()
}
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
S32 last_line_width = -1;
- // gGL.begin(LLVertexBuffer::LINES); // Always happens in (line_width != last_line_width)
+ // gGL.begin(LLRender::LINES); // Always happens in (line_width != last_line_width)
for (S32 i = 0; i < mDebugBeacons.count(); i++)
{
@@ -1069,7 +1070,7 @@ void LLViewerObjectList::renderObjectBeacons()
}
glLineWidth( (F32)line_width );
last_line_width = line_width;
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
}
const LLVector3 &thisline = debug_beacon.mPositionAgent;
diff --git a/indra/newview/llhudeffectbeam.cpp b/indra/newview/llhudeffectbeam.cpp
index 9fae0e3387..b8d77c8c06 100644
--- a/indra/newview/llhudeffectbeam.cpp
+++ b/indra/newview/llhudeffectbeam.cpp
@@ -251,7 +251,7 @@ void LLHUDEffectBeam::render()
}
LLGLSPipelineAlpha gls_pipeline_alpha;
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Interpolate the global fade alpha
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 7a1df7e3b2..fd09f0d94e 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -499,14 +499,14 @@ void LLHUDEffectLookAt::render()
{
if (sDebugLookAt && mSourceObject.notNull())
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLVector3 target = mTargetPos + ((LLVOAvatar*)(LLViewerObject*)mSourceObject)->mHeadp->getWorldPosition();
glMatrixMode(GL_MODELVIEW);
gGL.pushMatrix();
gGL.translatef(target.mV[VX], target.mV[VY], target.mV[VZ]);
glScalef(0.3f, 0.3f, 0.3f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
LLColor3 color = (*mAttentions)[mTargetType].mColor;
gGL.color3f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE]);
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
index 310b0331c9..8fc68d1f5c 100644
--- a/indra/newview/llhudeffectpointat.cpp
+++ b/indra/newview/llhudeffectpointat.cpp
@@ -328,13 +328,13 @@ void LLHUDEffectPointAt::render()
update();
if (sDebugPointAt && mTargetType != POINTAT_TARGET_NONE)
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLVector3 target = mTargetPos + mSourceObject->getRenderPosition();
gGL.pushMatrix();
gGL.translatef(target.mV[VX], target.mV[VY], target.mV[VZ]);
glScalef(0.3f, 0.3f, 0.3f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.color3f(1.f, 0.f, 0.f);
gGL.vertex3f(-1.f, 0.f, 0.f);
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
index 4cfd556ead..dd33c05ad1 100644
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -86,7 +86,7 @@ void LLHUDIcon::renderIcon(BOOL for_select)
LLGLDepthTest gls_depth(GL_TRUE);
if (for_select)
{
- LLViewerImage::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
if (mHidden)
@@ -163,10 +163,10 @@ void LLHUDIcon::renderIcon(BOOL for_select)
LLColor4 icon_color = LLColor4::white;
icon_color.mV[VALPHA] = alpha_factor;
gGL.color4fv(icon_color.mV);
- LLViewerImage::bindTexture(mImagep);
+ gGL.getTexUnit(0)->bind(mImagep.get());
}
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.texCoord2f(0.f, 1.f);
gGL.vertex3fv(upper_left.mV);
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 80e62aff8f..7dafac74ea 100644
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -120,6 +120,111 @@ LLHUDText::~LLHUDText()
}
+BOOL LLHUDText::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render)
+{
+ if (!mVisible || mHidden)
+ {
+ return FALSE;
+ }
+
+ // don't pick text that isn't bound to a viewerobject or isn't in a bubble
+ if (!mSourceObject || mSourceObject->mDrawable.isNull() || !mUseBubble)
+ {
+ return FALSE;
+ }
+
+ F32 alpha_factor = 1.f;
+ LLColor4 text_color = mColor;
+ if (mDoFade)
+ {
+ if (mLastDistance > mFadeDistance)
+ {
+ alpha_factor = llmax(0.f, 1.f - (mLastDistance - mFadeDistance)/mFadeRange);
+ text_color.mV[3] = text_color.mV[3]*alpha_factor;
+ }
+ }
+ if (text_color.mV[3] < 0.01f)
+ {
+ return FALSE;
+ }
+
+ mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
+
+ // scale screen size of borders down
+ //RN: for now, text on hud objects is never occluded
+
+ LLVector3 x_pixel_vec;
+ LLVector3 y_pixel_vec;
+
+ if (mOnHUDAttachment)
+ {
+ x_pixel_vec = LLVector3::y_axis / (F32)gViewerWindow->getWindowWidth();
+ y_pixel_vec = LLVector3::z_axis / (F32)gViewerWindow->getWindowHeight();
+ }
+ else
+ {
+ LLViewerCamera::getInstance()->getPixelVectors(mPositionAgent, y_pixel_vec, x_pixel_vec);
+ }
+
+ LLVector3 width_vec = mWidth * x_pixel_vec;
+ LLVector3 height_vec = mHeight * y_pixel_vec;
+
+ LLCoordGL screen_pos;
+ LLViewerCamera::getInstance()->projectPosAgentToScreen(mPositionAgent, screen_pos, FALSE);
+
+ LLVector2 screen_offset;
+ screen_offset = updateScreenPos(mPositionOffset);
+
+ LLVector3 render_position = mPositionAgent
+ + (x_pixel_vec * screen_offset.mV[VX])
+ + (y_pixel_vec * screen_offset.mV[VY]);
+
+
+ if (mUseBubble)
+ {
+ LLVector3 bg_pos = render_position
+ + (F32)mOffsetY * y_pixel_vec
+ - (width_vec / 2.f)
+ - (height_vec);
+ //LLUI::translate(bg_pos.mV[VX], bg_pos.mV[VY], bg_pos.mV[VZ]);
+
+ LLVector3 v[] =
+ {
+ bg_pos,
+ bg_pos + width_vec,
+ bg_pos + width_vec + height_vec,
+ bg_pos + height_vec,
+ };
+
+ if (debug_render)
+ {
+ gGL.begin(LLRender::LINE_STRIP);
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[1].mV);
+ gGL.vertex3fv(v[2].mV);
+ gGL.vertex3fv(v[3].mV);
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[2].mV);
+ gGL.end();
+ }
+
+ LLVector3 dir = end-start;
+ F32 t = 0.f;
+
+ if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, NULL, NULL, &t, FALSE) ||
+ LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, NULL, NULL, &t, FALSE) )
+ {
+ if (t <= 1.f)
+ {
+ intersection = start + dir*t;
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
void LLHUDText::render()
{
if (!mOnHUDAttachment && sDisplayText)
@@ -152,7 +257,15 @@ void LLHUDText::renderText(BOOL for_select)
return;
}
- LLGLState gls_tex(GL_TEXTURE_2D, for_select ? FALSE : TRUE);
+ if (for_select)
+ {
+ gGL.getTexUnit(0)->disable();
+ }
+ else
+ {
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ }
+
LLGLState gls_blend(GL_BLEND, for_select ? FALSE : TRUE);
LLGLState gls_alpha(GL_ALPHA_TEST, for_select ? FALSE : TRUE);
@@ -261,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select)
if (for_select)
{
- LLGLSNoTexture no_texture_state;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
S32 name = mSourceObject->mGLName;
LLColor4U coloru((U8)(name >> 16), (U8)(name >> 8), (U8)name);
gGL.color4ubv(coloru.mV);
@@ -271,7 +384,7 @@ void LLHUDText::renderText(BOOL for_select)
}
else
{
- LLViewerImage::bindTexture(imagep->getImage());
+ gGL.getTexUnit(0)->bind(imagep->getImage());
gGL.color4fv(bg_color.mV);
gl_segmented_rect_3d_tex(border_scale_vec, scaled_border_width, scaled_border_height, width_vec, height_vec);
@@ -309,7 +422,7 @@ void LLHUDText::renderText(BOOL for_select)
}
LLUI::popMatrix();
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
LLVector3 box_center_offset;
@@ -317,7 +430,7 @@ void LLHUDText::renderText(BOOL for_select)
LLUI::translate(box_center_offset.mV[VX], box_center_offset.mV[VY], box_center_offset.mV[VZ]);
gGL.color4fv(bg_color.mV);
LLUI::setLineWidth(2.0);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
if (outside_width)
{
@@ -444,6 +557,10 @@ void LLHUDText::renderText(BOOL for_select)
}
/// Reset the default color to white. The renderer expects this to be the default.
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ if (for_select)
+ {
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ }
}
void LLHUDText::setStringUTF8(const std::string &wtext)
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
index b46a1635dd..e65d1d534d 100644
--- a/indra/newview/llhudtext.h
+++ b/indra/newview/llhudtext.h
@@ -123,6 +123,8 @@ public:
void setOnHUDAttachment(BOOL on_hud) { mOnHUDAttachment = on_hud; }
void shift(const LLVector3& offset);
+ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render = FALSE);
+
static void shiftAll(const LLVector3& offset);
static void renderAllHUD();
static void addPickable(std::set<LLViewerObject*> &pick_list);
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index 994bf39300..87ec272344 100644
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -651,11 +651,11 @@ void LLJoystickCameraRotate::drawRotatedImage( const LLImageGL* image, S32 rotat
{ 1.f, 0.f }
};
- image->bind();
+ gGL.getTexUnit(0)->bind(image);
gGL.color4fv(UI_VERTEX_COLOR.mV);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.texCoord2fv( uv[ (rotations + 0) % 4]);
gGL.vertex2i(width, height );
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index 891dd69f84..030237df37 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -388,13 +388,13 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
const F32 LINE_ALPHA = 0.33f;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLUI::setLineWidth(1.5f);
if (draw_x)
{
gGL.color4f(1.f, 0.f, 0.f, LINE_ALPHA);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f( -region_size, 0.f, 0.f );
gGL.vertex3f( region_size, 0.f, 0.f );
gGL.end();
@@ -403,7 +403,7 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
if (draw_y)
{
gGL.color4f(0.f, 1.f, 0.f, LINE_ALPHA);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f( 0.f, -region_size, 0.f );
gGL.vertex3f( 0.f, region_size, 0.f );
gGL.end();
@@ -412,7 +412,7 @@ void LLManip::renderGuidelines(BOOL draw_x, BOOL draw_y, BOOL draw_z)
if (draw_z)
{
gGL.color4f(0.f, 0.f, 1.f, LINE_ALPHA);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex3f( 0.f, 0.f, -region_size );
gGL.vertex3f( 0.f, 0.f, region_size );
gGL.end();
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
index f1a0fd4c67..d3dc2fdd08 100644
--- a/indra/newview/llmaniprotate.cpp
+++ b/indra/newview/llmaniprotate.cpp
@@ -115,7 +115,7 @@ void LLManipRotate::handleSelect()
void LLManipRotate::render()
{
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
LLGLEnable gl_blend(GL_BLEND);
LLGLEnable gls_alpha_test(GL_ALPHA_TEST);
@@ -838,7 +838,7 @@ void LLManipRotate::renderSnapGuides()
LLVector3 outer_point;
LLVector3 text_point;
LLQuaternion rot(deg * DEG_TO_RAD, constraint_axis);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
inner_point = (projected_snap_axis * mRadiusMeters * SNAP_GUIDE_INNER_RADIUS * rot) + center;
F32 tick_length = 0.f;
@@ -1017,7 +1017,7 @@ void LLManipRotate::renderSnapGuides()
object_axis = object_axis * SNAP_GUIDE_INNER_RADIUS * mRadiusMeters + center;
LLVector3 line_start = center;
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv(line_start.mV);
gGL.vertex3fv(object_axis.mV);
@@ -1025,7 +1025,7 @@ void LLManipRotate::renderSnapGuides()
gGL.end();
// draw snap guide arrow
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
LLVector3 arrow_dir;
LLVector3 arrow_span = (object_axis - line_start) % getConstraintAxis();
@@ -1045,7 +1045,7 @@ void LLManipRotate::renderSnapGuides()
{
LLGLDepthTest gls_depth(GL_TRUE);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.vertex3fv(line_start.mV);
gGL.vertex3fv(object_axis.mV);
@@ -1053,7 +1053,7 @@ void LLManipRotate::renderSnapGuides()
gGL.end();
// draw snap guide arrow
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
LLVector3 arrow_dir;
LLVector3 arrow_span = (object_axis - line_start) % getConstraintAxis();
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 68e59ce9e0..6539748d30 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -197,7 +197,7 @@ LLManipScale::~LLManipScale()
void LLManipScale::render()
{
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
LLGLEnable gl_blend(GL_BLEND);
LLGLEnable gls_alpha_test(GL_ALPHA_TEST);
@@ -590,7 +590,7 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
{
gGL.color4fv( default_normal_color.mV );
LLGLDepthTest gls_depth(GL_FALSE);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
// Face 0
gGL.vertex3f(min.mV[VX], max.mV[VY], max.mV[VZ]);
@@ -751,7 +751,7 @@ void LLManipScale::renderCorners( const LLBBox& bbox )
void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_FALSE);
glPushMatrix();
@@ -1528,7 +1528,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
{
LLColor4 tick_color = setupSnapGuideRenderPass(pass);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
LLVector3 line_mid = mScaleCenter + (mScaleSnapValue * mScaleDir) + (mSnapGuideDir1 * mSnapRegimeOffset);
LLVector3 line_start = line_mid - (mScaleDir * (llmin(mScaleSnapValue, mSnapGuideLength * 0.5f)));
LLVector3 line_end = line_mid + (mScaleDir * llmin(max_point_on_scale_line - mScaleSnapValue, mSnapGuideLength * 0.5f));
@@ -1579,7 +1579,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
if (mInSnapRegime)
{
// draw snap guide line
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
LLVector3 snap_line_center = mScaleCenter + (mScaleSnapValue * mScaleDir);
LLVector3 snap_line_start = snap_line_center + (mSnapGuideDir1 * mSnapRegimeOffset);
@@ -1593,7 +1593,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
gGL.end();
// draw snap guide arrow
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
//gGLSNoCullFaces.set();
gGL.color4f(1.f, 1.f, 1.f, grid_alpha);
@@ -1628,7 +1628,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)
start_tick = -(llmin(ticks_from_scale_center_1, num_ticks_per_side1));
stop_tick = llmin(max_ticks1, num_ticks_per_side1);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
// draw first row of ticks
for (S32 i = start_tick; i <= stop_tick; i++)
{
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index ac82295008..d09cb8a843 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -134,7 +134,7 @@ void LLManipTranslate::restoreGL()
GLuint* d = new GLuint[rez*rez];
glGenTextures(1, &sGridTex);
- glBindTexture(GL_TEXTURE_2D, sGridTex);
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -1052,7 +1052,7 @@ void LLManipTranslate::renderSnapGuides()
F32 max_subdivisions = sGridMaxSubdivisionLevel;//(F32)gSavedSettings.getS32("GridSubdivision");
F32 line_alpha = gSavedSettings.getF32("GridOpacity");
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE);
LLGLDisable gls_cull(GL_CULL_FACE);
LLVector3 translate_axis;
@@ -1223,7 +1223,7 @@ void LLManipTranslate::renderSnapGuides()
{
LLColor4 line_color = setupSnapGuideRenderPass(pass);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
LLVector3 line_start = selection_center + (mSnapOffsetMeters * mSnapOffsetAxis) + (translate_axis * (guide_size_meters * 0.5f + offset_nearest_grid_unit));
LLVector3 line_end = selection_center + (mSnapOffsetMeters * mSnapOffsetAxis) - (translate_axis * (guide_size_meters * 0.5f + offset_nearest_grid_unit));
@@ -1299,7 +1299,7 @@ void LLManipTranslate::renderSnapGuides()
LLVector3 line_start = selection_center - mSnapOffsetAxis * mSnapOffsetMeters;
LLVector3 line_end = selection_center + mSnapOffsetAxis * mSnapOffsetMeters;
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.color4f(line_color.mV[VX], line_color.mV[VY], line_color.mV[VZ], line_color.mV[VW]);
@@ -1309,7 +1309,7 @@ void LLManipTranslate::renderSnapGuides()
gGL.end();
// draw snap guide arrow
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
gGL.color4f(line_color.mV[VX], line_color.mV[VY], line_color.mV[VZ], line_color.mV[VW]);
@@ -1463,7 +1463,7 @@ void LLManipTranslate::renderSnapGuides()
break;
}
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
highlightIntersection(normal, selection_center, grid_rotation, inner_color);
gGL.pushMatrix();
@@ -1503,7 +1503,7 @@ void LLManipTranslate::renderSnapGuides()
LLGLDisable stencil(GL_STENCIL_TEST);
{
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER);
- glBindTexture(GL_TEXTURE_2D, sGridTex);
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex);
gGL.flush();
gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f);
@@ -1514,11 +1514,11 @@ void LLManipTranslate::renderSnapGuides()
{
LLGLDisable alpha_test(GL_ALPHA_TEST);
//draw black overlay
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
renderGrid(u,v,tiles,0.0f, 0.0f, 0.0f,a*0.16f);
//draw grid top
- glBindTexture(GL_TEXTURE_2D, sGridTex);
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, sGridTex);
renderGrid(u,v,tiles,1,1,1,a);
gGL.popMatrix();
@@ -1564,7 +1564,7 @@ void LLManipTranslate::renderGrid(F32 x, F32 y, F32 size, F32 r, F32 g, F32 b, F
for (F32 xx = -size-d; xx < size+d; xx += d)
{
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
for (F32 yy = -size-d; yy < size+d; yy += d)
{
float dx, dy, da;
@@ -1620,7 +1620,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS);
glStencilFunc(GL_ALWAYS, 0, stencil_mask);
gGL.setColorMask(false, false);
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glColor4f(1,1,1,1);
//setup clip plane
@@ -1686,7 +1686,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
//draw volume/plane intersections
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest depth(GL_FALSE);
LLGLEnable stencil(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
@@ -1834,7 +1834,7 @@ void LLManipTranslate::renderTranslationHandles()
relative_camera_dir.normVec();
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDisable cull_face(GL_CULL_FACE);
LLColor4 color1;
@@ -1877,7 +1877,7 @@ void LLManipTranslate::renderTranslationHandles()
color1.setVec(0.f, 1.f, 0.f, 0.6f);
color2.setVec(0.f, 0.f, 1.f, 0.6f);
}
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
gGL.color4fv(color1.mV);
gGL.vertex3f(0.f, mPlaneManipOffsetMeters * (-PLANE_TICK_SIZE * 0.25f), mPlaneManipOffsetMeters * (-PLANE_TICK_SIZE * 0.25f));
@@ -1892,7 +1892,7 @@ void LLManipTranslate::renderTranslationHandles()
gGL.end();
LLUI::setLineWidth(3.0f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.color4f(0.f, 0.f, 0.f, 0.3f);
gGL.vertex3f(0.f, mPlaneManipOffsetMeters * -PLANE_TICK_SIZE * 0.25f, mPlaneManipOffsetMeters * -PLANE_TICK_SIZE * 0.25f);
@@ -1932,7 +1932,7 @@ void LLManipTranslate::renderTranslationHandles()
color2.setVec(1.f, 0.f, 0.f, 0.6f);
}
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
gGL.color4fv(color1.mV);
gGL.vertex3f(mPlaneManipOffsetMeters * (PLANE_TICK_SIZE * 0.25f), 0.f, mPlaneManipOffsetMeters * (PLANE_TICK_SIZE * 0.25f));
@@ -1947,7 +1947,7 @@ void LLManipTranslate::renderTranslationHandles()
gGL.end();
LLUI::setLineWidth(3.0f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.color4f(0.f, 0.f, 0.f, 0.3f);
gGL.vertex3f(mPlaneManipOffsetMeters * -PLANE_TICK_SIZE * 0.25f, 0.f, mPlaneManipOffsetMeters * -PLANE_TICK_SIZE * 0.25f);
@@ -2011,7 +2011,7 @@ void LLManipTranslate::renderTranslationHandles()
color2.setVec(0.f, 0.8f, 0.f, 0.6f);
}
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
gGL.color4fv(color1.mV);
gGL.vertex3fv(v0.mV);
@@ -2026,7 +2026,7 @@ void LLManipTranslate::renderTranslationHandles()
gGL.end();
LLUI::setLineWidth(3.0f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
gGL.color4f(0.f, 0.f, 0.f, 0.3f);
LLVector3 v12 = (v1 + v2) * .5f;
@@ -2052,7 +2052,7 @@ void LLManipTranslate::renderTranslationHandles()
}
}
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Since we draw handles with depth testing off, we need to draw them in the
// proper depth order.
@@ -2126,7 +2126,7 @@ void LLManipTranslate::renderTranslationHandles()
void LLManipTranslate::renderArrow(S32 which_arrow, S32 selected_arrow, F32 box_size, F32 arrow_size, F32 handle_size, BOOL reverse_direction)
{
- LLGLSNoTexture gls_ui_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLEnable gls_blend(GL_BLEND);
LLGLEnable gls_color_material(GL_COLOR_MATERIAL);
@@ -2160,7 +2160,7 @@ void LLManipTranslate::renderArrow(S32 which_arrow, S32 selected_arrow, F32 box_
{
LLUI::setLineWidth(2.0f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
vec.mV[index] = box_size;
gGL.vertex3f(vec.mV[0], vec.mV[1], vec.mV[2]);
diff --git a/indra/newview/llmemoryview.cpp b/indra/newview/llmemoryview.cpp
index a5a4db8dc4..656fe743af 100644
--- a/indra/newview/llmemoryview.cpp
+++ b/indra/newview/llmemoryview.cpp
@@ -146,7 +146,7 @@ void LLMemoryView::draw()
S32 height = getRect().getHeight();
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_tex;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(0, height, width, 0, LLColor4(0.f, 0.f, 0.f, 0.25f));
#if MEM_TRACK_TYPE
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 4f559105f6..21b1bee54f 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -226,7 +226,7 @@ void LLNetMap::draw()
LLGLEnable scissor(GL_SCISSOR_TEST);
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLLocalClipRect clip(getLocalRect());
glMatrixMode(GL_MODELVIEW);
@@ -286,8 +286,8 @@ void LLNetMap::draw()
// Draw using texture.
- LLViewerImage::bindTexture(regionp->getLand().getSTexture());
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->bind(regionp->getLand().getSTexture());
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2f(left, top);
gGL.texCoord2f(0.f, 0.f);
@@ -303,8 +303,8 @@ void LLNetMap::draw()
{
if (regionp->getLand().getWaterTexture())
{
- LLViewerImage::bindTexture(regionp->getLand().getWaterTexture());
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->bind(regionp->getLand().getWaterTexture());
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2f(left, top);
gGL.texCoord2f(0.f, 0.f);
@@ -350,11 +350,11 @@ void LLNetMap::draw()
map_center_agent.mV[VX] *= gMiniMapScale/region_width;
map_center_agent.mV[VY] *= gMiniMapScale/region_width;
- LLViewerImage::bindTexture(mObjectImagep);
+ gGL.getTexUnit(0)->bind(mObjectImagep);
F32 image_half_width = 0.5f*mObjectMapPixels;
F32 image_half_height = 0.5f*mObjectMapPixels;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex2f(map_center_agent.mV[VX] - image_half_width, image_half_height + map_center_agent.mV[VY]);
gGL.texCoord2f(0.f, 0.f);
@@ -457,13 +457,13 @@ void LLNetMap::draw()
F32 ctr_y = (F32)center_sw_bottom;
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
if( LLNetMap::sRotateMap )
{
gGL.color4fv(gFrustumMapColor.mV);
- gGL.begin( LLVertexBuffer::TRIANGLES );
+ gGL.begin( LLRender::TRIANGLES );
gGL.vertex2f( ctr_x, ctr_y );
gGL.vertex2f( ctr_x - half_width_pixels, ctr_y + far_clip_pixels );
gGL.vertex2f( ctr_x + half_width_pixels, ctr_y + far_clip_pixels );
@@ -477,7 +477,7 @@ void LLNetMap::draw()
gGL.pushMatrix();
gGL.translatef( ctr_x, ctr_y, 0 );
glRotatef( atan2( LLViewerCamera::getInstance()->getAtAxis().mV[VX], LLViewerCamera::getInstance()->getAtAxis().mV[VY] ) * RAD_TO_DEG, 0.f, 0.f, -1.f);
- gGL.begin( LLVertexBuffer::TRIANGLES );
+ gGL.begin( LLRender::TRIANGLES );
gGL.vertex2f( 0, 0 );
gGL.vertex2f( -half_width_pixels, far_clip_pixels );
gGL.vertex2f( half_width_pixels, far_clip_pixels );
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 8125fb61c0..13f3d125ed 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -340,6 +340,11 @@ namespace {
boost::intrusive_ptr< LLIamHereLogin > gResponsePtr = 0;
};
+void set_start_location(LLUICtrl* ctrl, void* data)
+{
+ LLURLSimString::setString(ctrl->getValue().asString());
+}
+
//---------------------------------------------------------------------------
// Public methods
//---------------------------------------------------------------------------
@@ -426,7 +431,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
combo->setCurrentByIndex( 0 );
}
- combo->setCommitCallback( &LLPanelGeneral::set_start_location );
+ combo->setCommitCallback( &set_start_location );
LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo");
server_choice_combo->setCommitCallback(onSelectServer);
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index d54de05d23..aebed45081 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -365,6 +365,17 @@ void LLPanelObject::getState( )
BOOL enable_scale = objectp->permMove() && objectp->permModify();
BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
+ S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+ BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ))
+ && (selected_count == 1);
+
+ if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() > 1)
+ {
+ enable_move = FALSE;
+ enable_scale = FALSE;
+ enable_rotate = FALSE;
+ }
+
LLVector3 vec;
if (enable_move)
{
@@ -438,9 +449,6 @@ void LLPanelObject::getState( )
// BUG? Check for all objects being editable?
S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
BOOL editable = root_objectp->permModify();
- S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
- BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ))
- && (selected_count == 1);
// Select Single Message
childSetVisible("select_single", FALSE);
diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h
index 2af9cbafae..5191a80df8 100644
--- a/indra/newview/llpolymesh.h
+++ b/indra/newview/llpolymesh.h
@@ -150,7 +150,7 @@ public:
class LLJointRenderData
{
public:
- LLJointRenderData(const LLMatrix4* world_matrix, LLSkinJoint* skin_joint) : mWorldMatrix(world_matrix), mSkinJoint(skin_joint){}
+ LLJointRenderData(const LLMatrix4* world_matrix, LLSkinJoint* skin_joint) : mWorldMatrix(world_matrix), mSkinJoint(skin_joint) {}
~LLJointRenderData(){}
const LLMatrix4* mWorldMatrix;
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 55bad7fc7d..79b8313352 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -200,7 +200,7 @@ void LLPreviewTexture::draw()
if (!isMinimized())
{
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_notex;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
const LLRect& border = mClientRect;
LLRect interior = mClientRect;
@@ -299,20 +299,20 @@ BOOL LLPreviewTexture::canSaveAs() const
// virtual
void LLPreviewTexture::saveAs()
{
- if( !mLoadingFullImage )
+ if( mLoadingFullImage ) return;
+
+ LLFilePicker& file_picker = LLFilePicker::instance();
+ if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA, LLDir::getScrubbedFileName(getItem()->getName())) )
{
- LLFilePicker& file_picker = LLFilePicker::instance();
- if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGA ) )
- {
- // User canceled save.
- return;
- }
- mSaveFileName = file_picker.getFirstFile();
- mLoadingFullImage = TRUE;
- getWindow()->incBusyCount();
- mImage->setLoadedCallback( LLPreviewTexture::onFileLoadedForSave,
- 0, TRUE, FALSE, new LLUUID( mItemUUID ) );
+ // User canceled or we failed to acquire save file.
+ return;
}
+ // remember the user-approved/edited file name.
+ mSaveFileName = file_picker.getFirstFile();
+ mLoadingFullImage = TRUE;
+ getWindow()->incBusyCount();
+ mImage->setLoadedCallback( LLPreviewTexture::onFileLoadedForSave,
+ 0, TRUE, FALSE, new LLUUID( mItemUUID ) );
}
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 9df60d67b5..c79022a98f 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -208,7 +208,7 @@ void LLProgressView::draw()
if (gStartImageGL)
{
LLGLSUIDefault gls_ui;
- LLViewerImage::bindTexture(gStartImageGL);
+ gGL.getTexUnit(0)->bind(gStartImageGL);
gGL.color4f(1.f, 1.f, 1.f, mFadeTimer.getStarted() ? clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, FADE_IN_TIME, 1.f, 0.f) : 1.f);
F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight;
F32 view_aspect = (F32)width / (F32)height;
@@ -224,11 +224,11 @@ void LLProgressView::draw()
glScalef(1.f, view_aspect / image_aspect, 1.f);
}
gl_rect_2d_simple_tex( getRect().getWidth(), getRect().getHeight() );
- gStartImageGL->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
else
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f(0.f, 0.f, 0.f, 1.f);
gl_rect_2d(getRect());
}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 76271a65bb..7b7bdfd582 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -4828,7 +4828,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
return;
}
- LLViewerImage::bindTexture(mSilhouetteImagep);
+ gGL.getTexUnit(0)->bind(mSilhouetteImagep.get());
LLGLSPipelineSelection gls_select;
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
LLGLEnable blend(GL_BLEND);
@@ -4936,7 +4936,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
stop_glerror();
}
- mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
@@ -5313,7 +5313,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
S32 i = 0;
for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++)
@@ -5334,7 +5334,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
gGL.flush();
gGL.setSceneBlendType(LLRender::BT_ALPHA);
- gGL.begin(LLVertexBuffer::TRIANGLES);
+ gGL.begin(LLRender::TRIANGLES);
{
S32 i = 0;
for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++)
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
index 1ba4adf4d2..1cba1de9e9 100644
--- a/indra/newview/llsky.cpp
+++ b/indra/newview/llsky.cpp
@@ -284,16 +284,16 @@ LLColor4U LLSky::getFadeColor() const
void LLSky::init(const LLVector3 &sun_direction)
{
- mVOWLSkyp = static_cast<LLVOWLSky*>(gObjectList.createObjectViewer(LLViewerObject::LL_VO_WL_SKY, gAgent.getRegion()));
+ mVOWLSkyp = static_cast<LLVOWLSky*>(gObjectList.createObjectViewer(LLViewerObject::LL_VO_WL_SKY, NULL));
mVOWLSkyp->initSunDirection(sun_direction, LLVector3::zero);
gPipeline.addObject(mVOWLSkyp.get());
- mVOSkyp = (LLVOSky *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_SKY, gAgent.getRegion());
+ mVOSkyp = (LLVOSky *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_SKY, NULL);
mVOSkyp->initSunDirection(sun_direction, LLVector3());
gPipeline.addObject((LLViewerObject *)mVOSkyp);
- mVOGroundp = (LLVOGround*)gObjectList.createObjectViewer(LLViewerObject::LL_VO_GROUND, gAgent.getRegion());
+ mVOGroundp = (LLVOGround*)gObjectList.createObjectViewer(LLViewerObject::LL_VO_GROUND, NULL);
LLVOGround *groundp = mVOGroundp;
gPipeline.addObject((LLViewerObject *)groundp);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 7ea791d253..59bf29161e 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -46,6 +46,7 @@
#include "pipeline.h"
#include "llrender.h"
#include "lloctree.h"
+#include "llvoavatar.h"
const F32 SG_OCCLUSION_FUDGE = 1.01f;
#define SG_DISCARD_TOLERANCE 0.01f
@@ -1624,7 +1625,7 @@ public:
void drawBox(const LLVector3& c, const LLVector3& r)
{
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
//left front
gGL.vertex3fv((c+r.scaledVec(LLVector3(-1,1,-1))).mV);
gGL.vertex3fv((c+r.scaledVec(LLVector3(-1,1,1))).mV);
@@ -1643,7 +1644,7 @@ void drawBox(const LLVector3& c, const LLVector3& r)
gGL.end();
//bottom
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.vertex3fv((c+r.scaledVec(LLVector3(1,1,-1))).mV);
gGL.vertex3fv((c+r.scaledVec(LLVector3(1,-1,-1))).mV);
gGL.vertex3fv((c+r.scaledVec(LLVector3(-1,1,-1))).mV);
@@ -1651,7 +1652,7 @@ void drawBox(const LLVector3& c, const LLVector3& r)
gGL.end();
//top
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.vertex3fv((c+r.scaledVec(LLVector3(1,1,1))).mV);
gGL.vertex3fv((c+r.scaledVec(LLVector3(-1,1,1))).mV);
gGL.vertex3fv((c+r.scaledVec(LLVector3(1,-1,1))).mV);
@@ -1666,7 +1667,7 @@ void drawBoxOutline(const LLVector3& pos, const LLVector3& size)
LLVector3 v3 = size.scaledVec(LLVector3(-1,-1,1));
LLVector3 v4 = size.scaledVec(LLVector3( 1,-1,1));
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
//top
gGL.vertex3fv((pos+v1).mV);
@@ -1814,7 +1815,7 @@ void pushVerts(LLDrawInfo* params, U32 mask)
{
LLRenderPass::applyModelMatrix(*params);
params->mVertexBuffer->setBuffer(mask);
- params->mVertexBuffer->drawRange(params->mParticle ? LLVertexBuffer::POINTS : LLVertexBuffer::TRIANGLES,
+ params->mVertexBuffer->drawRange(params->mParticle ? LLRender::POINTS : LLRender::TRIANGLES,
params->mStart, params->mEnd, params->mCount, params->mOffset);
}
@@ -1843,7 +1844,7 @@ void pushVerts(LLFace* face, U32 mask)
U16 end = start + face->getGeomCount()-1;
U32 count = face->getIndicesCount();
U16 offset = face->getIndicesStart();
- buffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
+ buffer->drawRange(LLRender::TRIANGLES, start, end, count, offset);
}
}
@@ -1853,7 +1854,7 @@ void pushBufferVerts(LLVertexBuffer* buffer, U32 mask)
if (buffer)
{
buffer->setBuffer(mask);
- buffer->drawRange(LLVertexBuffer::TRIANGLES, 0, buffer->getRequestedVerts()-1, buffer->getRequestedIndices(), 0);
+ buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getRequestedVerts()-1, buffer->getRequestedIndices(), 0);
}
}
@@ -1902,7 +1903,7 @@ void pushVertsColorCoded(LLSpatialGroup* group, U32 mask)
LLRenderPass::applyModelMatrix(*params);
glColor4f(colors[col].mV[0], colors[col].mV[1], colors[col].mV[2], 0.5f);
params->mVertexBuffer->setBuffer(mask);
- params->mVertexBuffer->drawRange(params->mParticle ? LLVertexBuffer::POINTS : LLVertexBuffer::TRIANGLES,
+ params->mVertexBuffer->drawRange(params->mParticle ? LLRender::POINTS : LLRender::TRIANGLES,
params->mStart, params->mEnd, params->mCount, params->mOffset);
col = (col+1)%col_count;
}
@@ -1972,7 +1973,7 @@ void renderOctree(LLSpatialGroup* group)
face->mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX);
//drawBox((face->mExtents[0] + face->mExtents[1])*0.5f,
// (face->mExtents[1]-face->mExtents[0])*0.5f);
- face->mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, face->getIndicesCount(), face->getIndicesStart());
+ face->mVertexBuffer->draw(LLRender::TRIANGLES, face->getIndicesCount(), face->getIndicesStart());
}
}
@@ -2103,6 +2104,7 @@ void renderBoundingBox(LLDrawable* drawable)
gGL.color4f(0.5f,0.5f,0.5f,1.0f);
break;
case LLViewerObject::LL_VO_PART_GROUP:
+ case LLViewerObject::LL_VO_HUD_PART_GROUP:
gGL.color4f(0,0,1,1);
break;
case LLViewerObject::LL_VO_WATER:
@@ -2222,7 +2224,7 @@ void renderPoints(LLDrawable* drawablep)
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
if (drawablep->getNumFaces())
{
- gGL.begin(LLVertexBuffer::POINTS);
+ gGL.begin(LLRender::POINTS);
gGL.color3f(1,1,1);
LLVector3 center(drawablep->getPositionGroup());
for (S32 i = 0; i < drawablep->getNumFaces(); i++)
@@ -2298,9 +2300,17 @@ void renderRaycast(LLDrawable* drawablep)
LLGLEnable blend(GL_BLEND);
gGL.color4f(0,1,1,0.5f);
- for (S32 i = 0; i < drawablep->getNumFaces(); i++)
+ if (drawablep->getVOVolume() && gDebugRaycastFaceHit != -1)
{
- pushVerts(drawablep->getFace(i), LLVertexBuffer::MAP_VERTEX);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ pushVerts(drawablep->getFace(gDebugRaycastFaceHit), LLVertexBuffer::MAP_VERTEX);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ }
+ else if (drawablep->isAvatar())
+ {
+ LLGLDepthTest depth(GL_FALSE);
+ LLVOAvatar* av = (LLVOAvatar*) drawablep->getVObj().get();
+ av->renderCollisionVolumes();
}
// draw intersection point
@@ -2468,7 +2478,7 @@ void LLSpatialPartition::renderDebug()
LLGLDisable cullface(GL_CULL_FACE);
LLGLEnable blend(GL_BLEND);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gPipeline.disableLights();
LLSpatialBridge* bridge = asBridge();
@@ -2508,8 +2518,9 @@ public:
LLVector3 *mNormal;
LLVector3 *mBinormal;
LLDrawable* mHit;
-
- LLOctreeIntersect(LLVector3 start, LLVector3 end,
+ BOOL mPickTransparent;
+
+ LLOctreeIntersect(LLVector3 start, LLVector3 end, BOOL pick_transparent,
S32* face_hit, LLVector3* intersection, LLVector2* tex_coord, LLVector3* normal, LLVector3* binormal)
: mStart(start),
mEnd(end),
@@ -2518,14 +2529,15 @@ public:
mTexCoord(tex_coord),
mNormal(normal),
mBinormal(binormal),
- mHit(NULL)
+ mHit(NULL),
+ mPickTransparent(pick_transparent)
{
}
virtual void visit(const LLSpatialGroup::OctreeNode* branch)
{
for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)
- {
+ {
check(*i);
}
}
@@ -2570,25 +2582,35 @@ public:
virtual bool check(LLDrawable* drawable)
{
+ LLVector3 local_start = mStart;
+ LLVector3 local_end = mEnd;
+
+ if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible())
+ {
+ return false;
+ }
+
if (drawable->isSpatialBridge())
{
LLSpatialPartition *part = drawable->asPartition();
-
- check(part->mOctree);
- }
-
+ LLSpatialBridge* bridge = part->asBridge();
+ if (bridge && gPipeline.hasRenderType(bridge->mDrawableType))
+ {
+ check(part->mOctree);
+ }
+ }
else
- {
- LLViewerObject* vobj = drawable->getVObj();
+ {
+ LLViewerObject* vobj = drawable->getVObj();
if (vobj)
{
LLVector3 intersection;
- if (vobj->lineSegmentIntersect(mStart, mEnd, -1, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal))
+ if (vobj->lineSegmentIntersect(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal))
{
mEnd = intersection; // shorten ray so we only find CLOSER hits
if (mIntersection)
- {
+ {
*mIntersection = intersection;
}
@@ -2596,12 +2618,13 @@ public:
}
}
}
-
+
return false;
}
};
LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit, // return the face hit
LLVector3* intersection, // return the intersection point
LLVector2* tex_coord, // return the texture coordinates of the intersection point
@@ -2610,7 +2633,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector3& start, con
)
{
- LLOctreeIntersect intersect(start, end, face_hit, intersection, tex_coord, normal, bi_normal);
+ LLOctreeIntersect intersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, bi_normal);
LLDrawable* drawable = intersect.check(mOctree);
return drawable;
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index d9a81d8b9e..2d9900da1b 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -301,6 +301,7 @@ public:
BOOL remove(LLDrawable *drawablep, LLSpatialGroup *curp);
LLDrawable* lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit, // return the face hit
LLVector3* intersection = NULL, // return the intersection point
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
@@ -482,6 +483,12 @@ protected:
U32 mRenderPass;
};
+class LLHUDParticlePartition : public LLParticlePartition
+{
+public:
+ LLHUDParticlePartition();
+};
+
//spatial partition for grass (implemented in LLVOGrass.cpp)
class LLGrassPartition : public LLParticlePartition
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 1f1e56fce8..8206699932 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -89,6 +89,7 @@
#include "llfeaturemanager.h"
#include "llfirstuse.h"
#include "llfloateractivespeakers.h"
+#include "llfloaterbeacons.h"
#include "llfloatercamera.h"
#include "llfloaterchat.h"
#include "llfloatergesture.h"
@@ -849,6 +850,20 @@ bool idle_startup()
LLFile::mkdir(gDirUtilp->getChatLogsDir());
LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir());
+ //good as place as any to create user windlight directories
+ std::string user_windlight_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", ""));
+ LLFile::mkdir(user_windlight_path_name.c_str());
+
+ std::string user_windlight_skies_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
+ LLFile::mkdir(user_windlight_skies_path_name.c_str());
+
+ std::string user_windlight_water_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
+ LLFile::mkdir(user_windlight_water_path_name.c_str());
+
+ std::string user_windlight_days_path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/days", ""));
+ LLFile::mkdir(user_windlight_days_path_name.c_str());
+
+
if (show_connect_box)
{
if ( LLPanelLogin::isGridComboDirty() )
@@ -1646,6 +1661,11 @@ bool idle_startup()
LLFloaterActiveSpeakers::showInstance();
}
+ if (gSavedSettings.getBOOL("BeaconAlwaysOn"))
+ {
+ LLFloaterBeacons::showInstance();
+ }
+
if (!gNoRender)
{
// Move the progress view in front of the UI
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index fa85d89388..75bb3f545b 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -33,6 +33,8 @@
#include "llsurface.h"
+#include "llrender.h"
+
#include "llviewerimagelist.h"
#include "llpatchvertexarray.h"
#include "patch_dct.h"
@@ -249,7 +251,7 @@ void LLSurface::createSTexture()
mSTexturep = new LLViewerImage(raw, FALSE);
mSTexturep->dontDiscard();
- mSTexturep->bind();
+ gGL.getTexUnit(0)->bind(mSTexturep.get());
mSTexturep->setClamp(TRUE, TRUE);
gImageList.addImage(mSTexturep);
}
@@ -274,7 +276,7 @@ void LLSurface::createWaterTexture()
}
mWaterTexturep = new LLViewerImage(raw, FALSE);
mWaterTexturep->dontDiscard();
- mWaterTexturep->bind();
+ gGL.getTexUnit(0)->bind(mWaterTexturep.get());
mWaterTexturep->setClamp(TRUE, TRUE);
gImageList.addImage(mWaterTexturep);
}
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 3012625122..158bae00b8 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -96,7 +96,6 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer( LLTexLayerSet* owner, S32 width, S32 h
mNeedsUpload( FALSE ),
mUploadPending( FALSE ), // Not used for any logic here, just to sync sending of updates
mTexLayerSet( owner ),
- mInitialized( FALSE ),
mBumpTexName(0)
{
LLTexLayerSetBuffer::sGLByteCount += getSize();
@@ -106,11 +105,10 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer( LLTexLayerSet* owner, S32 width, S32 h
LLGLSUIDefault gls_ui;
glGenTextures(1, (GLuint*) &mBumpTexName);
- LLImageGL::bindExternalTexture(mBumpTexName, 0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTexName);
stop_glerror();
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -118,7 +116,7 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer( LLTexLayerSet* owner, S32 width, S32 h
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
stop_glerror();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLImageGL::sGlobalTextureMemory += mWidth * mHeight * 4;
LLTexLayerSetBuffer::sGLBumpByteCount += mWidth * mHeight * 4;
@@ -259,7 +257,7 @@ BOOL LLTexLayerSetBuffer::render()
LLGLSUIDefault gls_ui;
// read back into texture (this is done externally for the color data)
- LLImageGL::bindExternalTexture( mBumpTexName, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTexName);
stop_glerror();
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, mOrigin.mX, mOrigin.mY, mWidth, mHeight);
@@ -299,12 +297,17 @@ BOOL LLTexLayerSetBuffer::render()
gGL.setSceneBlendType(LLRender::BT_ALPHA);
// we have valid texture data now
- mInitialized = TRUE;
+ mTexture->setInitialized(true);
mNeedsUpdate = FALSE;
return success;
}
+bool LLTexLayerSetBuffer::isInitialized(void) const
+{
+ return mTexture->isInitialized();
+}
+
BOOL LLTexLayerSetBuffer::updateImmediate()
{
mNeedsUpdate = TRUE;
@@ -551,24 +554,12 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, void* user
delete baked_upload_data;
}
-
-void LLTexLayerSetBuffer::bindTexture()
-{
- if( mInitialized )
- {
- LLDynamicTexture::bindTexture();
- }
- else
- {
- gImageList.getImage(IMG_DEFAULT)->bind();
- }
-}
-
void LLTexLayerSetBuffer::bindBumpTexture( U32 stage )
{
if( mBumpTexName )
{
- LLImageGL::bindExternalTexture(mBumpTexName, stage, GL_TEXTURE_2D);
+ gGL.getTexUnit(stage)->bindManual(LLTexUnit::TT_TEXTURE, mBumpTexName);
+ gGL.getTexUnit(0)->activate();
if( mLastBindTime != LLImageGL::sLastFrameTime )
{
@@ -578,7 +569,8 @@ void LLTexLayerSetBuffer::bindBumpTexture( U32 stage )
}
else
{
- LLImageGL::unbindTexture(stage, GL_TEXTURE_2D);
+ gGL.getTexUnit(stage)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->activate();
}
}
@@ -786,7 +778,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
if( image_gl )
{
LLGLSUIDefault gls_ui;
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
gl_rect_2d_simple_tex( width, height );
}
else
@@ -794,7 +786,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
success = FALSE;
}
}
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.flush();
gGL.setColorMask(true, true);
@@ -804,7 +796,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
if( getInfo()->mClearAlpha )
{
// Set the alpha channel to one (clean up after previous blending)
- LLGLSNoTextureNoAlphaTest gls_no_alpha;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f( 0.f, 0.f, 0.f, 1.f );
gGL.flush();
gGL.setColorMask(false, true);
@@ -838,7 +831,8 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
}
// Set the alpha channel to one (clean up after previous blending)
- LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f( 0.f, 0.f, 0.f, 1.f );
gGL.setColorMask(false, true);
@@ -1358,13 +1352,13 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
BOOL old_clamps = image_gl->getClampS();
BOOL old_clampt = image_gl->getClampT();
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
image_gl->setClamp(TRUE, TRUE);
gl_rect_2d_simple_tex( width, height );
image_gl->setClamp(old_clamps, old_clampt);
- image_gl->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
else
@@ -1380,9 +1374,9 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask );
if( image_gl )
{
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
gl_rect_2d_simple_tex( width, height );
- image_gl->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
else
{
@@ -1396,7 +1390,8 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
getInfo()->mStaticImageFileName.empty() &&
color_specified )
{
- LLGLSNoTextureNoAlphaTest gls;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4fv( net_color.mV);
gl_rect_2d_simple( width, height );
}
@@ -1518,7 +1513,8 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
// Note: if the first param is a mulitply, multiply against the current buffer's alpha
if( !first_param || !first_param->getMultiplyBlend() )
{
- LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha_test;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Clear the alpha
gGL.flush();
@@ -1555,13 +1551,13 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
BOOL old_clamps = image_gl->getClampS();
BOOL old_clampt = image_gl->getClampT();
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
image_gl->setClamp(TRUE, TRUE);
gl_rect_2d_simple_tex( width, height );
image_gl->setClamp(old_clamps, old_clampt);
- image_gl->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
else
@@ -1581,9 +1577,9 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
( (image_gl->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
{
LLGLSNoAlphaTest gls_no_alpha_test;
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
gl_rect_2d_simple_tex( width, height );
- image_gl->unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
else
@@ -1597,7 +1593,8 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
// Note: we're still using gGL.blendFunc( GL_DST_ALPHA, GL_ZERO );
if( colorp->mV[VW] != 1.f )
{
- LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha_test;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4fv( colorp->mV );
gl_rect_2d_simple( width, height );
}
@@ -1700,7 +1697,7 @@ BOOL LLTexLayer::renderImageRaw( U8* in_data, S32 in_width, S32 in_height, S32 i
glGenTextures(1, &name );
stop_glerror();
- LLImageGL::bindExternalTexture( name, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, name);
stop_glerror();
glTexImage2D(
@@ -1712,12 +1709,11 @@ BOOL LLTexLayer::renderImageRaw( U8* in_data, S32 in_width, S32 in_height, S32 i
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
gl_rect_2d_simple_tex( width, height );
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glDeleteTextures(1, &name );
stop_glerror();
@@ -1736,7 +1732,7 @@ BOOL LLTexLayer::renderImageRaw( U8* in_data, S32 in_width, S32 in_height, S32 i
gl_rect_2d_simple_tex( width, height );
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
return TRUE;
@@ -2039,40 +2035,24 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
if( mCachedProcessedImageGL )
{
{
- if (gGLManager.mHasPalettedTextures && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_PALETTE))
+ // Create the GL texture, and then hang onto it for future use.
+ if( mNeedsCreateTexture )
{
- if( mNeedsCreateTexture )
- {
- mCachedProcessedImageGL->createGLTexture(0, mStaticImageRaw);
- mNeedsCreateTexture = FALSE;
-
- mCachedProcessedImageGL->bind();
- mCachedProcessedImageGL->setClamp(TRUE, TRUE);
- }
-
- LLGLSNoAlphaTest gls_no_alpha_test;
- mCachedProcessedImageGL->bind();
- gGradientPaletteList.setHardwarePalette( getInfo()->mDomain, effective_weight );
- gl_rect_2d_simple_tex( width, height );
- mCachedProcessedImageGL->unbindTexture(0, GL_TEXTURE_2D);
+ mCachedProcessedImageGL->createGLTexture(0, mStaticImageRaw);
+ mNeedsCreateTexture = FALSE;
+
+ gGL.getTexUnit(0)->bind(mCachedProcessedImageGL);
+ mCachedProcessedImageGL->setClamp(TRUE, TRUE);
}
- else
- {
- // Create the GL texture, and then hang onto it for future use.
- if( mNeedsCreateTexture )
- {
- mCachedProcessedImageGL->createGLTexture(0, mStaticImageRaw);
- mNeedsCreateTexture = FALSE;
-
- mCachedProcessedImageGL->bind();
- mCachedProcessedImageGL->setClamp(TRUE, TRUE);
- }
-
- LLGLSNoAlphaTest gls_no_alpha_test;
- mCachedProcessedImageGL->bind();
- gl_rect_2d_simple_tex( width, height );
- mCachedProcessedImageGL->unbindTexture(0, GL_TEXTURE_2D);
+
+ LLGLSNoAlphaTest gls_no_alpha_test;
+ gGL.getTexUnit(0)->bind(mCachedProcessedImageGL);
+ if (gGLManager.mHasPalettedTextures && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_PALETTE))
+ {
+ gGradientPaletteList.setHardwarePalette( getInfo()->mDomain, effective_weight );
}
+ gl_rect_2d_simple_tex( width, height );
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
stop_glerror();
}
}
@@ -2086,7 +2066,8 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
}
else
{
- LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha_test;
+ LLGLDisable no_alpha(GL_ALPHA_TEST);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f( 0.f, 0.f, 0.f, effective_weight );
gl_rect_2d_simple( width, height );
}
@@ -2519,7 +2500,7 @@ LLImageGL* LLTexStaticImageList::getImageGL(const std::string& file_name, BOOL i
}
image_gl->createGLTexture(0, image_raw);
- image_gl->bind();
+ gGL.getTexUnit(0)->bind(image_gl);
image_gl->setClamp(TRUE, TRUE);
mStaticImageListGL [ namekey ] = image_gl;
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index befb262a4c..992e392fc7 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -211,9 +211,8 @@ public:
virtual void postRender(BOOL success);
virtual BOOL render();
BOOL updateImmediate();
- virtual void bindTexture();
void bindBumpTexture( U32 stage );
- BOOL isInitialized() { return mInitialized; } // Initialized here means that we've done at least one render
+ bool isInitialized(void) const;
BOOL needsRender();
void requestUpdate();
void requestUpload();
@@ -236,7 +235,6 @@ private:
BOOL mUploadPending;
LLUUID mUploadID; // Identifys the current upload process (null if none). Used to avoid overlaps (eg, when the user rapidly makes two changes outside of Face Edit)
LLTexLayerSet* mTexLayerSet;
- BOOL mInitialized;
LLGLuint mBumpTexName; // zero if none
static S32 sGLByteCount;
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 4f9d9f7763..7bdea15ac4 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -483,9 +483,9 @@ void LLFloaterTexturePicker::draw()
LLRect local_rect = getLocalRect();
if (gFocusMgr.childHasKeyboardFocus(this) && mOwner->isInVisibleChain() && mContextConeOpacity > 0.001f)
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLEnable(GL_CULL_FACE);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.color4f(0.f, 0.f, 0.f, CONTEXT_CONE_IN_ALPHA * mContextConeOpacity);
gGL.vertex2i(owner_rect.mLeft, owner_rect.mTop);
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index d83a2ec944..14fa73d3b1 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -247,7 +247,7 @@ void LLTextureBar::draw()
LLFontGL::sMonospace->renderUTF8(fetch_state_desc[state].desc, 0, title_x2, getRect().getHeight(),
fetch_state_desc[state].color,
LLFontGL::LEFT, LLFontGL::TOP);
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Draw the progress bar.
S32 bar_width = 100;
@@ -415,7 +415,7 @@ void LLGLTexMemBar::draw()
F32 bar_scale = (F32)bar_width / (max_bound_mem * 1.5f);
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f(0.5f, 0.5f, 0.5f, 0.75f);
gl_rect_2d(left, top, right, bottom);
diff --git a/indra/newview/lltool.cpp b/indra/newview/lltool.cpp
index 11e90e9c84..2959e3a370 100644
--- a/indra/newview/lltool.cpp
+++ b/indra/newview/lltool.cpp
@@ -42,6 +42,7 @@
#include "lltoolfocus.h"
#include "llfocusmgr.h"
#include "llagent.h"
+#include "llviewerjoystick.h"
extern BOOL gDebugClicks;
@@ -160,6 +161,11 @@ BOOL LLTool::handleKey(KEY key, MASK mask)
LLTool* LLTool::getOverrideTool(MASK mask)
{
+ // NOTE: if in flycam mode, ALT-ZOOM camera should be disabled
+ if (LLViewerJoystick::getInstance()->getOverrideCamera())
+ {
+ return NULL;
+ }
if (mask & MASK_ALT)
{
return LLToolCamera::getInstance();
diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp
index 07a9650af2..6bdd4e7767 100644
--- a/indra/newview/lltoolbrush.cpp
+++ b/indra/newview/lltoolbrush.cpp
@@ -491,7 +491,7 @@ void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region
const LLVector3& pos_world)
{
glMatrixMode(GL_MODELVIEW);
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest mDepthTest(GL_TRUE);
glPushMatrix();
gGL.color4fv(OVERLAY_COLOR.mV);
@@ -503,7 +503,7 @@ void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region
S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");
F32 force = gSavedSettings.getF32("LandBrushForce"); // .1 to 100?
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
for(S32 di = -half_edge; di <= half_edge; di++)
{
if((i+di) < 0 || (i+di) >= (S32)land.mGridsPerEdge) continue;
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index d8d271bfda..8430f49e5e 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -240,6 +240,7 @@ BOOL LLVisualParamHint::render()
}
avatarp->setVisualParamWeight(mVisualParam, mLastParamWeight);
gGL.color4f(1,1,1,1);
+ mTexture->setInitialized(true);
return TRUE;
}
@@ -251,12 +252,12 @@ void LLVisualParamHint::draw()
{
if (!mIsVisible) return;
- bindTexture();
+ gGL.getTexUnit(0)->bind(getTexture());
gGL.color4f(1.f, 1.f, 1.f, 1.f);
LLGLSUIDefault gls_ui;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.texCoord2i(0, 1);
gGL.vertex2i(0, mHeight);
@@ -269,7 +270,7 @@ void LLVisualParamHint::draw()
}
gGL.end();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
//-----------------------------------------------------------------------------
diff --git a/indra/newview/lltoolselectrect.cpp b/indra/newview/lltoolselectrect.cpp
index 0d403bbb28..5dde83e2ec 100644
--- a/indra/newview/lltoolselectrect.cpp
+++ b/indra/newview/lltoolselectrect.cpp
@@ -175,7 +175,7 @@ void LLToolSelectRect::draw()
{
gGL.color4f(1.f, 1.f, 0.f, 1.f);
}
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gl_rect_2d(
llmin(mDragStartX, mDragEndX),
llmax(mDragStartY, mDragEndY),
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 85d9504740..39554dd510 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -445,7 +445,7 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color)
F32 y = 0.f;
LLColor4 ccol = LLColor4(1,1,1,(1.f-t)*0.25f);
- gGL.begin(LLVertexBuffer::TRIANGLE_FAN);
+ gGL.begin(LLRender::TRIANGLE_FAN);
gGL.color4fv(ccol.mV);
gGL.vertex3f(0.f, 0.f, center_z);
// make sure circle is complete
@@ -494,7 +494,8 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global);
- LLGLSTracker gls_tracker; // default - TEXTURE + CULL_FACE + LIGHTING + GL_BLEND + GL_ALPHA_TEST
+ LLGLSTracker gls_tracker; // default+ CULL_FACE + LIGHTING + GL_BLEND + GL_ALPHA_TEST
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDisable cull_face(GL_CULL_FACE);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
@@ -535,7 +536,7 @@ void LLTracker::renderBeacon(LLVector3d pos_global,
an *= 2.f;
an += 1.0f+dr;
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.color4fv(col_edge.mV);
gGL.vertex3f(-x*a, -y*a, z);
gGL.color4fv(col_edge_next.mV);
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 9e5b566e60..2f907fddbf 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -248,8 +248,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gViewerWindow->checkSettings();
- LLAppViewer::instance()->pingMainloopTimeout("Display:Pick");
- gViewerWindow->performPick();
+ {
+ LLFastTimer ftm(LLFastTimer::FTM_PICK);
+ LLAppViewer::instance()->pingMainloopTimeout("Display:Pick");
+ gViewerWindow->performPick();
+ }
LLAppViewer::instance()->pingMainloopTimeout("Display:CheckStates");
@@ -373,6 +376,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gAgent.setTeleportMessage(
LLAgent::sTeleportProgressMessages["arriving"]);
gImageList.mForceResetTextureStats = TRUE;
+ gAgent.resetView(TRUE, TRUE);
break;
case LLAgent::TELEPORT_ARRIVING:
@@ -690,7 +694,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
// glMatrixMode(GL_MODELVIEW);
// glPushMatrix();
// {
- // LLGLSNoTexture gls_no_texture;
+ // gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
// glLoadIdentity();
@@ -997,8 +1001,8 @@ void render_ui()
void renderCoordinateAxes()
{
- LLGLSNoTexture gls_no_texture;
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.begin(LLRender::LINES);
gGL.color3f(1.0f, 0.0f, 0.0f); // i direction = X-Axis = red
gGL.vertex3f(0.0f, 0.0f, 0.0f);
gGL.vertex3f(2.0f, 0.0f, 0.0f);
@@ -1048,10 +1052,10 @@ void renderCoordinateAxes()
void draw_axes()
{
LLGLSUIDefault gls_ui;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// A vertical white line at origin
LLVector3 v = gAgent.getPositionAgent();
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.color3f(1.0f, 1.0f, 1.0f);
gGL.vertex3f(0.0f, 0.0f, 0.0f);
gGL.vertex3f(0.0f, 0.0f, 40.0f);
@@ -1194,7 +1198,7 @@ void render_disconnected_background()
raw->expandToPowerOfTwo();
gDisconnectedImagep->createGLTexture(0, raw);
gStartImageGL = gDisconnectedImagep;
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
// Make sure the progress view always fills the entire window.
@@ -1213,10 +1217,10 @@ void render_disconnected_background()
const LLVector2& display_scale = gViewerWindow->getDisplayScale();
glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
- LLViewerImage::bindTexture(gDisconnectedImagep);
+ gGL.getTexUnit(0)->bind(gDisconnectedImagep);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
gl_rect_2d_simple_tex(width, height);
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
glPopMatrix();
}
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
index 71d98b73de..ce510994e4 100644
--- a/indra/newview/llviewerjoint.cpp
+++ b/indra/newview/llviewerjoint.cpp
@@ -149,7 +149,7 @@ void LLViewerJoint::setValid( BOOL valid, BOOL recursive )
// //----------------------------------------------------------------
// if (mComponents & SC_AXES)
// {
-// gGL.begin(LLVertexBuffer::LINES);
+// gGL.begin(LLRender::LINES);
// gGL.color3f( 1.0f, 0.0f, 0.0f );
// gGL.vertex3f( 0.0f, 0.0f, 0.0f );
// gGL.vertex3f( 0.1f, 0.0f, 0.0f );
@@ -171,7 +171,7 @@ void LLViewerJoint::setValid( BOOL valid, BOOL recursive )
// {
// gGL.color3f( 1.0f, 1.0f, 0.0f );
-// gGL.begin(LLVertexBuffer::TRIANGLES);
+// gGL.begin(LLRender::TRIANGLES);
// // joint top half
// glNormal3f(nc, nc, nc);
@@ -362,7 +362,7 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
// // render the bone
// gGL.color3f( 0.5f, 0.5f, 0.0f );
-// gGL.begin(LLVertexBuffer::TRIANGLES);
+// gGL.begin(LLRender::TRIANGLES);
// gGL.vertex3f( length, 0.0f, 0.0f);
// gGL.vertex3f( 0.0f, boneSize, 0.0f);
@@ -524,14 +524,69 @@ LLViewerJointCollisionVolume::LLViewerJointCollisionVolume(const std::string &na
void LLViewerJointCollisionVolume::renderCollision()
{
updateWorldMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
+
+ gGL.pushMatrix();
glMultMatrixf( &mXform.getWorldMatrix().mMatrix[0][0] );
- glColor3f( 0.f, 0.f, 1.f );
- gSphere.render();
+ gGL.color3f( 0.f, 0.f, 1.f );
+
+ gGL.begin(LLRender::LINES);
+
+ LLVector3 v[] =
+ {
+ LLVector3(1,0,0),
+ LLVector3(-1,0,0),
+ LLVector3(0,1,0),
+ LLVector3(0,-1,0),
+
+ LLVector3(0,0,-1),
+ LLVector3(0,0,1),
+ };
+
+ //sides
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[2].mV);
+
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[3].mV);
+
+ gGL.vertex3fv(v[1].mV);
+ gGL.vertex3fv(v[2].mV);
+
+ gGL.vertex3fv(v[1].mV);
+ gGL.vertex3fv(v[3].mV);
+
+
+ //top
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[4].mV);
+
+ gGL.vertex3fv(v[1].mV);
+ gGL.vertex3fv(v[4].mV);
+
+ gGL.vertex3fv(v[2].mV);
+ gGL.vertex3fv(v[4].mV);
+
+ gGL.vertex3fv(v[3].mV);
+ gGL.vertex3fv(v[4].mV);
+
+
+ //bottom
+ gGL.vertex3fv(v[0].mV);
+ gGL.vertex3fv(v[5].mV);
+
+ gGL.vertex3fv(v[1].mV);
+ gGL.vertex3fv(v[5].mV);
+
+ gGL.vertex3fv(v[2].mV);
+ gGL.vertex3fv(v[5].mV);
+
+ gGL.vertex3fv(v[3].mV);
+ gGL.vertex3fv(v[5].mV);
+
+ gGL.end();
- glPopMatrix();
+ gGL.popMatrix();
}
LLVector3 LLViewerJointCollisionVolume::getVolumePos(LLVector3 &offset)
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
index d66d0da5b1..225d5e912f 100644
--- a/indra/newview/llviewerjointattachment.cpp
+++ b/indra/newview/llviewerjointattachment.cpp
@@ -91,7 +91,7 @@ U32 LLViewerJointAttachment::drawShape( F32 pixelArea, BOOL first_pass )
LLGLDisable cull_face(GL_CULL_FACE);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
{
gGL.vertex3f(-0.1f, 0.1f, 0.f);
gGL.vertex3f(-0.1f, -0.1f, 0.f);
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
index f975e56b95..0f207f66c0 100644
--- a/indra/newview/llviewerjointmesh.cpp
+++ b/indra/newview/llviewerjointmesh.cpp
@@ -537,7 +537,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
if (mTestImageName)
{
- LLImageGL::bindExternalTexture( mTestImageName, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTestImageName);
if (mIsTransparent)
{
@@ -553,12 +553,12 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
{
if( mLayerSet->hasComposite() )
{
- mLayerSet->getComposite()->bindTexture();
+ gGL.getTexUnit(0)->bind(mLayerSet->getComposite()->getTexture());
}
else
{
llwarns << "Layerset without composite" << llendl;
- gImageList.getImage(IMG_DEFAULT)->bind();
+ gGL.getTexUnit(0)->bind(gImageList.getImage(IMG_DEFAULT));
}
}
else
@@ -566,13 +566,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
{
if (!mTexture->getClampS() || !mTexture->getClampT())
{
- mTexture->bind();
+ gGL.getTexUnit(0)->bind(mTexture.get());
mTexture->overrideClamp (TRUE, TRUE);
}
}
else
{
- gImageList.getImage(IMG_DEFAULT_AVATAR)->bind();
+ gGL.getTexUnit(0)->bind(gImageList.getImage(IMG_DEFAULT_AVATAR));
}
if (gRenderForSelect)
@@ -584,7 +584,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
}
else
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
@@ -605,14 +605,14 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
}
}
- mFace->mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
+ mFace->mVertexBuffer->drawRange(LLRender::TRIANGLES, start, end, count, offset);
}
else
{
glPushMatrix();
LLMatrix4 jointToWorld = getWorldMatrix();
glMultMatrixf((GLfloat*)jointToWorld.mMatrix);
- mFace->mVertexBuffer->drawRange(LLVertexBuffer::TRIANGLES, start, end, count, offset);
+ mFace->mVertexBuffer->drawRange(LLRender::TRIANGLES, start, end, count, offset);
glPopMatrix();
}
gPipeline.addTrianglesDrawn(count/3);
@@ -626,7 +626,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
if (mTexture.notNull())
{
- mTexture->bind();
+ gGL.getTexUnit(0)->bind(mTexture.get());
mTexture->restoreClamp();
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7f9ba3206c..4bf5a2d4ea 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -85,6 +85,7 @@
#include "llfloateranimpreview.h"
#include "llfloateravatarinfo.h"
#include "llfloateravatartextures.h"
+#include "llfloaterbeacons.h"
#include "llfloaterbuildoptions.h"
#include "llfloaterbump.h"
#include "llfloaterbuy.h"
@@ -788,12 +789,6 @@ void init_client_menu(LLMenuGL* menu)
&menu_check_control,
(void*)"QuietSnapshotsToDisk"));
- menu->append(new LLMenuItemCheckGL( "Compress Snapshots to Disk",
- &menu_toggle_control,
- NULL,
- &menu_check_control,
- (void*)"CompressSnapshotsToDisk"));
-
menu->append(new LLMenuItemCheckGL("Show Mouselook Crosshairs",
&menu_toggle_control,
NULL,
@@ -941,6 +936,7 @@ void init_client_menu(LLMenuGL* menu)
sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror));
sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access));
sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop));
+ sub->append(new LLMenuItemCallGL("Force Disconnect Viewer", &handle_disconnect_viewer));
// *NOTE:Mani this isn't handled yet... sub->append(new LLMenuItemCallGL("Force Software Exception", &force_error_unhandled_exception));
sub->createJumpKeys();
menu->appendMenu(sub);
@@ -1209,9 +1205,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
sub_menu->append(new LLMenuItemCheckGL("Face Area (sqrt(A))",&LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_FACE_AREA));
- sub_menu->append(new LLMenuItemCheckGL("Pick Render", &LLPipeline::toggleRenderDebug, NULL,
- &LLPipeline::toggleRenderDebugControl,
- (void*)LLPipeline::RENDER_DEBUG_PICKING));
sub_menu->append(new LLMenuItemCheckGL("Lights", &LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_LIGHTS));
@@ -1230,9 +1223,7 @@ void init_debug_rendering_menu(LLMenuGL* menu)
sub_menu->append(new LLMenuItemCheckGL("Sculpt", &LLPipeline::toggleRenderDebug, NULL,
&LLPipeline::toggleRenderDebugControl,
(void*)LLPipeline::RENDER_DEBUG_SCULPTED));
-
- sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect));
-
+
sub_menu->append(new LLMenuItemCallGL("Vectorize Perf Test", &run_vectorize_perf_test));
sub_menu = new LLMenuGL("Render Tests");
@@ -3201,26 +3192,7 @@ void reset_view_final( BOOL proceed, void* )
return;
}
- gAgent.changeCameraToDefault();
-
- if (LLViewerJoystick::getInstance()->getOverrideCamera())
- {
- handle_toggle_flycam();
- }
-
- // reset avatar mode from eventual residual motion
- if (LLToolMgr::getInstance()->inBuildMode())
- {
- LLViewerJoystick::getInstance()->moveAvatar(true);
- }
-
- gAgent.resetView(!gFloaterTools->getVisible());
- gFloaterTools->close();
-
- gViewerWindow->showCursor();
-
- // Switch back to basic toolset
- LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);
+ gAgent.resetView(TRUE, TRUE);
}
class LLViewLookAtLastChatter : public view_listener_t
@@ -5305,6 +5277,10 @@ class LLShowFloater : public view_listener_t
{
LLFloaterActiveSpeakers::toggleInstance(LLSD());
}
+ else if (floater_name == "beacons")
+ {
+ LLFloaterBeacons::toggleInstance(LLSD());
+ }
return true;
}
};
@@ -5352,6 +5328,10 @@ class LLFloaterVisible : public view_listener_t
{
new_value = LLFloaterActiveSpeakers::instanceVisible(LLSD());
}
+ else if (floater_name == "beacons")
+ {
+ new_value = LLFloaterBeacons::instanceVisible(LLSD());
+ }
gMenuHolder->findControl(control_name)->setValue(new_value);
return true;
}
@@ -7112,148 +7092,6 @@ class LLViewCheckHighlightTransparent : public view_listener_t
}
};
-class LLViewBeaconWidth : public view_listener_t
-{
- bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
- {
- std::string width = userdata.asString();
- if(width == "1")
- {
- gSavedSettings.setS32("DebugBeaconLineWidth", 1);
- }
- else if(width == "4")
- {
- gSavedSettings.setS32("DebugBeaconLineWidth", 4);
- }
- else if(width == "16")
- {
- gSavedSettings.setS32("DebugBeaconLineWidth", 16);
- }
- else if(width == "32")
- {
- gSavedSettings.setS32("DebugBeaconLineWidth", 32);
- }
-
- return true;
- }
-};
-
-
-class LLViewToggleBeacon : public view_listener_t
-{
- bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
- {
- std::string beacon = userdata.asString();
- if (beacon == "scriptsbeacon")
- {
- LLPipeline::toggleRenderScriptedBeacons(NULL);
- gSavedSettings.setBOOL( "scriptsbeacon", LLPipeline::getRenderScriptedBeacons(NULL) );
- // toggle the other one off if it's on
- if (LLPipeline::getRenderScriptedBeacons(NULL) && LLPipeline::getRenderScriptedTouchBeacons(NULL))
- {
- LLPipeline::toggleRenderScriptedTouchBeacons(NULL);
- gSavedSettings.setBOOL( "scripttouchbeacon", LLPipeline::getRenderScriptedTouchBeacons(NULL) );
- }
- }
- else if (beacon == "physicalbeacon")
- {
- LLPipeline::toggleRenderPhysicalBeacons(NULL);
- gSavedSettings.setBOOL( "physicalbeacon", LLPipeline::getRenderPhysicalBeacons(NULL) );
- }
- else if (beacon == "soundsbeacon")
- {
- LLPipeline::toggleRenderSoundBeacons(NULL);
- gSavedSettings.setBOOL( "soundsbeacon", LLPipeline::getRenderSoundBeacons(NULL) );
- }
- else if (beacon == "particlesbeacon")
- {
- LLPipeline::toggleRenderParticleBeacons(NULL);
- gSavedSettings.setBOOL( "particlesbeacon", LLPipeline::getRenderParticleBeacons(NULL) );
- }
- else if (beacon == "scripttouchbeacon")
- {
- LLPipeline::toggleRenderScriptedTouchBeacons(NULL);
- gSavedSettings.setBOOL( "scripttouchbeacon", LLPipeline::getRenderScriptedTouchBeacons(NULL) );
- // toggle the other one off if it's on
- if (LLPipeline::getRenderScriptedBeacons(NULL) && LLPipeline::getRenderScriptedTouchBeacons(NULL))
- {
- LLPipeline::toggleRenderScriptedBeacons(NULL);
- gSavedSettings.setBOOL( "scriptsbeacon", LLPipeline::getRenderScriptedBeacons(NULL) );
- }
- }
- else if (beacon == "renderbeacons")
- {
- LLPipeline::toggleRenderBeacons(NULL);
- gSavedSettings.setBOOL( "renderbeacons", LLPipeline::getRenderBeacons(NULL) );
- // toggle the other one on if it's not
- if (!LLPipeline::getRenderBeacons(NULL) && !LLPipeline::getRenderHighlights(NULL))
- {
- LLPipeline::toggleRenderHighlights(NULL);
- gSavedSettings.setBOOL( "renderhighlights", LLPipeline::getRenderHighlights(NULL) );
- }
- }
- else if (beacon == "renderhighlights")
- {
- LLPipeline::toggleRenderHighlights(NULL);
- gSavedSettings.setBOOL( "renderhighlights", LLPipeline::getRenderHighlights(NULL) );
- // toggle the other one on if it's not
- if (!LLPipeline::getRenderBeacons(NULL) && !LLPipeline::getRenderHighlights(NULL))
- {
- LLPipeline::toggleRenderBeacons(NULL);
- gSavedSettings.setBOOL( "renderbeacons", LLPipeline::getRenderBeacons(NULL) );
- }
- }
-
- return true;
- }
-};
-
-class LLViewCheckBeaconEnabled : public view_listener_t
-{
- bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
- {
- std::string beacon = userdata["data"].asString();
- bool new_value = false;
- if (beacon == "scriptsbeacon")
- {
- new_value = gSavedSettings.getBOOL( "scriptsbeacon");
- LLPipeline::setRenderScriptedBeacons(new_value);
- }
- else if (beacon == "physicalbeacon")
- {
- new_value = gSavedSettings.getBOOL( "physicalbeacon");
- LLPipeline::setRenderPhysicalBeacons(new_value);
- }
- else if (beacon == "soundsbeacon")
- {
- new_value = gSavedSettings.getBOOL( "soundsbeacon");
- LLPipeline::setRenderSoundBeacons(new_value);
- }
- else if (beacon == "particlesbeacon")
- {
- new_value = gSavedSettings.getBOOL( "particlesbeacon");
- LLPipeline::setRenderParticleBeacons(new_value);
- }
- else if (beacon == "scripttouchbeacon")
- {
- new_value = gSavedSettings.getBOOL( "scripttouchbeacon");
- LLPipeline::setRenderScriptedTouchBeacons(new_value);
- }
- else if (beacon == "renderbeacons")
- {
- new_value = gSavedSettings.getBOOL( "renderbeacons");
- LLPipeline::setRenderBeacons(new_value);
- }
- else if (beacon == "renderhighlights")
- {
- new_value = gSavedSettings.getBOOL( "renderhighlights");
- LLPipeline::setRenderHighlights(new_value);
- }
- gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
- return true;
- }
-};
-
class LLViewToggleRenderType : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -7600,8 +7438,6 @@ void initialize_menus()
addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter");
addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips");
addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent");
- addMenu(new LLViewToggleBeacon(), "View.ToggleBeacon");
- addMenu(new LLViewBeaconWidth(), "View.BeaconWidth");
addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType");
addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments");
addMenu(new LLViewZoomOut(), "View.ZoomOut");
@@ -7617,7 +7453,6 @@ void initialize_menus()
addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips");
addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent");
- addMenu(new LLViewCheckBeaconEnabled(), "View.CheckBeaconEnabled");
addMenu(new LLViewCheckRenderType(), "View.CheckRenderType");
addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 8b81a2fe5a..426edb37ca 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -356,7 +356,7 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
// size_t nread = fread(buffer, 1, length, fXML);
// if (nread < (size_t) length)
// {
-// llwarns << "Short read" << llendl;
+// LL_WARNS("Messaging") << "Short read" << LL_ENDL;
// }
// buffer[nread] = '\0';
// fclose(fXML);
@@ -4726,7 +4726,7 @@ void process_teleport_local(LLMessageSystem *msg,void**)
gAgent.slamLookAt(look_at);
// likewise make sure the camera is behind the avatar
- gAgent.resetView(TRUE);
+ gAgent.resetView(TRUE, TRUE);
// send camera update to new region
gAgent.updateCamera();
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index cc031b4368..91c6999893 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -150,6 +150,8 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
res = new LLVOGround(id, pcode, regionp); break;
case LL_VO_PART_GROUP:
res = new LLVOPartGroup(id, pcode, regionp); break;
+ case LL_VO_HUD_PART_GROUP:
+ res = new LLVOHUDPartGroup(id, pcode, regionp); break;
case LL_VO_WL_SKY:
res = new LLVOWLSky(id, pcode, regionp); break;
default:
@@ -159,7 +161,7 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
return res;
}
-LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
+LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp, BOOL is_global)
: LLPrimitive(),
mChildList(),
mID(id),
@@ -201,7 +203,10 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mMedia(NULL),
mClickAction(0)
{
- llassert(mRegionp);
+ if(!is_global)
+ {
+ llassert(mRegionp);
+ }
LLPrimitive::init_primitive(pcode);
@@ -209,7 +214,11 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mLastInterpUpdateSecs = LLFrameTimer::getElapsedSeconds();
mPositionRegion = LLVector3(0.f, 0.f, 0.f);
- mPositionAgent = mRegionp->getOriginAgent();
+
+ if(!is_global)
+ {
+ mPositionAgent = mRegionp->getOriginAgent();
+ }
LLViewerObject::sNumObjects++;
}
@@ -3049,28 +3058,38 @@ LLNameValue *LLViewerObject::getNVPair(const std::string& name) const
void LLViewerObject::updatePositionCaches() const
{
- if (!isRoot())
+ if(mRegionp)
{
- mPositionRegion = ((LLViewerObject *)getParent())->getPositionRegion() + getPosition() * getParent()->getRotation();
- mPositionAgent = mRegionp->getPosAgentFromRegion(mPositionRegion);
- }
- else
- {
- mPositionRegion = getPosition();
- mPositionAgent = mRegionp->getPosAgentFromRegion(mPositionRegion);
+ if (!isRoot())
+ {
+ mPositionRegion = ((LLViewerObject *)getParent())->getPositionRegion() + getPosition() * getParent()->getRotation();
+ mPositionAgent = mRegionp->getPosAgentFromRegion(mPositionRegion);
+ }
+ else
+ {
+ mPositionRegion = getPosition();
+ mPositionAgent = mRegionp->getPosAgentFromRegion(mPositionRegion);
+ }
}
}
const LLVector3d LLViewerObject::getPositionGlobal() const
-{
- LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
-
- if (isAttachment())
+{
+ if(mRegionp)
{
- position_global = gAgent.getPosGlobalFromAgent(getRenderPosition());
- }
+ LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
- return position_global;
+ if (isAttachment())
+ {
+ position_global = gAgent.getPosGlobalFromAgent(getRenderPosition());
+ }
+ return position_global;
+ }
+ else
+ {
+ LLVector3d position_global(getPosition());
+ return position_global;
+ }
}
const LLVector3 &LLViewerObject::getPositionAgent() const
@@ -3392,6 +3411,7 @@ LLViewerObject* LLViewerObject::getRootEdit() const
BOOL LLViewerObject::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
S32 face,
+ BOOL pick_transparent,
S32* face_hit,
LLVector3* intersection,
LLVector2* tex_coord,
@@ -3401,6 +3421,20 @@ BOOL LLViewerObject::lineSegmentIntersect(const LLVector3& start, const LLVector
return false;
}
+BOOL LLViewerObject::lineSegmentBoundingBox(const LLVector3& start, const LLVector3& end)
+{
+ if (mDrawable.isNull() || mDrawable->isDead())
+ {
+ return FALSE;
+ }
+
+ const LLVector3* ext = mDrawable->getSpatialExtents();
+
+ LLVector3 center = (ext[1]+ext[0])*0.5f;
+ LLVector3 size = (ext[1]-ext[0])*0.5f;
+
+ return LLLineSegmentBoxIntersect(start, end, center, size);
+}
U8 LLViewerObject::getMediaType() const
{
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index b6ff60ef9d..e172ae1e8a 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -132,7 +132,7 @@ public:
typedef std::list<LLPointer<LLViewerObject> > child_list_t;
typedef const child_list_t const_child_list_t;
- LLViewerObject(const LLUUID &id, const LLPCode type, LLViewerRegion *regionp);
+ LLViewerObject(const LLUUID &id, const LLPCode type, LLViewerRegion *regionp, BOOL is_global = FALSE);
MEM_TYPE_NEW(LLMemType::MTYPE_OBJECT);
virtual void markDead(); // Mark this object as dead, and clean up its references
@@ -248,6 +248,7 @@ public:
//returns TRUE if intersection detected and returns information about intersection
virtual BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
S32* face_hit = NULL, // which face was hit
LLVector3* intersection = NULL, // return the intersection point
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
@@ -255,6 +256,8 @@ public:
LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
);
+ virtual BOOL lineSegmentBoundingBox(const LLVector3& start, const LLVector3& end);
+
virtual const LLVector3d getPositionGlobal() const;
virtual const LLVector3 &getPositionRegion() const;
virtual const LLVector3 getPositionEdit() const;
@@ -507,6 +510,7 @@ public:
LL_VO_PART_GROUP = LL_PCODE_APP | 0x90,
LL_VO_TRIANGLE_TORUS = LL_PCODE_APP | 0xa0,
LL_VO_WL_SKY = LL_PCODE_APP | 0xb0, // should this be moved to 0x40?
+ LL_VO_HUD_PART_GROUP = LL_PCODE_APP | 0xc0,
} EVOType;
LLUUID mID;
@@ -705,8 +709,8 @@ public:
class LLStaticViewerObject : public LLViewerObject
{
public:
- LLStaticViewerObject(const LLUUID& id, const LLPCode type, LLViewerRegion* regionp)
- : LLViewerObject(id,type,regionp)
+ LLStaticViewerObject(const LLUUID& id, const LLPCode type, LLViewerRegion* regionp, BOOL is_global = FALSE)
+ : LLViewerObject(id,type,regionp, is_global)
{ }
virtual void updateDrawable(BOOL force_damped);
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index a221086367..ab06a0f4fb 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -163,15 +163,20 @@ U64 LLViewerObjectList::getIndex(const U32 local_id,
BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object)
{
- U32 local_id = object.mLocalID;
- LLHost region_host = object.getRegion()->getHost();
- U32 ip = region_host.getAddress();
- U32 port = region_host.getPort();
- U64 ipport = (((U64)ip) << 32) | (U64)port;
- U32 index = sIPAndPortToIndex[ipport];
+ if(object.getRegion())
+ {
+ U32 local_id = object.mLocalID;
+ LLHost region_host = object.getRegion()->getHost();
+ U32 ip = region_host.getAddress();
+ U32 port = region_host.getPort();
+ U64 ipport = (((U64)ip) << 32) | (U64)port;
+ U32 index = sIPAndPortToIndex[ipport];
+
+ U64 indexid = (((U64)index) << 32) | (U64)local_id;
+ return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE;
+ }
- U64 indexid = (((U64)index) << 32) | (U64)local_id;
- return sIndexAndLocalIDToUUID.erase(indexid) > 0 ? TRUE : FALSE;
+ return FALSE ;
}
void LLViewerObjectList::setUUIDAndLocal(const LLUUID &id,
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 272080678f..fe588534e5 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -344,7 +344,7 @@ void LLViewerParcelMedia::processParcelMediaUpdate( LLMessageSystem *msg, void *
media_url = media_url_buffer;
msg->getU8("DataBlock", "MediaAutoScale", media_auto_scale);
- if (msg->getNumberOfBlocks("DataBlockExtended")) // do we have the extended data?
+ if (msg->has("DataBlockExtended")) // do we have the extended data?
{
char media_type_buffer[257];
msg->getString("DataBlockExtended", "MediaType", 255, media_type_buffer);
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 2b056a2583..ec7c2b1ec2 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -72,7 +72,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS);
mTexture->createGLTexture(0, mImageRaw);
gGL.getTexUnit(0)->activate();
- mTexture->bind(0);
+ gGL.getTexUnit(0)->bind(mTexture);
mTexture->setClamp(TRUE, TRUE);
mTexture->setMipFilterNearest(TRUE);
@@ -748,7 +748,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
LLSurface& land = mRegion->getLand();
LLGLSUIDefault gls_ui; // called from pipeline
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest mDepthTest(GL_TRUE);
// Find camera height off the ground (not from zero)
@@ -826,7 +826,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
continue;
}
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
for (j = 0; j < vertex_per_edge; j++)
{
@@ -848,7 +848,7 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
colorp = mColorArray + BYTES_PER_COLOR * i;
vertexp = mVertexArray + FLOATS_PER_VERTEX * i;
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
for (j = 0; j < vertex_per_edge; j++)
{
diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
index 779ef0a3c6..5ac97930d3 100644
--- a/indra/newview/llviewerpartsim.cpp
+++ b/indra/newview/llviewerpartsim.cpp
@@ -116,7 +116,8 @@ void LLViewerPart::init(LLPointer<LLViewerPartSource> sourcep, LLViewerImage *im
//
-LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 box_side)
+LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 box_side, bool hud)
+ : mHud(hud)
{
LLMemType mt(LLMemType::MTYPE_PARTICLES);
mVOPartGroupp = NULL;
@@ -133,7 +134,14 @@ LLViewerPartGroup::LLViewerPartGroup(const LLVector3 &center_agent, const F32 bo
mCenterAgent = center_agent;
mBoxRadius = F_SQRT3*box_side*0.5f;
+ if (mHud)
+ {
+ mVOPartGroupp = (LLVOPartGroup *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_HUD_PART_GROUP, getRegion());
+ }
+ else
+ {
mVOPartGroupp = (LLVOPartGroup *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_PART_GROUP, getRegion());
+ }
mVOPartGroupp->setViewerPartGroup(this);
mVOPartGroupp->setPositionAgent(getCenterAgent());
F32 scale = box_side * 0.5f;
@@ -223,6 +231,12 @@ BOOL LLViewerPartGroup::posInGroup(const LLVector3 &pos, const F32 desired_size)
BOOL LLViewerPartGroup::addPart(LLViewerPart* part, F32 desired_size)
{
LLMemType mt(LLMemType::MTYPE_PARTICLES);
+
+ if (part->mFlags & LLPartData::LL_PART_HUD && !mHud)
+ {
+ return FALSE;
+ }
+
BOOL uniform_part = part->mScale.mV[0] == part->mScale.mV[1] &&
!(part->mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK);
@@ -530,7 +544,7 @@ LLViewerPartGroup *LLViewerPartSim::put(LLViewerPart* part)
if(!return_group)
{
llassert_always(part->mPosAgent.isFinite());
- LLViewerPartGroup *groupp = createViewerPartGroup(part->mPosAgent, desired_size);
+ LLViewerPartGroup *groupp = createViewerPartGroup(part->mPosAgent, desired_size, part->mFlags & LLPartData::LL_PART_HUD);
groupp->mUniformParticles = (part->mScale.mV[0] == part->mScale.mV[1] &&
!(part->mFlags & LLPartData::LL_PART_FOLLOW_VELOCITY_MASK));
if (!groupp->addPart(part))
@@ -555,12 +569,12 @@ LLViewerPartGroup *LLViewerPartSim::put(LLViewerPart* part)
return return_group ;
}
-LLViewerPartGroup *LLViewerPartSim::createViewerPartGroup(const LLVector3 &pos_agent, const F32 desired_size)
+LLViewerPartGroup *LLViewerPartSim::createViewerPartGroup(const LLVector3 &pos_agent, const F32 desired_size, bool hud)
{
LLMemType mt(LLMemType::MTYPE_PARTICLES);
//find a box that has a center position divisible by PART_SIM_BOX_SIDE that encompasses
//pos_agent
- LLViewerPartGroup *groupp = new LLViewerPartGroup(pos_agent, desired_size);
+ LLViewerPartGroup *groupp = new LLViewerPartGroup(pos_agent, desired_size, hud);
mViewerPartGroups.push_back(groupp);
return groupp;
}
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
index de763d3e53..ceed4e28b0 100644
--- a/indra/newview/llviewerpartsim.h
+++ b/indra/newview/llviewerpartsim.h
@@ -87,7 +87,8 @@ class LLViewerPartGroup
{
public:
LLViewerPartGroup(const LLVector3 &center,
- const F32 box_radius);
+ const F32 box_radius,
+ bool hud);
virtual ~LLViewerPartGroup();
void cleanup();
@@ -115,6 +116,7 @@ public:
U32 mID;
F32 mSkippedTime;
+ bool mHud;
protected:
LLVector3 mCenterAgent;
@@ -178,7 +180,7 @@ public:
U32 mID;
protected:
- LLViewerPartGroup *createViewerPartGroup(const LLVector3 &pos_agent, const F32 desired_size);
+ LLViewerPartGroup *createViewerPartGroup(const LLVector3 &pos_agent, const F32 desired_size, bool hud);
LLViewerPartGroup *put(LLViewerPart* part);
group_list_t mViewerPartGroups;
diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
index 9bdebbbd38..635374211c 100644
--- a/indra/newview/llviewerpartsource.cpp
+++ b/indra/newview/llviewerpartsource.cpp
@@ -33,6 +33,7 @@
#include "llviewerpartsource.h"
#include "llviewercontrol.h"
+#include "llrender.h"
#include "llagent.h"
#include "lldrawable.h"
@@ -69,7 +70,7 @@ void LLViewerPartSource::updatePart(LLViewerPart &part, const F32 dt)
{
}
-void LLViewerPartSource::update(const F32 dt)
+void LLViewerPartSource::update(const F32 dt)
{
llerrs << "Creating default part source!" << llendl;
}
@@ -99,7 +100,7 @@ LLViewerPartSourceScript::LLViewerPartSourceScript(LLViewerObject *source_objp)
mSourceObjectp = source_objp;
mPosAgent = mSourceObjectp->getPositionAgent();
mImagep = gImageList.getImageFromFile("pixiesmall.j2c");
- mImagep->bind();
+ gGL.getTexUnit(0)->bind(mImagep.get());
mImagep->setClamp(TRUE, TRUE);
}
@@ -282,6 +283,10 @@ void LLViewerPartSourceScript::update(const F32 dt)
part->init(this, mImagep, NULL);
part->mFlags = mPartSysData.mPartData.mFlags;
+ if (!mSourceObjectp.isNull() && mSourceObjectp->isHUDAttachment())
+ {
+ part->mFlags |= LLPartData::LL_PART_HUD;
+ }
part->mMaxAge = mPartSysData.mPartData.mMaxAge;
part->mStartColor = mPartSysData.mPartData.mStartColor;
part->mEndColor = mPartSysData.mPartData.mEndColor;
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index fe6ce6faa0..8eee8c0f1b 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -215,6 +215,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mObjectPartition.push_back(new LLGrassPartition()); //PARTITION_GRASS
mObjectPartition.push_back(new LLVolumePartition()); //PARTITION_VOLUME
mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
+ mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE
mObjectPartition.push_back(NULL); //PARTITION_NONE
}
@@ -1028,12 +1029,18 @@ void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg)
msg->getS16Fast(_PREHASH_Index, _PREHASH_You, agent_index);
msg->getS16Fast(_PREHASH_Index, _PREHASH_Prey, target_index);
+ BOOL has_agent_data = msg->has(_PREHASH_AgentData);
S32 count = msg->getNumberOfBlocksFast(_PREHASH_Location);
for(S32 i = 0; i < count; i++)
{
msg->getU8Fast(_PREHASH_Location, _PREHASH_X, x_pos, i);
msg->getU8Fast(_PREHASH_Location, _PREHASH_Y, y_pos, i);
msg->getU8Fast(_PREHASH_Location, _PREHASH_Z, z_pos, i);
+ LLUUID agent_id = LLUUID::null;
+ if(has_agent_data)
+ {
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id, i);
+ }
//llinfos << " object X: " << (S32)x_pos << " Y: " << (S32)y_pos
// << " Z: " << (S32)(z_pos * 4)
@@ -1059,6 +1066,10 @@ void LLViewerRegion::updateCoarseLocations(LLMessageSystem* msg)
pos <<= 8;
pos |= z_pos;
mMapAvatars.put(pos);
+ if(has_agent_data)
+ {
+ mMapAvatarIDs.put(agent_id);
+ }
}
}
}
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index ffccc296f1..cffb878b90 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -81,6 +81,7 @@ public:
PARTITION_GRASS,
PARTITION_VOLUME,
PARTITION_BRIDGE,
+ PARTITION_HUD_PARTICLE,
PARTITION_NONE,
NUM_PARTITIONS
} eObjectPartitions;
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index f69f4fbb62..39e0f63f5f 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -108,7 +108,7 @@ GLint gAvatarMatrixParam;
LLViewerShaderMgr::LLViewerShaderMgr() :
mVertexShaderLevel(SHADER_COUNT, 0)
{
-/// Make sure WL Sky is the first program
+ /// Make sure WL Sky is the first program
mShaderList.push_back(&gWLSkyProgram);
mShaderList.push_back(&gWLCloudProgram);
mShaderList.push_back(&gAvatarProgram);
@@ -139,28 +139,28 @@ LLViewerShaderMgr * LLViewerShaderMgr::instance()
if(NULL == sInstance)
{
sInstance = new LLViewerShaderMgr();
- }
-
- return static_cast<LLViewerShaderMgr*>(sInstance);
}
+ return static_cast<LLViewerShaderMgr*>(sInstance);
+}
+
void LLViewerShaderMgr::initAttribsAndUniforms(void)
- {
+{
if (mReservedAttribs.empty())
- {
+ {
mReservedAttribs.push_back("materialColor");
mReservedAttribs.push_back("specularColor");
mReservedAttribs.push_back("binormal");
-
+
mAvatarAttribs.reserve(5);
mAvatarAttribs.push_back("weight");
mAvatarAttribs.push_back("clothing");
mAvatarAttribs.push_back("gWindDir");
mAvatarAttribs.push_back("gSinWaveParams");
mAvatarAttribs.push_back("gGravity");
-
+
mAvatarUniforms.push_back("matrixPalette");
-
+
mReservedUniforms.reserve(24);
mReservedUniforms.push_back("diffuseMap");
mReservedUniforms.push_back("specularMap");
@@ -186,16 +186,16 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void)
mReservedUniforms.push_back("cloud_scale");
mReservedUniforms.push_back("gamma");
mReservedUniforms.push_back("scene_light_strength");
-
+
mWLUniforms.push_back("camPosLocal");
-
+
mTerrainUniforms.reserve(5);
mTerrainUniforms.push_back("detail_0");
mTerrainUniforms.push_back("detail_1");
mTerrainUniforms.push_back("detail_2");
mTerrainUniforms.push_back("detail_3");
mTerrainUniforms.push_back("alpha_ramp");
-
+
mGlowUniforms.push_back("glowDelta");
mGlowUniforms.push_back("glowStrength");
@@ -204,7 +204,7 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void)
mGlowExtractUniforms.push_back("lumWeights");
mGlowExtractUniforms.push_back("warmthWeights");
mGlowExtractUniforms.push_back("warmthAmount");
-
+
mShinyUniforms.push_back("origin");
mWaterUniforms.reserve(12);
@@ -222,9 +222,9 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void)
mWaterUniforms.push_back("kd");
mWaterUniforms.push_back("refScale");
mWaterUniforms.push_back("waterHeight");
- }
- }
-
+ }
+}
+
//============================================================================
// Set Levels
@@ -1087,12 +1087,12 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()
}
std::string LLViewerShaderMgr::getShaderDirPrefix(void)
- {
+{
return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
- }
+}
void LLViewerShaderMgr::updateShaderUniforms(LLGLSLShader * shader)
- {
+{
LLWLParamManager::instance()->updateShaderUniforms(shader);
LLWaterParamManager::instance()->updateShaderUniforms(shader);
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0bb2cb8194..2aff4281ad 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -168,6 +168,7 @@
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
+#include "llviewershadermgr.h"
#include "llviewerstats.h"
#include "llvoavatar.h"
#include "llvovolume.h"
@@ -218,6 +219,7 @@ LLVector3 gDebugRaycastIntersection;
LLVector2 gDebugRaycastTexCoord;
LLVector3 gDebugRaycastNormal;
LLVector3 gDebugRaycastBinormal;
+S32 gDebugRaycastFaceHit;
// HUD display lines in lower right
BOOL gDisplayWindInfo = FALSE;
@@ -1102,6 +1104,7 @@ void LLViewerWindow::handleQuit(LLWindow *window)
void LLViewerWindow::handleResize(LLWindow *window, S32 width, S32 height)
{
reshape(width, height);
+ mResDirty = true;
}
// The top-level window has gained focus (e.g. via ALT-TAB)
@@ -1258,7 +1261,8 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
BOOL LLViewerWindow::handleActivateApp(LLWindow *window, BOOL activating)
{
- if (!activating) gAgent.changeCameraToDefault();
+ //if (!activating) gAgent.changeCameraToDefault();
+
LLViewerJoystick::getInstance()->setNeedsReset(true);
return FALSE;
}
@@ -1411,7 +1415,11 @@ LLViewerWindow::LLViewerWindow(
mHideCursorPermanent( FALSE ),
mCursorHidden(FALSE),
mIgnoreActivate( FALSE ),
- mHoverPick()
+ mHoverPick(),
+ mResDirty(false),
+ mStatesDirty(false),
+ mIsFullscreenChecked(false),
+ mCurrResolutionIndex(0)
{
// Default to application directory.
LLViewerWindow::sSnapshotBaseName = "Snapshot";
@@ -1546,7 +1554,7 @@ void LLViewerWindow::initGLDefaults()
glPixelStorei(GL_PACK_ALIGNMENT,1);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
- glEnable(GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
// lights for objects
glShadeModel( GL_SMOOTH );
@@ -3043,8 +3051,9 @@ BOOL LLViewerWindow::handlePerFrameHover()
if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST))
{
- gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1,
- NULL,
+ gDebugRaycastFaceHit = -1;
+ gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE,
+ &gDebugRaycastFaceHit,
&gDebugRaycastIntersection,
&gDebugRaycastTexCoord,
&gDebugRaycastNormal,
@@ -3185,7 +3194,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
// Render light for editing
if (LLSelectMgr::sRenderLightRadius && LLToolMgr::getInstance()->inEdit())
{
- LLImageGL::unbindTexture(0);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLEnable gls_blend(GL_BLEND);
LLGLEnable gls_cull(GL_CULL_FACE);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
@@ -3399,7 +3408,7 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
llassert_always(pick_info.mScreenRegion.notNull());
mPicks.push_back(pick_info);
- S32 scaled_x = llround((F32)pick_info.mMousePt.mX * mDisplayScale.mV[VX]);
+ /*S32 scaled_x = llround((F32)pick_info.mMousePt.mX * mDisplayScale.mV[VX]);
S32 scaled_y = llround((F32)pick_info.mMousePt.mY * mDisplayScale.mV[VY]);
// Default to not hitting anything
@@ -3468,7 +3477,7 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
setup3DRender();
setup2DRender();
- setupViewport();
+ setupViewport();*/
// delay further event processing until we receive results of pick
mWindow->delayInputProcessing();
@@ -3530,6 +3539,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 depth,
LLViewerObject *this_object,
S32 this_face,
+ BOOL pick_transparent,
S32* face_hit,
LLVector3 *intersection,
LLVector2 *uv,
@@ -3563,7 +3573,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
{
if (this_object->isHUDAttachment()) // is a HUD object?
{
- if (this_object->lineSegmentIntersect(mouse_hud_start, mouse_hud_end, this_face,
+ if (this_object->lineSegmentIntersect(mouse_hud_start, mouse_hud_end, this_face, pick_transparent,
face_hit, intersection, uv, normal, binormal))
{
found = this_object;
@@ -3572,7 +3582,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
else // is a world object
{
- if (this_object->lineSegmentIntersect(mouse_world_start, mouse_world_end, this_face,
+ if (this_object->lineSegmentIntersect(mouse_world_start, mouse_world_end, this_face, pick_transparent,
face_hit, intersection, uv, normal, binormal))
{
found = this_object;
@@ -3582,13 +3592,13 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
else // check ALL objects
{
- found = gPipeline.lineSegmentIntersectInHUD(mouse_hud_start, mouse_hud_end,
+ found = gPipeline.lineSegmentIntersectInHUD(mouse_hud_start, mouse_hud_end, pick_transparent,
face_hit, intersection, uv, normal, binormal);
if (!found) // if not found in HUD, look in world:
{
- found = gPipeline.lineSegmentIntersectInWorld(mouse_world_start, mouse_world_end,
+ found = gPipeline.lineSegmentIntersectInWorld(mouse_world_start, mouse_world_end, pick_transparent,
face_hit, intersection, uv, normal, binormal);
}
@@ -3812,13 +3822,8 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image)
return FALSE;
}
- std::string extension("." + image->getExtension());
- if (extension.empty())
- {
- extension = (gSavedSettings.getBOOL("CompressSnapshotsToDisk")) ? ".j2c" : ".bmp";
- }
-
LLFilePicker::ESaveFilter pick_type;
+ std::string extension("." + image->getExtension());
if (extension == ".j2c")
pick_type = LLFilePicker::FFSAVE_J2C;
else if (extension == ".bmp")
@@ -3836,7 +3841,8 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image)
if ( ! isSnapshotLocSet())
{
std::string proposed_name( sSnapshotBaseName );
- proposed_name.append( extension );
+
+ // getSaveFile will append an appropriate extension to the proposed name, based on the ESaveFilter constant passed in.
// pick a directory in which to save
LLFilePicker& picker = LLFilePicker::instance();
@@ -4153,7 +4159,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
snapshot_width = image_width;
snapshot_height = image_height;
- target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB, TRUE);
+ target.allocate(snapshot_width, snapshot_height, GL_RGBA, TRUE, LLTexUnit::TT_RECT_TEXTURE, TRUE);
window_width = snapshot_width;
window_height = snapshot_height;
scale_factor = 1.f;
@@ -4381,7 +4387,7 @@ void LLViewerWindow::drawMouselookInstructions()
llround(font->getLineHeight() + 2 * INSTRUCTIONS_PAD));
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4f( 0.9f, 0.9f, 0.9f, 1.0f );
gl_rect_2d( instructions_rect );
}
@@ -4648,9 +4654,97 @@ void LLViewerWindow::getTargetWindow(BOOL& fullscreen, S32& width, S32& height)
}
}
+bool LLViewerWindow::updateResolution()
+{
+ if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio"))
+ {
+ getWindow()->setNativeAspectRatio(0.f);
+ }
+ else
+ {
+ getWindow()->setNativeAspectRatio(gSavedSettings.getF32("FullScreenAspectRatio"));
+ }
+
+ reshape(getWindowDisplayWidth(), getWindowDisplayHeight());
+
+ // Screen resolution
+ S32 num_resolutions;
+ LLWindow::LLWindowResolution* supported_resolutions = getWindow()->getSupportedResolutions(num_resolutions);
+
+ // check if resolution has changed
+ BOOL targetFullscreen;
+ S32 targetWidth;
+ S32 targetHeight;
+
+ getTargetWindow(targetFullscreen, targetWidth, targetHeight);
+
+ if ((mIsFullscreenChecked != (bool) targetFullscreen) ||
+ (mIsFullscreenChecked &&
+ (supported_resolutions[mCurrResolutionIndex].mWidth != targetWidth ||
+ supported_resolutions[mCurrResolutionIndex].mHeight != targetHeight)
+ ))
+ {
+ // change fullscreen resolution or switch in/out of windowed mode
+ BOOL result;
+
+ BOOL logged_in = (LLStartUp::getStartupState() >= STATE_STARTED);
+ if (mIsFullscreenChecked)
+ {
+ result = changeDisplaySettings(TRUE,
+ LLCoordScreen( supported_resolutions[mCurrResolutionIndex].mWidth,
+ supported_resolutions[mCurrResolutionIndex].mHeight),
+ gSavedSettings.getBOOL("DisableVerticalSync"),
+ logged_in);
+ }
+ else
+ {
+ result = changeDisplaySettings(FALSE,
+ LLCoordScreen(gSavedSettings.getS32("WindowWidth"), gSavedSettings.getS32("WindowHeight")),
+ TRUE,
+ logged_in);
+ }
+ if (!result)
+ {
+
+ // GL is non-existent at this point, so we can't continue.
+ llerrs << "LLPanelDisplay::apply() failed" << llendl;
+ }
+ }
+
+ // force aspect ratio
+ if (mIsFullscreenChecked)
+ {
+ LLViewerCamera::getInstance()->setAspect( getDisplayAspectRatio() );
+ }
+ return true;
+}
+
+void LLViewerWindow::requestResolutionUpdate(bool fullscreen_checked, U32 resolution_index)
+{
+ mResDirty = true;
+ mIsFullscreenChecked = fullscreen_checked;
+ mCurrResolutionIndex = resolution_index;
+}
+
BOOL LLViewerWindow::checkSettings()
{
+ if (mStatesDirty)
+ {
+ gGL.refreshState();
+ LLViewerShaderMgr::instance()->setShaders();
+ mStatesDirty = false;
+ }
+
+ // We want to update the resolution AFTER the states getting refreshed not before.
+ if (mResDirty)
+ {
+ updateResolution();
+ mResDirty = false;
+ // This will force a state update the next frame.
+ mStatesDirty = true;
+ }
+
BOOL is_fullscreen = mWindow->getFullscreen();
if (is_fullscreen && !mWantFullscreen)
{
@@ -4659,6 +4753,7 @@ BOOL LLViewerWindow::checkSettings()
gSavedSettings.getS32("WindowHeight")),
TRUE,
mShowFullscreenProgress);
+ mStatesDirty = true;
return TRUE;
}
else if (!is_fullscreen && mWantFullscreen)
@@ -4678,6 +4773,7 @@ BOOL LLViewerWindow::checkSettings()
LLGLState::checkStates();
LLGLState::checkTextureChannels();
+ mStatesDirty = true;
return TRUE;
}
return FALSE;
@@ -5104,25 +5200,34 @@ LLPickInfo::~LLPickInfo()
void LLPickInfo::fetchResults()
{
+
+ S32 face_hit = -1;
+ LLVector3 intersection, normal, binormal;
+ LLVector2 uv;
+
+ LLViewerObject* hit_object = gViewerWindow->cursorIntersect(-1, -1, 512.f,
+ NULL, -1, mPickTransparent, &face_hit,
+ &intersection, &uv, &normal, &binormal);
+
// read back colors and depth values from buffer
- glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, mPickBuffer);
- glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_DEPTH_COMPONENT, GL_FLOAT, mPickDepthBuffer );
+ //glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, mPickBuffer);
+ //glReadPixels(mScreenRegion.mLeft, mScreenRegion.mBottom, mScreenRegion.getWidth(), mScreenRegion.getHeight(), GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, mPickDepthBuffer );
// find pick region that is fully onscreen
LLCoordGL scaled_pick_point;;
scaled_pick_point.mX = llclamp(llround((F32)mMousePt.mX * gViewerWindow->getDisplayScale().mV[VX]), PICK_HALF_WIDTH, gViewerWindow->getWindowDisplayWidth() - PICK_HALF_WIDTH);
scaled_pick_point.mY = llclamp(llround((F32)mMousePt.mY * gViewerWindow->getDisplayScale().mV[VY]), PICK_HALF_WIDTH, gViewerWindow->getWindowDisplayHeight() - PICK_HALF_WIDTH);
- S32 pixel_index = PICK_HALF_WIDTH * PICK_DIAMETER + PICK_HALF_WIDTH;
- S32 pick_id = (U32)mPickBuffer[(pixel_index * 4) + 0] << 16 | (U32)mPickBuffer[(pixel_index * 4) + 1] << 8 | (U32)mPickBuffer[(pixel_index * 4) + 2];
- F32 depth = mPickDepthBuffer[pixel_index];
+ //S32 pixel_index = PICK_HALF_WIDTH * PICK_DIAMETER + PICK_HALF_WIDTH;
+ //S32 pick_id = (U32)mPickBuffer[(pixel_index * 4) + 0] << 16 | (U32)mPickBuffer[(pixel_index * 4) + 1] << 8 | (U32)mPickBuffer[(pixel_index * 4) + 2];
+ //F32 depth = mPickDepthBuffer[pixel_index];
- S32 x_offset = mMousePt.mX - llround((F32)scaled_pick_point.mX / gViewerWindow->getDisplayScale().mV[VX]);
- S32 y_offset = mMousePt.mY - llround((F32)scaled_pick_point.mY / gViewerWindow->getDisplayScale().mV[VY]);
+ //S32 x_offset = mMousePt.mX - llround((F32)scaled_pick_point.mX / gViewerWindow->getDisplayScale().mV[VX]);
+ //S32 y_offset = mMousePt.mY - llround((F32)scaled_pick_point.mY / gViewerWindow->getDisplayScale().mV[VY]);
mPickPt = mMousePt;
// we hit nothing, scan surrounding pixels for something useful
- if (!pick_id)
+ /*if (!pick_id)
{
S32 closest_distance = 10000;
//S32 closest_pick_name = 0;
@@ -5143,25 +5248,21 @@ void LLPickInfo::fetchResults()
}
}
}
- }
+ }*/
- U32 te_offset = ((U32)pick_id >> 20);
- pick_id &= 0x000fffff;
- //unproject relative clicked coordinate from window coordinate using GL
- GLint viewport[4];
- GLdouble modelview[16];
- GLdouble projection[16];
- GLfloat winX, winY;
- GLdouble posX, posY, posZ;
+ U32 te_offset = face_hit > -1 ? face_hit : 0;
+ //pick_id &= 0x000fffff;
- LLViewerObject* objectp = gObjectList.getSelectedObject(pick_id);
+ //unproject relative clicked coordinate from window coordinate using GL
+
+ LLViewerObject* objectp = hit_object;
- if (pick_id == (S32)GL_NAME_PARCEL_WALL)
- {
- mPickType = PICK_PARCEL_WALL;
- }
- else if (objectp)
+ //if (pick_id == (S32)GL_NAME_PARCEL_WALL)
+ //{
+ // mPickType = PICK_PARCEL_WALL;
+ //}
+ if (objectp)
{
if( objectp->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH )
{
@@ -5187,11 +5288,11 @@ void LLPickInfo::fetchResults()
{
mPickType = PICK_OBJECT;
}
- mObjectOffset = gAgent.calcFocusOffset(objectp, mPickPt.mX, mPickPt.mY);
+ mObjectOffset = gAgent.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY);
mObjectID = objectp->mID;
mObjectFace = (te_offset == NO_FACE) ? -1 : (S32)te_offset;
- glh::matrix4f newModel((F32*)LLViewerCamera::getInstance()->getModelview().mMatrix);
+ /*glh::matrix4f newModel((F32*)LLViewerCamera::getInstance()->getModelview().mMatrix);
for(U32 i = 0; i < 16; ++i)
{
@@ -5203,9 +5304,9 @@ void LLPickInfo::fetchResults()
winX = ((F32)mPickPt.mX) * gViewerWindow->getDisplayScale().mV[VX];
winY = ((F32)mPickPt.mY) * gViewerWindow->getDisplayScale().mV[VY];
- gluUnProject( winX, winY, depth, modelview, projection, viewport, &posX, &posY, &posZ);
+ gluUnProject( winX, winY, depth, modelview, projection, viewport, &posX, &posY, &posZ);*/
- mPosGlobal = gAgent.getPosGlobalFromAgent(LLVector3(posX, posY, posZ));
+ mPosGlobal = gAgent.getPosGlobalFromAgent(intersection);
if (mWantSurfaceInfo)
{
@@ -5213,16 +5314,16 @@ void LLPickInfo::fetchResults()
}
}
}
- else
- {
+ //else
+ //{
// was this name referring to a hud icon?
- mHUDIcon = LLHUDIcon::handlePick(pick_id);
- if (mHUDIcon)
- {
- mPickType = PICK_ICON;
- mPosGlobal = mHUDIcon->getPositionGlobal();
- }
- }
+ // mHUDIcon = LLHUDIcon::handlePick(pick_id);
+ // if (mHUDIcon)
+ // {
+ // mPickType = PICK_ICON;
+ // mPosGlobal = mHUDIcon->getPositionGlobal();
+ // }
+ //}
if (mPickCallback)
{
@@ -5237,16 +5338,19 @@ LLPointer<LLViewerObject> LLPickInfo::getObject() const
void LLPickInfo::updateXYCoords()
{
- const LLTextureEntry* tep = getObject()->getTE(mObjectFace);
- LLPointer<LLViewerImage> imagep = gImageList.getImage(tep->getID());
- if(mUVCoords.mV[VX] >= 0.f && mUVCoords.mV[VY] >= 0.f && imagep.notNull())
+ if (mObjectFace > -1)
{
- LLCoordGL coords;
-
- coords.mX = llround(mUVCoords.mV[VX] * (F32)imagep->getWidth());
- coords.mY = llround(mUVCoords.mV[VY] * (F32)imagep->getHeight());
+ const LLTextureEntry* tep = getObject()->getTE(mObjectFace);
+ LLPointer<LLViewerImage> imagep = gImageList.getImage(tep->getID());
+ if(mUVCoords.mV[VX] >= 0.f && mUVCoords.mV[VY] >= 0.f && imagep.notNull())
+ {
+ LLCoordGL coords;
+
+ coords.mX = llround(mUVCoords.mV[VX] * (F32)imagep->getWidth());
+ coords.mY = llround(mUVCoords.mV[VY] * (F32)imagep->getHeight());
- gViewerWindow->getWindow()->convertCoords(coords, &mXYCoords);
+ gViewerWindow->getWindow()->convertCoords(coords, &mXYCoords);
+ }
}
}
@@ -5257,7 +5361,7 @@ void LLPickInfo::drawPickBuffer() const
gGL.pushMatrix();
LLGLDisable no_blend(GL_BLEND);
LLGLDisable no_alpha_test(GL_ALPHA_TEST);
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glPixelZoom(10.f, 10.f);
LLVector2 display_scale = gViewerWindow->getDisplayScale();
glRasterPos2f(((F32)mMousePt.mX * display_scale.mV[VX] + 10.f),
@@ -5309,7 +5413,7 @@ void LLPickInfo::getSurfaceInfo()
if (objectp)
{
if (gViewerWindow->cursorIntersect(llround((F32)mMousePt.mX), llround((F32)mMousePt.mY), 1024.f,
- objectp, -1,
+ objectp, -1, mPickTransparent,
&mObjectFace,
&mIntersection,
&mSTCoords,
@@ -5318,7 +5422,7 @@ void LLPickInfo::getSurfaceInfo()
{
// if we succeeded with the intersect above, compute the texture coordinates:
- if (objectp->mDrawable.notNull())
+ if (objectp->mDrawable.notNull() && mObjectFace > -1)
{
LLFace* facep = objectp->mDrawable->getFace(mObjectFace);
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 11c4126beb..6309cec819 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -313,6 +313,7 @@ public:
LLViewerObject* cursorIntersect(S32 mouse_x = -1, S32 mouse_y = -1, F32 depth = 512.f,
LLViewerObject *this_object = NULL,
S32 this_face = -1,
+ BOOL pick_transparent = FALSE,
S32* face_hit = NULL,
LLVector3 *intersection = NULL,
LLVector2 *uv = NULL,
@@ -340,6 +341,8 @@ public:
void toggleFullscreen(BOOL show_progress);
// handle shutting down GL and bringing it back up
+ bool updateResolution(void);
+ void requestResolutionUpdate(bool fullscreen_checked, U32 resolution_index);
BOOL checkSettings();
void restartDisplay(BOOL show_progress_bar);
BOOL changeDisplaySettings(BOOL fullscreen, LLCoordScreen size, BOOL disable_vsync, BOOL show_progress_bar);
@@ -421,6 +424,11 @@ protected:
std::string mInitAlert; // Window / GL initialization requires an alert
class LLDebugText* mDebugText; // Internal class for debug text
+
+ bool mResDirty;
+ bool mStatesDirty;
+ bool mIsFullscreenChecked; // Did the user check the fullscreen checkbox in the display settings
+ U32 mCurrResolutionIndex;
protected:
static std::string sSnapshotBaseName;
@@ -473,6 +481,7 @@ extern LLVector3 gDebugRaycastIntersection;
extern LLVector2 gDebugRaycastTexCoord;
extern LLVector3 gDebugRaycastNormal;
extern LLVector3 gDebugRaycastBinormal;
+extern S32 gDebugRaycastFaceHit;
extern S32 CHAT_BAR_HEIGHT;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 391bb915fa..aec26fa6a1 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -244,6 +244,11 @@ static F32 calc_bouncy_animation(F32 x)
return -(cosf(x * F_PI * 2.5f - F_PI_BY_TWO))*(0.4f + x * -0.1f) + x * 1.3f;
}
+BOOL LLLineSegmentCapsuleIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& p1, const LLVector3& p2, const F32& radius, LLVector3& result)
+{
+ return FALSE;
+}
+
//-----------------------------------------------------------------------------
// Static Data
//-----------------------------------------------------------------------------
@@ -753,7 +758,7 @@ LLVOAvatar::LLVOAvatar(
mRippleTimeLast = 0.f;
mShadowImagep = gImageList.getImageFromFile("foot_shadow.j2c");
- mShadowImagep->bind();
+ gGL.getTexUnit(0)->bind(mShadowImagep.get());
mShadowImagep->setClamp(TRUE, TRUE);
mInAir = FALSE;
@@ -1569,6 +1574,96 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax)
newMax += buffer;
}
+//-----------------------------------------------------------------------------
+// renderCollisionVolumes()
+//-----------------------------------------------------------------------------
+void LLVOAvatar::renderCollisionVolumes()
+{
+ for (S32 i = 0; i < mNumCollisionVolumes; i++)
+ {
+ mCollisionVolumes[i].renderCollision();
+ }
+
+ if (mNameText.notNull())
+ {
+ LLVector3 unused;
+ mNameText->lineSegmentIntersect(LLVector3(0,0,0), LLVector3(0,0,1), unused, TRUE);
+ }
+}
+
+BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ S32 face,
+ BOOL pick_transparent,
+ S32* face_hit,
+ LLVector3* intersection,
+ LLVector2* tex_coord,
+ LLVector3* normal,
+ LLVector3* bi_normal
+ )
+{
+
+ if (mIsSelf && !gAgent.needsRenderAvatar())
+ {
+ return FALSE;
+ }
+
+ if (lineSegmentBoundingBox(start, end))
+ {
+ for (S32 i = 0; i < mNumCollisionVolumes; ++i)
+ {
+ mCollisionVolumes[i].updateWorldMatrix();
+
+ glh::matrix4f mat((F32*) mCollisionVolumes[i].getXform()->getWorldMatrix().mMatrix);
+ glh::matrix4f inverse = mat.inverse();
+ glh::matrix4f norm_mat = inverse.transpose();
+
+ glh::vec3f p1(start.mV);
+ glh::vec3f p2(end.mV);
+
+ inverse.mult_matrix_vec(p1);
+ inverse.mult_matrix_vec(p2);
+
+ LLVector3 position;
+ LLVector3 norm;
+
+ if (linesegment_sphere(LLVector3(p1.v), LLVector3(p2.v), LLVector3(0,0,0), 1.f, position, norm))
+ {
+ glh::vec3f res_pos(position.mV);
+ mat.mult_matrix_vec(res_pos);
+
+ norm.normalize();
+ glh::vec3f res_norm(norm.mV);
+ norm_mat.mult_matrix_dir(res_norm);
+
+ if (intersection)
+ {
+ *intersection = LLVector3(res_pos.v);
+ }
+
+ if (normal)
+ {
+ *normal = LLVector3(res_norm.v);
+ }
+
+ return TRUE;
+ }
+ }
+ }
+
+ LLVector3 position;
+ if (mNameText.notNull() && mNameText->lineSegmentIntersect(start, end, position))
+ {
+ if (intersection)
+ {
+ *intersection = position;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
//-----------------------------------------------------------------------------
// parseSkeletonFile()
@@ -4138,7 +4233,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
LLVector3 collide_point = slaved_pos;
collide_point.mV[VZ] -= foot_plane_normal.mV[VZ] * (dist_from_plane + COLLISION_TOLERANCE - FOOT_COLLIDE_FUDGE);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
{
F32 SQUARE_SIZE = 0.2f;
gGL.color4f(1.f, 0.f, 0.f, 1.f);
@@ -4285,7 +4380,7 @@ U32 LLVOAvatar::renderFootShadows()
LLGLDepthTest test(GL_TRUE, GL_FALSE);
//render foot shadows
LLGLEnable blend(GL_BLEND);
- mShadowImagep->bind();
+ gGL.getTexUnit(0)->bind(mShadowImagep.get());
glColor4fv(mShadow0Facep->getRenderColor().mV);
mShadow0Facep->renderIndexed(foot_mask);
glColor4fv(mShadow1Facep->getRenderColor().mV);
@@ -4331,8 +4426,8 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
color.mV[3] = (U8) (alpha*255);
gGL.color4ubv(color.mV);
- mImpostor.bindTexture();
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->bind(&mImpostor);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0,0);
gGL.vertex3fv((pos+left-up).mV);
gGL.texCoord2f(1,0);
@@ -4347,17 +4442,6 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
return 6;
}
-//-----------------------------------------------------------------------------
-// renderCollisionVolumes()
-//-----------------------------------------------------------------------------
-void LLVOAvatar::renderCollisionVolumes()
-{
- for (S32 i = 0; i < mNumCollisionVolumes; i++)
- {
- mCollisionVolumes[i].renderCollision();
- }
-}
-
//------------------------------------------------------------------------
// LLVOAvatar::updateTextures()
//------------------------------------------------------------------------
@@ -4392,23 +4476,23 @@ void LLVOAvatar::updateTextures(LLAgent &agent)
{
if( head_baked && ! mHeadBakedLoaded )
{
- getTEImage( TEX_HEAD_BAKED )->bind();
+ gGL.getTexUnit(0)->bind(getTEImage( TEX_HEAD_BAKED ));
}
if( upper_baked && ! mUpperBakedLoaded )
{
- getTEImage( TEX_UPPER_BAKED )->bind();
+ gGL.getTexUnit(0)->bind(getTEImage( TEX_UPPER_BAKED ));
}
if( lower_baked && ! mLowerBakedLoaded )
{
- getTEImage( TEX_LOWER_BAKED )->bind();
+ gGL.getTexUnit(0)->bind(getTEImage( TEX_LOWER_BAKED ));
}
if( eyes_baked && ! mEyesBakedLoaded )
{
- getTEImage( TEX_EYES_BAKED )->bind();
+ gGL.getTexUnit(0)->bind(getTEImage( TEX_EYES_BAKED ));
}
if( skirt_baked && ! mSkirtBakedLoaded )
{
- getTEImage( TEX_SKIRT_BAKED )->bind();
+ gGL.getTexUnit(0)->bind(getTEImage( TEX_SKIRT_BAKED ));
}
}
@@ -5714,7 +5798,9 @@ BOOL LLVOAvatar::loadMeshNodes()
// llinfos << "Parsing mesh data for " << type << "..." << llendl;
- mesh->setColor( 0.8f, 0.8f, 0.8f, 1.0f );
+ // If this isn't set to white (1.0), avatars will *ALWAYS* be darker than their surroundings.
+ // Do not touch!!!
+ mesh->setColor( 1.0f, 1.0f, 1.0f, 1.0f );
LLPolyMesh *poly_mesh = NULL;
@@ -6952,7 +7038,7 @@ BOOL LLVOAvatar::bindScratchTexture( LLGLenum format )
GLuint gl_name = getScratchTexName( format, &texture_bytes );
if( gl_name )
{
- LLImageGL::bindExternalTexture( gl_name, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
stop_glerror();
F32* last_bind_time = LLVOAvatar::sScratchTexLastBindTime.getIfThere( format );
@@ -7010,7 +7096,7 @@ LLGLuint LLVOAvatar::getScratchTexName( LLGLenum format, U32* texture_bytes )
glGenTextures(1, &name );
stop_glerror();
- LLImageGL::bindExternalTexture( name, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, name);
stop_glerror();
glTexImage2D(
@@ -7025,7 +7111,7 @@ LLGLuint LLVOAvatar::getScratchTexName( LLGLenum format, U32* texture_bytes )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
stop_glerror();
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
stop_glerror();
LLVOAvatar::sScratchTexNames.addData( format, new LLGLuint( name ) );
@@ -8634,7 +8720,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerImage *src_vi,
glGenTextures(1, (GLuint*) &gl_name );
stop_glerror();
- LLImageGL::bindExternalTexture( gl_name, 0, GL_TEXTURE_2D );
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name);
stop_glerror();
glTexImage2D(
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index de117a5bb9..74fdb72c84 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -308,6 +308,16 @@ public:
U32 renderTransparent();
void renderCollisionVolumes();
+ /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
+ S32* face_hit = NULL, // which face was hit
+ LLVector3* intersection = NULL, // return the intersection point
+ LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
+ LLVector3* normal = NULL, // return the surface normal at the intersection point
+ LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
+ );
+
/*virtual*/ void updateTextures(LLAgent &agent);
// If setting a baked texture, need to request it from a non-local sim.
/*virtual*/ S32 setTETexture(const U8 te, const LLUUID& uuid);
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
index c7326688a0..d416ae5bf6 100644
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -578,3 +578,146 @@ void LLVOGrass::updateDrawable(BOOL force_damped)
}
clearChanged(SHIFTED);
}
+
+// virtual
+BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+ LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+
+{
+ BOOL ret = FALSE;
+ if (!mbCanSelect ||
+ mDrawable->isDead() ||
+ !gPipeline.hasRenderType(mDrawable->getRenderType()))
+ {
+ return FALSE;
+ }
+
+ LLVector3 dir = end-start;
+
+ mPatch = mRegionp->getLand().resolvePatchRegion(getPositionRegion());
+
+ LLVector3 position;
+ // Create random blades of grass with gaussian distribution
+ F32 x,y,xf,yf,dzx,dzy;
+
+ LLColor4U color(255,255,255,255);
+
+ F32 width = sSpeciesTable[mSpecies]->mBladeSizeX;
+ F32 height = sSpeciesTable[mSpecies]->mBladeSizeY;
+
+ LLVector2 tc[4];
+ LLVector3 v[4];
+ // LLVector3 n[4]; // unused!
+
+ F32 closest_t = 1.f;
+
+ for (S32 i = 0; i < mNumBlades; i++)
+ {
+ x = exp_x[i] * mScale.mV[VX];
+ y = exp_y[i] * mScale.mV[VY];
+ xf = rot_x[i] * GRASS_BLADE_BASE * width * w_mod[i];
+ yf = rot_y[i] * GRASS_BLADE_BASE * width * w_mod[i];
+ dzx = dz_x [i];
+ dzy = dz_y [i];
+
+ LLVector3 v1,v2,v3;
+ F32 blade_height= GRASS_BLADE_HEIGHT * height * w_mod[i];
+
+ tc[0] = LLVector2(0, 0);
+ tc[1] = LLVector2(0, 0.98f);
+ tc[2] = LLVector2(1, 0);
+ tc[3] = LLVector2(1, 0.98f);
+
+ position.mV[0] = mPosition.mV[VX] + x + xf;
+ position.mV[1] = mPosition.mV[VY] + y + yf;
+ position.mV[2] = mRegionp->getLand().resolveHeightRegion(position);
+ v[0] = v1 = position + mRegionp->getOriginAgent();
+
+
+
+ position.mV[0] += dzx;
+ position.mV[1] += dzy;
+ position.mV[2] += blade_height;
+ v[1] = v2 = position + mRegionp->getOriginAgent();
+
+ position.mV[0] = mPosition.mV[VX] + x - xf;
+ position.mV[1] = mPosition.mV[VY] + y - xf;
+ position.mV[2] = mRegionp->getLand().resolveHeightRegion(position);
+ v[2] = v3 = position + mRegionp->getOriginAgent();
+
+ LLVector3 normal1 = (v1-v2) % (v2-v3);
+ normal1.normalize();
+
+ position.mV[0] += dzx;
+ position.mV[1] += dzy;
+ position.mV[2] += blade_height;
+ v[3] = v1 = position + mRegionp->getOriginAgent();
+
+
+ F32 a,b,t;
+
+ BOOL hit = FALSE;
+
+
+ U32 idx0 = 0,idx1 = 0,idx2 = 0;
+
+ if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, &a, &b, &t, FALSE))
+ {
+ hit = TRUE;
+ idx0 = 0; idx1 = 1; idx2 = 2;
+ }
+ else if (LLTriangleRayIntersect(v[1], v[3], v[2], start, dir, &a, &b, &t, FALSE))
+ {
+ hit = TRUE;
+ idx0 = 1; idx1 = 3; idx2 = 2;
+ }
+ else if (LLTriangleRayIntersect(v[2], v[1], v[0], start, dir, &a, &b, &t, FALSE))
+ {
+ normal1 = -normal1;
+ hit = TRUE;
+ idx0 = 2; idx1 = 1; idx2 = 0;
+ }
+ else if (LLTriangleRayIntersect(v[2], v[3], v[1], start, dir, &a, &b, &t, FALSE))
+ {
+ normal1 = -normal1;
+ hit = TRUE;
+ idx0 = 2; idx1 = 3; idx2 = 1;
+ }
+
+ if (hit)
+ {
+ if (t >= 0.f &&
+ t <= 1.f &&
+ t < closest_t)
+ {
+
+ LLVector2 hit_tc = ((1.f - a - b) * tc[idx0] +
+ a * tc[idx1] +
+ b * tc[idx2]);
+ if (pick_transparent ||
+ getTEImage(0)->getMask(hit_tc))
+ {
+ closest_t = t;
+ if (intersection != NULL)
+ {
+ *intersection = start+dir*closest_t;
+ }
+
+ if (tex_coord != NULL)
+ {
+ *tex_coord = hit_tc;
+ }
+
+ if (normal != NULL)
+ {
+ *normal = normal1;
+ }
+ ret = TRUE;
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
index 1a14241409..c16040ae6c 100644
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -80,6 +80,16 @@ public:
/*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
+ /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
+ S32* face_hit = NULL, // which face was hit
+ LLVector3* intersection = NULL, // return the intersection point
+ LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
+ LLVector3* normal = NULL, // return the surface normal at the intersection point
+ LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
+ );
+
static S32 sMaxGrassSpecies;
struct GrassSpeciesData
diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp
index 361f2ebf50..7e279adb0b 100644
--- a/indra/newview/llvoground.cpp
+++ b/indra/newview/llvoground.cpp
@@ -45,7 +45,7 @@
#include "pipeline.h"
LLVOGround::LLVOGround(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-: LLStaticViewerObject(id, pcode, regionp)
+: LLStaticViewerObject(id, pcode, regionp, TRUE)
{
mbCanSelect = FALSE;
}
diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
index 6eb3851d16..02635a7f82 100644
--- a/indra/newview/llvoicevisualizer.cpp
+++ b/indra/newview/llvoicevisualizer.cpp
@@ -378,20 +378,20 @@ void LLVoiceVisualizer::render()
//-----------------------------
// bind texture 0 (the dot)
//-----------------------------
- mSoundSymbol.mTexture[0]->bind();
+ gGL.getTexUnit(0)->bind(mSoundSymbol.mTexture[0]);
//-------------------------------------------------------------
// now render the dot
//-------------------------------------------------------------
gGL.color4fv( LLColor4( 1.0f, 1.0f, 1.0f, DOT_OPACITY ).mV );
- gGL.begin( LLVertexBuffer::TRIANGLE_STRIP );
+ gGL.begin( LLRender::TRIANGLE_STRIP );
gGL.texCoord2i( 0, 0 ); gGL.vertex3fv( bottomLeft.mV );
gGL.texCoord2i( 1, 0 ); gGL.vertex3fv( bottomRight.mV );
gGL.texCoord2i( 0, 1 ); gGL.vertex3fv( topLeft.mV );
gGL.end();
- gGL.begin( LLVertexBuffer::TRIANGLE_STRIP );
+ gGL.begin( LLRender::TRIANGLE_STRIP );
gGL.texCoord2i( 1, 0 ); gGL.vertex3fv( bottomRight.mV );
gGL.texCoord2i( 1, 1 ); gGL.vertex3fv( topRight.mV );
gGL.texCoord2i( 0, 1 ); gGL.vertex3fv( topLeft.mV );
@@ -503,18 +503,19 @@ void LLVoiceVisualizer::render()
LLVector3 topRight = mSoundSymbol.mPosition - l + u;
gGL.color4fv( LLColor4( red, green, blue, mSoundSymbol.mWaveOpacity[i] ).mV );
- mSoundSymbol.mTexture[i]->bind();
+ gGL.getTexUnit(0)->bind(mSoundSymbol.mTexture[i]);
+
//---------------------------------------------------
// now, render the mofo
//---------------------------------------------------
- gGL.begin( LLVertexBuffer::TRIANGLE_STRIP );
+ gGL.begin( LLRender::TRIANGLE_STRIP );
gGL.texCoord2i( 0, 0 ); gGL.vertex3fv( bottomLeft.mV );
gGL.texCoord2i( 1, 0 ); gGL.vertex3fv( bottomRight.mV );
gGL.texCoord2i( 0, 1 ); gGL.vertex3fv( topLeft.mV );
gGL.end();
- gGL.begin( LLVertexBuffer::TRIANGLE_STRIP );
+ gGL.begin( LLRender::TRIANGLE_STRIP );
gGL.texCoord2i( 1, 0 ); gGL.vertex3fv( bottomRight.mV );
gGL.texCoord2i( 1, 1 ); gGL.vertex3fv( topRight.mV );
gGL.texCoord2i( 0, 1 ); gGL.vertex3fv( topLeft.mV );
@@ -550,8 +551,8 @@ VoiceGesticulationLevel LLVoiceVisualizer::getCurrentGesticulationLevel()
//-----------------------------------------------------------------------------------------
F32 range = mMaxGesticulationAmplitude - mMinGesticulationAmplitude;
- if ( mSpeakingAmplitude > mMinGesticulationAmplitude + range * 0.66666f ) { gesticulationLevel = VOICE_GESTICULATION_LEVEL_HIGH; }
- else if ( mSpeakingAmplitude > mMinGesticulationAmplitude + range * 0.33333f ) { gesticulationLevel = VOICE_GESTICULATION_LEVEL_MEDIUM; }
+ if ( mSpeakingAmplitude > mMinGesticulationAmplitude + range * 0.5f ) { gesticulationLevel = VOICE_GESTICULATION_LEVEL_HIGH; }
+ else if ( mSpeakingAmplitude > mMinGesticulationAmplitude + range * 0.25f ) { gesticulationLevel = VOICE_GESTICULATION_LEVEL_MEDIUM; }
else if ( mSpeakingAmplitude > mMinGesticulationAmplitude + range * 0.00000f ) { gesticulationLevel = VOICE_GESTICULATION_LEVEL_LOW; }
return gesticulationLevel;
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
index 3724a94edd..657e1680f1 100644
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -133,15 +133,16 @@ F32 LLVOPartGroup::getPartSize(S32 idx)
return 0.f;
}
+LLVector3 LLVOPartGroup::getCameraPosition() const
+{
+ return gAgent.getCameraPositionAgent();
+}
+
BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
{
LLFastTimer ftm(LLFastTimer::FTM_UPDATE_PARTICLES);
dirtySpatialGroup();
-
- LLVector3 at;
- LLVector3 position_agent;
- LLVector3 camera_agent = LLViewerCamera::getInstance()->getOrigin();
S32 num_parts = mViewerPartGroupp->getCount();
LLFace *facep;
@@ -187,7 +188,7 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)
const LLViewerPart *part = mViewerPartGroupp->mParticles[i];
LLVector3 part_pos_agent(part->mPosAgent);
- at = part_pos_agent - camera_agent;
+ LLVector3 at(part_pos_agent - LLViewerCamera::getInstance()->getOrigin());
F32 camera_dist_squared = at.lengthSquared();
F32 inv_camera_dist_squared;
@@ -278,9 +279,10 @@ void LLVOPartGroup::getGeometry(S32 idx,
LLVector3 part_pos_agent(part.mPosAgent);
- LLVector3 camera_agent = gAgent.getCameraPositionAgent();
+ LLVector3 camera_agent = getCameraPosition();
LLVector3 at = part_pos_agent - camera_agent;
- LLVector3 up, right;
+ LLVector3 up;
+ LLVector3 right;
right = at % LLVector3(0.f, 0.f, 1.f);
right.normalize();
@@ -308,6 +310,7 @@ void LLVOPartGroup::getGeometry(S32 idx,
right *= 0.5f*part.mScale.mV[0];
up *= 0.5f*part.mScale.mV[1];
+
const LLVector3& normal = -LLViewerCamera::getInstance()->getXAxis();
*verticesp++ = part_pos_agent + up - right;
@@ -355,6 +358,13 @@ LLParticlePartition::LLParticlePartition()
mLODPeriod = 1;
}
+LLHUDParticlePartition::LLHUDParticlePartition() :
+ LLParticlePartition()
+{
+ mDrawableType = LLPipeline::RENDER_TYPE_HUD;
+ mPartitionType = LLViewerRegion::PARTITION_HUD_PARTICLE;
+}
+
void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_count, U32& index_count)
{
group->mBufferUsage = mBufferUsage;
@@ -480,3 +490,24 @@ F32 LLParticlePartition::calcPixelArea(LLSpatialGroup* group, LLCamera& camera)
return 1024.f;
}
+U32 LLVOHUDPartGroup::getPartitionType() const
+{
+ // Commenting out and returning PARTITION_NONE because DEV-16909
+ // (SVC-2396: Particles not handled properly as hud) didn't work completely
+ // so this disables HUD particles until they can be fixed properly. -MG
+ //return LLViewerRegion::PARTITION_HUD_PARTICLE;
+ return LLViewerRegion::PARTITION_NONE;
+}
+
+LLDrawable* LLVOHUDPartGroup::createDrawable(LLPipeline *pipeline)
+{
+ pipeline->allocDrawable(this);
+ mDrawable->setLit(FALSE);
+ mDrawable->setRenderType(LLPipeline::RENDER_TYPE_HUD);
+ return mDrawable;
+}
+
+LLVector3 LLVOHUDPartGroup::getCameraPosition() const
+{
+ return LLVector3(-1,0,0);
+}
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
index d8e1da7e5a..30c5105dd3 100644
--- a/indra/newview/llvopartgroup.h
+++ b/indra/newview/llvopartgroup.h
@@ -80,6 +80,23 @@ protected:
~LLVOPartGroup();
LLViewerPartGroup *mViewerPartGroupp;
+
+ virtual LLVector3 getCameraPosition() const;
+
+};
+
+
+class LLVOHUDPartGroup : public LLVOPartGroup
+{
+public:
+ LLVOHUDPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) :
+ LLVOPartGroup(id, pcode, regionp)
+ {
+ }
+protected:
+ LLDrawable* createDrawable(LLPipeline *pipeline);
+ U32 getPartitionType() const;
+ virtual LLVector3 getCameraPosition() const;
};
#endif // LL_LLVOPARTGROUP_H
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index e619ca1754..711aeca163 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -294,7 +294,7 @@ void LLSkyTex::createGLImage(S32 which)
void LLSkyTex::bindTexture(BOOL curr)
{
- mImageGL[getWhich(curr)]->bind();
+ gGL.getTexUnit(0)->bind(mImageGL[getWhich(curr)]);
}
/***************************************
@@ -308,7 +308,7 @@ S32 LLVOSky::sTileResX = sResolution/NUM_TILES_X;
S32 LLVOSky::sTileResY = sResolution/NUM_TILES_Y;
LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-: LLStaticViewerObject(id, pcode, regionp),
+: LLStaticViewerObject(id, pcode, regionp, TRUE),
mSun(SUN_DISK_RADIUS), mMoon(MOON_DISK_RADIUS),
mBrightnessScale(1.f),
mBrightnessScaleNew(0.f),
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index 968cc69d3a..e912a19f81 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -916,6 +916,87 @@ void LLVOSurfacePatch::getGeomSizesEast(const S32 stride, const S32 east_stride,
}
}
+BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+ LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+
+{
+
+ if (!lineSegmentBoundingBox(start, end))
+ {
+ return FALSE;
+ }
+
+ LLVector3 delta = end-start;
+
+ LLVector3 pdelta = delta;
+ pdelta.mV[2] = 0;
+
+ F32 plength = pdelta.length();
+
+ F32 tdelta = 1.f/plength;
+
+ LLVector3 origin = start - mRegionp->getOriginAgent();
+
+ if (mRegionp->getLandHeightRegion(origin) > origin.mV[2])
+ {
+ //origin is under ground, treat as no intersection
+ return FALSE;
+ }
+
+ //step one meter at a time until intersection point found
+
+ F32 t = 0.f;
+ while ( t <= 1.f)
+ {
+ LLVector3 sample = origin + delta*t;
+
+ F32 height = mRegionp->getLandHeightRegion(sample);
+ if (height > sample.mV[2])
+ { //ray went below ground, positive intersection
+ //quick and dirty binary search to get impact point
+ tdelta = -tdelta*0.5f;
+ F32 err_dist = 0.001f;
+ F32 dist = fabsf(sample.mV[2] - height);
+
+ while (dist > err_dist && tdelta*tdelta > 0.0f)
+ {
+ t += tdelta;
+ sample = origin+delta*t;
+ height = mRegionp->getLandHeightRegion(sample);
+ if ((tdelta < 0 && height < sample.mV[2]) ||
+ (height > sample.mV[2] && tdelta > 0))
+ { //jumped over intersection point, go back
+ tdelta = -tdelta;
+ }
+ tdelta *= 0.5f;
+ dist = fabsf(sample.mV[2] - height);
+ }
+
+ if (intersection)
+ {
+ sample.mV[2] = mRegionp->getLandHeightRegion(sample);
+ *intersection = sample + mRegionp->getOriginAgent();
+ }
+
+ if (normal)
+ {
+ *normal = mRegionp->getLand().resolveNormalGlobal(mRegionp->getPosGlobalFromRegion(sample));
+ }
+
+ return TRUE;
+ }
+
+ t += tdelta;
+ if (t > 1 && t < 1.f+tdelta*0.99f)
+ { //make sure end point is checked (saves vertical lines coming up negative)
+ t = 1.f;
+ }
+ }
+
+
+ return FALSE;
+}
+
void LLVOSurfacePatch::updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax)
{
LLVector3 posAgent = getPositionAgent();
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
index ede01eb1a9..ddb929bb91 100644
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -85,6 +85,16 @@ public:
void dirtyPatch();
void dirtyGeom();
+ /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
+ S32* face_hit = NULL, // which face was hit
+ LLVector3* intersection = NULL, // return the intersection point
+ LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
+ LLVector3* normal = NULL, // return the surface normal at the intersection point
+ LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
+ );
+
BOOL mDirtiedPatch;
protected:
~LLVOSurfacePatch();
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 0c9b524f7f..7e3b96eb8f 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -312,7 +312,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
mTreeImagep = gImageList.getImage(sSpeciesTable[mSpecies]->mTextureID);
if (mTreeImagep)
{
- mTreeImagep->bindTexture(0);
+ gGL.getTexUnit(0)->bind(mTreeImagep.get());
}
mBranchLength = sSpeciesTable[mSpecies]->mBranchLength;
mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength;
@@ -931,6 +931,48 @@ void LLVOTree::updateSpatialExtents(LLVector3& newMin, LLVector3& newMax)
mDrawable->setPositionGroup(center);
}
+BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+ LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+
+{
+
+ if (!lineSegmentBoundingBox(start, end))
+ {
+ return FALSE;
+ }
+
+ const LLVector3* ext = mDrawable->getSpatialExtents();
+
+ LLVector3 center = (ext[1]+ext[0])*0.5f;
+ LLVector3 size = (ext[1]-ext[0]);
+
+ LLQuaternion quat = getRotation();
+
+ center -= LLVector3(0,0,size.magVec() * 0.25f)*quat;
+
+ size.scaleVec(LLVector3(0.25f, 0.25f, 1.f));
+ size.mV[0] = llmin(size.mV[0], 1.f);
+ size.mV[1] = llmin(size.mV[1], 1.f);
+
+ LLVector3 pos, norm;
+
+ if (linesegment_tetrahedron(start, end, center, size, quat, pos, norm))
+ {
+ if (intersection)
+ {
+ *intersection = pos;
+ }
+
+ if (normal)
+ {
+ *normal = norm;
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
U32 LLVOTree::getPartitionType() const
{
return LLViewerRegion::PARTITION_TREE;
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
index dee282c752..ca0bd17ccf 100644
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -80,6 +80,17 @@ public:
U32 drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD, S32 stop_level, U16 depth, U16 trunk_depth, F32 scale, F32 twist, F32 droop, F32 branches, F32 alpha);
+
+ /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+ S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
+ S32* face_hit = NULL, // which face was hit
+ LLVector3* intersection = NULL, // return the intersection point
+ LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
+ LLVector3* normal = NULL, // return the surface normal at the intersection point
+ LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
+ );
+
static S32 sMaxTreeSpecies;
struct TreeSpeciesData
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8b147dc7cd..50cf336d07 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -605,7 +605,7 @@ BOOL LLVOVolume::setMaterial(const U8 material)
void LLVOVolume::setTexture(const S32 face)
{
llassert(face < getNumTEs());
- LLViewerImage::bindTexture(getTEImage(face));
+ gGL.getTexUnit(0)->bind(getTEImage(face));
}
void LLVOVolume::setScale(const LLVector3 &scale, BOOL damped)
@@ -1934,10 +1934,18 @@ LLVector3 LLVOVolume::volumeDirectionToAgent(const LLVector3& dir) const
}
-BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, S32 *face_hitp,
+BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
{
+ if (!mbCanSelect ||
+ (gHideSelectedObjects && isSelected()) ||
+ mDrawable->isDead() ||
+ !gPipeline.hasRenderType(mDrawable->getRenderType()))
+ {
+ return FALSE;
+ }
+
LLVolume* volume = getVolume();
if (volume)
{
@@ -1946,37 +1954,88 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
v_start = agentPositionToVolume(start);
v_end = agentPositionToVolume(end);
- S32 face_hit = volume->lineSegmentIntersect(v_start, v_end, face,
- intersection, tex_coord, normal, bi_normal);
- if (face_hit >= 0)
+ LLVector3 p;
+ LLVector3 n;
+ LLVector2 tc;
+ LLVector3 bn;
+
+ if (intersection != NULL)
{
- if (face_hitp != NULL)
- {
- *face_hitp = face_hit;
- }
+ p = *intersection;
+ }
+
+ if (tex_coord != NULL)
+ {
+ tc = *tex_coord;
+ }
+
+ if (normal != NULL)
+ {
+ n = *normal;
+ }
+
+ if (bi_normal != NULL)
+ {
+ bn = *bi_normal;
+ }
+
+ S32 face_hit = -1;
+
+ S32 start_face, end_face;
+ if (face == -1)
+ {
+ start_face = 0;
+ end_face = volume->getNumFaces();
+ }
+ else
+ {
+ start_face = face;
+ end_face = face+1;
+ }
+
+ for (S32 i = start_face; i < end_face; ++i)
+ {
+ face_hit = volume->lineSegmentIntersect(v_start, v_end, i,
+ &p, &tc, &n, &bn);
- if (intersection != NULL)
+ if (face_hit >= 0)
{
- *intersection = volumePositionToAgent(*intersection); // must map back to agent space
- }
+ LLFace* face = mDrawable->getFace(face_hit);
+ if (pick_transparent || !face->getTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n)))
+ {
+ if (face_hitp != NULL)
+ {
+ *face_hitp = face_hit;
+ }
+
+ if (intersection != NULL)
+ {
+ *intersection = volumePositionToAgent(p); // must map back to agent space
+ }
- if (normal != NULL)
- {
- *normal = volumeDirectionToAgent(*normal);
- (*normal).normalize();
- }
+ if (normal != NULL)
+ {
+ *normal = volumeDirectionToAgent(n);
+ (*normal).normVec();
+ }
- if (bi_normal != NULL)
- {
- *bi_normal = volumeDirectionToAgent(*bi_normal);
- (*bi_normal).normalize();
- }
+ if (bi_normal != NULL)
+ {
+ *bi_normal = volumeDirectionToAgent(bn);
+ (*bi_normal).normVec();
+ }
-
- return TRUE;
+ if (tex_coord != NULL)
+ {
+ *tex_coord = tc;
+ }
+
+ return TRUE;
+ }
+ }
}
}
-
+
return FALSE;
}
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 58a1b308a4..49ac91bd38 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -114,6 +114,7 @@ public:
/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
S32 face = -1, // which face to check, -1 = ALL_SIDES
+ BOOL pick_transparent = FALSE,
S32* face_hit = NULL, // which face was hit
LLVector3* intersection = NULL, // return the intersection point
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 18c03d870f..8391a314f6 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -87,7 +87,7 @@ inline U32 LLVOWLSky::getStarsNumIndices(void)
}
LLVOWLSky::LLVOWLSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
- : LLStaticViewerObject(id, pcode, regionp)
+ : LLStaticViewerObject(id, pcode, regionp, TRUE)
{
initStars();
}
@@ -488,7 +488,7 @@ void LLVOWLSky::drawStars(void)
if (mStarsVerts.notNull())
{
mStarsVerts->setBuffer(LLDrawPoolWLSky::STAR_VERTEX_DATA_MASK);
- mStarsVerts->draw(LLVertexBuffer::POINTS, getStarsNumIndices(), 0);
+ mStarsVerts->draw(LLRender::POINTS, getStarsNumIndices(), 0);
}
}
@@ -513,7 +513,7 @@ void LLVOWLSky::drawDome(void)
strips_segment->setBuffer(data_mask);
strips_segment->drawRange(
- LLVertexBuffer::TRIANGLE_STRIP,
+ LLRender::TRIANGLE_STRIP,
0, strips_segment->getRequestedVerts()-1, strips_segment->getRequestedIndices(),
0);
gPipeline.addTrianglesDrawn(strips_segment->getRequestedIndices() - 2);
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 29f086b7f9..50a65450a8 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -89,48 +89,57 @@ LLWaterParamManager::~LLWaterParamManager()
void LLWaterParamManager::loadAllPresets(const std::string& file_name)
{
std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
- LL_INFOS2("AppInit", "Shaders") << "Loading water settings from " << path_name << LL_ENDL;
-
- //mParamList.clear();
-
+ LL_INFOS2("AppInit", "Shaders") << "Loading Default water settings from " << path_name << LL_ENDL;
+
bool found = true;
while(found)
{
std::string name;
found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
-
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
-
- // if we have one
- if(found)
+ if(found)
{
+
+ name=name.erase(name.length()-4);
+
// bugfix for SL-46920: preventing filenames that break stuff.
char * curl_str = curl_unescape(name.c_str(), name.size());
std::string unescaped_name(curl_str);
curl_free(curl_str);
curl_str = NULL;
- // not much error checking here since we're getting rid of this
- std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4);
-
- std::string cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading water from " << cur_path << LL_ENDL;
+ LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
+ loadPreset(unescaped_name,FALSE);
+ }
+ }
+
+ // And repeat for user presets, note the user presets will modify any system presets already loaded
+
+ std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
+ LL_INFOS2("AppInit", "Shaders") << "Loading User water settings from " << path_name2 << LL_ENDL;
- llifstream water_xml(cur_path);
- if (water_xml)
- {
- LLSD water_data(LLSD::emptyMap());
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
- parser->parse(water_xml, water_data, LLSDSerialize::SIZE_UNLIMITED);
+ found = true;
+ while(found)
+ {
+ std::string name;
+ found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
+ if(found)
+ {
+ name=name.erase(name.length()-4);
- addParamSet(water_name, water_data);
- water_xml.close();
- }
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_unescape(name.c_str(), name.size());
+ std::string unescaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
+
+ LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
+ loadPreset(unescaped_name,FALSE);
}
}
+
}
-void LLWaterParamManager::loadPreset(const std::string & name)
+void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
{
// bugfix for SL-46920: preventing filenames that break stuff.
char * curl_str = curl_escape(name.c_str(), name.size());
@@ -142,8 +151,17 @@ void LLWaterParamManager::loadPreset(const std::string & name)
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename));
llinfos << "Loading water settings from " << pathName << llendl;
-
- llifstream presetsXML(pathName);
+
+ std::ifstream presetsXML;
+ presetsXML.open(pathName.c_str());
+
+ // That failed, try loading from the users area instead.
+ if(!presetsXML)
+ {
+ pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename);
+ llinfos << "Loading User water setting from " << pathName << llendl;
+ presetsXML.open(pathName.c_str());
+ }
if (presetsXML)
{
@@ -170,10 +188,12 @@ void LLWaterParamManager::loadPreset(const std::string & name)
return;
}
- getParamSet(name, mCurParams);
-
- propagateParameters();
-}
+ if(propagate)
+ {
+ getParamSet(name, mCurParams);
+ propagateParameters();
+ }
+}
void LLWaterParamManager::savePreset(const std::string & name)
{
@@ -187,7 +207,7 @@ void LLWaterParamManager::savePreset(const std::string & name)
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename));
+ std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename));
// fill it with LLSD windlight params
paramsData = mParamList[name].getAll();
@@ -390,7 +410,8 @@ bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_fr
if(delete_from_disk)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
+
+ std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
// use full curl escaped name
char * curl_str = curl_escape(name.c_str(), name.size());
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
index 6f31ebce5c..fd7c1d5177 100644
--- a/indra/newview/llwaterparammanager.h
+++ b/indra/newview/llwaterparammanager.h
@@ -228,7 +228,8 @@ public:
void loadAllPresets(const std::string & fileName);
/// load an individual preset into the sky
- void loadPreset(const std::string & name);
+
+ void loadPreset(const std::string & name,bool propagate=true);
/// save the parameter presets to file
void savePreset(const std::string & name);
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index b55c3e5b6d..4270a6a0aa 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -106,84 +106,65 @@ LLWLParamManager::~LLWLParamManager()
void LLWLParamManager::loadPresets(const std::string& file_name)
{
- // if fileName exists, use legacy loading form the big file, otherwise, search the sky
- // directory, and add the list
- if(file_name != "")
+ std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
+ LL_INFOS2("AppInit", "Shaders") << "Loading Default WindLight settings from " << path_name << LL_ENDL;
+
+ bool found = true;
+ while(found)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name));
- LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
-
- llifstream presetsXML(path_name);
-
- if (presetsXML)
+ std::string name;
+ found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
+ if(found)
{
- LLSD paramsData(LLSD::emptyMap());
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ name=name.erase(name.length()-4);
- parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_unescape(name.c_str(), name.size());
+ std::string unescaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
- LLSD::map_const_iterator endParams = paramsData.endMap();
- for(LLSD::map_const_iterator curParams = paramsData.beginMap();
- curParams != endParams;
- ++curParams)
- {
- addParamSet(curParams->first, curParams->second);
- }
+ LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
+ loadPreset(unescaped_name,FALSE);
}
}
-
- // otherwise, search the sky directory and find things there
- else
+
+ // And repeat for user presets, note the user presets will modify any system presets already loaded
+
+ std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
+ LL_INFOS2("AppInit", "Shaders") << "Loading User WindLight settings from " << path_name2 << LL_ENDL;
+
+ found = true;
+ while(found)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
- LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
-
- //mParamList.clear();
-
- bool found = true;
- while(found)
+ std::string name;
+ found = gDirUtilp->getNextFileInDir(path_name2, "*.xml", name, false);
+ if(found)
{
- std::string name;
- found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
+ name=name.erase(name.length()-4);
+
+ // bugfix for SL-46920: preventing filenames that break stuff.
+ char * curl_str = curl_unescape(name.c_str(), name.size());
+ std::string unescaped_name(curl_str);
+ curl_free(curl_str);
+ curl_str = NULL;
LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
-
- // if we have one
- if(found)
- {
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- // not much error checking here since we're getting rid of this
- std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4);
-
- std::string cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading sky from " << cur_path << LL_ENDL;
-
- llifstream sky_xml(cur_path);
- if (sky_xml)
- {
- LLSD sky_data(LLSD::emptyMap());
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
- parser->parse(sky_xml, sky_data, LLSDSerialize::SIZE_UNLIMITED);
-
- addParamSet(sky_name, sky_data);
- sky_xml.close();
- }
- }
+ loadPreset(unescaped_name,FALSE);
}
}
+
}
void LLWLParamManager::savePresets(const std::string & fileName)
{
+ //Nobody currently calls me, but if they did, then its reasonable to write the data out to the user's folder
+ //and not over the RO system wide version.
+
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", fileName));
+ std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName));
for(std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.begin();
mIt != mParamList.end();
@@ -201,8 +182,9 @@ void LLWLParamManager::savePresets(const std::string & fileName)
presetsXML.close();
}
-void LLWLParamManager::loadPreset(const std::string & name)
+void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
{
+
// bugfix for SL-46920: preventing filenames that break stuff.
char * curl_str = curl_escape(name.c_str(), name.size());
std::string escaped_filename(curl_str);
@@ -214,7 +196,16 @@ void LLWLParamManager::loadPreset(const std::string & name)
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
llinfos << "Loading WindLight sky setting from " << pathName << llendl;
- llifstream presetsXML(pathName);
+ llifstream presetsXML;
+ presetsXML.open(pathName.c_str());
+
+ // That failed, try loading from the users area instead.
+ if(!presetsXML)
+ {
+ pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename);
+ llinfos << "Loading User WindLight sky setting from " << pathName << llendl;
+ presetsXML.open(pathName.c_str());
+ }
if (presetsXML)
{
@@ -241,10 +232,13 @@ void LLWLParamManager::loadPreset(const std::string & name)
return;
}
- getParamSet(name, mCurParams);
-
- propagateParameters();
-}
+
+ if(propagate)
+ {
+ getParamSet(name, mCurParams);
+ propagateParameters();
+ }
+}
void LLWLParamManager::savePreset(const std::string & name)
{
@@ -258,7 +252,7 @@ void LLWLParamManager::savePreset(const std::string & name)
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
+ std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename));
// fill it with LLSD windlight params
paramsData = mParamList[name].getAll();
@@ -533,7 +527,7 @@ bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_
if(delete_from_disk)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
+ std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
// use full curl escaped name
char * curl_str = curl_escape(name.c_str(), name.size());
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
index 1a2b2a3903..f74e9697b3 100644
--- a/indra/newview/llwlparammanager.h
+++ b/indra/newview/llwlparammanager.h
@@ -135,7 +135,7 @@ public:
void savePresets(const std::string & fileName);
/// load an individual preset into the sky
- void loadPreset(const std::string & name);
+ void loadPreset(const std::string & name,bool propogate=true);
/// save the parameter presets to file
void savePreset(const std::string & name);
@@ -195,7 +195,6 @@ public:
// singleton pattern implementation
static LLWLParamManager * instance();
-
public:
// helper variables
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 8cebf1c12a..63f9ef0b57 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -32,6 +32,7 @@
#include "llviewerprecompiledheaders.h"
#include "llworld.h"
+#include "llrender.h"
#include "indra_constants.h"
#include "llstl.h"
@@ -108,7 +109,7 @@ LLWorld::LLWorld() :
*(default_texture++) = MAX_WATER_COLOR.mV[3];
mDefaultWaterTexturep = new LLViewerImage(raw, FALSE);
- mDefaultWaterTexturep->bind();
+ gGL.getTexUnit(0)->bind(mDefaultWaterTexturep.get());
mDefaultWaterTexturep->setClamp(TRUE, TRUE);
}
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index 3352e97768..102f56a9a3 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -498,7 +498,8 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
new_layer.LayerDefined = TRUE;
msg->getUUIDFast(_PREHASH_LayerData, _PREHASH_ImageID, new_layer.LayerImageID, block);
new_layer.LayerImage = gImageList.getImage(new_layer.LayerImageID, MIPMAP_TRUE, FALSE);
- new_layer.LayerImage->bindTexture(0);
+
+ gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
new_layer.LayerImage->setClamp(TRUE, TRUE);
U32 left, right, top, bottom;
@@ -610,7 +611,7 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**)
siminfo->mWaterHeight = (F32) water_height;
siminfo->mMapImageID[agent_flags] = image_id;
siminfo->mCurrentImage = gImageList.getImage(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE);
- siminfo->mCurrentImage->bindTexture(0);
+ gGL.getTexUnit(0)->bind(siminfo->mCurrentImage.get());
siminfo->mCurrentImage->setClamp(TRUE, TRUE);
if (siminfo->mMapImageID[2].notNull())
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index e63dcfc1e8..aa1c13ac34 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -301,7 +301,7 @@ void LLWorldMapView::draw()
LLLocalClipRect clip(getLocalRect());
{
- LLGLSNoTexture no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glMatrixMode(GL_MODELVIEW);
@@ -377,7 +377,7 @@ void LLWorldMapView::draw()
// Draw using the texture. If we don't clamp we get artifact at
// the edge.
- LLViewerImage::bindTexture(current_image);
+ gGL.getTexUnit(0)->bind(current_image);
// Draw map image into RGB
//gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -385,7 +385,7 @@ void LLWorldMapView::draw()
gGL.setColorMask(true, false);
gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.0f, 1.0f);
gGL.vertex3f(left, top, -1.0f);
gGL.texCoord2f(0.0f, 0.0f);
@@ -401,7 +401,7 @@ void LLWorldMapView::draw()
gGL.setColorMask(false, true);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.0f, 1.0f);
gGL.vertex2f(left, top);
gGL.texCoord2f(0.0f, 0.0f);
@@ -434,7 +434,7 @@ void LLWorldMapView::draw()
if (info->mOverlayImage.isNull() && info->mMapImageID[2].notNull())
{
info->mOverlayImage = gImageList.getImage(info->mMapImageID[2], MIPMAP_TRUE, FALSE);
- info->mOverlayImage->bind(0);
+ gGL.getTexUnit(0)->bind(info->mOverlayImage.get());
info->mOverlayImage->setClamp(TRUE, TRUE);
}
@@ -536,13 +536,13 @@ void LLWorldMapView::draw()
// Draw using the texture. If we don't clamp we get artifact at
// the edge.
LLGLSUIDefault gls_ui;
- LLViewerImage::bindTexture(simimage);
+ gGL.getTexUnit(0)->bind(simimage);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
F32 alpha = sim_alpha * info->mAlpha;
gGL.color4f(1.f, 1.0f, 1.0f, alpha);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex3f(left, top, 0.f);
gGL.texCoord2f(0.f, 0.f);
@@ -555,9 +555,9 @@ void LLWorldMapView::draw()
if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->getHasGLTexture())
{
- LLViewerImage::bindTexture(overlayimage);
+ gGL.getTexUnit(0)->bind(overlayimage);
gGL.color4f(1.f, 1.f, 1.f, alpha);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.texCoord2f(0.f, 1.f);
gGL.vertex3f(left, top, -0.5f);
gGL.texCoord2f(0.f, 0.f);
@@ -577,8 +577,8 @@ void LLWorldMapView::draw()
gGL.setColorMask(false, true);
gGL.color4f(1.f, 1.f, 1.f, 1.f);
- LLGLSNoTexture gls_no_texture;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.begin(LLRender::QUADS);
gGL.vertex2f(left, top);
gGL.vertex2f(left, bottom);
gGL.vertex2f(right, bottom);
@@ -596,8 +596,8 @@ void LLWorldMapView::draw()
gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f);
- LLGLSNoTexture gls_no_texture;
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.begin(LLRender::QUADS);
gGL.vertex2f(left, top);
gGL.vertex2f(left, bottom);
gGL.vertex2f(right, bottom);
@@ -612,9 +612,9 @@ void LLWorldMapView::draw()
{
gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color3f(1.f, 0.f, 0.f);
- gGL.begin(LLVertexBuffer::LINES);
+ gGL.begin(LLRender::LINES);
gGL.vertex2f(left, top);
gGL.vertex2f(right, bottom);
gGL.vertex2f(left, bottom);
@@ -683,7 +683,7 @@ void LLWorldMapView::draw()
// Draw background rectangle
LLGLSUIDefault gls_ui;
{
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA);
gGL.color4fv( mBackgroundColor.mV );
@@ -969,7 +969,7 @@ void LLWorldMapView::drawFrustum()
F32 ctr_x = getRect().getWidth() * 0.5f + sPanX;
F32 ctr_y = getRect().getHeight() * 0.5f + sPanY;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Since we don't rotate the map, we have to rotate the frustum.
gGL.pushMatrix();
@@ -978,7 +978,7 @@ void LLWorldMapView::drawFrustum()
// Draw triangle with more alpha in far pixels to make it
// fade out in distance.
- gGL.begin( LLVertexBuffer::TRIANGLES );
+ gGL.begin( LLRender::TRIANGLES );
gGL.color4f(1.f, 1.f, 1.f, 0.25f);
gGL.vertex2f( 0, 0 );
@@ -1184,11 +1184,11 @@ static void drawDot(F32 x_pixels, F32 y_pixels,
F32 top = y_pixels + dot_radius;
F32 bottom = y_pixels - dot_radius;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.color4fv( color.mV );
LLUI::setLineWidth(1.5f);
F32 h_bar = relative_z > HEIGHT_THRESHOLD ? top : bottom; // horizontal bar Y
- gGL.begin( LLVertexBuffer::LINES );
+ gGL.begin( LLRender::LINES );
gGL.vertex2f(center, top);
gGL.vertex2f(left, h_bar);
gGL.vertex2f(right, h_bar);
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 2bd1831946..817331b990 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -330,8 +330,15 @@ void LLPipeline::init()
mRenderDebugFeatureMask = 0xffffffff; // All debugging features on
mRenderDebugMask = 0; // All debug starts off
+ // Don't turn on ground when this is set
+ // Mac Books with intel 950s need this
+ if(!gSavedSettings.getBOOL("RenderGround"))
+ {
+ toggleRenderType(RENDER_TYPE_GROUND);
+ }
+
mOldRenderDebugMask = mRenderDebugMask;
-
+
mBackfaceCull = TRUE;
stop_glerror();
@@ -454,7 +461,7 @@ void LLPipeline::resizeScreenTexture()
}
mScreen.release();
- mScreen.allocate(resX, resY, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB);
+ mScreen.allocate(resX, resY, GL_RGBA, TRUE, LLTexUnit::TT_RECT_TEXTURE);
llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl;
}
@@ -556,7 +563,7 @@ void LLPipeline::createGLBuffers()
for (U32 j = 0; j < 3; j++)
{
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mBlurCubeTexture[j]);
+ gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_CUBE_MAP, mBlurCubeTexture[j]);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
@@ -583,10 +590,11 @@ void LLPipeline::createGLBuffers()
mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE);
}
+
GLuint resX = gViewerWindow->getWindowDisplayWidth();
GLuint resY = gViewerWindow->getWindowDisplayHeight();
-
- mScreen.allocate(resX, resY, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB);
+
+ mScreen.allocate(resX, resY, GL_RGBA, TRUE, LLTexUnit::TT_RECT_TEXTURE);
}
}
@@ -1212,7 +1220,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
LLVertexBuffer::unbind();
LLGLDisable blend(GL_BLEND);
LLGLDisable test(GL_ALPHA_TEST);
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
gGL.setColorMask(false, false);
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
@@ -1357,7 +1365,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
}
LLGLDisable blend(GL_BLEND);
LLGLDisable test(GL_ALPHA_TEST);
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
if (LLPipeline::sUseOcclusion > 1)
@@ -2368,7 +2376,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
sUnderWaterRender = FALSE;
}
- LLViewerImage::sDefaultImagep->bind(0);
+ gGL.getTexUnit(0)->bind(LLViewerImage::sDefaultImagep);
LLViewerImage::sDefaultImagep->setClamp(FALSE, FALSE);
//////////////////////////////////////////////
@@ -2604,11 +2612,11 @@ void LLPipeline::renderDebug()
// Debug composition layers
F32 x, y;
- LLGLSNoTexture gls_no_texture;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
if (gAgent.getRegion())
{
- gGL.begin(LLVertexBuffer::POINTS);
+ gGL.begin(LLRender::POINTS);
// Draw the composition layer for the region that I'm in.
for (x = 0; x <= 260; x++)
{
@@ -2654,6 +2662,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render
LLGLSDefault gls_default;
LLGLSObjectSelect gls_object_select;
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest gls_depth(GL_TRUE,GL_TRUE);
disableLights();
@@ -3458,7 +3467,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
atten = x / (light_radius); // % of brightness at radius
quad = 0.0f;
}
- //mHWLightColors[cur_light] = light_color;
+ mHWLightColors[2] = light_color;
S32 gllight = GL_LIGHT2;
glLightfv(gllight, GL_POSITION, light_pos_gl.mV);
glLightfv(gllight, GL_DIFFUSE, light_color.mV);
@@ -3999,6 +4008,7 @@ BOOL LLPipeline::getRenderHighlights(void*)
}
LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit,
LLVector3* intersection, // return the intersection point
LLVector2* tex_coord, // return the texture coordinates of the intersection point
@@ -4008,6 +4018,10 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
{
LLDrawable* drawable = NULL;
+ LLVector3 local_end = end;
+
+ LLVector3 position;
+
for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
{
@@ -4015,24 +4029,49 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
for (U32 j = 0; j < LLViewerRegion::NUM_PARTITIONS; j++)
{
- if ((j == LLViewerRegion::PARTITION_VOLUME) || (j == LLViewerRegion::PARTITION_BRIDGE)) // only check these partitions for now
+ if ((j == LLViewerRegion::PARTITION_VOLUME) ||
+ (j == LLViewerRegion::PARTITION_BRIDGE) ||
+ (j == LLViewerRegion::PARTITION_TERRAIN) ||
+ (j == LLViewerRegion::PARTITION_TREE) ||
+ (j == LLViewerRegion::PARTITION_GRASS)) // only check these partitions for now
{
LLSpatialPartition* part = region->getSpatialPartition(j);
- if (part)
+ if (part && hasRenderType(part->mDrawableType))
{
- LLDrawable* hit = part->lineSegmentIntersect(start, end, face_hit, intersection, tex_coord, normal, bi_normal);
+ LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal);
if (hit)
{
drawable = hit;
+ local_end = position;
}
}
}
}
}
+
+ //check all avatar nametags (silly, isn't it?)
+ for (std::vector< LLCharacter* >::iterator iter = LLCharacter::sInstances.begin();
+ iter != LLCharacter::sInstances.end();
+ ++iter)
+ {
+ LLVOAvatar* av = (LLVOAvatar*) *iter;
+ if (av->mNameText.notNull() && av->mNameText->lineSegmentIntersect(start, local_end, position))
+ {
+ drawable = av->mDrawable;
+ local_end = position;
+ }
+ }
+
+ if (intersection)
+ {
+ *intersection = position;
+ }
+
return drawable ? drawable->getVObj().get() : NULL;
}
LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit,
LLVector3* intersection, // return the intersection point
LLVector2* tex_coord, // return the texture coordinates of the intersection point
@@ -4047,15 +4086,27 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector3& start, co
{
LLViewerRegion* region = *iter;
+ BOOL toggle = FALSE;
+ if (!hasRenderType(LLPipeline::RENDER_TYPE_HUD))
+ {
+ toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
+ toggle = TRUE;
+ }
+
LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_HUD);
if (part)
{
- LLDrawable* hit = part->lineSegmentIntersect(start, end, face_hit, intersection, tex_coord, normal, bi_normal);
+ LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, bi_normal);
if (hit)
{
drawable = hit;
}
}
+
+ if (toggle)
+ {
+ toggleRenderType(LLPipeline::RENDER_TYPE_HUD);
+ }
}
return drawable ? drawable->getVObj().get() : NULL;
}
@@ -4209,7 +4260,8 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
LLPipeline::sReflectionRender = TRUE;
- cube_map->bind();
+ gGL.getTexUnit(cube_map->getStage())->bind(cube_map);
+ gGL.getTexUnit(0)->activate();
GLint width;
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
@@ -4221,8 +4273,10 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
glTexImage2D(gl_cube_face[i], 0, GL_RGBA, res, res, 0, GL_RGBA, GL_FLOAT, NULL);
}
}
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
- cube_map->disable();
+ gGL.getTexUnit(cube_map->getStage())->unbind(LLTexUnit::TT_CUBE_MAP);
+ gGL.getTexUnit(cube_map->getStage())->disable();
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
BOOL toggle_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI);
if (toggle_ui)
@@ -4266,7 +4320,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
gPipeline.calcNearbyLights(cube_cam);
stop_glerror();
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mCubeFrameBuffer);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
GL_RENDERBUFFER_EXT, mCubeDepth);
@@ -4422,7 +4476,8 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glPushMatrix();
cube_out->enableTexture(0);
- cube_out->bind();
+ gGL.getTexUnit(cube_out->getStage())->bind(cube_out);
+ gGL.getTexUnit(0)->activate();
GLint width;
glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
if (width != res)
@@ -4434,8 +4489,8 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glTexImage2D(gl_cube_face[i], 0, GL_RGBA, res, res, 0, GL_RGBA, GL_FLOAT, NULL);
}
}
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
-
+ gGL.getTexUnit(cube_out->getStage())->unbind(LLTexUnit::TT_CUBE_MAP);
+ gGL.getTexUnit(0)->activate();
glViewport(0, 0, res, res);
LLGLEnable blend(GL_BLEND);
@@ -4463,16 +4518,17 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
if (j == 0)
{
- cube_in->bind();
+ gGL.getTexUnit(cube_in->getStage())->bind(cube_in);
}
else
{
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mBlurCubeTexture[j-1]);
+ gGL.getTexUnit(cube_in->getStage())->bindManual(LLTexUnit::TT_CUBE_MAP, mBlurCubeTexture[j-1]);
}
+ gGL.getTexUnit(0)->activate();
stop_glerror();
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mBlurCubeBuffer[j]);
stop_glerror();
@@ -4501,7 +4557,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
stop_glerror();
- glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
+ gGL.getTexUnit(cube_in->getStage())->unbind(LLTexUnit::TT_CUBE_MAP);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
gGL.setColorMask(true, false);
@@ -4510,7 +4566,8 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
- cube_in->disableTexture();
+ gGL.getTexUnit(cube_in->getStage())->disable();
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gViewerWindow->setupViewport();
gGL.setSceneBlendType(LLRender::BT_ALPHA);
@@ -4578,7 +4635,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
if (for_snapshot)
{
- mGlow[1].bindTexture();
+ gGL.getTexUnit(0)->bind(&mGlow[1]);
{
//LLGLEnable stencil(GL_STENCIL_TEST);
//glStencilFunc(GL_NOTEQUAL, 255, 0xFFFFFFFF);
@@ -4587,7 +4644,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLEnable blend(GL_BLEND);
gGL.setSceneBlendType(LLRender::BT_ADD);
tc2.setVec(1,1);
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.color4f(1,1,1,1);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
gGL.vertex2f(-1,-1);
@@ -4637,15 +4694,15 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLEnable test(GL_ALPHA_TEST);
gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
- glDisable(GL_TEXTURE_2D);
- glEnable(GL_TEXTURE_RECTANGLE_ARB);
- mScreen.bindTexture();
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->disable();
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_RECT_TEXTURE);
+ gGL.getTexUnit(0)->bind(&mScreen);
gGL.color4f(1,1,1,1);
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
gGL.vertex2f(-1,-1);
@@ -4659,8 +4716,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGL.vertex2f(1,1);
gGL.end();
- glEnable(GL_TEXTURE_2D);
- glDisable(GL_TEXTURE_RECTANGLE_ARB);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
mGlow[2].flush();
}
@@ -4690,7 +4746,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
for (S32 i = 0; i < kernel; i++)
{
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
{
LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM_FBO);
mGlow[i%2].bindTarget();
@@ -4699,11 +4755,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
if (i == 0)
{
- mGlow[2].bindTexture();
+ gGL.getTexUnit(0)->bind(&mGlow[2]);
}
else
{
- mGlow[(i-1)%2].bindTexture();
+ gGL.getTexUnit(0)->bind(&mGlow[(i-1)%2]);
}
if (i%2 == 0)
@@ -4715,7 +4771,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGlowProgram.uniform2f("glowDelta", 0, delta);
}
- gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
+ gGL.begin(LLRender::TRIANGLE_STRIP);
gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
gGL.vertex2f(-1,-1);
@@ -4780,8 +4836,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
LLGLEnable blend(GL_BLEND);
gGL.blendFunc(GL_ONE, GL_ONE);
- glDisable(GL_TEXTURE_2D);
- glEnable(GL_TEXTURE_RECTANGLE_ARB);
+ gGL.getTexUnit(0)->disable();
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_RECT_TEXTURE);
mScreen.bindTexture();
gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
@@ -4801,8 +4857,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
gGL.flush();
- glEnable(GL_TEXTURE_2D);
- glDisable(GL_TEXTURE_RECTANGLE_ARB);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}*/
@@ -4847,12 +4902,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
//tex unit 0
gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
-
- mGlow[1].bindTexture();
+
+ gGL.getTexUnit(0)->bind(&mGlow[1]);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, uv0);
gGL.getTexUnit(1)->activate();
- glEnable(GL_TEXTURE_RECTANGLE_ARB);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_RECT_TEXTURE);
//tex unit 1
gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
@@ -4863,14 +4918,16 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
glVertexPointer(2, GL_FLOAT, 0, v);
- mScreen.bindTexture();
+ gGL.getTexUnit(1)->bind(&mScreen);
+ gGL.getTexUnit(1)->activate();
LLGLEnable multisample(GL_MULTISAMPLE_ARB);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
- glDisable(GL_TEXTURE_RECTANGLE_ARB);
+ gGL.getTexUnit(1)->disable();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
+
glClientActiveTextureARB(GL_TEXTURE0_ARB);
gGL.getTexUnit(0)->activate();
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4948,7 +5005,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
if (!LLViewerCamera::getInstance()->cameraUnderWater())
{ //generate planar reflection map
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
glClearColor(0,0,0,0);
gGL.setColorMask(true, true);
mWaterRef.bindTarget();
@@ -5053,7 +5110,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
}
LLViewerCamera::updateFrustumPlanes(camera);
- LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLColor4& col = LLDrawPoolWater::sWaterFogColor;
glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
gGL.setColorMask(true, true);
@@ -5230,10 +5287,10 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
resY != avatar->mImpostor.getHeight())
{
avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE);
- avatar->mImpostor.bindTexture();
+ gGL.getTexUnit(0)->bind(&avatar->mImpostor);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
{
@@ -5270,13 +5327,13 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
}
gGL.setSceneBlendType(LLRender::BT_ADD);
- LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
gGL.color4f(1,1,1,1);
gGL.color4ub(64,64,64,255);
- gGL.begin(LLVertexBuffer::QUADS);
+ gGL.begin(LLRender::QUADS);
gGL.vertex3fv((pos+left-up).mV);
gGL.vertex3fv((pos-left-up).mV);
gGL.vertex3fv((pos-left+up).mV);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 4ba6f39456..bacfed0aed 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -131,6 +131,7 @@ public:
//get the object between start and end that's closest to start.
LLViewerObject* lineSegmentIntersectInWorld(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit, // return the face hit
LLVector3* intersection = NULL, // return the intersection point
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
@@ -138,6 +139,7 @@ public:
LLVector3* bi_normal = NULL // return the surface bi-normal at the intersection point
);
LLViewerObject* lineSegmentIntersectInHUD(const LLVector3& start, const LLVector3& end,
+ BOOL pick_transparent,
S32* face_hit, // return the face hit
LLVector3* intersection = NULL, // return the intersection point
LLVector2* tex_coord = NULL, // return the texture coordinates of the intersection point
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 88fbfd4ba5..feeb528721 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -3,7 +3,7 @@
<text length="1" name="text_box" type="string">
Chat-Schriftgröße:
</text>
- <radio_group name="chat font size">
+ <radio_group name="chat_font_size">
<radio_item length="1" name="radio" type="string">
Klein
</radio_item>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index ddd7f598ca..de044f11bd 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -4,7 +4,7 @@
Taille de la police
du chat :
</text>
- <radio_group name="chat font size">
+ <radio_group name="chat_font_size">
<radio_item type="string" length="1" name="radio">
Petite
</radio_item>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index 1ad08fb553..96a4bc3d99 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -3,7 +3,7 @@
<text length="1" name="text_box" type="string">
チャットのフォント:
</text>
- <radio_group name="chat font size">
+ <radio_group name="chat_font_size">
<radio_item length="1" name="radio" type="string">
</radio_item>