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 +