diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 2c1842a74..31d48f2ab 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -1349,12 +1349,12 @@ void LLFontGL::renderQuad(LLVector4a* vertex_out, LLVector2* uv_out, LLColor4U*
colors_out[index] = color;
index++;
- vertex_out[index].set(screen_rect.mLeft, screen_rect.mBottom, 0.f);
+ vertex_out[index].set(screen_rect.mLeft + slant_amt, screen_rect.mBottom, 0.f);
uv_out[index] = LLVector2(uv_rect.mLeft, uv_rect.mBottom);
colors_out[index] = color;
index++;
- vertex_out[index].set(screen_rect.mRight, screen_rect.mBottom, 0.f);
+ vertex_out[index].set(screen_rect.mRight + slant_amt, screen_rect.mBottom, 0.f);
uv_out[index] = LLVector2(uv_rect.mRight, uv_rect.mBottom);
colors_out[index] = color;
}
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index c9cb86cfa..8dab8bbc8 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -1224,6 +1224,7 @@ void LLShaderMgr::initAttribsAndUniforms()
mReservedUniforms.push_back("env_intensity");
mReservedUniforms.push_back("matrixPalette");
+ mReservedUniforms.push_back("translationPalette");
mReservedUniforms.push_back("screenTex");
mReservedUniforms.push_back("screenDepth");
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 7dccf47b1..5cf22f58f 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -178,6 +178,7 @@ public:
ENVIRONMENT_INTENSITY,
AVATAR_MATRIX,
+ AVATAR_TRANSLATION,
WATER_SCREENTEX,
WATER_SCREENDEPTH,
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index e32589412..1b163ee4c 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -1850,6 +1850,7 @@ void LLVertexBuffer::unmapBuffer()
else
{
stop_glerror();
+ glBufferDataARB(GL_ARRAY_BUFFER_ARB, getSize(), NULL, mUsage);
glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, getSize(), (U8*) mMappedData);
stop_glerror();
}
@@ -1916,6 +1917,7 @@ void LLVertexBuffer::unmapBuffer()
else
{
stop_glerror();
+ glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, getIndicesSize(), NULL, mUsage);
glBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, getIndicesSize(), (U8*) mMappedIndexData);
stop_glerror();
}
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index f8998e40a..f7a658ad6 100644
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -760,7 +760,7 @@ LLView* LLScrollContainer::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFa
node->getAttributeString("name", name);
LLRect rect;
- createRect(node, rect, parent, LLRect());
+ U32 follows_flags = createRect(node, rect, parent, LLRect());
BOOL opaque = FALSE;
node->getAttributeBOOL("opaque", opaque);
@@ -771,6 +771,10 @@ LLView* LLScrollContainer::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFa
// Create the scroll view
LLScrollContainer *ret = new LLScrollContainer(name, rect, (LLPanel*)NULL, opaque, color);
+ // Obey xml follows
+ ret->setFollows(follows_flags);
+ ret->parseFollowsFlags(node);
+
LLPanel* panelp = NULL;
// Find a child panel to add
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index aae767e1a..5ae818d87 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -209,6 +209,7 @@ public:
BOOL focusNextItem(BOOL text_entry_only);
BOOL focusPrevItem(BOOL text_entry_only);
+ virtual // Singu Note: focusFirstItem is overridden for our old chat ui to prevent focusing on topmost uictrls.
BOOL focusFirstItem(BOOL prefer_text_fields = FALSE, BOOL focus_flash = TRUE );
BOOL focusLastItem(BOOL prefer_text_fields = FALSE);
diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp
index 3d91fafe8..174b5c8f7 100644
--- a/indra/lscript/lscript_library/lscript_library.cpp
+++ b/indra/lscript/lscript_library/lscript_library.cpp
@@ -540,6 +540,11 @@ void LLScriptLibrary::init()
addFunction(0.f, 0.f, dummy_func, "llGetAnimationOverride", "s", "s");
addFunction(0.f, 0.f, dummy_func, "llResetAnimationOverride", NULL, "s");
+ // Server RC LeTigre 13.12.20.285035 new function
+ addFunction(10.f, 0.f, dummy_func, "llScaleByFactor" , "i", "f");
+ addFunction(10.f, 0.f, dummy_func, "llGetMinScaleFactor" , "f", NULL);
+ addFunction(10.f, 0.f, dummy_func, "llGetMaxScaleFactor" , "f", NULL);
+
// SL-LSL Functions to be added above this line
// ---------------------------------------------
// NOTE bytecode placement no longer applies, viewers do not compile scripts anymore (confirmed with LL, also noted by Phoenix/Firestorm team.)
diff --git a/indra/newview/app_settings/lsl_functions_sl.xml b/indra/newview/app_settings/lsl_functions_sl.xml
index 31a455888..00265df88 100644
--- a/indra/newview/app_settings/lsl_functions_sl.xml
+++ b/indra/newview/app_settings/lsl_functions_sl.xml
@@ -1039,5 +1039,12 @@
llXorBase64
+
+ llScaleByFactor
+
+ llGetMinScaleFactor
+
+ llGetMaxScaleFactor
+
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
index 4005341c6..8eb5a977b 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
@@ -22,30 +22,46 @@
* $/LicenseInfo$
*/
-
-
ATTRIBUTE vec4 weight4;
-uniform mat4 matrixPalette[32];
+uniform mat3 matrixPalette[52];
+uniform vec3 translationPalette[52];
mat4 getObjectSkinnedTransform()
{
- float w0 = fract(weight4.x);
- float w1 = fract(weight4.y);
- float w2 = fract(weight4.z);
- float w3 = fract(weight4.w);
+ int i;
- int i0 = int(floor(weight4.x));
- int i1 = int(floor(weight4.y));
- int i2 = int(floor(weight4.z));
- int i3 = int(floor(weight4.w));
+ vec4 w = fract(weight4);
+ vec4 index = floor(weight4);
- //float scale = 1.0/(w.x+w.y+w.z+w.w);
- //w *= scale;
- mat4 mat = matrixPalette[i0]*w0;
- mat += matrixPalette[i1]*w1;
- mat += matrixPalette[i2]*w2;
- mat += matrixPalette[i3]*w3;
+ index = min(index, vec4(63.0));
+ index = max(index, vec4( 0.0));
- return mat;
+ float scale = 1.0/(w.x+w.y+w.z+w.w);
+ w *= scale;
+
+ int i1 = int(index.x);
+ int i2 = int(index.y);
+ int i3 = int(index.z);
+ int i4 = int(index.w);
+
+ mat3 mat = matrixPalette[i1]*w.x;
+ mat += matrixPalette[i2]*w.y;
+ mat += matrixPalette[i3]*w.z;
+ mat += matrixPalette[i4]*w.w;
+
+ vec3 trans = translationPalette[i1]*w.x;
+ trans += translationPalette[i2]*w.y;
+ trans += translationPalette[i3]*w.z;
+ trans += translationPalette[i4]*w.w;
+
+ mat4 ret;
+
+ ret[0] = vec4(mat[0], 0);
+ ret[1] = vec4(mat[1], 0);
+ ret[2] = vec4(mat[2], 0);
+ ret[3] = vec4(trans, 1.0);
+
+ return ret;
}
+
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 48e6205bc..d65f1e09b 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -3563,7 +3563,11 @@
+ pos="0.07 0 -0.02"/>
+
@@ -3582,7 +3586,16 @@
camera_elevation=".1"
camera_distance="1"
camera_angle="15">
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
@@ -3732,6 +3767,10 @@
scale="-0.01 -0.01 0.0"
pos="0.01 0.0 0"/>
+
@@ -3780,6 +3819,32 @@
scale="0.02 0.03 0.03"
pos="0 0 -0.03"/>
+
+
+
+
+
+
+
@@ -3832,7 +3897,16 @@
value_max="2"
camera_elevation=".3"
camera_distance=".8">
-
+
+
+
+
+
+
+
@@ -3901,7 +3984,16 @@
value_max="1.3"
camera_elevation=".3"
camera_distance=".8">
-
+
+
+
+
-
+
+
+
+
llGodLikeRezObject( key inventory, vector pos )
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
index baafc1931..4768b0874 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
@@ -6,6 +6,7 @@
+
@@ -23,6 +24,7 @@
secondes
+