diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2009-09-26 18:08:24 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2009-09-26 18:08:24 -0400 |
commit | bc4444cd78067cbf11d3ffb210375a31a33f96bd (patch) | |
tree | d9b8e78db237869e630fec6c71335d1294cec101 /indra | |
parent | 8ddc0c0ac43e9d10bf0262cd1ab3c0e79808fc14 (diff) | |
parent | 09bf3c1fec107e9e66514837d208ef62a6b67b91 (diff) |
Merge into viewer/viewer-20 yesterday's lindenlab/svn-imports-viewer-20
Diffstat (limited to 'indra')
712 files changed, 20989 insertions, 10661 deletions
diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt index 84e3477ce6..452d37d3be 100644 --- a/indra/integration_tests/llui_libtest/CMakeLists.txt +++ b/indra/integration_tests/llui_libtest/CMakeLists.txt @@ -57,6 +57,8 @@ if (DARWIN) find_library(COCOA_LIBRARY Cocoa) set(OS_LIBRARIES ${COCOA_LIBRARY}) elseif (WINDOWS) + #ll_stack_trace needs this now... + list(APPEND WINDOWS_LIBRARIES dbghelp) set(OS_LIBRARIES ${WINDOWS_LIBRARIES}) elseif (LINUX) set(OS_LIBRARIES) @@ -95,6 +97,7 @@ if (WINDOWS) COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR} ) + endif (WINDOWS) # Ensure people working on the viewer don't break this library diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index c0b0d72d9b..4836d41fb3 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -286,6 +286,7 @@ const U8 UPD_UNIFORM = 0x10; // used with UPD_SCALE // Agent Update Flags (U8) const U8 AU_FLAGS_NONE = 0x00; const U8 AU_FLAGS_HIDETITLE = 0x01; +const U8 AU_FLAGS_CLIENT_AUTOPILOT = 0x02; // start location constants const U32 START_LOCATION_ID_LAST = 0; diff --git a/indra/llcommon/lllslconstants.h b/indra/llcommon/lllslconstants.h index 7cd854febd..a626e3f085 100644 --- a/indra/llcommon/lllslconstants.h +++ b/indra/llcommon/lllslconstants.h @@ -48,6 +48,7 @@ const U32 AGENT_TYPING = 0x0200; const U32 AGENT_CROUCHING = 0x0400; const U32 AGENT_BUSY = 0x0800; const U32 AGENT_ALWAYS_RUN = 0x1000; +const U32 AGENT_AUTOPILOT = 0x2000; const S32 LSL_REMOTE_DATA_CHANNEL = 1; const S32 LSL_REMOTE_DATA_REQUEST = 2; diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 8052da2450..6516d1779e 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -155,7 +155,7 @@ S32 wchar_to_utf8chars(llwchar in_char, char* outchars) *outchars++ = 0xF0 | (cur_char >> 18); *outchars++ = 0x80 | ((cur_char >> 12) & 0x3F); *outchars++ = 0x80 | ((cur_char >> 6) & 0x3F); - *outchars++ = 0x80 | cur_char & 0x3F; + *outchars++ = 0x80 | (cur_char & 0x3F); } else if (cur_char < 0x4000000) { @@ -163,7 +163,7 @@ S32 wchar_to_utf8chars(llwchar in_char, char* outchars) *outchars++ = 0x80 | ((cur_char >> 18) & 0x3F); *outchars++ = 0x80 | ((cur_char >> 12) & 0x3F); *outchars++ = 0x80 | ((cur_char >> 6) & 0x3F); - *outchars++ = 0x80 | cur_char & 0x3F; + *outchars++ = 0x80 | (cur_char & 0x3F); } else if (cur_char < 0x80000000) { @@ -172,7 +172,7 @@ S32 wchar_to_utf8chars(llwchar in_char, char* outchars) *outchars++ = 0x80 | ((cur_char >> 18) & 0x3F); *outchars++ = 0x80 | ((cur_char >> 12) & 0x3F); *outchars++ = 0x80 | ((cur_char >> 6) & 0x3F); - *outchars++ = 0x80 | cur_char & 0x3F; + *outchars++ = 0x80 | (cur_char & 0x3F); } else { diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp index 0f343bcefe..21ea4b2e7c 100644 --- a/indra/llmath/llcamera.cpp +++ b/indra/llmath/llcamera.cpp @@ -178,7 +178,7 @@ S32 LLCamera::AABBInFrustum(const LLVector3 ¢er, const LLVector3& radius) U8 mask = 0; S32 result = 2; - if (radius.magVecSquared() > mFrustumCornerDist * mFrustumCornerDist) + /*if (mFrustumCornerDist > 0.f && radius.magVecSquared() > mFrustumCornerDist * mFrustumCornerDist) { //box is larger than frustum, check frustum quads against box planes static const LLVector3 dir[] = @@ -241,11 +241,15 @@ S32 LLCamera::AABBInFrustum(const LLVector3 ¢er, const LLVector3& radius) result = 1; } } - else + else*/ { for (U32 i = 0; i < mPlaneCount; i++) { mask = mAgentPlanes[i].mask; + if (mask == 0xff) + { + continue; + } LLPlane p = mAgentPlanes[i].p; LLVector3 n = LLVector3(p); float d = p.mV[3]; @@ -294,6 +298,10 @@ S32 LLCamera::AABBInFrustumNoFarClip(const LLVector3 ¢er, const LLVector3& r } mask = mAgentPlanes[i].mask; + if (mask == 0xff) + { + continue; + } LLPlane p = mAgentPlanes[i].p; LLVector3 n = LLVector3(p); float d = p.mV[3]; @@ -437,6 +445,11 @@ int LLCamera::sphereInFrustum(const LLVector3 &sphere_center, const F32 radius) int res = 2; for (int i = 0; i < 6; i++) { + if (mAgentPlanes[i].mask == 0xff) + { + continue; + } + float d = mAgentPlanes[i].p.dist(sphere_center); if (d > radius) @@ -622,6 +635,17 @@ U8 LLCamera::calcPlaneMask(const LLPlane& plane) return mask; } +void LLCamera::ignoreAgentFrustumPlane(S32 idx) +{ + if (idx < 0 || idx > (S32) mPlaneCount) + { + return; + } + + mAgentPlanes[idx].mask = 0xff; + mAgentPlanes[idx].p.clearVec(); +} + void LLCamera::calcAgentFrustumPlanes(LLVector3* frust) { diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h index 23ee1157f9..0c81067919 100644 --- a/indra/llmath/llcamera.h +++ b/indra/llmath/llcamera.h @@ -93,6 +93,17 @@ public: PLANE_TOP_MASK = (1<<PLANE_TOP), PLANE_ALL_MASK = 0xf }; + + enum + { + AGENT_PLANE_LEFT = 0, + AGENT_PLANE_RIGHT, + AGENT_PLANE_NEAR, + AGENT_PLANE_BOTTOM, + AGENT_PLANE_TOP, + AGENT_PLANE_FAR, + }; + enum { HORIZ_PLANE_LEFT = 0, HORIZ_PLANE_RIGHT = 1, @@ -132,7 +143,8 @@ private: public: LLVector3 mAgentFrustum[8]; //8 corners of 6-plane frustum F32 mFrustumCornerDist; //distance to corner of frustum against far clip plane - + LLPlane getAgentPlane(U32 idx) { return mAgentPlanes[idx].p; } + public: LLCamera(); LLCamera(F32 vertical_fov_rads, F32 aspect_ratio, S32 view_height_in_pixels, F32 near_plane, F32 far_plane); @@ -179,6 +191,8 @@ public: // Return number of bytes copied. size_t readFrustumFromBuffer(const char *buffer); void calcAgentFrustumPlanes(LLVector3* frust); + void ignoreAgentFrustumPlane(S32 idx); + // Returns 1 if partly in, 2 if fully in. // NOTE: 'center' is in absolute frame. S32 sphereInFrustumOld(const LLVector3 ¢er, const F32 radius) const; diff --git a/indra/llmath/llrect.h b/indra/llmath/llrect.h index c03a331aff..2fa8cb3f16 100644 --- a/indra/llmath/llrect.h +++ b/indra/llmath/llrect.h @@ -42,6 +42,7 @@ template <class Type> class LLRectBase { public: + typedef Type tCoordType; Type mLeft; Type mTop; Type mRight; diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index a0357a32cc..5cc0a596fd 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -84,6 +84,7 @@ const F32 SKEW_MIN = -0.95f; const F32 SKEW_MAX = 0.95f; const F32 SCULPT_MIN_AREA = 0.002f; +const S32 SCULPT_MIN_AREA_DETAIL = 1; BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm) { @@ -2230,10 +2231,14 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, if (!data_is_empty) { sculptGenerateMapVertices(sculpt_width, sculpt_height, sculpt_components, sculpt_data, sculpt_type); - - if (sculptGetSurfaceArea() < SCULPT_MIN_AREA) + + // don't test lowest LOD to support legacy content DEV-33670 + if (mDetail > SCULPT_MIN_AREA_DETAIL) { - data_is_empty = TRUE; + if (sculptGetSurfaceArea() < SCULPT_MIN_AREA) + { + data_is_empty = TRUE; + } } } diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h index 805d7e6384..06a4f5c542 100644 --- a/indra/llmath/v3math.h +++ b/indra/llmath/v3math.h @@ -409,8 +409,8 @@ inline bool operator<(const LLVector3 &a, const LLVector3 &b) return (a.mV[0] < b.mV[0] || (a.mV[0] == b.mV[0] && (a.mV[1] < b.mV[1] - || (a.mV[1] == b.mV[1]) - && a.mV[2] < b.mV[2]))); + || ((a.mV[1] == b.mV[1]) + && a.mV[2] < b.mV[2])))); } inline const LLVector3& operator+=(LLVector3 &a, const LLVector3 &b) diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp index 71c1df8f99..223a23949b 100644 --- a/indra/llmessage/lliobuffer.cpp +++ b/indra/llmessage/lliobuffer.cpp @@ -87,7 +87,7 @@ LLIOPipe::EStatus LLIOBuffer::seek(LLIOBuffer::EHead head, S64 delta) { case READ: if(((delta >= 0) && ((mReadHead + delta) <= mWriteHead)) - || (delta < 0) && ((mReadHead + delta) >= mBuffer)) + || ((delta < 0) && ((mReadHead + delta) >= mBuffer))) { mReadHead += delta; status = STATUS_OK; @@ -95,7 +95,7 @@ LLIOPipe::EStatus LLIOBuffer::seek(LLIOBuffer::EHead head, S64 delta) break; case WRITE: if(((delta >= 0) && ((mWriteHead + delta) < (mBuffer + mBufferSize))) - || (delta < 0) && ((mWriteHead + delta) > mReadHead)) + || ((delta < 0) && ((mWriteHead + delta) > mReadHead))) { mWriteHead += delta; status = STATUS_OK; diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index dcfb5cfae6..4e733ff56a 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -1908,4 +1908,3 @@ bool LLLightImageParams::fromLLSD(LLSD& sd) return false; } - diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 7e1df0e565..10315bacf1 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -64,6 +64,8 @@ BOOL gDebugSession = FALSE; BOOL gDebugGL = FALSE; BOOL gClothRipple = FALSE; BOOL gNoRender = FALSE; +BOOL gGLActive = FALSE; + std::ofstream gFailLog; @@ -107,6 +109,7 @@ LLMatrix4 gGLObliqueProjectionInverse; #define LL_GL_NAME_POOLING 0 LLGLNamePool::pool_list_t LLGLNamePool::sInstances; +std::list<LLGLUpdate*> LLGLUpdate::sGLQ; #if (LL_WINDOWS || LL_LINUX || LL_SOLARIS) && !LL_MESA_HEADLESS // ATI prototypes @@ -1013,6 +1016,16 @@ void flush_glerror() void assert_glerror() { + if (!gGLActive) + { + //llwarns << "GL used while not active!" << llendl; + + if (gDebugSession) + { + //ll_fail("GL used while not active"); + } + } + if (gNoRender || !gDebugGL) { return; @@ -1258,8 +1271,10 @@ void LLGLState::checkTextureChannels(const std::string& msg) }; GLint stackDepth = 0; - LLMatrix4 identity; - LLMatrix4 matrix; + + glh::matrix4f mat; + glh::matrix4f identity; + identity.identity(); for (GLint i = 1; i < maxTextureUnits; i++) { @@ -1280,10 +1295,10 @@ void LLGLState::checkTextureChannels(const std::string& msg) } } - glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) matrix.mMatrix); + glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) mat.m); stop_glerror(); - if (matrix != identity) + if (mat != identity) { error = TRUE; LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL; @@ -1309,10 +1324,6 @@ void LLGLState::checkTextureChannels(const std::string& msg) stop_glerror(); } - glh::matrix4f mat; - glh::matrix4f identity; - identity.identity(); - glGetFloatv(GL_TEXTURE_MATRIX, mat.m); stop_glerror(); diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 34dd982259..91421f3c95 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -37,6 +37,7 @@ #include <string> #include <map> +#include <list> #include "llerror.h" #include "v4color.h" @@ -367,6 +368,35 @@ protected: virtual void releaseName(GLuint name) = 0; }; +/* + Interface for objects that need periodic GL updates applied to them. + Used to synchronize GL updates with GL thread. +*/ +class LLGLUpdate +{ +public: + + static std::list<LLGLUpdate*> sGLQ; + + BOOL mInQ; + LLGLUpdate() + : mInQ(FALSE) + { + } + virtual ~LLGLUpdate() + { + if (mInQ) + { + std::list<LLGLUpdate*>::iterator iter = std::find(sGLQ.begin(), sGLQ.end(), this); + if (iter != sGLQ.end()) + { + sGLQ.erase(iter); + } + } + } + virtual void updateGL() = 0; +}; + extern LLMatrix4 gGLObliqueProjectionInverse; #include "llglstates.h" @@ -385,4 +415,6 @@ void parse_gl_version( S32* major, S32* minor, S32* release, std::string* vendor extern BOOL gClothRipple; extern BOOL gNoRender; +extern BOOL gGLActive; + #endif // LL_LLGL_H diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 9d2cd4867a..dd64d753c7 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -44,7 +44,6 @@ #include "llgl.h" #include "llrender.h" - //---------------------------------------------------------------------------- const F32 MIN_TEXTURE_LIFETIME = 10.f; @@ -57,12 +56,25 @@ S32 LLImageGL::sGlobalTextureMemoryInBytes = 0; S32 LLImageGL::sBoundTextureMemoryInBytes = 0; S32 LLImageGL::sCurBoundTextureMemory = 0; S32 LLImageGL::sCount = 0; +std::list<U32> LLImageGL::sDeadTextureList; BOOL LLImageGL::sGlobalUseAnisotropic = FALSE; F32 LLImageGL::sLastFrameTime = 0.f; LLImageGL* LLImageGL::sDefaultGLTexture = NULL ; std::set<LLImageGL*> LLImageGL::sImageList; +#if !LL_RELEASE_FOR_DOWNLOAD +//----------------------- +//debug use +#define MAX_TEXTURE_LOG_SIZE 22 //2048 * 2048 +std::vector<S32> LLImageGL::sTextureLoadedCounter(MAX_TEXTURE_LOG_SIZE + 1) ; +std::vector<S32> LLImageGL::sTextureBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ; +std::vector<S32> LLImageGL::sTextureCurBoundCounter(MAX_TEXTURE_LOG_SIZE + 1) ; +S32 LLImageGL::sCurTexSizeBar = -1 ; +S32 LLImageGL::sCurTexPickSize = -1 ; +LLPointer<LLImageGL> LLImageGL::sDefaultTexturep = NULL; +//------------------------ +#endif //************************************************************************************** //below are functions for debug use //do not delete them even though they are not currently being used. @@ -198,6 +210,14 @@ void LLImageGL::updateStats(F32 current_time) sLastFrameTime = current_time; sBoundTextureMemoryInBytes = sCurBoundTextureMemory; sCurBoundTextureMemory = 0; + +#if !LL_RELEASE_FOR_DOWNLOAD + for(U32 i = 0 ; i < sTextureCurBoundCounter.size() ; i++) + { + sTextureBoundCounter[i] = sTextureCurBoundCounter[i] ; + sTextureCurBoundCounter[i] = 0 ; + } +#endif } //static @@ -363,6 +383,10 @@ void LLImageGL::init(BOOL usemipmaps) mGLTextureCreated = FALSE ; mIsMask = FALSE; mNeedsAlphaAndPickMask = TRUE ; + + mDiscardLevelInAtlas = -1 ; + mTexelsInAtlas = 0 ; + mTexelsInGLTexture = 0 ; } void LLImageGL::cleanup() @@ -523,7 +547,7 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips) is_compressed = true; } - gGL.getTexUnit(0)->bind(this); + llverify(gGL.getTexUnit(0)->bind(this)); if (mUseMipMaps) { @@ -728,6 +752,92 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips) llpushcallstacks ; } +BOOL LLImageGL::preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image) +{ + if (gGLManager.mIsDisabled) + { + llwarns << "Trying to create a texture while GL is disabled!" << llendl; + return FALSE; + } + llassert(gGLManager.mInited); + stop_glerror(); + + if (discard_level < 0) + { + llassert(mCurrentDiscardLevel >= 0); + discard_level = mCurrentDiscardLevel; + } + discard_level = llclamp(discard_level, 0, (S32)mMaxDiscardLevel); + + // Actual image width/height = raw image width/height * 2^discard_level + S32 w = raw_image->getWidth() << discard_level; + S32 h = raw_image->getHeight() << discard_level; + + // setSize may call destroyGLTexture if the size does not match + setSize(w, h, raw_image->getComponents()); + + if( !mHasExplicitFormat ) + { + switch (mComponents) + { + case 1: + // Use luminance alpha (for fonts) + mFormatInternal = GL_LUMINANCE8; + mFormatPrimary = GL_LUMINANCE; + mFormatType = GL_UNSIGNED_BYTE; + break; + case 2: + // Use luminance alpha (for fonts) + mFormatInternal = GL_LUMINANCE8_ALPHA8; + mFormatPrimary = GL_LUMINANCE_ALPHA; + mFormatType = GL_UNSIGNED_BYTE; + break; + case 3: + mFormatInternal = GL_RGB8; + mFormatPrimary = GL_RGB; + mFormatType = GL_UNSIGNED_BYTE; + break; + case 4: + mFormatInternal = GL_RGBA8; + mFormatPrimary = GL_RGBA; + mFormatType = GL_UNSIGNED_BYTE; + break; + default: + llerrs << "Bad number of components for texture: " << (U32)getComponents() << llendl; + } + } + + mCurrentDiscardLevel = discard_level; + mDiscardLevelInAtlas = discard_level; + mTexelsInAtlas = raw_image->getWidth() * raw_image->getHeight() ; + mLastBindTime = sLastFrameTime; + mGLTextureCreated = false ; + + glPixelStorei(GL_UNPACK_ROW_LENGTH, raw_image->getWidth()); + stop_glerror(); + + if(mFormatSwapBytes) + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, 1); + stop_glerror(); + } + + return TRUE ; +} + +void LLImageGL::postAddToAtlas() +{ + if(mFormatSwapBytes) + { + glPixelStorei(GL_UNPACK_SWAP_BYTES, 0); + stop_glerror(); + } + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + gGL.getTexUnit(0)->setTextureFilteringOption(mFilterOption); + stop_glerror(); +} + BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S32 x_pos, S32 y_pos, S32 width, S32 height, BOOL force_fast_update) { llpushcallstacks ; @@ -832,7 +942,7 @@ BOOL LLImageGL::setSubImage(const LLImageRaw* imageraw, S32 x_pos, S32 y_pos, S3 // Copy sub image from frame buffer BOOL LLImageGL::setSubImageFromFrameBuffer(S32 fb_x, S32 fb_y, S32 x_pos, S32 y_pos, S32 width, S32 height) { - if (gGL.getTexUnit(0)->bind(this, true)) + if (gGL.getTexUnit(0)->bind(this)) { glCopyTexSubImage2D(GL_TEXTURE_2D, 0, fb_x, fb_y, x_pos, y_pos, width, height); mGLTextureCreated = true; @@ -854,13 +964,17 @@ void LLImageGL::generateTextures(S32 numTextures, U32 *textures) // static void LLImageGL::deleteTextures(S32 numTextures, U32 *textures) { - glDeleteTextures(numTextures, (GLuint*)textures); + for (S32 i = 0; i < numTextures; i++) + { + sDeadTextureList.push_back(textures[i]); + } } // static void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 width, S32 height, U32 pixformat, U32 pixtype, const void *pixels) { glTexImage2D(target, miplevel, intformat, width, height, 0, pixformat, pixtype, pixels); + stop_glerror(); } //create an empty GL texture: just create a texture name @@ -895,12 +1009,12 @@ BOOL LLImageGL::createGLTexture() BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/) { - llpushcallstacks ; if (gGLManager.mIsDisabled) { llwarns << "Trying to create a texture while GL is disabled!" << llendl; return FALSE; } + mGLTextureCreated = false ; llassert(gGLManager.mInited); stop_glerror(); @@ -1023,12 +1137,21 @@ BOOL LLImageGL::createGLTexture(S32 discard_level, const U8* data_in, BOOL data_ if (old_name != 0) { sGlobalTextureMemoryInBytes -= mTextureMemory; +#if !LL_RELEASE_FOR_DOWNLOAD + decTextureCounter(mTextureMemory / mComponents) ; +#endif + LLImageGL::deleteTextures(1, &old_name); stop_glerror(); } mTextureMemory = getMipBytes(discard_level); sGlobalTextureMemoryInBytes += mTextureMemory; + mTexelsInGLTexture = getWidth() * getHeight() ; + +#if !LL_RELEASE_FOR_DOWNLOAD + incTextureCounter(mTextureMemory / mComponents) ; +#endif // mark this as bound at this point, so we don't throw it out immediately mLastBindTime = sLastFrameTime; @@ -1208,32 +1331,48 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre return TRUE ; } -void LLImageGL::destroyGLTexture() +void LLImageGL::deleteDeadTextures() { - if (mTexName != 0) + while (!sDeadTextureList.empty()) { - stop_glerror(); - + GLuint tex = sDeadTextureList.front(); + sDeadTextureList.pop_front(); for (int i = 0; i < gGLManager.mNumTextureUnits; i++) { - if (sCurrentBoundTextures[i] == mTexName) + if (sCurrentBoundTextures[i] == tex) { gGL.getTexUnit(i)->unbind(LLTexUnit::TT_TEXTURE); stop_glerror(); } } - sGlobalTextureMemoryInBytes -= mTextureMemory; - mTextureMemory = 0; + glDeleteTextures(1, &tex); + stop_glerror(); + } +} + +void LLImageGL::destroyGLTexture() +{ + if (mTexName != 0) + { + if(mTextureMemory) + { +#if !LL_RELEASE_FOR_DOWNLOAD + decTextureCounter(mTextureMemory / mComponents) ; +#endif + sGlobalTextureMemoryInBytes -= mTextureMemory; + mTextureMemory = 0; + } LLImageGL::deleteTextures(1, &mTexName); mTexName = 0; mCurrentDiscardLevel = -1 ; //invalidate mCurrentDiscardLevel. mGLTextureCreated = FALSE ; - stop_glerror(); } } + + //---------------------------------------------------------------------------- void LLImageGL::setAddressMode(LLTexUnit::eTextureAddressMode mode) @@ -1259,12 +1398,12 @@ void LLImageGL::setFilteringOption(LLTexUnit::eTextureFilterOptions option) mFilterOption = option; } - if (gGL.getTexUnit(gGL.getCurrentTexUnitIndex())->getCurrTexture() == mTexName) + if (mTexName != 0 && gGL.getTexUnit(gGL.getCurrentTexUnitIndex())->getCurrTexture() == mTexName) { gGL.getTexUnit(gGL.getCurrentTexUnitIndex())->setTextureFilteringOption(option); mTexOptionsDirty = false; + stop_glerror(); } - stop_glerror(); } BOOL LLImageGL::getIsResident(BOOL test_now) @@ -1500,7 +1639,50 @@ BOOL LLImageGL::getMask(const LLVector2 &tc) } //---------------------------------------------------------------------------- - +#if !LL_RELEASE_FOR_DOWNLOAD +//for debug use +//val is a "power of two" number +S32 LLImageGL::getTextureCounterIndex(U32 val) +{ + //index range is [0, MAX_TEXTURE_LOG_SIZE]. + if(val < 2) + { + return 0 ; + } + else if(val >= (1 << MAX_TEXTURE_LOG_SIZE)) + { + return MAX_TEXTURE_LOG_SIZE ; + } + else + { + S32 ret = 0 ; + while(val >>= 1) + { + ++ret; + } + return ret ; + } +} +void LLImageGL::incTextureCounter(U32 val) +{ + sTextureLoadedCounter[getTextureCounterIndex(val)]++ ; +} +void LLImageGL::decTextureCounter(U32 val) +{ + sTextureLoadedCounter[getTextureCounterIndex(val)]-- ; +} +void LLImageGL::setCurTexSizebar(S32 index) +{ + sCurTexSizeBar = index ; + sCurTexPickSize = (1 << index) ; +} +void LLImageGL::resetCurTexSizebar() +{ + sCurTexSizeBar = -1 ; + sCurTexPickSize = -1 ; +} +//---------------------------------------------------------------------------- +#endif // Manual Mip Generation /* diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h index 987a1dc538..a094605607 100644 --- a/indra/llrender/llimagegl.h +++ b/indra/llrender/llimagegl.h @@ -42,7 +42,7 @@ #include "v2math.h" #include "llrender.h" - +class LLTextureAtlas ; #define BYTES_TO_MEGA_BYTES(x) ((x) >> 20) #define MEGA_BYTES_TO_BYTES(x) ((x) << 20) @@ -52,6 +52,10 @@ class LLImageGL : public LLRefCount { friend class LLTexUnit; public: + static std::list<U32> sDeadTextureList; + + static void deleteDeadTextures(); + // Size calculation static S32 dataFormatBits(S32 dataformat); static S32 dataFormatBytes(S32 dataformat, S32 width, S32 height); @@ -69,7 +73,6 @@ public: // Sometimes called externally for textures not using LLImageGL (should go away...) static S32 updateBoundTexMem(const S32 delta); - static bool checkSize(S32 width, S32 height); //for server side use only. @@ -115,6 +118,7 @@ public: void destroyGLTexture(); void setExplicitFormat(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format = 0, BOOL swap_bytes = FALSE); + void setComponents(S8 ncomponents) { mComponents = ncomponents; } S32 getDiscardLevel() const { return mCurrentDiscardLevel; } S32 getMaxDiscardLevel() const { return mMaxDiscardLevel; } @@ -128,6 +132,7 @@ public: S32 getMipBytes(S32 discard_level = -1) const; BOOL getBoundRecently() const; LLGLenum getPrimaryFormat() const { return mFormatPrimary; } + LLGLenum getFormatType() const { return mFormatType; } BOOL getHasGLTexture() const { return mTexName != 0; } LLGLuint getTexName() const { return mTexName; } @@ -164,10 +169,20 @@ public: void setFilteringOption(LLTexUnit::eTextureFilterOptions option); LLTexUnit::eTextureFilterOptions getFilteringOption(void) const { return mFilterOption; } + LLGLenum getTexTarget()const { return mTarget ;} + S8 getDiscardLevelInAtlas()const {return mDiscardLevelInAtlas;} + U32 getTexelsInAtlas()const { return mTexelsInAtlas ;} + U32 getTexelsInGLTexture()const {return mTexelsInGLTexture;} + + void init(BOOL usemipmaps); virtual void cleanup(); // Clean up the LLImageGL so it can be reinitialized. Be careful when using this in derived class destructors void setNeedsAlphaAndPickMask(BOOL need_mask) {mNeedsAlphaAndPickMask = need_mask;} + + BOOL preAddToAtlas(S32 discard_level, const LLImageRaw* raw_image); + void postAddToAtlas() ; + public: // Various GL/Rendering options S32 mTextureMemory; @@ -189,6 +204,10 @@ private: U16 mHeight; S8 mCurrentDiscardLevel; + S8 mDiscardLevelInAtlas; + U32 mTexelsInAtlas ; + U32 mTexelsInGLTexture; + protected: LLGLenum mTarget; // Normally GL_TEXTURE2D, sometimes something else (ex. cube maps) LLTexUnit::eTextureType mBindTarget; // Normally TT_TEXTURE, sometimes something else (ex. cube maps) @@ -224,7 +243,26 @@ public: static U32 sBindCount; // Tracks number of texture binds for current frame static U32 sUniqueCount; // Tracks number of unique texture binds for current frame static BOOL sGlobalUseAnisotropic; - static LLImageGL* sDefaultGLTexture ; + static LLImageGL* sDefaultGLTexture ; + static BOOL sAutomatedTest; + +#if !LL_RELEASE_FOR_DOWNLOAD + //for debug use: show texture size distribution + //---------------------------------------- + static LLPointer<LLImageGL> sDefaultTexturep; //default texture to replace normal textures + static std::vector<S32> sTextureLoadedCounter ; + static std::vector<S32> sTextureBoundCounter ; + static std::vector<S32> sTextureCurBoundCounter ; + static S32 sCurTexSizeBar ; + static S32 sCurTexPickSize ; + + static S32 getTextureCounterIndex(U32 val) ; + static void incTextureCounter(U32 val) ; + static void decTextureCounter(U32 val) ; + static void setCurTexSizebar(S32 index) ; + static void resetCurTexSizebar(); + //---------------------------------------- +#endif #if DEBUG_MISS BOOL mMissed; // Missed on last bind? diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index d577daf3f4..b74d824c9e 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -45,10 +45,11 @@ LLRender gGL; // Handy copies of last good GL matrices F64 gGLModelView[16]; F64 gGLLastModelView[16]; +F64 gGLLastProjection[16]; F64 gGLProjection[16]; S32 gGLViewport[4]; -static const U32 LL_NUM_TEXTURE_LAYERS = 8; +static const U32 LL_NUM_TEXTURE_LAYERS = 16; static GLenum sGLTextureType[] = { @@ -311,6 +312,11 @@ bool LLTexUnit::bind(LLRenderTarget* renderTarget, bool bindDepth) if (bindDepth) { + if (renderTarget->hasStencil()) + { + llerrs << "Cannot bind a render buffer for sampling. Allocate render target without a stencil buffer if sampling of depth buffer is required." << llendl; + } + bindManual(renderTarget->getUsage(), renderTarget->getDepth()); } else @@ -328,7 +334,7 @@ bool LLTexUnit::bindManual(eTextureType type, U32 texture, bool hasMips) { return false; } - + if(mCurrTexture != texture) { gGL.flush(); diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 74f87f6d40..cb2a4d4450 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -355,6 +355,7 @@ private: extern F64 gGLModelView[16]; extern F64 gGLLastModelView[16]; +extern F64 gGLLastProjection[16]; extern F64 gGLProjection[16]; extern S32 gGLViewport[4]; diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index dc052851ca..d9520b3bf6 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -140,7 +140,7 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt) U32 offset = mTex.size(); if (offset >= 4 || - offset > 0 && (mFBO == 0 || !gGLManager.mHasDrawBuffers)) + (offset > 0 && (mFBO == 0 || !gGLManager.mHasDrawBuffers))) { llerrs << "Too many color attachments!" << llendl; } @@ -204,7 +204,7 @@ void LLRenderTarget::allocateDepth() gGL.getTexUnit(0)->bindManual(mUsage, mDepth); U32 internal_type = LLTexUnit::getInternalType(mUsage); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); - LLImageGL::setManualImage(internal_type, 0, GL_DEPTH24_STENCIL8_EXT, mResX, mResY, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL); + LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT32_ARB, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); } } @@ -382,7 +382,7 @@ void LLRenderTarget::flush(BOOL fetch_depth) allocateDepth(); } - gGL.getTexUnit(0)->bind(this, true); + gGL.getTexUnit(0)->bind(this); glCopyTexImage2D(LLTexUnit::getInternalType(mUsage), 0, GL_DEPTH24_STENCIL8_EXT, 0, 0, mResX, mResY, 0); } @@ -392,7 +392,11 @@ void LLRenderTarget::flush(BOOL fetch_depth) { #if !LL_DARWIN + stop_glerror(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + + stop_glerror(); if (mSampleBuffer) { @@ -434,7 +438,6 @@ void LLRenderTarget::flush(BOOL fetch_depth) #endif glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - glFlush(); } } @@ -442,6 +445,7 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter) { #if !LL_DARWIN + gGL.flush(); if (!source.mFBO || !mFBO) { llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl; @@ -453,12 +457,55 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, } else { - glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, source.mFBO); - glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, mFBO); + if (mask == GL_DEPTH_BUFFER_BIT && source.mStencil != mStencil) + { + stop_glerror(); + + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, source.mFBO); + gGL.getTexUnit(0)->bind(this, true); + stop_glerror(); + glCopyTexSubImage2D(LLTexUnit::getInternalType(mUsage), 0, srcX0, srcY0, dstX0, dstY0, dstX1, dstY1); + stop_glerror(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + stop_glerror(); + } + else + { + glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, source.mFBO); + stop_glerror(); + glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, mFBO); + stop_glerror(); + check_framebuffer_status(); + stop_glerror(); + glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + stop_glerror(); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + stop_glerror(); + } + } +#endif +} +//static +void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 srcX1, S32 srcY1, + S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter) +{ +#if !LL_DARWIN + if (!source.mFBO) + { + llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl; + } + { + glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, source.mFBO); + stop_glerror(); + glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0); + stop_glerror(); + check_framebuffer_status(); + stop_glerror(); glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); - + stop_glerror(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + stop_glerror(); } #endif } @@ -613,7 +660,7 @@ void LLMultisampleBuffer::addColorAttachment(U32 color_fmt) U32 offset = mTex.size(); if (offset >= 4 || - offset > 0 && (mFBO == 0 || !gGLManager.mHasDrawBuffers)) + (offset > 0 && (mFBO == 0 || !gGLManager.mHasDrawBuffers))) { llerrs << "Too many color attachments!" << llendl; } diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index 98b608f834..b7ebfc8f7f 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -121,6 +121,7 @@ public: U32 getTexture(U32 attachment = 0) const; U32 getDepth(void) const { return mDepth; } + BOOL hasStencil() const { return mStencil; } void bindTexture(U32 index, S32 channel); @@ -135,6 +136,9 @@ public: void copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 srcX1, S32 srcY1, S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter); + static void copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0, S32 srcY0, S32 srcX1, S32 srcY1, + S32 dstX0, S32 dstY0, S32 dstX1, S32 dstY1, U32 mask, U32 filter); + //Returns TRUE if target is ready to be rendered into. //That is, if the target has been allocated with at least //one renderable attachment (i.e. color buffer, depth buffer). diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 228e23b67e..81915731c3 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -602,6 +602,8 @@ void LLFloater::openFloater(const LLSD& key) mOpenSignal(this, key); onOpen(key); + + dirtyRect(); } void LLFloater::closeFloater(bool app_quitting) @@ -667,7 +669,9 @@ void LLFloater::closeFloater(bool app_quitting) } } } - + + dirtyRect(); + // Close callback mCloseSignal(this, LLSD(app_quitting)); @@ -1933,8 +1937,8 @@ void LLFloaterView::restoreAll() LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLFloater* neighbor ) { LLRect base_rect = reference_floater->getRect(); - S32 width = neighbor->getRect().getWidth(); - S32 height = neighbor->getRect().getHeight(); + LLRect::tCoordType width = neighbor->getRect().getWidth(); + LLRect::tCoordType height = neighbor->getRect().getHeight(); LLRect new_rect = neighbor->getRect(); LLRect expanded_base_rect = base_rect; @@ -1953,10 +1957,10 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF } } - S32 left_margin = llmax(0, base_rect.mLeft); - S32 right_margin = llmax(0, getRect().getWidth() - base_rect.mRight); - S32 top_margin = llmax(0, getRect().getHeight() - base_rect.mTop); - S32 bottom_margin = llmax(0, base_rect.mBottom); + LLRect::tCoordType left_margin = llmax(0, base_rect.mLeft); + LLRect::tCoordType right_margin = llmax(0, getRect().getWidth() - base_rect.mRight); + LLRect::tCoordType top_margin = llmax(0, getRect().getHeight() - base_rect.mTop); + LLRect::tCoordType bottom_margin = llmax(0, base_rect.mBottom); // find position for floater in following order // right->left->bottom->top @@ -2262,8 +2266,8 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out // floater is hosted elsewhere, so ignore return; } - S32 screen_width = getSnapRect().getWidth(); - S32 screen_height = getSnapRect().getHeight(); + LLRect::tCoordType screen_width = getSnapRect().getWidth(); + LLRect::tCoordType screen_height = getSnapRect().getHeight(); // convert to local coordinate frame LLRect snap_rect_local = getLocalSnapRect(); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index e0bb6bd5d3..f2d147ac39 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -121,6 +121,8 @@ const F32 ACTIVATE_HIGHLIGHT_TIME = 0.3f; static MenuRegistry::Register<LLMenuItemSeparatorGL> register_separator("menu_item_separator"); static MenuRegistry::Register<LLMenuItemCallGL> register_menu_item_call("menu_item_call"); static MenuRegistry::Register<LLMenuItemCheckGL> register_menu_item_check("menu_item_check"); +// Created programmatically but we need to specify custom colors in xml +static MenuRegistry::Register<LLMenuItemTearOffGL> register_menu_item_tear_off("menu_item_tear_off"); static MenuRegistry::Register<LLMenuGL> register_menu("menu"); static LLDefaultChildRegistry::Register<LLMenuGL> register_menu_default("menu"); @@ -390,8 +392,10 @@ void LLMenuItemGL::buildDrawLabel( void ) void LLMenuItemGL::onCommit( void ) { - // close all open menus by default - // if parent menu is actually visible (and we are not triggering menu item via accelerator) + // Check torn-off status to allow left-arrow keyboard navigation back + // to parent menu. + // Also, don't hide if item triggered by keyboard shortcut (and hence + // parent not visible). if (!getMenu()->getTornOff() && getMenu()->getVisible()) { @@ -408,6 +412,12 @@ void LLMenuItemGL::onCommit( void ) { getMenu()->clearHoverItem(); } + + if (mHighlight != highlight) + { + dirtyRect(); + } + mHighlight = highlight; } @@ -1233,6 +1243,8 @@ void LLMenuItemBranchGL::openMenu() branch->translate( delta_x, delta_y ); branch->setVisible( TRUE ); branch->getParent()->sendChildToFront(branch); + + dirtyRect(); } } @@ -2334,8 +2346,8 @@ void LLMenuGL::createJumpKeys() { char jump_key = uppercase_word[i]; - if (LLStringOps::isDigit(jump_key) || LLStringOps::isUpper(jump_key) && - mJumpKeys.find(jump_key) == mJumpKeys.end()) + if (LLStringOps::isDigit(jump_key) || (LLStringOps::isUpper(jump_key) && + mJumpKeys.find(jump_key) == mJumpKeys.end())) { mJumpKeys.insert(std::pair<KEY, LLMenuItemGL*>(jump_key, (*item_it))); (*item_it)->setJumpKey(jump_key); @@ -3476,16 +3488,19 @@ LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) : LLRect rect; menup->localRectToOtherView(LLRect(-1, menup->getRect().getHeight(), menup->getRect().getWidth() + 3, 0), &rect, gFloaterView); // make sure this floater is big enough for menu - mTargetHeight = (F32)(rect.getHeight() + floater_header_size + 5); + mTargetHeight = (F32)(rect.getHeight() + floater_header_size); reshape(rect.getWidth(), rect.getHeight()); setRect(rect); // attach menu to floater - menup->setFollowsAll(); + menup->setFollows( FOLLOWS_LEFT | FOLLOWS_BOTTOM ); mOldParent = menup->getParent(); addChild(menup); menup->setVisible(TRUE); - menup->translate(-menup->getRect().mLeft + 1, -menup->getRect().mBottom + 1); + LLRect menu_rect = menup->getRect(); + menu_rect.setOriginAndSize( 1, 1, + menu_rect.getWidth(), menu_rect.getHeight()); + menup->setRect(menu_rect); menup->setDropShadowed(FALSE); mMenu = menup; @@ -3513,12 +3528,6 @@ void LLTearOffMenu::draw() // animate towards target height reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLCriticalDamp::getInterpolant(0.05f)))); } - else - { - // when in stasis, remain big enough to hold menu contents - mTargetHeight = (F32)(mMenu->getRect().getHeight() + floater_header_size + 4); - reshape(mMenu->getRect().getWidth() + 3, mMenu->getRect().getHeight() + floater_header_size + 5); - } LLFloater::draw(); } diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index c66b9bde2b..d1ea5843eb 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -45,8 +45,6 @@ #include "lluictrlfactory.h" static LLDefaultChildRegistry::Register<LLRadioGroup> r1("radio_group"); - - static RadioGroupRegistry::Register<LLRadioCtrl> register_radio_ctrl("radio_item"); @@ -83,6 +81,10 @@ LLRadioGroup::~LLRadioGroup() // virtual BOOL LLRadioGroup::postBuild() { + if (!mRadioButtons.empty()) + { + mRadioButtons[0]->setTabStop(true); + } if (mControlVariable) { setSelectedIndex(mControlVariable->getValue().asInteger()); @@ -102,7 +104,7 @@ void LLRadioGroup::setIndexEnabled(S32 index, BOOL enabled) child->setEnabled(enabled); if (index == mSelectedIndex && enabled == FALSE) { - setSelectedIndex(-1); + mSelectedIndex = -1; } break; } @@ -142,8 +144,28 @@ BOOL LLRadioGroup::setSelectedIndex(S32 index, BOOL from_event) return FALSE; } + if (mSelectedIndex >= 0) + { + LLRadioCtrl* old_radio_item = mRadioButtons[mSelectedIndex]; + old_radio_item->setTabStop(false); + old_radio_item->setValue( FALSE ); + } + else + { + mRadioButtons[0]->setTabStop(false); + } + mSelectedIndex = index; + LLRadioCtrl* radio_item = mRadioButtons[mSelectedIndex]; + radio_item->setTabStop(true); + radio_item->setValue( TRUE ); + + if (hasFocus()) + { + mRadioButtons[mSelectedIndex]->focusFirstItem(FALSE, FALSE); + } + if (!from_event) { setControlValue(getSelectedIndex()); @@ -211,33 +233,6 @@ BOOL LLRadioGroup::handleKeyHere(KEY key, MASK mask) return handled; } -void LLRadioGroup::draw() -{ - S32 current_button = 0; - - BOOL take_focus = FALSE; - if (gFocusMgr.childHasKeyboardFocus(this)) - { - take_focus = TRUE; - } - - for (button_list_t::iterator iter = mRadioButtons.begin(); - iter != mRadioButtons.end(); ++iter) - { - LLRadioCtrl* radio = *iter; - BOOL selected = (current_button == mSelectedIndex); - radio->setValue( selected ); - if (take_focus && selected && !gFocusMgr.childHasKeyboardFocus(radio)) - { - // don't flash keyboard focus when navigating via keyboard - BOOL DONT_FLASH = FALSE; - radio->focusFirstItem(FALSE, DONT_FLASH); - } - current_button++; - } - - LLView::draw(); -} // When adding a child button, we need to ensure that the radio // group gets a message when the button is clicked. @@ -259,6 +254,19 @@ bool LLRadioGroup::addChild(LLView* view, S32 tab_group) return res; } +BOOL LLRadioGroup::handleMouseDown(S32 x, S32 y, MASK mask) +{ + // grab focus preemptively, before child button takes mousecapture + // + if (hasTabStop()) + { + focusFirstItem(FALSE, FALSE); + } + + return LLUICtrl::handleMouseDown(x, y, mask); +} + + // Handle one button being clicked. All child buttons must have this // function as their callback function. diff --git a/indra/llui/llradiogroup.h b/indra/llui/llradiogroup.h index b5516307fd..914548b6aa 100644 --- a/indra/llui/llradiogroup.h +++ b/indra/llui/llradiogroup.h @@ -54,7 +54,10 @@ public: Params() : length("length"), type("type") - {} + { + // radio items are not tabbable until they are selected + tab_stop = false; + } }; /*virtual*/ ~LLRadioCtrl(); @@ -103,6 +106,7 @@ public: virtual BOOL postBuild(); virtual bool addChild(LLView* view, S32 tab_group = 0); + virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleKeyHere(KEY key, MASK mask); @@ -117,9 +121,6 @@ public: virtual void setValue(const LLSD& value ); virtual LLSD getValue() const; - // Draw the group, but also fix the highlighting based on the control. - void draw(); - // Update the control as needed. Userdata must be a pointer to the button. void onClickButton(LLUICtrl* clicked_radio); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 720ca692f7..b6eed3ef18 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -329,10 +329,13 @@ void LLTabContainer::draw() } // Hide all the buttons - for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) + if (getTabsHidden()) { - LLTabTuple* tuple = *iter; - tuple->mButton->setVisible( FALSE ); + for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) + { + LLTabTuple* tuple = *iter; + tuple->mButton->setVisible( FALSE ); + } } LLPanel::draw(); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index cb60b4fe36..0fd6a14187 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -420,8 +420,9 @@ BOOL LLTextBase::handleToolTipForUrl(LLView *view, S32 x, S32 y, std::string& ms LLToolTipMgr::instance().show(LLToolTipParams() .message(tooltip_msg) .sticky_rect(sticky_rect_screen)); + return TRUE; } - return TRUE; + return FALSE; } LLContextMenu *LLTextBase::createUrlContextMenu(const std::string &in_url) diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index 810626268f..132bef0296 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -161,7 +161,12 @@ BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask) BOOL LLTextBox::handleToolTip(S32 x, S32 y, std::string& msg, LLRect& sticky_rect_screen) { - return handleToolTipForUrl(this, x, y, msg, sticky_rect_screen); + if (handleToolTipForUrl(this, x, y, msg, sticky_rect_screen)) + { + return TRUE; + } + + return LLUICtrl::handleToolTip(x, y, msg, sticky_rect_screen); } void LLTextBox::setText(const LLStringExplicit& text) @@ -297,7 +302,7 @@ LLWString LLTextBox::getWrappedText(const LLStringExplicit& in_text, F32 max_wid // find the next Url in the text string LLUrlMatch match; - while ( LLUrlRegistry::instance().findUrl(wstring_to_utf8str(wtext), match)) + while ( LLUrlRegistry::instance().findUrl(wtext, match)) { S32 start = match.getStart(); S32 end = match.getEnd() + 1; @@ -573,17 +578,21 @@ void LLTextBox::updateDisplayTextAndSegments() LLWString text = mText.getWString(); // find the next Url in the text string - while ( LLUrlRegistry::instance().findUrl(wstring_to_utf8str(text), match, + while ( LLUrlRegistry::instance().findUrl(text, match, boost::bind(&LLTextBox::onUrlLabelUpdated, this, _1, _2)) ) { // work out the char offset for the start/end of the url + S32 url_start = match.getStart(); + S32 url_end = match.getEnd(); + + // and the char offset for the label in the display text S32 seg_start = mDisplayText.size(); - S32 start = seg_start + match.getStart(); - end = start + match.getLabel().size(); + S32 start = seg_start + url_start; + S32 end = start + match.getLabel().size(); // create a segment for the text before the Url mSegments.insert(new LLNormalTextSegment(new LLStyle(), seg_start, start, *this)); - mDisplayText += text.substr(0, match.getStart()); + mDisplayText += text.substr(0, url_start); // create a segment for the Url text LLStyleSP html(new LLStyle); @@ -599,7 +608,7 @@ void LLTextBox::updateDisplayTextAndSegments() mDisplayText += utf8str_to_wstring(match.getLabel()); // move on to the rest of the text after the Url - text = text.substr(match.getEnd()+1, text.size() - match.getEnd()); + text = text.substr(url_end+1, text.size() - url_end); } // output a segment for the remaining text diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 983777b747..8d5f277b59 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1120,21 +1120,12 @@ void LLTextEditor::updateCursorXPos() } // constraint cursor to editable segments of document +// NOTE: index must be within document range S32 LLTextEditor::getEditableIndex(S32 index, bool increasing_direction) { - //// always allow editable position at end of doc - //if (index == getLength()) - //{ - // return index; - //} - segment_set_t::iterator segment_iter; S32 offset; getSegmentAndOffset(index, &segment_iter, &offset); - if (segment_iter == mSegments.end()) - { - return 0; - } LLTextSegmentPtr segmentp = *segment_iter; @@ -3194,7 +3185,11 @@ void LLTextEditor::draw() drawLineNumbers(); { - LLLocalClipRect clip(mTextRect); + // pad clipping rectangle so that cursor can draw at full width + // when at left edge of mTextRect + LLRect clip_rect(mTextRect); + clip_rect.stretch(1); + LLLocalClipRect clip(clip_rect); drawSelectionBackground(); drawPreeditMarker(); drawText(); diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp index 950eaf2ea7..000e85f78c 100644 --- a/indra/llui/llui.cpp +++ b/indra/llui/llui.cpp @@ -81,7 +81,8 @@ std::list<std::string> gUntranslated; /*static*/ LLWindow* LLUI::sWindow = NULL; /*static*/ LLHtmlHelp* LLUI::sHtmlHelp = NULL; /*static*/ LLView* LLUI::sRootView = NULL; - +/*static*/ BOOL LLUI::sDirty = FALSE; +/*static*/ LLRect LLUI::sDirtyRect; /*static*/ std::vector<std::string> LLUI::sXUIPaths; /*static*/ LLFrameTimer LLUI::sMouseIdleTimer; @@ -1603,6 +1604,20 @@ void LLUI::cleanupClass() sImageProvider->cleanUp(); } +//static +void LLUI::dirtyRect(LLRect rect) +{ + if (!sDirty) + { + sDirtyRect = rect; + sDirty = TRUE; + } + else + { + sDirtyRect.unionWith(rect); + } +} + //static void LLUI::translate(F32 x, F32 y, F32 z) diff --git a/indra/llui/llui.h b/indra/llui/llui.h index 33338f30f9..fddf8192ad 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -174,6 +174,10 @@ public: static void loadIdentity(); static void translate(F32 x, F32 y, F32 z = 0.0f); + static LLRect sDirtyRect; + static BOOL sDirty; + static void dirtyRect(LLRect rect); + // Return the ISO639 language name ("en", "ko", etc.) for the viewer UI. // http://www.loc.gov/standards/iso639-2/php/code_list.php static std::string getLanguage(); diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 28cdb1ac27..8807e26f6b 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -506,56 +506,6 @@ void LLUICtrl::setFocus(BOOL b) } } -void LLUICtrl::onFocusReceived() -{ - // trigger callbacks - LLFocusableElement::onFocusReceived(); - - // find first view in hierarchy above new focus that is a LLUICtrl - LLView* viewp = getParent(); - LLUICtrl* last_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getLastKeyboardFocus()); - - while (viewp && !viewp->isCtrl()) - { - viewp = viewp->getParent(); - } - - // and if it has newly gained focus, call onFocusReceived() - LLUICtrl* ctrlp = static_cast<LLUICtrl*>(viewp); - if (ctrlp && (!last_focus || !last_focus->hasAncestor(ctrlp))) - { - ctrlp->onFocusReceived(); - } -} - -void LLUICtrl::onFocusLost() -{ - // trigger callbacks - LLFocusableElement::onFocusLost(); - - // find first view in hierarchy above old focus that is a LLUICtrl - LLView* viewp = getParent(); - while (viewp && !viewp->isCtrl()) - { - viewp = viewp->getParent(); - } - - // and if it has just lost focus, call onFocusReceived() - LLUICtrl* ctrlp = static_cast<LLUICtrl*>(viewp); - // hasFocus() includes any descendants - if (ctrlp && !ctrlp->hasFocus()) - { - ctrlp->onFocusLost(); - } -} - -void LLUICtrl::onTopLost() -{ - // trigger callbacks - LLFocusableElement::onTopLost(); -} - - // virtual void LLUICtrl::setTabStop( BOOL b ) { diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index 4030230684..3add9393ea 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -153,9 +153,6 @@ protected: public: // LLView interface /*virtual*/ BOOL setLabelArg( const std::string& key, const LLStringExplicit& text ); - /*virtual*/ void onFocusReceived(); - /*virtual*/ void onFocusLost(); - /*virtual*/ void onTopLost(); /*virtual*/ BOOL isCtrl() const; /*virtual*/ void setTentative(BOOL b); /*virtual*/ BOOL getTentative() const; diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index f2d340deb7..6f5c694b1b 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -162,3 +162,31 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL return false; } + +bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUrlLabelCallback &cb) +{ + // boost::regex_search() only works on char or wchar_t + // types, but wchar_t is only 2-bytes on Win32 (not 4). + // So we use UTF-8 to make this work the same everywhere. + std::string utf8_text = wstring_to_utf8str(text); + if (findUrl(utf8_text, match, cb)) + { + // we cannot blindly return the start/end offsets from + // the UTF-8 string because it is a variable-length + // character encoding, so we need to update the start + // and end values to be correct for the wide string. + LLWString wurl = utf8str_to_wstring(match.getUrl()); + S32 start = text.find(wurl); + if (start == std::string::npos) + { + return false; + } + S32 end = start + wurl.size() - 1; + + match.setValues(start, end, match.getUrl(), match.getLabel(), + match.getTooltip(), match.getIcon(), + match.getMenuName(), match.getLocation()); + return true; + } + return false; +} diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h index 84b033036c..85e934e4b5 100644 --- a/indra/llui/llurlregistry.h +++ b/indra/llui/llurlregistry.h @@ -37,10 +37,10 @@ #include "llurlentry.h" #include "llurlmatch.h" #include "llsingleton.h" +#include "llstring.h" #include <string> #include <vector> -#include <map> /// This default callback for findUrl() simply ignores any label updates void LLUrlRegistryNullCallback(const std::string &url, const std::string &label); @@ -77,6 +77,10 @@ public: bool findUrl(const std::string &text, LLUrlMatch &match, const LLUrlLabelCallback &cb = &LLUrlRegistryNullCallback); + /// a slightly less efficient version of findUrl for wide strings + bool findUrl(const LLWString &text, LLUrlMatch &match, + const LLUrlLabelCallback &cb = &LLUrlRegistryNullCallback); + private: LLUrlRegistry(); friend class LLSingleton<LLUrlRegistry>; diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 46510804f8..256c776293 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -143,6 +143,7 @@ LLView::LLView(const LLView::Params& p) LLView::~LLView() { + dirtyRect(); //llinfos << "Deleting view " << mName << ":" << (void*) this << llendl; // llassert(LLView::sIsDrawing == FALSE); @@ -602,6 +603,7 @@ void LLView::setVisible(BOOL visible) if (!getParent() || getParent()->isInVisibleChain()) { // tell all children of this view that the visibility may have changed + dirtyRect(); handleVisibilityChange( visible ); } updateBoundingRect(); @@ -673,9 +675,13 @@ LLView* LLView::childrenHandleToolTip(S32 x, S32 y, std::string& msg, LLRect& st LLView* viewp = *child_it; S32 local_x = x - viewp->getRect().mLeft; S32 local_y = y - viewp->getRect().mBottom; - if(viewp->pointInView(local_x, local_y) && - viewp->getVisible() && - viewp->handleToolTip(local_x, local_y, msg, sticky_rect_screen) ) + if(!viewp->pointInView(local_x, local_y) || + !viewp->getVisible()) + { + continue; + } + + if(viewp->handleToolTip(local_x, local_y, msg, sticky_rect_screen) ) { if (sDebugMouseHandling) { @@ -685,17 +691,22 @@ LLView* LLView::childrenHandleToolTip(S32 x, S32 y, std::string& msg, LLRect& st handled_view = viewp; break; } + + if( viewp->blockMouseEvent(x, y) ) + { + handled_view = viewp; + } } return handled_view; } BOOL LLView::handleToolTip(S32 x, S32 y, std::string& msg, LLRect& sticky_rect_screen) { - LLView* child_handler = childrenHandleToolTip(x, y, msg, sticky_rect_screen); - BOOL handled = child_handler != NULL; + BOOL handled = FALSE; - // child widgets get priority on tooltips - if (!handled && !mToolTipMsg.empty()) + // parents provide tooltips first, which are optionally + // overridden by children + if (!mToolTipMsg.empty()) { // allow "scrubbing" over ui by showing next tooltip immediately // if previous one was still visible @@ -710,7 +721,9 @@ BOOL LLView::handleToolTip(S32 x, S32 y, std::string& msg, LLRect& sticky_rect_s handled = TRUE; } - if( blockMouseEvent(x, y) ) + // child tooltips will override our own + LLView* child_handler = childrenHandleToolTip(x, y, msg, sticky_rect_screen); + if (child_handler) { handled = TRUE; } @@ -1297,7 +1310,7 @@ void LLView::drawChildren() { // Only draw views that are within the root view localRectToScreen(viewp->getRect(),&screenRect); - if ( rootRect.overlaps(screenRect) ) + if ( rootRect.overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect)) { glMatrixMode(GL_MODELVIEW); LLUI::pushMatrix(); @@ -1316,6 +1329,21 @@ void LLView::drawChildren() gGL.getTexUnit(0)->disable(); } +void LLView::dirtyRect() +{ + LLView* child = getParent(); + LLView* parent = child ? child->getParent() : NULL; + LLView* cur = this; + while (child && parent && parent->getParent()) + { //find third to top-most view + cur = child; + child = parent; + parent = parent->getParent(); + } + + LLUI::dirtyRect(cur->calcScreenRect()); +} + //Draw a box for debugging. void LLView::drawDebugRect() { @@ -1529,6 +1557,8 @@ void LLView::updateBoundingRect() { if (isDead()) return; + LLRect cur_rect = mBoundingRect; + if (mUseBoundingRect) { mBoundingRect = calcBoundingRect(); @@ -1543,6 +1573,12 @@ void LLView::updateBoundingRect() { getParent()->updateBoundingRect(); } + + if (mBoundingRect != cur_rect) + { + dirtyRect(); + } + } LLRect LLView::calcScreenRect() const diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 1f7e5afaae..bf3b5d0614 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -519,6 +519,7 @@ public: virtual BOOL handleUnicodeCharHere(llwchar uni_char); virtual void handleReshape(const LLRect& rect, bool by_user); + virtual void dirtyRect(); virtual void notifyParent(const LLSD& info); virtual void notifyChildren(const LLSD& info); diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index ac524326fc..9cc2841e8c 100644 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -150,6 +150,7 @@ extern "C" { int yyerror(const char *fmt, ...); } "AGENT_CROUCHING" { count(); yylval.ival = AGENT_CROUCHING; return(INTEGER_CONSTANT); } "AGENT_BUSY" { count(); yylval.ival = AGENT_BUSY; return(INTEGER_CONSTANT); } "AGENT_ALWAYS_RUN" { count(); yylval.ival = AGENT_ALWAYS_RUN; return(INTEGER_CONSTANT); } +"AGENT_AUTOPILOT" { count(); yylval.ival = AGENT_AUTOPILOT; return(INTEGER_CONSTANT); } "CAMERA_PITCH" { count(); yylval.ival = FOLLOWCAM_PITCH; return(INTEGER_CONSTANT); } "CAMERA_FOCUS_OFFSET" { count(); yylval.ival = FOLLOWCAM_FOCUS_OFFSET; return (INTEGER_CONSTANT); } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 2e210e41c9..f8aa5cc8a3 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -372,6 +372,8 @@ set(viewer_SOURCE_FILES lltexglobalcolor.cpp lltexlayer.cpp lltexlayerparams.cpp + lltextureatlas.cpp + lltextureatlasmanager.cpp lltexturecache.cpp lltexturectrl.cpp lltexturefetch.cpp @@ -830,6 +832,8 @@ set(viewer_HEADER_FILES lltexglobalcolor.h lltexlayer.h lltexlayerparams.h + lltextureatlas.h + lltextureatlasmanager.h lltexturecache.h lltexturectrl.h lltexturefetch.h diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index cd7b533e7a..eaf5213985 100644 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -108,6 +108,7 @@ AGENT_TYPING Returned by llGetAgentInfo if the Agent is typing AGENT_CROUCHING Returned by llGetAgentInfo if the Agent is crouching AGENT_BUSY Returned by llGetAgentInfo if the Agent is busy AGENT_ALWAYS_RUN Returned by llGetAgentInfo if the Agent has 'Always Run' enabled +AGENT_AUTOPILOT Returned by llGetAgentInfo if the Agent is under autopilot control PSYS_PART_FLAGS PSYS_PART_START_COLOR diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index bbe69531b4..c794d7d319 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2597,6 +2597,17 @@ <key>Value</key> <integer>1</integer> </map> + <key>EnableTextureAtlas</key> + <map> + <key>Comment</key> + <string>Whether to use texture atlas or not</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>EnableVoiceChat</key> <map> <key>Comment</key> @@ -5513,42 +5524,56 @@ <key>Value</key> <integer>1</integer> </map> - - <key>RenderShadowGaussian</key> + + <key>RenderShadowNearDist</key> <map> <key>Comment</key> - <string>Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused).</string> + <string>Near clip plane of shadow camera (affects precision of depth shadows).</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>Vector3</string> <key>Value</key> <array> - <real>2.0</real> - <real>2.0</real> - <real>0.0</real> + <real>256</real> + <real>256</real> + <real>256</real> </array> </map> - - <key>RenderShadowNearDist</key> + <key>RenderShadowClipPlanes</key> <map> <key>Comment</key> - <string>Near clip plane of shadow camera (affects precision of depth shadows).</string> + <string>Near clip plane split distances for shadow map frusta.</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>Vector3</string> <key>Value</key> <array> - <real>256</real> - <real>256</real> - <real>256</real> + <real>1.0</real> + <real>12.0</real> + <real>32.0</real> </array> </map> - <key>RenderShadowClipPlanes</key> + <key>RenderShadowSplitExponent</key> <map> <key>Comment</key> - <string>Near clip plane split distances for shadow map frusta.</string> + <string>Near clip plane split distances for shadow map frusta (x=perspective, y=ortho, z=transition rate).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Vector3</string> + <key>Value</key> + <array> + <real>3.0</real> + <real>3.0</real> + <real>2.0</real> + </array> + </map> + <key>RenderShadowOrthoClipPlanes</key> + <map> + <key>Comment</key> + <string>Near clip plane split distances for orthographic shadow map frusta.</string> <key>Persist</key> <integer>1</integer> <key>Type</key> @@ -5560,6 +5585,39 @@ <real>24.0</real> </array> </map> + <key>RenderShadowProjOffset</key> + <map> + <key>Comment</key> + <string>Amount to scale distance to virtual origin of shadow perspective projection.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>2.0</real> + </map> + <key>RenderShadowSlopeThreshold</key> + <map> + <key>Comment</key> + <string>Cutoff slope value for points to affect perspective shadow generation</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.0</real> + </map> + <key>RenderShadowProjExponent</key> + <map> + <key>Comment</key> + <string>Exponent applied to transition between ortho and perspective shadow projections based on viewing angle and light vector.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.5</real> + </map> <key>RenderSSAOScale</key> <map> <key>Comment</key> @@ -5628,7 +5686,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>128</real> + <real>64</real> </map> <key>RenderCubeMap</key> <map> @@ -5707,7 +5765,7 @@ <key>Value</key> <integer>0</integer> </map> - + <key>RenderAnimateTrees</key> <map> <key>Comment</key> @@ -5719,6 +5777,174 @@ <key>Value</key> <integer>0</integer> </map> + + <key>RenderGIRange</key> + <map> + <key>Comment</key> + <string>Distance to cut off GI effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>96</real> + </map> + + <key>RenderGILuminance</key> + <map> + <key>Comment</key> + <string>Luminance factor of global illumination contribution.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.075</real> + </map> + + <key>RenderGIBrightness</key> + <map> + <key>Comment</key> + <string>Brightness factor of global illumination contribution.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.3</real> + </map> + + <key>RenderGINoise</key> + <map> + <key>Comment</key> + <string>Noise of position sampling for GI photon mapping.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.7</real> + </map> + + <key>RenderGIAttenuation</key> + <map> + <key>Comment</key> + <string>Distance attenuation factor for indirect lighting.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.1</real> + </map> + + <key>RenderGIBlurBrightness</key> + <map> + <key>Comment</key> + <string>Brightness factor of global illumination blur effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.025</real> + </map> + + <key>RenderGIBlurEdgeWeight</key> + <map> + <key>Comment</key> + <string>Edge weight for GI soften filter (sharpness).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.8</real> + </map> + + <key>RenderGIBlurIncrement</key> + <map> + <key>Comment</key> + <string>Increment of scale for each pass of global illumination blur effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.8</real> + </map> + + <key>RenderLuminanceScale</key> + <map> + <key>Comment</key> + <string>Luminance value scalar for darkening effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> + + <key>RenderSunLuminanceScale</key> + <map> + <key>Comment</key> + <string>Sun Luminance value scalar for darkening effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> + + <key>RenderSunLuminanceOffset</key> + <map> + <key>Comment</key> + <string>Sun Luminance value offset for darkening effect.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0</real> + </map> + + <key>RenderLuminanceDetail</key> + <map> + <key>Comment</key> + <string>Mipmap level to use for luminance</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>16.0</real> + </map> + + <key>RenderEdgeDepthCutoff</key> + <map> + <key>Comment</key> + <string>Cutoff for depth difference that amounts to an edge.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.01</real> + </map> + <key>RenderEdgeNormCutoff</key> + <map> + <key>Comment</key> + <string>Cutoff for normal difference that amounts to an edge.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.25</real> + </map> + <key>RenderDeferredAlphaSoften</key> <map> <key>Comment</key> @@ -5741,6 +5967,178 @@ <key>Value</key> <real>4</real> </map> + <key>RenderDeferredSpotShadowBias</key> + <map> + <key>Comment</key> + <string>Bias value for spot shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>-64.0</real> + </map> + <key>RenderDeferredSpotShadowOffset</key> + <map> + <key>Comment</key> + <string>Offset value for spot shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.8</real> + </map> + + <key>RenderShadowBias</key> + <map> + <key>Comment</key> + <string>Bias value for shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>-0.008</real> + </map> + <key>RenderShadowOffset</key> + <map> + <key>Comment</key> + <string>Offset value for shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.01</real> + </map> + + <key>RenderShadowResolutionScale</key> + <map> + <key>Comment</key> + <string>Scale of shadow map resolution vs. screen resolution</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> + + + + <key>RenderDeferredTreeShadowBias</key> + <map> + <key>Comment</key> + <string>Bias value for tree shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> + <key>RenderDeferredTreeShadowOffset</key> + <map> + <key>Comment</key> + <string>Offset value for tree shadows (prevent shadow acne).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.0</real> + </map> + + <key>RenderHighlightFadeTime</key> + <map> + <key>Comment</key> + <string>Transition time for mouseover highlights.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.1</real> + </map> + + <key>RenderHighlightBrightness</key> + <map> + <key>Comment</key> + <string>Brightness of mouseover highlights.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>4.0</real> + </map> + + <key>RenderHighlightThickness</key> + <map> + <key>Comment</key> + <string>Thickness of mouseover highlights.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.6</real> + </map> + + <key>RenderHighlightColor</key> + <map> + <key>Comment</key> + <string>Brightness of mouseover highlights.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Color4</string> + <key>Value</key> + <array> + <real>0.4</real> + <real>0.98</real> + <real>0.93</real> + <real>1.0</real> + </array> + </map> + + <key>RenderSpecularResX</key> + <map> + <key>Comment</key> + <string>Spec map resolution.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <real>128</real> + </map> + + <key>RenderSpecularResY</key> + <map> + <key>Comment</key> + <string>Spec map resolution.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <real>128</real> + </map> + + <key>RenderSpecularExponent</key> + <map> + <key>Comment</key> + <string>Specular exponent for generating spec map</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1</real> + </map> + <key>RenderDeferred</key> <map> <key>Comment</key> @@ -5752,6 +6150,31 @@ <key>Value</key> <integer>0</integer> </map> + + <key>RenderDeferredShadow</key> + <map> + <key>Comment</key> + <string>Enable shadows in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + + <key>RenderDeferredGI</key> + <map> + <key>Comment</key> + <string>Enable GI in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> + <key>RenderDeferredSunShadow</key> <map> <key>Comment</key> @@ -5763,6 +6186,67 @@ <key>Value</key> <integer>1</integer> </map> + + <key>RenderDeferredSun</key> + <map> + <key>Comment</key> + <string>Execute sunlight shader in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + + <key>RenderDeferredAtmospheric</key> + <map> + <key>Comment</key> + <string>Execute atmospheric shader in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + + <key>RenderDeferredBlurLight</key> + <map> + <key>Comment</key> + <string>Execute shadow softening shader in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + + <key>RenderDeferredLocalLights</key> + <map> + <key>Comment</key> + <string>Execute local lighting shader in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + + <key>RenderDeferredFullscreenLights</key> + <map> + <key>Comment</key> + <string>Execute local lighting shader in deferred renderer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> + <key>RenderDeferredSunWash</key> <map> <key>Comment</key> @@ -5785,6 +6269,45 @@ <key>Value</key> <real>-0.0001</real> </map> + <key>RenderShadowErrorCutoff</key> + <map> + <key>Comment</key> + <string>Cutoff error value to use ortho instead of perspective projection.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>5.0</real> + </map> + <key>RenderShadowFOVCutoff</key> + <map> + <key>Comment</key> + <string>Cutoff FOV to use ortho instead of perspective projection.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>1.1</real> + </map> + + <key>RenderShadowGaussian</key> + <map> + <key>Comment</key> + <string>Gaussian coefficients for the two shadow/SSAO blurring passes (z component unused).</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Vector3</string> + <key>Value</key> + <array> + <real>3.0</real> + <real>2.0</real> + <real>0.0</real> + </array> + </map> + <key>RenderShadowBlurSize</key> <map> <key>Comment</key> @@ -5794,7 +6317,7 @@ <key>Type</key> <string>F32</string> <key>Value</key> - <real>0.7</real> + <real>1.4</real> </map> <key>RenderShadowBlurSamples</key> <map> @@ -5805,8 +6328,106 @@ <key>Type</key> <string>U32</string> <key>Value</key> - <real>5</real> + <real>4</real> </map> + <key>RenderShadowBlurDistFactor</key> + <map> + <key>Comment</key> + <string>Distance scaler for shadow blur.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.1</real> + </map> + + <key>RenderGIAmbiance</key> + <map> + <key>Comment</key> + <string>Ambiance factor of global illumination contribution.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.5</real> + </map> + + <key>RenderGIMinRenderSize</key> + <map> + <key>Comment</key> + <string>Minimum size of objects to put into GI source map.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.5</real> + </map> + + <key>RenderGIBlurColorCurve</key> + <map> + <key>Comment</key> + <string>Color curve for GI softening kernel</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Vector3</string> + <key>Value</key> + <array> + <real>1.0</real> + <real>0.6</real> + <real>0.02</real> + </array> + </map> + + <key>RenderGIBlurPasses</key> + <map> + <key>Comment</key> + <string>Scale of GI softening kernel.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <real>4</real> + </map> + + <key>RenderGIBlurSize</key> + <map> + <key>Comment</key> + <string>Scale of GI softening kernel.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>4.0</real> + </map> + <key>RenderGIBlurSamples</key> + <map> + <key>Comment</key> + <string>Number of samples to take for each pass of GI blur (value range 1-16). Actual number of samples is value * 2 - 1.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <real>16</real> + </map> + <key>RenderGIBlurDistFactor</key> + <map> + <key>Comment</key> + <string>Distance scaler for GI blur.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.0</real> + </map> + <key>RenderDynamicLOD</key> <map> <key>Comment</key> @@ -6143,7 +6764,7 @@ <key>Type</key> <string>S32</string> <key>Value</key> - <integer>4096</integer> + <integer>8192</integer> </map> <key>RenderMaxVBOSize</key> <map> @@ -6354,6 +6975,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>RenderUIBuffer</key> + <map> + <key>Comment</key> + <string>Cache ui render in a screen aligned buffer.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>RenderUnloadedAvatar</key> <map> <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index a91e9fa15b..4fb109d687 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -8,14 +8,10 @@ #extension GL_ARB_texture_rectangle : enable uniform sampler2D diffuseMap; -uniform sampler2DShadow shadowMap0; -uniform sampler2DShadow shadowMap1; -uniform sampler2DShadow shadowMap2; -uniform sampler2DShadow shadowMap3; uniform sampler2D noiseMap; -uniform sampler2DRect positionMap; +uniform sampler2DRect depthMap; -uniform mat4 shadow_matrix[4]; +uniform mat4 shadow_matrix[6]; uniform vec4 shadow_clip; uniform vec2 screen_res; @@ -26,52 +22,42 @@ varying vec3 vary_ambient; varying vec3 vary_directional; varying vec3 vary_fragcoord; varying vec3 vary_position; +varying vec3 vary_light; uniform float alpha_soften; +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + void main() { vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; frag *= screen_res; - vec3 samp_pos = texture2DRect(positionMap, frag).xyz; + vec3 samp_pos = getPosition(frag).xyz; - float shadow = 1.0; vec4 pos = vec4(vary_position, 1.0); - if (pos.z > -shadow_clip.w) - { - if (pos.z < -shadow_clip.z) - { - vec4 lpos = shadow_matrix[3]*pos; - shadow = shadow2DProj(shadowMap3, lpos).x; - shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); - } - else if (pos.z < -shadow_clip.y) - { - vec4 lpos = shadow_matrix[2]*pos; - shadow = shadow2DProj(shadowMap2, lpos).x; - } - else if (pos.z < -shadow_clip.x) - { - vec4 lpos = shadow_matrix[1]*pos; - shadow = shadow2DProj(shadowMap1, lpos).x; - } - else - { - vec4 lpos = shadow_matrix[0]*pos; - shadow = shadow2DProj(shadowMap0, lpos).x; - } - } - - vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, gl_Color.a); + vec4 col = vec4(vary_ambient + vary_directional.rgb, gl_Color.a); vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col; color.rgb = atmosLighting(color.rgb); color.rgb = scaleSoftClip(color.rgb); - if (samp_pos.z != 0.0) + if (samp_pos.z != 0.0 && gl_Color.a < 1.0) { float dist_factor = alpha_soften; float a = gl_Color.a; @@ -83,6 +69,7 @@ void main() //gl_FragColor = gl_Color; gl_FragColor = color; //gl_FragColor = vec4(1,0,1,1); + //gl_FragColor = vec4(1,0,1,1)*shadow; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index b496bd674f..1a7d58b07b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -20,8 +20,11 @@ varying vec3 vary_ambient; varying vec3 vary_directional; varying vec3 vary_fragcoord; varying vec3 vary_position; +varying vec3 vary_light; uniform float near_clip; +uniform float shadow_offset; +uniform float shadow_bias; void main() { @@ -32,8 +35,9 @@ void main() vec4 pos = (gl_ModelViewMatrix * gl_Vertex); vec3 norm = normalize(gl_NormalMatrix * gl_Normal); - vary_position = pos.xyz; + vary_position = pos.xyz + norm.xyz * (-pos.z/64.0*shadow_offset+shadow_bias); + calcAtmospherics(pos.xyz); //vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); @@ -54,6 +58,8 @@ void main() col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); col.rgb = scaleDownLight(col.rgb); + vary_light = gl_LightSource[0].position.xyz; + vary_ambient = col.rgb*gl_Color.rgb; vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl index 6c94f5c5a7..ff64a6b0c3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl @@ -12,7 +12,7 @@ uniform sampler2DShadow shadowMap2; uniform sampler2DShadow shadowMap3; uniform sampler2D noiseMap; -uniform mat4 shadow_matrix[4]; +uniform mat4 shadow_matrix[6]; uniform vec4 shadow_clip; vec3 atmosLighting(vec3 light); diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl index 58aa5a9cb5..75df388941 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl @@ -8,13 +8,18 @@ uniform sampler2D diffuseMap; varying vec3 vary_normal; -varying vec4 vary_position; void main() { - gl_FragData[0] = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy); + vec4 diff = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy); + + if (diff.a < 0.2) + { + discard; + } + + gl_FragData[0] = vec4(diff.rgb, 0.0); gl_FragData[1] = vec4(0,0,0,0); - gl_FragData[2] = vec4(normalize(vary_normal), 0.0); - gl_FragData[3] = vary_position; + gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl index 27c09db922..00083eb6b3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl @@ -10,6 +10,7 @@ uniform sampler2D diffuseMap; void main() { - gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy)); + gl_FragColor = vec4(1,1,1,gl_Color.a * texture2D(diffuseMap, gl_TexCoord[0].xy).a); + //gl_FragColor = vec4(1,1,1,1); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl index 14da6b1ad4..8c8489d087 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl @@ -28,8 +28,7 @@ void main() norm = normalize(norm); pos = gl_ProjectionMatrix * pos; - //smash geometry against near clip plane - pos.z = max(pos.z, -1.0); + pos.z = max(pos.z, -pos.w+0.01); gl_Position = pos; gl_FrontColor = gl_Color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl index 12a7ff7f29..471a1f0407 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl @@ -10,7 +10,6 @@ mat4 getSkinnedTransform(); attribute vec4 weight; varying vec3 vary_normal; -varying vec4 vary_position; void main() { @@ -30,7 +29,6 @@ void main() norm.z = dot(trans[2].xyz, gl_Normal); norm = normalize(norm); - vary_position = pos; vary_normal = norm; gl_Position = gl_ProjectionMatrix * pos; diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index 3c6700a871..bd5e9dd758 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -7,10 +7,12 @@ #extension GL_ARB_texture_rectangle : enable -uniform sampler2DRect positionMap; +uniform sampler2DRect depthMap; uniform sampler2DRect normalMap; uniform sampler2DRect lightMap; +uniform sampler2DRect giLightMap; +uniform float dist_factor; uniform float blur_size; uniform vec2 delta; uniform vec3 kern[32]; @@ -19,30 +21,52 @@ uniform float kern_scale; varying vec2 vary_fragcoord; +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + void main() { - vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz; - vec3 pos = texture2DRect(positionMap, vary_fragcoord.xy).xyz; - vec2 ccol = texture2DRect(lightMap, vary_fragcoord.xy).rg; + vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0; + vec3 pos = getPosition(vary_fragcoord.xy).xyz; + vec4 ccol = texture2DRect(lightMap, vary_fragcoord.xy).rgba; vec2 dlt = kern_scale * delta / (1.0+norm.xy*norm.xy); + dlt /= max(-pos.z*dist_factor, 1.0); + vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free' - vec2 col = defined_weight * ccol; + vec4 col = defined_weight.xyxx * ccol; for (int i = 1; i < kern_length; i++) { vec2 tc = vary_fragcoord.xy + kern[i].z*dlt; - vec3 samppos = texture2DRect(positionMap, tc).xyz; + vec3 samppos = getPosition(tc).xyz; float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane if (d*d <= 0.003) { - col += texture2DRect(lightMap, tc).rg*kern[i].xy; + col += texture2DRect(lightMap, tc)*kern[i].xyxx; defined_weight += kern[i].xy; } } - col /= defined_weight; - gl_FragColor = vec4(col.r, col.g, 0.0, 1.0); + + col /= defined_weight.xyxx; + + gl_FragColor = col; + + //gl_FragColor = ccol; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl index a8712bc8cc..1c29dae5f7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl @@ -11,7 +11,6 @@ uniform sampler2D bumpMap; varying vec3 vary_mat0; varying vec3 vary_mat1; varying vec3 vary_mat2; -varying vec4 vary_position; void main() { @@ -22,8 +21,7 @@ void main() dot(norm,vary_mat1), dot(norm,vary_mat2)); - gl_FragData[0].rgb = gl_Color.rgb*col; - gl_FragData[1] = vec4(col*(gl_Color.a*1.5), gl_Color.a); - gl_FragData[2] = vec4(normalize(tnorm), 0.0); - gl_FragData[3] = vary_position; + gl_FragData[0] = vec4(gl_Color.rgb*col, 0.0); + gl_FragData[1] = vec4(col*gl_Color.a, gl_Color.a); + gl_FragData[2] = vec4(normalize(tnorm)*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl index ba180922cc..9589912c6c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl @@ -8,7 +8,6 @@ varying vec3 vary_mat0; varying vec3 vary_mat1; varying vec3 vary_mat2; -varying vec4 vary_position; void main() { @@ -16,8 +15,6 @@ void main() gl_Position = ftransform(); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vary_position = gl_ModelViewMatrix * gl_Vertex; - vec3 n = normalize(gl_NormalMatrix * gl_Normal); vec3 b = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz); vec3 t = cross(b, n); diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl index f2ba2df69a..5895ebda84 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl @@ -8,13 +8,11 @@ uniform sampler2D diffuseMap; varying vec3 vary_normal; -varying vec4 vary_position; void main() { vec3 col = texture2D(diffuseMap, gl_TexCoord[0].xy).rgb; - gl_FragData[0] = vec4(gl_Color.rgb*col, 1.0); + gl_FragData[0] = vec4(gl_Color.rgb*col, 0.0); gl_FragData[1] = vec4(col*(gl_Color.a*1.5), gl_Color.a); - gl_FragData[2] = vec4(normalize(vary_normal), 0.0); - gl_FragData[3] = vary_position; + gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index 3413a7f9d6..44468cdfa2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -6,16 +6,13 @@ */ varying vec3 vary_normal; -varying vec4 vary_position; void main() { //transform vertex - gl_Position = ftransform(); + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vary_position = gl_ModelViewMatrix * gl_Vertex; - vary_normal = normalize(gl_NormalMatrix * gl_Normal); gl_FrontColor = gl_Color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index 2a811c5897..e518bddb98 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -8,14 +8,9 @@ #extension GL_ARB_texture_rectangle : enable uniform sampler2D diffuseMap; -uniform sampler2DShadow shadowMap0; -uniform sampler2DShadow shadowMap1; -uniform sampler2DShadow shadowMap2; -uniform sampler2DShadow shadowMap3; +uniform sampler2DRect depthMap; uniform sampler2D noiseMap; -uniform sampler2DRect positionMap; -uniform mat4 shadow_matrix[4]; uniform vec4 shadow_clip; uniform vec2 screen_res; @@ -30,12 +25,27 @@ varying vec3 vary_fragcoord; uniform float alpha_soften; +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + void main() { vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; frag *= screen_res; - vec3 samp_pos = texture2DRect(positionMap, frag).xyz; + vec3 samp_pos = getPosition(frag).xyz; float shadow = 1.0; vec4 pos = vary_position; @@ -46,10 +56,10 @@ void main() color.rgb = fullbrightScaleSoftClip(color.rgb); - if (samp_pos.z != 0.0) + if (samp_pos.z != 0.0 && color.a < 1.0) { float dist_factor = alpha_soften; - float a = gl_Color.a; + float a = color.a; a *= a; dist_factor *= 1.0/(1.0-a); color.a *= min((pos.z-samp_pos.z)*dist_factor, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 6381a1ced8..aff51178b0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -12,12 +12,12 @@ vec3 atmosAffectDirectionalLight(float lightIntensity); vec3 scaleDownLight(vec3 light); vec3 scaleUpLight(vec3 light); -varying vec4 vary_position; varying vec3 vary_ambient; varying vec3 vary_directional; varying vec3 vary_normal; varying vec3 vary_fragcoord; uniform float near_clip; +varying vec4 vary_position; void main() { diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl new file mode 100644 index 0000000000..b351eec6e5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl @@ -0,0 +1,165 @@ +/** + * @file giF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2D noiseMap; + +uniform sampler2D diffuseGIMap; +uniform sampler2D normalGIMap; +uniform sampler2D depthGIMap; + +uniform sampler2D lightFunc; + +// Inputs +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +uniform mat4 inv_proj; +uniform mat4 gi_mat; //gPipeline.mGIMatrix - eye space to sun space +uniform mat4 gi_mat_proj; //gPipeline.mGIMatrixProj - eye space to projected sun space +uniform mat4 gi_norm_mat; //gPipeline.mGINormalMatrix - eye space normal to sun space normal matrix +uniform mat4 gi_inv_proj; //gPipeline.mGIInvProj - projected sun space to sun space +uniform float gi_radius; +uniform float gi_intensity; +uniform int gi_samples; +uniform vec2 gi_kern[25]; +uniform vec2 gi_scale; +uniform vec3 gi_quad; +uniform vec3 gi_spec; +uniform float gi_direction_weight; +uniform float gi_light_offset; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec4 getGIPosition(vec2 gi_tc) +{ + float depth = texture2D(depthGIMap, gi_tc).a; + vec2 sc = gi_tc*2.0; + sc -= vec2(1.0, 1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = gi_inv_proj*ndc; + pos.xyz /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 giAmbient(vec3 pos, vec3 norm) +{ + vec4 gi_c = gi_mat_proj * vec4(pos, 1.0); + gi_c.xyz /= gi_c.w; + + vec4 gi_pos = gi_mat*vec4(pos,1.0); + vec3 gi_norm = (gi_norm_mat*vec4(norm,1.0)).xyz; + gi_norm = normalize(gi_norm); + + vec2 tcx = gi_norm.xy; + vec2 tcy = gi_norm.yx; + + vec4 eye_pos = gi_mat*vec4(0,0,0,1.0); + + vec3 eye_dir = normalize(gi_pos.xyz-eye_pos.xyz/eye_pos.w); + + //vec3 eye_dir = vec3(0,0,-1); + //eye_dir = (gi_norm_mat*vec4(eye_dir, 1.0)).xyz; + //eye_dir = normalize(eye_dir); + + //float round_x = gi_scale.x; + //float round_y = gi_scale.y; + + vec3 debug = texture2D(normalGIMap, gi_c.xy).rgb*0.5+0.5; + debug.xz = vec2(0.0,0.0); + //debug = fract(debug); + + float round_x = 1.0/64.0; + float round_y = 1.0/64.0; + + //gi_c.x = floor(gi_c.x/round_x+0.5)*round_x; + //gi_c.y = floor(gi_c.y/round_y+0.5)*round_y; + + float fda = 0.0; + vec3 fdiff = vec3(0,0,0); + + vec3 rcol = vec3(0,0,0); + + float fsa = 0.0; + + for (int i = -1; i < 2; i+=2 ) + { + for (int j = -1; j < 2; j+=2) + { + vec2 tc = vec2(i, j)*0.75; + vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0+tc*0.5).xyz; + //tc += gi_norm.xy*nz.z; + tc += nz.xy*2.0; + tc /= gi_samples; + tc += gi_c.xy; + + vec3 lnorm = -normalize(texture2D(normalGIMap, tc.xy).xyz*2.0-1.0); + vec3 lpos = getGIPosition(tc.xy).xyz; + + vec3 at = lpos-gi_pos.xyz; + float dist = dot(at,at); + float da = clamp(1.0/(gi_spec.x*dist), 0.0, 1.0); + + if (da > 0.0) + { + //add angular attenuation + vec3 ldir = at; + float ang_atten = clamp(dot(ldir, gi_norm), 0.0, 1.0); + + float ld = -dot(ldir, lnorm); + + if (ang_atten > 0.0 && ld < 0.0) + { + vec3 diff = texture2D(diffuseGIMap, tc.xy).xyz; + da = da*ang_atten; + fda += da; + fdiff += diff*da; + } + } + } + } + + fdiff /= max(gi_spec.y*fda, gi_quad.z); + fdiff = clamp(fdiff, vec3(0), vec3(1)); + + vec3 ret = fda*fdiff; + //ret = ret*ret*gi_quad.x+ret*gi_quad.y+gi_quad.z; + + //fda *= nz.z; + + //rcol.rgb *= gi_intensity; + //return rcol.rgb+vary_AmblitColor.rgb*0.25; + //return vec4(debug, 0.0); + //return vec4(fda*fdiff, 0.0); + return clamp(ret,vec3(0.0), vec3(1.0)); + //return debug.xyz; +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + vec4 pos = getPosition(pos_screen); + vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0; + + gl_FragData[0].xyz = giAmbient(pos, norm); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl new file mode 100644 index 0000000000..71dcea9628 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl @@ -0,0 +1,22 @@ +/** + * @file giV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res; + vec4 tex = gl_MultiTexCoord0; + tex.w = 1.0; + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl index 20a3f3df5b..8c140a7b4f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl @@ -9,12 +9,9 @@ uniform sampler2D diffuseMap; uniform sampler2D normalMap; uniform sampler2D specularMap; -varying vec4 vary_position; - void main() { gl_FragData[0] = texture2D(diffuseMap, gl_TexCoord[0].xy); gl_FragData[1] = texture2D(specularMap, gl_TexCoord[0].xy); - gl_FragData[2] = vec4(texture2D(normalMap, gl_TexCoord[0].xy).xyz, vary_position.z); - gl_FragData[3] = vary_position; + gl_FragData[2] = vec4(texture2D(normalMap, gl_TexCoord[0].xy).xyz, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl index 9c5ae31541..57532a30b3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl @@ -5,15 +5,11 @@ * $License$ */ -varying vec4 vary_position; - void main() { //transform vertex gl_Position = ftransform(); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vary_position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = gl_Color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl new file mode 100644 index 0000000000..e8b53b0293 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl @@ -0,0 +1,15 @@ +/** + * @file luminanceF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2DRect diffuseMap; + +varying vec2 vary_fragcoord; + +void main() +{ + gl_FragColor = texture2DRect(diffuseMap, vary_fragcoord.xy); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl new file mode 100644 index 0000000000..db8775f024 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl @@ -0,0 +1,20 @@ +/** + * @file giV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res; + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index 3689d12840..797b9e9f3b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -7,13 +7,14 @@ #extension GL_ARB_texture_rectangle : enable +uniform sampler2DRect depthMap; uniform sampler2DRect diffuseRect; uniform sampler2DRect specularRect; -uniform sampler2DRect positionMap; uniform sampler2DRect normalMap; uniform samplerCube environmentMap; -uniform sampler2DRect lightMap; uniform sampler2D noiseMap; +uniform sampler2D lightFunc; + uniform vec3 env_mat[3]; uniform float sun_wash; @@ -23,24 +24,48 @@ uniform int light_count; uniform vec4 light[16]; uniform vec4 light_col[16]; -varying vec3 vary_fragcoord; +varying vec4 vary_fragcoord; uniform vec2 screen_res; +uniform float far_z; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + void main() { vec2 frag = (vary_fragcoord.xy*0.5+0.5)*screen_res; - vec3 pos = texture2DRect(positionMap, frag.xy).xyz; - vec3 norm = normalize(texture2DRect(normalMap, frag.xy).xyz); + vec3 pos = getPosition(frag.xy).xyz; + if (pos.z < far_z) + { + discard; + } + + vec3 norm = normalize(texture2DRect(normalMap, frag.xy).xyz*2.0-1.0); vec4 spec = texture2DRect(specularRect, frag.xy); vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb; float noise = texture2D(noiseMap, frag.xy/128.0).b; vec3 out_col = vec3(0,0,0); + vec3 npos = normalize(-pos); for (int i = 0; i < light_count; ++i) { vec3 lv = light[i].xyz-pos; float dist2 = dot(lv,lv); - if (dist2 > light[i].w) + dist2 /= light[i].w; + if (dist2 > 1.0) { continue; } @@ -55,29 +80,38 @@ void main() da = dot(norm, lv); float fa = light_col[i].a+1.0; - float dist_atten = clamp(1.0-(dist2-light[i].w*(1.0-fa))/(light[i].w*fa), 0.0, 1.0); + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); dist_atten *= noise; float lit = da * dist_atten; vec3 col = light_col[i].rgb*lit*diff; + //vec3 col = vec3(dist2, light_col[i].a, lit); if (spec.a > 0.0) { - vec3 ref = reflect(normalize(pos), norm); - float sa = dot(ref,lv); - sa = max(sa, 0.0); - sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0); - sa *= noise; - col += da*sa*light_col[i].rgb*spec.rgb; + //vec3 ref = dot(pos+lv, norm); + + float sa = dot(normalize(lv+npos),norm); + + if (sa > 0.0) + { + sa = texture2D(lightFunc,vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); + sa *= noise; + col += da*sa*light_col[i].rgb*spec.rgb; + } } out_col += col; } - //attenuate point light contribution by SSAO component - out_col *= texture2DRect(lightMap, frag.xy).g; + if (dot(out_col, out_col) <= 0.0) + { + discard; + } gl_FragColor.rgb = out_col; gl_FragColor.a = 0.0; + + //gl_FragColor = vec4(0.1, 0.025, 0.025/4.0, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl new file mode 100644 index 0000000000..28bcd720c0 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -0,0 +1,178 @@ +/** + * @file multiSpotLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + + +#version 120 + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform samplerCube environmentMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + vec3 pos = getPosition(frag.xy).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 > 1.0) + { + discard; + } + + vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z < 0.0) + { + discard; + } + + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); + + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex; + } + + float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + //float amb_da = mix(proj_ambiance, proj_ambiance*max(-da, 0.0), max(da, 0.0)); + float amb_da = proj_ambiance; + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texture2DRect(specularRect, frag.xy); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec3 stc = (proj_mat * vec4(pfinal.xyz, 1.0)).xyz; + + if (stc.z > 0.0) + { + stc.xy /= stc.z+proj_near; + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb; + } + } + } + } + + /*if (spec.a > 0.0) + { + //vec3 ref = reflect(normalize(pos), norm); + float sa = dot(normalize(lv-normalize(pos)),norm);; + //sa = max(sa, 0.0); + //sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0); + sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); + sa *= noise; + col += da*sa*lcol*spec.rgb; + }*/ + + gl_FragColor.rgb = col; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index 52bad1f34c..78256e20cc 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -9,33 +9,53 @@ uniform sampler2DRect diffuseRect; uniform sampler2DRect specularRect; -uniform sampler2DRect positionMap; uniform sampler2DRect normalMap; uniform samplerCube environmentMap; -uniform sampler2DRect lightMap; uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2DRect depthMap; uniform vec3 env_mat[3]; uniform float sun_wash; varying vec4 vary_light; -varying vec3 vary_fragcoord; +varying vec4 vary_fragcoord; uniform vec2 screen_res; +uniform mat4 inv_proj; +uniform vec4 viewport; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = (pos_screen.xy-viewport.xy)*2.0; + sc /= viewport.zw; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + void main() { - vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; - frag *= screen_res; - vec3 pos = texture2DRect(positionMap, frag).xyz; + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + vec3 pos = getPosition(frag.xy).xyz; vec3 lv = vary_light.xyz-pos; float dist2 = dot(lv,lv); - if (dist2 > vary_light.w) + dist2 /= vary_light.w; + if (dist2 > 1.0) { discard; } - vec3 norm = texture2DRect(normalMap, frag).xyz; + vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0; float da = dot(norm, lv); if (da < 0.0) { @@ -46,30 +66,32 @@ void main() lv = normalize(lv); da = dot(norm, lv); - float noise = texture2D(noiseMap, frag/128.0).b; + float noise = texture2D(noiseMap, frag.xy/128.0).b; - vec3 col = texture2DRect(diffuseRect, frag).rgb; + vec3 col = texture2DRect(diffuseRect, frag.xy).rgb; float fa = gl_Color.a+1.0; - float dist_atten = clamp(1.0-(dist2-vary_light.w*(1.0-fa))/(vary_light.w*fa), 0.0, 1.0); + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); float lit = da * dist_atten * noise; col = gl_Color.rgb*lit*col; - vec4 spec = texture2DRect(specularRect, frag); + vec4 spec = texture2DRect(specularRect, frag.xy); if (spec.a > 0.0) { - vec3 ref = reflect(normalize(pos), norm); - float sa = dot(ref,lv); - sa = max(sa, 0.0); - sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0); - sa *= noise; - col += da*sa*gl_Color.rgb*spec.rgb; + float sa = dot(normalize(lv-normalize(pos)),norm); + if (sa > 0.0) + { + sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); + sa *= noise; + col += da*sa*gl_Color.rgb*spec.rgb; + } } - //attenuate point light contribution by SSAO component - col *= texture2DRect(lightMap, frag.xy).g; - - + if (dot(col, col) <= 0.0) + { + discard; + } + gl_FragColor.rgb = col; gl_FragColor.a = 0.0; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index a4edb88259..e815ca260f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -6,7 +6,7 @@ */ varying vec4 vary_light; -varying vec3 vary_fragcoord; +varying vec4 vary_fragcoord; uniform vec2 screen_res; uniform float near_clip; @@ -14,10 +14,10 @@ uniform float near_clip; void main() { //transform vertex - gl_Position = ftransform(); + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; - vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); + vary_fragcoord = pos; vec4 tex = gl_MultiTexCoord0; tex.w = 1.0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl new file mode 100644 index 0000000000..71de03663c --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl @@ -0,0 +1,57 @@ +/** + * @file postDeferredF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect localLightMap; +uniform sampler2DRect sunLightMap; +uniform sampler2DRect giLightMap; +uniform sampler2D luminanceMap; +uniform sampler2DRect lightMap; + +uniform vec3 lum_quad; +uniform float lum_lod; +uniform vec4 ambient; + +uniform vec3 gi_quad; + +uniform vec2 screen_res; +varying vec2 vary_fragcoord; + +void main() +{ + vec2 tc = vary_fragcoord.xy; + vec3 lum = texture2DLod(luminanceMap, tc/screen_res, lum_lod).rgb; + float luminance = lum.r; + luminance = luminance*lum_quad.y+lum_quad.z; + + vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy); + + float ambocc = texture2DRect(lightMap, vary_fragcoord.xy).g; + + vec3 gi_col = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; + gi_col = gi_col*gi_col*gi_quad.x + gi_col*gi_quad.y+gi_quad.z*ambocc*ambient.rgb; + gi_col *= diff; + + vec4 sun_col = texture2DRect(sunLightMap, vary_fragcoord.xy); + + vec3 local_col = texture2DRect(localLightMap, vary_fragcoord.xy).rgb; + + + sun_col *= 1.0/min(luminance, 1.0); + gi_col *= 1.0/luminance; + + vec3 col = sun_col.rgb+gi_col+local_col; + + gl_FragColor.rgb = col.rgb; + col.rgb = max(col.rgb-vec3(1.0,1.0,1.0), vec3(0.0, 0.0, 0.0)); + + gl_FragColor.a = 0.0; // max(dot(col.rgb,col.rgb)*lum_quad.x, sun_col.a); + + //gl_FragColor.rgb = vec3(lum_lod); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl new file mode 100644 index 0000000000..9819232fd5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl @@ -0,0 +1,17 @@ +/** + * @file postDeferredV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl new file mode 100644 index 0000000000..9612aee405 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl @@ -0,0 +1,79 @@ +/** + * @file postgiF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2DRect giLightMap; +uniform sampler2D noiseMap; + +uniform vec2 kern[32]; +uniform float dist_factor; +uniform float blur_size; +uniform vec2 delta; +uniform int kern_length; +uniform float kern_scale; +uniform vec3 blur_quad; + +varying vec2 vary_fragcoord; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0; + vec3 pos = getPosition(vary_fragcoord.xy).xyz; + + + vec3 ccol = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; + vec2 dlt = kern_scale * delta/(1.0+norm.xy*norm.xy); + dlt /= max(-pos.z*dist_factor, 1.0); + float defined_weight = kern[0].x; + vec3 col = vec3(0.0); + + for (int i = 0; i < kern_length; i++) + { + vec2 tc = vary_fragcoord.xy + kern[i].y*dlt; + vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz*2.0-1.0; + + float d = dot(norm.xyz, sampNorm); + + if (d > 0.8) + { + vec3 samppos = getPosition(tc.xy).xyz; + samppos -= pos; + if (dot(samppos,samppos) < -0.05*pos.z) + { + col += texture2DRect(giLightMap, tc).rgb*kern[i].x; + defined_weight += kern[i].x; + } + } + } + + col /= defined_weight; + + //col = ccol; + + col = col*col*blur_quad.x + col*blur_quad.y + blur_quad.z; + + gl_FragData[0].xyz = col; + + //gl_FragColor = ccol; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl new file mode 100644 index 0000000000..6adcda82a3 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl @@ -0,0 +1,17 @@ +/** + * @file postgiV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl index b3758c3638..b0b31fd4ba 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl @@ -7,8 +7,11 @@ uniform sampler2D diffuseMap; +varying vec4 post_pos; void main() { gl_FragColor = vec4(1,1,1,texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a); + + gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl index aae1beeae3..7214d246a4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl @@ -5,13 +5,17 @@ * $License$ */ +varying vec4 post_pos; + void main() { //transform vertex vec4 pos = gl_ModelViewProjectionMatrix*gl_Vertex; - //smash geometry against the near clip plane (great for ortho projections) - pos.z = max(pos.z, -1.0); - gl_Position = pos; + + post_pos = pos; + + gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w); + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; gl_FrontColor = gl_Color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index d5671a6ce4..b4b0d0ce9d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -12,9 +12,9 @@ uniform sampler2DRect specularRect; uniform sampler2DRect positionMap; uniform sampler2DRect normalMap; uniform sampler2DRect depthMap; -uniform sampler2DRect lightMap; uniform sampler2D noiseMap; uniform samplerCube environmentMap; +uniform sampler2D lightFunc; uniform float blur_size; uniform float blur_fidelity; @@ -38,9 +38,9 @@ uniform vec4 max_y; uniform vec4 glow; uniform float scene_light_strength; uniform vec3 env_mat[3]; -uniform mat4 shadow_matrix[3]; -uniform vec4 shadow_clip; -uniform mat3 ssao_effect_mat; +//uniform mat4 shadow_matrix[3]; +//uniform vec4 shadow_clip; +//uniform mat3 ssao_effect_mat; varying vec4 vary_light; varying vec2 vary_fragcoord; @@ -52,6 +52,22 @@ vec3 vary_AmblitColor; vec3 vary_AdditiveColor; vec3 vary_AtmosAttenuation; +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition(vec2 pos_screen) +{ //get position in screen space (world units) given window coordinate and depth map + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + vec3 getPositionEye() { return vary_PositionEye; @@ -162,17 +178,7 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) { temp2.x += .25; //increase ambient when there are more clouds - vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; - - /* decrease value and saturation (that in HSV, not HSL) for occluded areas - * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html - * // The following line of code performs the equivalent of: - * float ambAlpha = tmpAmbient.a; - * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis - * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); - * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); - */ - tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; //haze color setAdditiveColor( @@ -235,36 +241,27 @@ vec3 scaleSoftClip(vec3 light) void main() { vec2 tc = vary_fragcoord.xy; - vec3 pos = texture2DRect(positionMap, tc).xyz; - vec3 norm = texture2DRect(normalMap, tc).xyz; - vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; + vec3 pos = getPosition(tc).xyz; + vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0; + //vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; float da = max(dot(norm.xyz, vary_light.xyz), 0.0); - vec4 diffuse = vec4(texture2DRect(diffuseRect, tc).rgb, 1.0); + vec4 diffuse = texture2DRect(diffuseRect, tc); vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); - vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; - float scol = scol_ambocc.r; - float ambocc = scol_ambocc.g; - - calcAtmospherics(pos.xyz, ambocc); + calcAtmospherics(pos.xyz, 0.0); vec3 col = atmosAmbient(vec3(0)); - col += atmosAffectDirectionalLight(min(da, scol)); + col += atmosAffectDirectionalLight(clamp(da, diffuse.a, 1.0)); col *= diffuse.rgb; - if (spec.a > 0.2) + if (spec.a > 0.0) { - vec3 ref = reflect(pos.xyz, norm.xyz); - vec3 rc; - rc.x = dot(ref, env_mat[0]); - rc.y = dot(ref, env_mat[1]); - rc.z = dot(ref, env_mat[2]); - - vec3 refcol = textureCube(environmentMap, rc).rgb; - col.rgb += refcol * spec.rgb; + vec3 ref = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(ref, vary_light.xyz); + col.rgb += vary_SunlitColor*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a; } col = atmosLighting(col); @@ -272,8 +269,4 @@ void main() gl_FragColor.rgb = col; gl_FragColor.a = 0.0; - //gl_FragColor.rg = scol_ambocc.rg; - //gl_FragColor.rgb = norm.rgb*0.5+0.5; - //gl_FragColor.rgb = vec3(ambocc); - //gl_FragColor.rgb = vec3(scol); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl new file mode 100644 index 0000000000..2a7234fd83 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -0,0 +1,177 @@ +/** + * @file spotLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform samplerCube environmentMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + vec3 pos = getPosition(frag.xy).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 > 1.0) + { + discard; + } + + vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z < 0.0) + { + discard; + } + + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); + + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex; + } + + float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + //float amb_da = mix(proj_ambiance, proj_ambiance*max(-da, 0.0), max(da, 0.0)); + float amb_da = proj_ambiance; + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texture2DRect(specularRect, frag.xy); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec3 stc = (proj_mat * vec4(pfinal.xyz, 1.0)).xyz; + + if (stc.z > 0.0) + { + stc.xy /= stc.z+proj_near; + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb; + } + } + } + } + + /*if (spec.a > 0.0) + { + //vec3 ref = reflect(normalize(pos), norm); + float sa = dot(normalize(lv-normalize(pos)),norm);; + //sa = max(sa, 0.0); + //sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0); + sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); + sa *= noise; + col += da*sa*lcol*spec.rgb; + }*/ + + gl_FragColor.rgb = col; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl index d43fe6ca95..22bdd2c7f3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl @@ -7,17 +7,21 @@ #extension GL_ARB_texture_rectangle : enable -uniform sampler2DRect positionMap; -uniform sampler2DRect normalMap; uniform sampler2DRect depthMap; -uniform sampler2DShadow shadowMap0; -uniform sampler2DShadow shadowMap1; -uniform sampler2DShadow shadowMap2; -uniform sampler2DShadow shadowMap3; +uniform sampler2DRect normalMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2DRectShadow shadowMap4; +uniform sampler2DRectShadow shadowMap5; uniform sampler2D noiseMap; +uniform sampler2D lightFunc; + + // Inputs -uniform mat4 shadow_matrix[4]; +uniform mat4 shadow_matrix[6]; uniform vec4 shadow_clip; uniform float ssao_radius; uniform float ssao_max_radius; @@ -27,6 +31,25 @@ uniform float ssao_factor_inv; varying vec2 vary_fragcoord; varying vec4 vary_light; +uniform mat4 inv_proj; +uniform vec2 screen_res; + +uniform float shadow_bias; +uniform float shadow_offset; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + //calculate decreases in ambient lighting when crowded out (SSAO) float calcAmbientOcclusion(vec4 pos, vec3 norm) { @@ -54,7 +77,7 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm) for (int i = 0; i < 8; i++) { vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect); - vec3 samppos_world = texture2DRect(positionMap, samppos_screen).xyz; + vec3 samppos_world = getPosition(samppos_screen).xyz; vec3 diff = pos_world - samppos_world; float dist2 = dot(diff, diff); @@ -74,14 +97,18 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm) angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0); - return 1.0 - (float(points != 0) * angle_hidden); + return (1.0 - (float(points != 0) * angle_hidden)); } void main() { vec2 pos_screen = vary_fragcoord.xy; - vec4 pos = vec4(texture2DRect(positionMap, pos_screen).xyz, 1.0); - vec3 norm = texture2DRect(normalMap, pos_screen).xyz; + + //try doing an unproject here + + vec4 pos = getPosition(pos_screen); + + vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0; /*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL { @@ -90,35 +117,45 @@ void main() }*/ float shadow = 1.0; - float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); + float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); + vec4 spos = vec4(pos.xyz + norm.xyz * (-pos.z/64.0*shadow_offset+shadow_bias), 1.0); + + //vec3 debug = vec3(0,0,0); + if (dp_directional_light == 0.0) { // if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup shadow = 0.0; } - else if (pos.z > -shadow_clip.w) + else if (spos.z > -shadow_clip.w) { - if (pos.z < -shadow_clip.z) + vec4 lpos; + + if (spos.z < -shadow_clip.z) { - vec4 lpos = shadow_matrix[3]*pos; - shadow = shadow2DProj(shadowMap3, lpos).x; + lpos = shadow_matrix[3]*spos; + lpos.xy *= screen_res; + shadow = shadow2DRectProj(shadowMap3, lpos).x; shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); } - else if (pos.z < -shadow_clip.y) + else if (spos.z < -shadow_clip.y) { - vec4 lpos = shadow_matrix[2]*pos; - shadow = shadow2DProj(shadowMap2, lpos).x; + lpos = shadow_matrix[2]*spos; + lpos.xy *= screen_res; + shadow = shadow2DRectProj(shadowMap2, lpos).x; } - else if (pos.z < -shadow_clip.x) + else if (spos.z < -shadow_clip.x) { - vec4 lpos = shadow_matrix[1]*pos; - shadow = shadow2DProj(shadowMap1, lpos).x; + lpos = shadow_matrix[1]*spos; + lpos.xy *= screen_res; + shadow = shadow2DRectProj(shadowMap1, lpos).x; } else { - vec4 lpos = shadow_matrix[0]*pos; - shadow = shadow2DProj(shadowMap0, lpos).x; + lpos = shadow_matrix[0]*spos; + lpos.xy *= screen_res; + shadow = shadow2DRectProj(shadowMap0, lpos).x; } // take the most-shadowed value out of these two: @@ -126,6 +163,17 @@ void main() // * an unblurred dot product between the sun and this norm // the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting shadow = min(shadow, dp_directional_light); + + /*debug.r = lpos.y / (lpos.w*screen_res.y); + + lpos.xy /= lpos.w*32.0; + if (fract(lpos.x) < 0.1 || fract(lpos.y) < 0.1) + { + debug.gb = vec2(0.5, 0.5); + } + + debug += (1.0-shadow)*0.5;*/ + } else { @@ -135,5 +183,18 @@ void main() gl_FragColor[0] = shadow; gl_FragColor[1] = calcAmbientOcclusion(pos, norm); - //gl_FragColor[2] is unused as of August 2008, may be used for debugging + + //spotlight shadow 1 + vec4 lpos = shadow_matrix[4]*spos; + lpos.xy *= screen_res; + gl_FragColor[2] = shadow2DRectProj(shadowMap4, lpos).x; + + //spotlight shadow 2 + lpos = shadow_matrix[5]*spos; + lpos.xy *= screen_res; + gl_FragColor[3] = shadow2DRectProj(shadowMap5, lpos).x; + + //gl_FragColor.rgb = pos.xyz; + //gl_FragColor.b = shadow; + //gl_FragColor.rgb = debug; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index 211b2e0397..3cccfb7202 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -12,7 +12,6 @@ uniform sampler2D detail_3; uniform sampler2D alpha_ramp; varying vec3 vary_normal; -varying vec4 vary_position; void main() { @@ -28,9 +27,8 @@ void main() float alphaFinal = texture2D(alpha_ramp, gl_TexCoord[1].zw).a; vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal ); - gl_FragData[0] = vec4(outColor.rgb, 1.0); + gl_FragData[0] = vec4(outColor.rgb, 0.0); gl_FragData[1] = vec4(outColor.rgb*0.2, 0.2); - gl_FragData[2] = vec4(normalize(vary_normal), 0.0); - gl_FragData[3] = vary_position; + gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl index e9d6dcabff..3038b14772 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl @@ -6,7 +6,6 @@ */ varying vec3 vary_normal; -varying vec4 vary_position; vec4 texgen_object(vec4 vpos, vec4 tc, mat4 mat, vec4 tp0, vec4 tp1) { @@ -27,7 +26,6 @@ void main() //transform vertex gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - vary_position = gl_ModelViewMatrix * gl_Vertex; vary_normal = normalize(gl_NormalMatrix * gl_Normal); // Transform and pass tex coords diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl index bc2c9816dc..258acee08c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl @@ -8,13 +8,11 @@ uniform sampler2D diffuseMap; varying vec3 vary_normal; -varying vec4 vary_position; void main() { vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy); - gl_FragData[0] = gl_Color*col; + gl_FragData[0] = vec4(gl_Color.rgb*col.rgb, col.a <= 0.5 ? 0.0 : 0.005); gl_FragData[1] = vec4(0,0,0,0); - gl_FragData[2] = vec4(normalize(vary_normal), 0.0); - gl_FragData[3] = vary_position; + gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl index 9131d7c2b3..6b9dc2defb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl @@ -6,7 +6,6 @@ */ varying vec3 vary_normal; -varying vec4 vary_position; void main() { @@ -14,8 +13,6 @@ void main() gl_Position = ftransform(); gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - vary_position = gl_ModelViewMatrix * gl_Vertex; - vary_normal = normalize(gl_NormalMatrix * gl_Normal); gl_FrontColor = gl_Color; diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 0a1f019e3d..d21575119d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -5,19 +5,21 @@ * $License$ */ +#extension GL_ARB_texture_rectangle : enable + vec3 scaleSoftClip(vec3 inColor); vec3 atmosTransport(vec3 inColor); uniform sampler2D bumpMap; uniform sampler2D screenTex; uniform sampler2D refTex; -uniform sampler2DShadow shadowMap0; -uniform sampler2DShadow shadowMap1; -uniform sampler2DShadow shadowMap2; -uniform sampler2DShadow shadowMap3; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; uniform sampler2D noiseMap; -uniform mat4 shadow_matrix[4]; +uniform mat4 shadow_matrix[6]; uniform vec4 shadow_clip; uniform float sunAngle; @@ -32,7 +34,8 @@ uniform vec3 normScale; uniform float fresnelScale; uniform float fresnelOffset; uniform float blurMultiplier; - +uniform vec2 screen_res; +uniform mat4 norm_mat; //region space to screen space //bigWave is (refCoord.w, view.w); varying vec4 refCoord; @@ -88,7 +91,7 @@ void main() refcol *= df1 * 0.333; vec3 wavef = (wave1 + wave2 * 0.4 + wave3 * 0.6) * 0.5; - wavef.z *= max(-viewVec.z, 0.1); + //wavef.z *= max(-viewVec.z, 0.1); wavef = normalize(wavef); float df2 = dot(viewVec, wavef) * fresnelScale+fresnelOffset; @@ -101,10 +104,10 @@ void main() refcol = mix(baseCol*df2, refcol, dweight); //get specular component - float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0); + //float spec = clamp(dot(lightDir, (reflect(viewVec,wavef))),0.0,1.0); //harden specular - spec = pow(spec, 128.0); + //spec = pow(spec, 128.0); //figure out distortion vector (ripply) vec2 distort2 = distort+wavef.xy*refScale/max(dmod*df1, 1.0); @@ -118,40 +121,21 @@ void main() float shadow = 1.0; vec4 pos = vary_position; - vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz; - - if (pos.z > -shadow_clip.w) - { - vec4 spos = pos; - - if (pos.z < -shadow_clip.z) - { - vec4 lpos = (shadow_matrix[3]*spos); - shadow = shadow2DProj(shadowMap3, lpos).x; - } - else if (pos.z < -shadow_clip.y) - { - vec4 lpos = (shadow_matrix[2]*spos); - shadow = shadow2DProj(shadowMap2, lpos).x; - } - else if (pos.z < -shadow_clip.x) - { - vec4 lpos = (shadow_matrix[1]*spos); - shadow = shadow2DProj(shadowMap1, lpos).x; - } - else - { - vec4 lpos = (shadow_matrix[0]*spos); - shadow = shadow2DProj(shadowMap0, lpos).x; - } - } - - spec *= shadow; - color.rgb += spec * specular; - - color.rgb = atmosTransport(color.rgb); - color.rgb = scaleSoftClip(color.rgb); - color.a = spec * sunAngle2; + //vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz; + vec4 spos = pos; + + //spec *= shadow; + //color.rgb += spec * specular; + + //color.rgb = atmosTransport(color.rgb); + //color.rgb = scaleSoftClip(color.rgb); + //color.a = spec * sunAngle2; - gl_FragColor = color; + //wavef.z = -0.25f; + wavef = normalize(wavef); + wavef = (norm_mat*vec4(wavef, 1.0)).xyz; + + gl_FragData[0] = vec4(color.rgb, 0.75); + gl_FragData[1] = vec4(1,1,1, 0.8); + gl_FragData[2] = vec4(wavef*0.5+0.5, 0.0); } diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl new file mode 100644 index 0000000000..ad16de6d81 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -0,0 +1,132 @@ +/** + * @file alphaF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2D diffuseMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2D noiseMap; +uniform sampler2DRect depthMap; + +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform vec2 screen_res; +uniform vec2 shadow_res; + +vec3 atmosLighting(vec3 light); +vec3 scaleSoftClip(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_fragcoord; +varying vec3 vary_position; +varying vec3 vary_light; + +uniform float alpha_soften; + +uniform float shadow_bias; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos.xyz /= pos.w; + pos.w = 1.0; + return pos; +} + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, -scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, -scl, 0.0)).x, cs); + + return shadow/5.0; +} + + +void main() +{ + vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5; + frag *= screen_res; + + vec3 samp_pos = getPosition(frag).xyz; + + float shadow = 1.0; + vec4 pos = vec4(vary_position, 1.0); + + vec4 spos = pos; + + if (spos.z > -shadow_clip.w) + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 1.5); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 1.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 1.5); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.5); + } + } + + vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, gl_Color.a); + vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col; + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + + if (samp_pos.z != 0.0 && gl_Color.a < 1.0) + { + float dist_factor = alpha_soften; + float a = gl_Color.a; + a *= a; + dist_factor *= 1.0/(1.0-a); + color.a *= min((pos.z-samp_pos.z)*dist_factor, 1.0); + } + + //gl_FragColor = gl_Color; + gl_FragColor = color; + //gl_FragColor = vec4(1,0,1,1)*shadow; + +} + diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl new file mode 100644 index 0000000000..5991e1f3b5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -0,0 +1,76 @@ +/** + * @file alphaV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +void calcAtmospherics(vec3 inPositionEye); + +float calcDirectionalLight(vec3 n, vec3 l); +float calcPointLight(vec3 v, vec3 n, vec4 lp, float la); + +vec3 atmosAmbient(vec3 light); +vec3 atmosAffectDirectionalLight(float lightIntensity); +vec3 scaleDownLight(vec3 light); +vec3 scaleUpLight(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_fragcoord; +varying vec3 vary_position; +varying vec3 vary_light; + +uniform float near_clip; +uniform float shadow_offset; +uniform float shadow_bias; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + + gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; + + vec4 pos = (gl_ModelViewMatrix * gl_Vertex); + vec3 norm = normalize(gl_NormalMatrix * gl_Normal); + + float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz)); + vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset; + + calcAtmospherics(pos.xyz); + + //vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); + vec4 col; + col.a = gl_Color.a; + + // Add windlight lights + col.rgb = atmosAmbient(vec3(0.)); + col.rgb = scaleUpLight(col.rgb); + + // Collect normal lights (need to be divided by two, as we later multiply by 2) + col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation); + col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation); + col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation); + col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation); + col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation); + col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation); + col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); + col.rgb = scaleDownLight(col.rgb); + + vary_light = gl_LightSource[0].position.xyz; + + vary_ambient = col.rgb*gl_Color.rgb; + vary_directional.rgb = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); + + col.rgb = min(col.rgb*gl_Color.rgb, 1.0); + + gl_FrontColor = col; + + gl_FogFragCoord = pos.z; + + pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip); + +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl new file mode 100644 index 0000000000..a81e4caf4c --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl @@ -0,0 +1,98 @@ +/** + * @file avatarAlphaF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2D diffuseMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2D noiseMap; + +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform vec2 screen_res; +uniform vec2 shadow_res; + +vec3 atmosLighting(vec3 light); +vec3 scaleSoftClip(vec3 light); + +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_position; +varying vec3 vary_normal; + +uniform float shadow_bias; + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, -scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, scl, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, -scl, 0.0)).x, cs); + + return shadow/5.0; +} + +void main() +{ + float shadow = 1.0; + vec4 pos = vec4(vary_position, 1.0); + vec3 norm = normalize(vary_normal); + + //vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz; + + vec4 spos = pos; + + if (spos.z > -shadow_clip.w) + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 1.5); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 1.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 1.5); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.5); + } + } + + + vec4 col = vec4(vary_ambient + vary_directional*shadow, gl_Color.a); + vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col; + + color.rgb = atmosLighting(color.rgb); + + color.rgb = scaleSoftClip(color.rgb); + + gl_FragColor = color; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl new file mode 100644 index 0000000000..a939499b17 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -0,0 +1,84 @@ +/** + * @file avatarAlphaV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); +mat4 getSkinnedTransform(); +void calcAtmospherics(vec3 inPositionEye); + +float calcDirectionalLight(vec3 n, vec3 l); +float calcPointLight(vec3 v, vec3 n, vec4 lp, float la); + +vec3 atmosAmbient(vec3 light); +vec3 atmosAffectDirectionalLight(float lightIntensity); +vec3 scaleDownLight(vec3 light); +vec3 scaleUpLight(vec3 light); + +varying vec3 vary_position; +varying vec3 vary_ambient; +varying vec3 vary_directional; +varying vec3 vary_normal; + +uniform float near_clip; +uniform float shadow_offset; +uniform float shadow_bias; + +void main() +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + + vec4 pos; + vec3 norm; + + mat4 trans = getSkinnedTransform(); + pos.x = dot(trans[0], gl_Vertex); + pos.y = dot(trans[1], gl_Vertex); + pos.z = dot(trans[2], gl_Vertex); + pos.w = 1.0; + + norm.x = dot(trans[0].xyz, gl_Normal); + norm.y = dot(trans[1].xyz, gl_Normal); + norm.z = dot(trans[2].xyz, gl_Normal); + norm = normalize(norm); + + gl_Position = gl_ProjectionMatrix * pos; + + float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz)); + vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset; + vary_normal = norm; + + calcAtmospherics(pos.xyz); + + //vec4 color = calcLighting(pos.xyz, norm, gl_Color, vec4(0.)); + vec4 col; + col.a = gl_Color.a; + + // Add windlight lights + col.rgb = atmosAmbient(vec3(0.)); + col.rgb = scaleUpLight(col.rgb); + + // Collect normal lights (need to be divided by two, as we later multiply by 2) + col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].linearAttenuation); + col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].linearAttenuation); + col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].linearAttenuation); + col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].linearAttenuation); + col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].linearAttenuation); + col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].linearAttenuation); + col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); + col.rgb = scaleDownLight(col.rgb); + + vary_ambient = col.rgb*gl_Color.rgb; + vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); + + col.rgb = min(col.rgb*gl_Color.rgb, 1.0); + + gl_FrontColor = col; + + gl_FogFragCoord = pos.z; + +} + + diff --git a/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl new file mode 100644 index 0000000000..8bd702a8da --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/blurLightF.glsl @@ -0,0 +1,96 @@ +/** + * @file blurLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2DRect lightMap; +uniform sampler2DRect edgeMap; + +uniform float dist_factor; +uniform float blur_size; +uniform vec2 delta; +uniform vec3 kern[4]; +uniform float kern_scale; + +varying vec2 vary_fragcoord; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0; + vec3 pos = getPosition(vary_fragcoord.xy).xyz; + vec4 ccol = texture2DRect(lightMap, vary_fragcoord.xy).rgba; + + vec2 dlt = kern_scale * delta / (1.0+norm.xy*norm.xy); + + dlt /= max(-pos.z*dist_factor, 1.0); + + vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free' + vec4 col = defined_weight.xyxx * ccol; + + float e = 1.0; + for (int i = 0; i < 4; i++) + { + vec2 tc = vary_fragcoord.xy + kern[i].z*dlt; + + e = max(e, 0.0); + + vec2 wght = kern[i].xy*e; + + col += texture2DRect(lightMap, tc)*wght.xyxx; + defined_weight += wght; + + e *= e; + e -= texture2DRect(edgeMap, tc.xy).a+ + texture2DRect(edgeMap, tc.xy+dlt*0.333).a+ + texture2DRect(edgeMap, tc.xy-dlt*0.333).a; + } + + + e = 1.0; + + for (int i = 0; i < 4; i++) + { + vec2 tc = vary_fragcoord.xy - kern[i].z*dlt; + + e = max(e, 0.0); + + vec2 wght = kern[i].xy*e; + + col += texture2DRect(lightMap, tc)*wght.xyxx; + defined_weight += wght; + + e *= e; + e -= texture2DRect(edgeMap, tc.xy).a+ + texture2DRect(edgeMap, tc.xy+dlt*0.333).a+ + texture2DRect(edgeMap, tc.xy-dlt*0.333).a; + } + + + col /= defined_weight.xyxx; + + gl_FragColor = col; + + //gl_FragColor = ccol; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl new file mode 100644 index 0000000000..b7f07e5702 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/blurLightV.glsl @@ -0,0 +1,17 @@ +/** + * @file blurLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl new file mode 100644 index 0000000000..02beddd43b --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl @@ -0,0 +1,58 @@ +/** + * @file edgeF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; + +uniform float gi_dist_cutoff; + +varying vec2 vary_fragcoord; + +uniform float depth_cutoff; +uniform float norm_cutoff; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +float getDepth(vec2 pos_screen) +{ + float z = texture2DRect(depthMap, pos_screen.xy).a; + z = z*2.0-1.0; + vec4 ndc = vec4(0.0, 0.0, z, 1.0); + vec4 p = inv_proj*ndc; + return p.z/p.w; +} + +void main() +{ + vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0; + float depth = getDepth(vary_fragcoord.xy); + + vec2 tc = vary_fragcoord.xy; + + float sc = 0.75; + + vec2 de; + de.x = (depth-getDepth(tc+vec2(sc, sc))) + (depth-getDepth(tc+vec2(-sc, -sc))); + de.y = (depth-getDepth(tc+vec2(-sc, sc))) + (depth-getDepth(tc+vec2(sc, -sc))); + de /= depth; + de *= de; + de = step(depth_cutoff, de); + + vec2 ne; + ne.x = dot(texture2DRect(normalMap, tc+vec2(-sc,-sc)).rgb*2.0-1.0, norm); + ne.y = dot(texture2DRect(normalMap, tc+vec2(sc,sc)).rgb*2.0-1.0, norm); + + ne = 1.0-ne; + + ne = step(norm_cutoff, ne); + + gl_FragColor.a = dot(de,de)+dot(ne,ne); + //gl_FragColor.a = dot(de,de); +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl new file mode 100644 index 0000000000..f1938c92b8 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl @@ -0,0 +1,17 @@ +/** + * @file edgeV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl new file mode 100644 index 0000000000..651959413c --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -0,0 +1,188 @@ +/** + * @file multiSpotLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform samplerCube environmentMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambient_lod; +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform int proj_shadow_idx; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + vec3 pos = getPosition(frag.xy).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 > 1.0) + { + discard; + } + + float shadow = 1.0; + + if (proj_shadow_idx >= 0) + { + vec4 shd = texture2DRect(lightMap, frag.xy); + float sh[2]; + sh[0] = shd.b; + sh[1] = shd.a; + shadow = min(sh[proj_shadow_idx]+shadow_fade, 1.0); + } + + vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z < 0.0) + { + discard; + } + + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); + if (dist_atten <= 0.0) + { + discard; + } + + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + float amb_da = proj_ambiance; + + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex*shadow; + amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance; + } + + //float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, proj_ambient_lod); + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texture2DRect(specularRect, frag.xy); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec4 stc = (proj_mat * vec4(pfinal.xyz, 1.0)); + + if (stc.z > 0.0) + { + stc.xy /= stc.w; + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb*shadow; + } + } + } + } + + //attenuate point light contribution by SSAO component + col *= texture2DRect(lightMap, frag.xy).g; + + gl_FragColor.rgb = col; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl new file mode 100644 index 0000000000..ee0e9d6367 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/postDeferredF.glsl @@ -0,0 +1,59 @@ +/** + * @file postDeferredF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect localLightMap; +uniform sampler2DRect sunLightMap; +uniform sampler2DRect giLightMap; +uniform sampler2D luminanceMap; +uniform sampler2DRect lightMap; + +uniform vec3 gi_lum_quad; +uniform vec3 sun_lum_quad; +uniform vec3 lum_quad; +uniform float lum_lod; +uniform vec4 ambient; + +uniform vec3 gi_quad; + +uniform vec2 screen_res; +varying vec2 vary_fragcoord; + +void main() +{ + vec2 tc = vary_fragcoord.xy; + vec3 lcol = texture2DLod(luminanceMap, tc/screen_res, lum_lod).rgb; + + float lum = sqrt(lcol.r)*lum_quad.x+lcol.r*lcol.r*lum_quad.y+lcol.r*lum_quad.z; + + vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy); + + float ambocc = texture2DRect(lightMap, vary_fragcoord.xy).g; + + vec3 gi_col = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; + gi_col = gi_col*gi_col*gi_quad.x + gi_col*gi_quad.y+gi_quad.z*ambocc*ambient.rgb; + gi_col *= diff; + + vec4 sun_col = texture2DRect(sunLightMap, vary_fragcoord.xy); + + vec3 local_col = texture2DRect(localLightMap, vary_fragcoord.xy).rgb; + + + float sun_lum = 1.0-lum; + sun_lum = sun_lum*sun_lum*sun_lum_quad.x + sun_lum*sun_lum_quad.y+sun_lum_quad.z; + + float gi_lum = lum; + gi_lum = gi_lum*gi_lum*gi_lum_quad.x+gi_lum*gi_lum_quad.y+gi_lum_quad.z; + gi_col *= 1.0/gi_lum; + + vec3 col = sun_col.rgb*(1.0+max(sun_lum,0.0))+gi_col+local_col; + + gl_FragColor.rgb = col.rgb; + gl_FragColor.a = max(sun_lum*min(sun_col.r+sun_col.g+sun_col.b, 1.0), sun_col.a); + + //gl_FragColor.rgb = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl new file mode 100644 index 0000000000..9819232fd5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/postDeferredV.glsl @@ -0,0 +1,17 @@ +/** + * @file postDeferredV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl new file mode 100644 index 0000000000..531f7376a3 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -0,0 +1,294 @@ +/** + * @file softenLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect normalMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform samplerCube environmentMap; +uniform sampler2D lightFunc; +uniform vec3 gi_quad; + +uniform float blur_size; +uniform float blur_fidelity; + +// Inputs +uniform vec4 morphFactor; +uniform vec3 camPosLocal; +//uniform vec4 camPosWorld; +uniform vec4 gamma; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 distance_multiplier; +uniform vec4 max_y; +uniform vec4 glow; +uniform float scene_light_strength; +uniform vec3 env_mat[3]; +uniform vec4 shadow_clip; +uniform mat3 ssao_effect_mat; + +uniform sampler2DRect depthMap; +uniform mat4 inv_proj; +uniform vec2 screen_res; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; + +vec3 vary_PositionEye; + +vec3 vary_SunlitColor; +vec3 vary_AmblitColor; +vec3 vary_AdditiveColor; +vec3 vary_AtmosAttenuation; + +vec4 getPosition(vec2 pos_screen) +{ //get position in screen space (world units) given window coordinate and depth map + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 getPositionEye() +{ + return vary_PositionEye; +} +vec3 getSunlitColor() +{ + return vary_SunlitColor; +} +vec3 getAmblitColor() +{ + return vary_AmblitColor; +} +vec3 getAdditiveColor() +{ + return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ + return vary_AtmosAttenuation; +} + + +void setPositionEye(vec3 v) +{ + vary_PositionEye = v; +} + +void setSunlitColor(vec3 v) +{ + vary_SunlitColor = v; +} + +void setAmblitColor(vec3 v) +{ + vary_AmblitColor = v; +} + +void setAdditiveColor(vec3 v) +{ + vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ + vary_AtmosAttenuation = v; +} + +void calcAtmospherics(vec3 inPositionEye, float ambFactor) { + + vec3 P = inPositionEye; + setPositionEye(P); + + //(TERRAIN) limit altitude + if (P.y > max_y.x) P *= (max_y.x / P.y); + if (P.y < -max_y.x) P *= (-max_y.x / P.y); + + vec3 tmpLightnorm = lightnorm.xyz; + + vec3 Pn = normalize(P); + float Plen = length(P); + + vec4 temp1 = vec4(0); + vec3 temp2 = vec3(0); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + //sunlight attenuation effect (hue and brightness) due to atmosphere + //this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); + //I had thought blue_density and haze_density should have equal weighting, + //but attenuation due to haze_density tends to seem too strong + + temp1 = blue_density + vec4(haze_density.r); + blue_weight = blue_density / temp1; + haze_weight = vec4(haze_density.r) / temp1; + + //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) + temp2.y = max(0.0, tmpLightnorm.y); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // main atmospheric scattering line integral + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); + + //final atmosphere attenuation factor + setAtmosAttenuation(temp1.rgb); + + //compute haze glow + //(can use temp2.x as temp because we haven't used it yet) + temp2.x = dot(Pn, tmpLightnorm.xyz); + temp2.x = 1. - temp2.x; + //temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .03); //was glow.y + //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + //higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + //glow.z should be negative, so we're doing a sort of (1 / "angle") function + + //add "minimum anti-solar illumination" + temp2.x += .25; + + //increase ambient when there are more clouds + vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; + + /* decrease value and saturation (that in HSV, not HSL) for occluded areas + * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html + * // The following line of code performs the equivalent of: + * float ambAlpha = tmpAmbient.a; + * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis + * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); + * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); + */ + tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + + //haze color + setAdditiveColor( + vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x + + tmpAmbient))); + + //brightness of surface both sunlight and ambient + setSunlitColor(vec3(sunlight * .5)); + setAmblitColor(vec3(tmpAmbient * .25)); + setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1)); +} + +vec3 atmosLighting(vec3 light) +{ + light *= getAtmosAttenuation().r; + light += getAdditiveColor(); + return (2.0 * light); +} + +vec3 atmosTransport(vec3 light) { + light *= getAtmosAttenuation().r; + light += getAdditiveColor() * 2.0; + return light; +} +vec3 atmosGetDiffuseSunlightColor() +{ + return getSunlitColor(); +} + +vec3 scaleDownLight(vec3 light) +{ + return (light / scene_light_strength ); +} + +vec3 scaleUpLight(vec3 light) +{ + return (light * scene_light_strength); +} + +vec3 atmosAmbient(vec3 light) +{ + return getAmblitColor() + light / 2.0; +} + +vec3 atmosAffectDirectionalLight(float lightIntensity) +{ + return getSunlitColor() * lightIntensity; +} + +vec3 scaleSoftClip(vec3 light) +{ + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +void main() +{ + vec2 tc = vary_fragcoord.xy; + vec3 pos = getPosition(tc).xyz; + vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0; + //vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; + + float da = max(dot(norm.xyz, vary_light.xyz), 0.0); + + vec4 diffuse = texture2DRect(diffuseRect, tc); + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); + + vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; + float scol = max(scol_ambocc.r, diffuse.a); + float ambocc = scol_ambocc.g; + + calcAtmospherics(pos.xyz, ambocc); + + vec3 col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + + col *= diffuse.rgb; + + if (spec.a > 0.0) + { + vec3 ref = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(ref, vary_light.xyz); + col.rgb += vary_SunlitColor*scol*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + + gl_FragColor.rgb = col; + + //gl_FragColor.rgb = gi_col.rgb; + gl_FragColor.a = 0.0; + + //gl_FragColor.rg = scol_ambocc.rg; + //gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb; + //gl_FragColor.rgb = norm.rgb*0.5+0.5; + //gl_FragColor.rgb = vec3(ambocc); + //gl_FragColor.rgb = vec3(scol); +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl new file mode 100644 index 0000000000..ad8af4780d --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl @@ -0,0 +1,24 @@ +/** + * @file softenLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform vec2 screen_res; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; +void main() +{ + //transform vertex + gl_Position = ftransform(); + + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; + + vec4 tex = gl_MultiTexCoord0; + tex.w = 1.0; + + vary_light = gl_MultiTexCoord0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl new file mode 100644 index 0000000000..d6534083cf --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -0,0 +1,199 @@ +/** + * @file spotLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#version 120 + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform samplerCube environmentMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform sampler2D lightFunc; +uniform sampler2D projectionMap; + +uniform mat4 proj_mat; //screen space to light space +uniform float proj_near; //near clip for projection +uniform vec3 proj_p; //plane projection is emitting from (in screen space) +uniform vec3 proj_n; +uniform float proj_focus; //distance from plane to begin blurring +uniform float proj_lod; //(number of mips in proj map) +uniform float proj_range; //range between near clip and far clip plane of projection +uniform float proj_ambiance; +uniform float near_clip; +uniform float far_clip; + +uniform vec3 proj_origin; //origin of projection to be used for angular attenuation +uniform float sun_wash; +uniform int proj_shadow_idx; +uniform float shadow_fade; + +varying vec4 vary_light; + +varying vec4 vary_fragcoord; +uniform vec2 screen_res; + +uniform mat4 inv_proj; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +void main() +{ + vec4 frag = vary_fragcoord; + frag.xyz /= frag.w; + frag.xyz = frag.xyz*0.5+0.5; + frag.xy *= screen_res; + + float shadow = 1.0; + + if (proj_shadow_idx >= 0) + { + vec4 shd = texture2DRect(lightMap, frag.xy); + float sh[2]; + sh[0] = shd.b; + sh[1] = shd.a; + shadow = min(sh[proj_shadow_idx]+shadow_fade, 1.0); + } + + vec3 pos = getPosition(frag.xy).xyz; + vec3 lv = vary_light.xyz-pos.xyz; + float dist2 = dot(lv,lv); + dist2 /= vary_light.w; + if (dist2 > 1.0) + { + discard; + } + + vec3 norm = texture2DRect(normalMap, frag.xy).xyz*2.0-1.0; + + norm = normalize(norm); + float l_dist = -dot(lv, proj_n); + + vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); + if (proj_tc.z < 0.0) + { + discard; + } + + proj_tc.xyz /= proj_tc.w; + + float fa = gl_Color.a+1.0; + float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); + + lv = proj_origin-pos.xyz; + lv = normalize(lv); + float da = dot(norm, lv); + + vec3 col = vec3(0,0,0); + + vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb; + + float noise = texture2D(noiseMap, frag.xy/128.0).b; + if (proj_tc.z > 0.0 && + proj_tc.x < 1.0 && + proj_tc.y < 1.0 && + proj_tc.x > 0.0 && + proj_tc.y > 0.0) + { + float lit = 0.0; + if (da > 0.0) + { + float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + + vec4 plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + + vec3 lcol = gl_Color.rgb * plcol.rgb * plcol.a; + + lit = da * dist_atten * noise; + + col = lcol*lit*diff_tex*shadow; + } + + float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0); + float lod = diff * proj_lod; + vec4 amb_plcol = texture2DLod(projectionMap, proj_tc.xy, lod); + //float amb_da = mix(proj_ambiance, proj_ambiance*max(-da, 0.0), max(da, 0.0)); + float amb_da = proj_ambiance; + if (da > 0.0) + { + amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance; + } + + amb_da += (da*da*0.5+0.5)*proj_ambiance; + + amb_da *= dist_atten * noise; + + amb_da = min(amb_da, 1.0-lit); + + col += amb_da*gl_Color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a; + } + + + vec4 spec = texture2DRect(specularRect, frag.xy); + if (spec.a > 0.0) + { + vec3 ref = reflect(normalize(pos), norm); + + //project from point pos in direction ref to plane proj_p, proj_n + vec3 pdelta = proj_p-pos; + float ds = dot(ref, proj_n); + + if (ds < 0.0) + { + vec3 pfinal = pos + ref * dot(pdelta, proj_n)/ds; + + vec3 stc = (proj_mat * vec4(pfinal.xyz, 1.0)).xyz; + + if (stc.z > 0.0) + { + stc.xy /= stc.z+proj_near; + + if (stc.x < 1.0 && + stc.y < 1.0 && + stc.x > 0.0 && + stc.y > 0.0) + { + vec4 scol = texture2DLod(projectionMap, stc.xy, proj_lod-spec.a*proj_lod); + col += dist_atten*scol.rgb*gl_Color.rgb*scol.a*spec.rgb*shadow; + } + } + } + } + + /*if (spec.a > 0.0) + { + //vec3 ref = reflect(normalize(pos), norm); + float sa = dot(normalize(lv-normalize(pos)),norm);; + //sa = max(sa, 0.0); + //sa = pow(sa, 128.0 * spec.a*spec.a/dist_atten)*min(dist_atten*4.0, 1.0); + sa = texture2D(lightFunc, vec2(sa, spec.a)).a * min(dist_atten*4.0, 1.0); + sa *= noise; + col += da*sa*lcol*spec.rgb; + }*/ + + //attenuate point light contribution by SSAO component + col *= texture2DRect(lightMap, frag.xy).g; + + + gl_FragColor.rgb = col; + gl_FragColor.a = 0.0; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl new file mode 100644 index 0000000000..a0026edcd2 --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -0,0 +1,235 @@ +/** + * @file sunLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2DRectShadow shadowMap0; +uniform sampler2DRectShadow shadowMap1; +uniform sampler2DRectShadow shadowMap2; +uniform sampler2DRectShadow shadowMap3; +uniform sampler2DShadow shadowMap4; +uniform sampler2DShadow shadowMap5; +uniform sampler2D noiseMap; + +uniform sampler2D lightFunc; + + +// Inputs +uniform mat4 shadow_matrix[6]; +uniform vec4 shadow_clip; +uniform float ssao_radius; +uniform float ssao_max_radius; +uniform float ssao_factor; +uniform float ssao_factor_inv; + +varying vec2 vary_fragcoord; +varying vec4 vary_light; + +uniform mat4 inv_proj; +uniform vec2 screen_res; +uniform vec2 shadow_res; +uniform vec2 proj_shadow_res; + +uniform float shadow_bias; +uniform float shadow_offset; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +//calculate decreases in ambient lighting when crowded out (SSAO) +float calcAmbientOcclusion(vec4 pos, vec3 norm) +{ + vec2 kern[8]; + // exponentially (^2) distant occlusion samples spread around origin + kern[0] = vec2(-1.0, 0.0) * 0.125*0.125; + kern[1] = vec2(1.0, 0.0) * 0.250*0.250; + kern[2] = vec2(0.0, 1.0) * 0.375*0.375; + kern[3] = vec2(0.0, -1.0) * 0.500*0.500; + kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625; + kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750; + kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875; + kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000; + + vec2 pos_screen = vary_fragcoord.xy; + vec3 pos_world = pos.xyz; + vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy; + + float angle_hidden = 0.0; + int points = 0; + + float scale = min(ssao_radius / -pos_world.z, ssao_max_radius); + + // it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations (unrolling?) + for (int i = 0; i < 8; i++) + { + vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect); + vec3 samppos_world = getPosition(samppos_screen).xyz; + + vec3 diff = pos_world - samppos_world; + float dist2 = dot(diff, diff); + + // assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area + // --> solid angle shrinking by the square of distance + //radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2 + //(k should vary inversely with # of samples, but this is taken care of later) + + //if (dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) // -0.05*norm to shift sample point back slightly for flat surfaces + // angle_hidden += min(1.0/dist2, ssao_factor_inv); // dist != 0 follows from conditional. max of 1.0 (= ssao_factor_inv * ssao_factor) + angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv); + + // 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion" + points = points + int(diff.z > -1.0); + } + + angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0); + + return (1.0 - (float(points != 0) * angle_hidden)); +} + +float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias*scl; + + float cs = shadow2DRect(shadowMap, stc.xyz).x; + float shadow = cs; + + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(1.5, -1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, 1.5, 0.0)).x, cs); + shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-1.5, -1.5, 0.0)).x, cs); + + return shadow/5.0; + + //return shadow; +} + +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl) +{ + stc.xyz /= stc.w; + stc.z += shadow_bias*scl; + + float cs = shadow2D(shadowMap, stc.xyz).x; + float shadow = cs; + + vec2 off = 1.5/proj_shadow_res; + + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(off.x, -off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, off.y, 0.0)).x, cs); + shadow += max(shadow2D(shadowMap, stc.xyz+vec3(-off.x, -off.y, 0.0)).x, cs); + + + return shadow/5.0; + + //return shadow; +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + + //try doing an unproject here + + vec4 pos = getPosition(pos_screen); + + vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0; + + /*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL + { + gl_FragColor = vec4(0.0); // doesn't matter + return; + }*/ + + float shadow = 1.0; + float dp_directional_light = max(0.0, dot(norm, vary_light.xyz)); + + vec4 spos = vec4(pos.xyz + vary_light.xyz * (1.0-dp_directional_light)*shadow_offset, 1.0); + + if (spos.z > -shadow_clip.w) + { + if (dp_directional_light == 0.0) + { + // if we know this point is facing away from the sun then we know it's in shadow without having to do a squirrelly shadow-map lookup + shadow = 0.0; + } + else + { + vec4 lpos; + + if (spos.z < -shadow_clip.z) + { + lpos = shadow_matrix[3]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap3, lpos, 0.25); + shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); + } + else if (spos.z < -shadow_clip.y) + { + lpos = shadow_matrix[2]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap2, lpos, 0.5); + } + else if (spos.z < -shadow_clip.x) + { + lpos = shadow_matrix[1]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap1, lpos, 0.75); + } + else + { + lpos = shadow_matrix[0]*spos; + lpos.xy *= shadow_res; + shadow = pcfShadow(shadowMap0, lpos, 1.0); + } + + // take the most-shadowed value out of these two: + // * the blurred sun shadow in the light (shadow) map + // * an unblurred dot product between the sun and this norm + // the goal is to err on the side of most-shadow to fill-in shadow holes and reduce artifacting + shadow = min(shadow, dp_directional_light); + + //lpos.xy /= lpos.w*32.0; + //if (fract(lpos.x) < 0.1 || fract(lpos.y) < 0.1) + //{ + // shadow = 0.0; + //} + + } + } + else + { + // more distant than the shadow map covers + shadow = 1.0; + } + + gl_FragColor[0] = shadow; + gl_FragColor[1] = calcAmbientOcclusion(pos, norm); + + //spotlight shadow 1 + vec4 lpos = shadow_matrix[4]*spos; + gl_FragColor[2] = pcfShadow(shadowMap4, lpos, 0.1).x; + + //spotlight shadow 2 + lpos = shadow_matrix[5]*spos; + gl_FragColor[3] = pcfShadow(shadowMap5, lpos, 0.1).x; + + //gl_FragColor.rgb = pos.xyz; + //gl_FragColor.b = shadow; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl new file mode 100644 index 0000000000..5081485c4b --- /dev/null +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl @@ -0,0 +1,25 @@ +/** + * @file sunLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec4 vary_light; +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res; + vec4 tex = gl_MultiTexCoord0; + tex.w = 1.0; + + vary_light = gl_MultiTexCoord0; + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl new file mode 100644 index 0000000000..7325825d6d --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl @@ -0,0 +1,84 @@ +/** + * @file giDownsampleF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2DRect giLightMap; + +uniform vec2 kern[32]; +uniform float dist_factor; +uniform float blur_size; +uniform vec2 delta; +uniform int kern_length; +uniform float kern_scale; +uniform vec3 blur_quad; + +varying vec2 vary_fragcoord; + +uniform mat4 inv_proj; +uniform vec2 screen_res; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +float getDepth(vec2 pos_screen) +{ + float z = texture2DRect(depthMap, pos_screen.xy).a; + z = z*2.0-1.0; + vec4 ndc = vec4(0.0, 0.0, z, 1.0); + vec4 p = inv_proj*ndc; + return p.z/p.w; +} + +void main() +{ + vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0; + float depth = getDepth(vary_fragcoord.xy); + + vec3 ccol = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; + vec2 dlt = kern_scale * delta/(vec2(1.0,1.0)+norm.xy*norm.xy); + dlt /= clamp(-depth*blur_quad.x, 1.0, 3.0); + float defined_weight = kern[0].x; + vec3 col = ccol*kern[0].x; + + for (int i = 0; i < kern_length; i++) + { + vec2 tc = vary_fragcoord.xy + kern[i].y*dlt; + vec3 sampNorm = texture2DRect(normalMap, tc.xy).xyz*2.0-1.0; + + float d = dot(norm.xyz, sampNorm); + + if (d > 0.5) + { + float sampdepth = getDepth(tc.xy); + sampdepth -= depth; + if (sampdepth*sampdepth < blur_quad.z) + { + col += texture2DRect(giLightMap, tc).rgb*kern[i].x; + defined_weight += kern[i].x; + } + } + } + + col /= defined_weight; + + //col = ccol; + + col = col*blur_quad.y; + + gl_FragData[0].xyz = col; + + //gl_FragColor = ccol; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl new file mode 100644 index 0000000000..6adcda82a3 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl @@ -0,0 +1,17 @@ +/** + * @file postgiV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl new file mode 100644 index 0000000000..939710cb56 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl @@ -0,0 +1,190 @@ +/** + * @file giF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2DRect lightMap; +uniform sampler2DRect specularRect; + +uniform sampler2D noiseMap; + +uniform sampler2D diffuseGIMap; +uniform sampler2D specularGIMap; +uniform sampler2D normalGIMap; +uniform sampler2D depthGIMap; + +uniform sampler2D lightFunc; + +// Inputs +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +uniform vec4 sunlight_color; + +uniform mat4 inv_proj; +uniform mat4 gi_mat; //gPipeline.mGIMatrix - eye space to sun space +uniform mat4 gi_mat_proj; //gPipeline.mGIMatrixProj - eye space to projected sun space +uniform mat4 gi_norm_mat; //gPipeline.mGINormalMatrix - eye space normal to sun space normal matrix +uniform mat4 gi_inv_proj; //gPipeline.mGIInvProj - projected sun space to sun space +uniform float gi_sample_width; +uniform float gi_noise; +uniform float gi_attenuation; +uniform float gi_range; + +vec4 getPosition(vec2 pos_screen) +{ + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec4 getGIPosition(vec2 gi_tc) +{ + float depth = texture2D(depthGIMap, gi_tc).a; + vec2 sc = gi_tc*2.0; + sc -= vec2(1.0, 1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = gi_inv_proj*ndc; + pos.xyz /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 giAmbient(vec3 pos, vec3 norm) +{ + vec4 gi_c = gi_mat_proj * vec4(pos, 1.0); + gi_c.xyz /= gi_c.w; + + vec4 gi_pos = gi_mat*vec4(pos,1.0); + vec3 gi_norm = (gi_norm_mat*vec4(norm,1.0)).xyz; + gi_norm = normalize(gi_norm); + + vec4 c_spec = texture2DRect(specularRect, vary_fragcoord.xy); + vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).rgb; + gi_pos.xyz += nz.x*gi_noise*gi_norm.xyz; + vec2 tcx = gi_norm.xy; + vec2 tcy = gi_norm.yx; + + vec4 eye_pos = gi_mat*vec4(0,0,0,1.0); + + vec3 eye_dir = normalize(gi_pos.xyz-eye_pos.xyz); + vec3 eye_ref = reflect(eye_dir, gi_norm); + + float da = 0.0; //texture2DRect(lightMap, vary_fragcoord.xy).r*0.5; + vec3 fdiff = vec3(da); + float fda = da; + + vec3 rcol = vec3(0,0,0); + + float fsa = 0.0; + + + for (int i = -1; i <= 1; i += 2 ) + { + for (int j = -1; j <= 1; j+= 2) + { + vec2 tc = vec2(i, j)*0.75+gi_norm.xy*nz.z; + tc += nz.xy*2.0; + tc *= gi_sample_width*0.25; + tc += gi_c.xy; + + vec3 lnorm = -(texture2D(normalGIMap, tc.xy).xyz*2.0-1.0); + vec3 lpos = getGIPosition(tc.xy).xyz; + + vec3 at = lpos-gi_pos.xyz; + float dist = length(at); + float dist_atten = clamp(1.0/(gi_attenuation*dist), 0.0, 1.0); + + + if (dist_atten > 0.01) + { //possible contribution of indirect light to this surface + vec3 ldir = at; + + float ld = -dot(ldir, lnorm); + + if (ld < 0.0) + { + float ang_atten = dot(ldir, gi_norm); + + if (ang_atten > 0.0) + { + vec4 spec = texture2D(specularGIMap, tc.xy); + at = normalize(at); + vec3 diff; + + float da = 0.0; + + //contribution from indirect source to visible pixel + vec3 ha = at; + ha.z -= 1.0; + ha = normalize(ha); + if (spec.a > 0.0) + { + float sa = dot(ha,lnorm); + da = texture2D(lightFunc, vec2(sa, spec.a)).a; + } + else + { + da = -lnorm.z; + } + + diff = texture2D(diffuseGIMap, tc.xy).rgb+spec.rgb*spec.a*2.0; + + if (da > 0.0) + { //contribution from visible pixel to eye + vec3 ha = normalize(at-eye_dir); + if (c_spec.a > 0.0) + { + float sa = dot(ha, gi_norm); + da = dist_atten*texture2D(lightFunc, vec2(sa, c_spec.a)).a; + } + else + { + da = dist_atten*dot(gi_norm, normalize(ldir)); + } + fda += da; + fdiff += da*(c_spec.rgb*c_spec.a*2.0+vec3(1,1,1))*diff.rgb; + } + } + } + } + } + } + + fdiff *= sunlight_color.rgb; + + vec3 ret = fda*fdiff; + + return clamp(ret,vec3(0.0), vec3(1.0)); +} + +void main() +{ + vec2 pos_screen = vary_fragcoord.xy; + vec4 pos = getPosition(pos_screen); + + float rad = gi_range*0.5; + + vec3 norm = texture2DRect(normalMap, pos_screen).xyz*2.0-1.0; + float dist = max(length(pos.xyz)-rad, 0.0); + + float da = clamp(1.0-dist/rad, 0.0, 1.0); + + vec3 ambient = da > 0.0 ? giAmbient(pos.xyz, norm) : vec3(0); + + + gl_FragData[0].xyz = mix(vec3(0), ambient, da); +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl new file mode 100644 index 0000000000..e0eeebf8b6 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl @@ -0,0 +1,25 @@ +/** + * @file giFinalF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2D bloomMap; +uniform sampler2DRect edgeMap; + +uniform vec2 screen_res; +varying vec2 vary_fragcoord; + + +void main() +{ + vec4 bloom = texture2D(bloomMap, vary_fragcoord.xy/screen_res); + vec4 diff = texture2DRect(diffuseRect, vary_fragcoord.xy); + + gl_FragColor = bloom + diff; + //gl_FragColor.rgb = vec3(texture2DRect(edgeMap, vary_fragcoord.xy).a); +}
\ No newline at end of file diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl new file mode 100644 index 0000000000..41a29c31bd --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl @@ -0,0 +1,17 @@ +/** + * @file giFinalV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl new file mode 100644 index 0000000000..71dcea9628 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl @@ -0,0 +1,22 @@ +/** + * @file giV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res; + vec4 tex = gl_MultiTexCoord0; + tex.w = 1.0; + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl new file mode 100644 index 0000000000..406a7e07cf --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl @@ -0,0 +1,19 @@ +/** + * @file luminanceF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect lightMap; +uniform sampler2DRect diffuseRect; + +varying vec2 vary_fragcoord; +void main() +{ + float i = texture2DRect(lightMap, vary_fragcoord.xy).r; + gl_FragColor.rgb = vec3(i); + gl_FragColor.a = 1.0; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl new file mode 100644 index 0000000000..db8775f024 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl @@ -0,0 +1,20 @@ +/** + * @file giV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; + +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy * 0.5 + 0.5)*screen_res; + + gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl new file mode 100644 index 0000000000..5e69bf36d9 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl @@ -0,0 +1,80 @@ +/** + * @file postDeferredF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; + +uniform sampler2DRect localLightMap; +uniform sampler2DRect sunLightMap; +uniform sampler2DRect giLightMap; +uniform sampler2DRect edgeMap; + +uniform sampler2D luminanceMap; + +uniform sampler2DRect lightMap; + +uniform sampler2D lightFunc; +uniform sampler2D noiseMap; + +uniform float sun_lum_scale; +uniform float sun_lum_offset; +uniform float lum_scale; +uniform float lum_lod; +uniform vec4 ambient; +uniform float gi_brightness; +uniform float gi_luminance; + +uniform vec4 sunlight_color; + +uniform vec2 screen_res; +varying vec2 vary_fragcoord; + +void main() +{ + vec2 tc = vary_fragcoord.xy; + vec4 lcol = texture2DLod(luminanceMap, vec2(0.5, 0.5), lum_lod); + + vec3 gi_col = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; + vec4 sun_col = texture2DRect(sunLightMap, vary_fragcoord.xy); + vec3 local_col = texture2DRect(localLightMap, vary_fragcoord.xy).rgb; + + float scol = texture2DRect(lightMap, vary_fragcoord.xy).r; + + vec3 diff = texture2DRect(diffuseRect, vary_fragcoord.xy).rgb; + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); + + gi_col = gi_col*(diff.rgb+spec.rgb*spec.a); + + float lum = 1.0-clamp(pow(lcol.r, gi_brightness)+sun_lum_offset, 0.0, 1.0); + + lum *= sun_lum_scale; + + sun_col *= 1.0+(lum*lum_scale*scol); + + vec4 col; + col.rgb = gi_col+sun_col.rgb+local_col; + + col.a = sun_col.a; + + vec3 bcol = vec3(0,0,0); + float tweight = 0.0; + for (int i = 0; i < 16; i++) + { + float weight = (float(i)+1.0)/2.0; + bcol += texture2DLod(luminanceMap, vary_fragcoord.xy/screen_res, weight).rgb*weight*weight*weight; + tweight += weight*weight; + } + + bcol /= tweight; + bcol *= gi_luminance; + col.rgb += bcol*lum; + + gl_FragColor = col; + //gl_FragColor.rgb = texture2DRect(giLightMap, vary_fragcoord.xy).rgb; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl new file mode 100644 index 0000000000..9819232fd5 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl @@ -0,0 +1,17 @@ +/** + * @file postDeferredV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl new file mode 100644 index 0000000000..901b60af59 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl @@ -0,0 +1,69 @@ +/** + * @file postgiF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect depthMap; +uniform sampler2DRect normalMap; +uniform sampler2DRect giLightMap; +uniform sampler2D noiseMap; +uniform sampler2D giMip; +uniform sampler2DRect edgeMap; + + +uniform vec2 delta; +uniform float kern_scale; +uniform float gi_edge_weight; +uniform float gi_blur_brightness; + +varying vec2 vary_fragcoord; + +void main() +{ + vec2 dlt = kern_scale*delta; + float defined_weight = 0.0; + vec3 col = vec3(0.0); + + float e = 1.0; + + for (int i = 1; i < 8; i++) + { + vec2 tc = vary_fragcoord.xy + float(i) * dlt; + + e = max(e, 0.0); + float wght = e; + + col += texture2DRect(giLightMap, tc).rgb*wght; + defined_weight += wght; + + e *= e; + e -=(texture2DRect(edgeMap, tc.xy-dlt*0.25).a+ + texture2DRect(edgeMap, tc.xy+dlt*0.25).a)*gi_edge_weight; + } + + e = 1.0; + + for (int i = 1; i < 8; i++) + { + vec2 tc = vary_fragcoord.xy - float(i) * dlt; + + e = max(e,0.0); + float wght = e; + + col += texture2DRect(giLightMap, tc).rgb*wght; + defined_weight += wght; + + e *= e; + e -= (texture2DRect(edgeMap, tc.xy-dlt*0.25).a+ + texture2DRect(edgeMap, tc.xy+dlt*0.25).a)*gi_edge_weight; + + } + + col /= max(defined_weight, 0.01); + + gl_FragColor.rgb = col * gi_blur_brightness; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl new file mode 100644 index 0000000000..6adcda82a3 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl @@ -0,0 +1,17 @@ +/** + * @file postgiV.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +varying vec2 vary_fragcoord; +uniform vec2 screen_res; + +void main() +{ + //transform vertex + gl_Position = ftransform(); + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl new file mode 100644 index 0000000000..96a083b522 --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -0,0 +1,297 @@ +/** + * @file softenLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#extension GL_ARB_texture_rectangle : enable + +uniform sampler2DRect diffuseRect; +uniform sampler2DRect specularRect; +uniform sampler2DRect normalMap; +uniform sampler2DRect lightMap; +uniform sampler2D noiseMap; +uniform samplerCube environmentMap; +uniform sampler2D lightFunc; +uniform vec3 gi_quad; + +uniform float blur_size; +uniform float blur_fidelity; + +// Inputs +uniform vec4 morphFactor; +uniform vec3 camPosLocal; +//uniform vec4 camPosWorld; +uniform vec4 gamma; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform vec4 haze_horizon; +uniform vec4 haze_density; +uniform vec4 cloud_shadow; +uniform vec4 density_multiplier; +uniform vec4 distance_multiplier; +uniform vec4 max_y; +uniform vec4 glow; +uniform float scene_light_strength; +uniform vec3 env_mat[3]; +uniform vec4 shadow_clip; +uniform mat3 ssao_effect_mat; + +uniform sampler2DRect depthMap; +uniform mat4 inv_proj; +uniform vec2 screen_res; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; + +vec3 vary_PositionEye; + +vec3 vary_SunlitColor; +vec3 vary_AmblitColor; +vec3 vary_AdditiveColor; +vec3 vary_AtmosAttenuation; +uniform float gi_ambiance; + +vec4 getPosition(vec2 pos_screen) +{ //get position in screen space (world units) given window coordinate and depth map + float depth = texture2DRect(depthMap, pos_screen.xy).a; + vec2 sc = pos_screen.xy*2.0; + sc /= screen_res; + sc -= vec2(1.0,1.0); + vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); + vec4 pos = inv_proj * ndc; + pos /= pos.w; + pos.w = 1.0; + return pos; +} + +vec3 getPositionEye() +{ + return vary_PositionEye; +} +vec3 getSunlitColor() +{ + return vary_SunlitColor; +} +vec3 getAmblitColor() +{ + return vary_AmblitColor; +} +vec3 getAdditiveColor() +{ + return vary_AdditiveColor; +} +vec3 getAtmosAttenuation() +{ + return vary_AtmosAttenuation; +} + + +void setPositionEye(vec3 v) +{ + vary_PositionEye = v; +} + +void setSunlitColor(vec3 v) +{ + vary_SunlitColor = v; +} + +void setAmblitColor(vec3 v) +{ + vary_AmblitColor = v; +} + +void setAdditiveColor(vec3 v) +{ + vary_AdditiveColor = v; +} + +void setAtmosAttenuation(vec3 v) +{ + vary_AtmosAttenuation = v; +} + +void calcAtmospherics(vec3 inPositionEye, float ambFactor) { + + vec3 P = inPositionEye; + setPositionEye(P); + + //(TERRAIN) limit altitude + if (P.y > max_y.x) P *= (max_y.x / P.y); + if (P.y < -max_y.x) P *= (-max_y.x / P.y); + + vec3 tmpLightnorm = lightnorm.xyz; + + vec3 Pn = normalize(P); + float Plen = length(P); + + vec4 temp1 = vec4(0); + vec3 temp2 = vec3(0); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = sunlight_color; + vec4 light_atten; + + //sunlight attenuation effect (hue and brightness) due to atmosphere + //this is used later for sunlight modulation at various altitudes + light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); + //I had thought blue_density and haze_density should have equal weighting, + //but attenuation due to haze_density tends to seem too strong + + temp1 = blue_density + vec4(haze_density.r); + blue_weight = blue_density / temp1; + haze_weight = vec4(haze_density.r) / temp1; + + //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) + temp2.y = max(0.0, tmpLightnorm.y); + temp2.y = 1. / temp2.y; + sunlight *= exp( - light_atten * temp2.y); + + // main atmospheric scattering line integral + temp2.z = Plen * density_multiplier.x; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); + + //final atmosphere attenuation factor + setAtmosAttenuation(temp1.rgb); + + //compute haze glow + //(can use temp2.x as temp because we haven't used it yet) + temp2.x = dot(Pn, tmpLightnorm.xyz); + temp2.x = 1. - temp2.x; + //temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .03); //was glow.y + //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + //higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + //glow.z should be negative, so we're doing a sort of (1 / "angle") function + + //add "minimum anti-solar illumination" + temp2.x += .25; + + //increase ambient when there are more clouds + vec4 tmpAmbient = ambient*gi_ambiance + (vec4(1.) - ambient*gi_ambiance) * cloud_shadow.x * 0.5; + + /* decrease value and saturation (that in HSV, not HSL) for occluded areas + * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html + * // The following line of code performs the equivalent of: + * float ambAlpha = tmpAmbient.a; + * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis + * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); + * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); + */ + tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + + //haze color + setAdditiveColor( + vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) + + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x + + tmpAmbient))); + + //brightness of surface both sunlight and ambient + setSunlitColor(vec3(sunlight * .5)); + setAmblitColor(vec3(tmpAmbient * .25)); + setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1)); +} + +vec3 atmosLighting(vec3 light) +{ + light *= getAtmosAttenuation().r; + light += getAdditiveColor(); + return (2.0 * light); +} + +vec3 atmosTransport(vec3 light) { + light *= getAtmosAttenuation().r; + light += getAdditiveColor() * 2.0; + return light; +} +vec3 atmosGetDiffuseSunlightColor() +{ + return getSunlitColor(); +} + +vec3 scaleDownLight(vec3 light) +{ + return (light / scene_light_strength ); +} + +vec3 scaleUpLight(vec3 light) +{ + return (light * scene_light_strength); +} + +vec3 atmosAmbient(vec3 light) +{ + return getAmblitColor() + light / 2.0; +} + +vec3 atmosAffectDirectionalLight(float lightIntensity) +{ + return getSunlitColor() * lightIntensity; +} + +vec3 scaleSoftClip(vec3 light) +{ + //soft clip effect: + light = 1. - clamp(light, vec3(0.), vec3(1.)); + light = 1. - pow(light, gamma.xxx); + + return light; +} + +void main() +{ + vec2 tc = vary_fragcoord.xy; + vec3 pos = getPosition(tc).xyz; + vec3 norm = texture2DRect(normalMap, tc).xyz*2.0-1.0; + //vec3 nz = texture2D(noiseMap, vary_fragcoord.xy/128.0).xyz; + + float da = max(dot(norm.xyz, vary_light.xyz), 0.0); + + vec4 diffuse = texture2DRect(diffuseRect, tc); + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); + + da = texture2D(lightFunc, vec2(da, 0.0)).a; + + vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; + float scol = max(scol_ambocc.r, diffuse.a); + float ambocc = scol_ambocc.g; + + calcAtmospherics(pos.xyz, ambocc); + + vec3 col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + + col *= diffuse.rgb; + + if (spec.a > 0.0) + { + vec3 ref = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(ref, vary_light.xyz); + col.rgb += vary_SunlitColor*scol*spec.rgb*texture2D(lightFunc, vec2(sa, spec.a)).a; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + + gl_FragColor.rgb = col; + + //gl_FragColor.rgb = gi_col.rgb; + gl_FragColor.a = 0.0; + + //gl_FragColor.rg = scol_ambocc.rg; + //gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb; + //gl_FragColor.rgb = norm.rgb*0.5+0.5; + //gl_FragColor.rgb = vec3(ambocc); + //gl_FragColor.rgb = vec3(scol); +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl new file mode 100644 index 0000000000..ad8af4780d --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl @@ -0,0 +1,24 @@ +/** + * @file softenLightF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform vec2 screen_res; + +varying vec4 vary_light; +varying vec2 vary_fragcoord; +void main() +{ + //transform vertex + gl_Position = ftransform(); + + vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; + vary_fragcoord = (pos.xy*0.5+0.5)*screen_res; + + vec4 tex = gl_MultiTexCoord0; + tex.w = 1.0; + + vary_light = gl_MultiTexCoord0; +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl new file mode 100644 index 0000000000..258acee08c --- /dev/null +++ b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl @@ -0,0 +1,18 @@ +/** + * @file treeF.glsl + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +uniform sampler2D diffuseMap; + +varying vec3 vary_normal; + +void main() +{ + vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy); + gl_FragData[0] = vec4(gl_Color.rgb*col.rgb, col.a <= 0.5 ? 0.0 : 0.005); + gl_FragData[1] = vec4(0,0,0,0); + gl_FragData[2] = vec4(normalize(vary_normal)*0.5+0.5, 0.0); +} diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 733670f311..5c5c4e5b3c 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -162,8 +162,9 @@ Intel Montara .*Intel.*Montara.* 0 0 Intel Springdale .*Intel.*Springdale.* 0 0 Matrox .*Matrox.* 0 0 Mesa .*Mesa.* 0 0 -NVIDIA GT 120 .*NVIDIA.*GeForce.*GT.*12.* 3 1 -NVIDIA GT 130 .*NVIDIA.*GeForce.*GT.*13.* 3 1 +NVIDIA GT 120 .*NVIDIA.*GeForce.*GT.*12.* 2 1 +NVIDIA GT 130 .*NVIDIA.*GeForce.*GT.*13.* 3 1 +NVIDIA GTS 250 .*NVIDIA.*GeForce.*GTS.*25.* 3 1 NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*26.* 3 1 NVIDIA GTX 270 .*NVIDIA.*GeForce.*GTX.*27.* 3 1 NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*28.* 3 1 diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index c4e01808f7..6eb248ef74 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1172,99 +1172,24 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name, return LLUUID::null; } - // First, make a folder in the Clothes directory. + // First, make a folder in the My Outfits directory. + LLUUID parent_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS); LLUUID folder_id = gInventory.createNewCategory( - gInventory.findCategoryUUIDForType(LLAssetType::AT_MY_OUTFITS), + parent_id, LLAssetType::AT_OUTFIT, new_folder_name); -// bool found_first_item = false; - - /////////////////// - // Wearables + LLAppearanceManager::shallowCopyCategory(LLAppearanceManager::getCOF(),folder_id, NULL); - if (wearables_to_include.count()) +#if 0 + LLViewerInventoryCategory *parent_category = gInventory.getCategory(parent_id); + if (parent_category) { - // Then, iterate though each of the wearables and save links to them in the folder. - S32 i; - S32 count = wearables_to_include.count(); - LLDynamicArray<LLUUID> delete_items; - LLPointer<LLRefCount> cbdone = NULL; - for (i = 0; i < count; ++i) - { - const S32 type = wearables_to_include[i]; - for (U32 j=0; j<getWearableCount((EWearableType)i); j++) - { - LLWearable* old_wearable = getWearable((EWearableType)type,j); - if (old_wearable) - { - LLViewerInventoryItem* item = gInventory.getItem(getWearableItemID((EWearableType) type, j)); - if (!item) continue; - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item(gAgent.getID(), - item->getLinkedUUID(), - folder_id, - item->getName(), - LLAssetType::AT_LINK, - cb); - } - } - } - gInventory.notifyObservers(); + parent_category->setSelectionByID(folder_id,TRUE); + parent_category->setNeedsAutoRename(TRUE); } +#endif - - /////////////////// - // Attachments - - if (attachments_to_include.count()) - { - for (S32 i = 0; i < attachments_to_include.count(); i++) - { - S32 attachment_pt = attachments_to_include[i]; - LLViewerJointAttachment* attachment = get_if_there(mAvatarObject->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL); - if (!attachment) continue; - LLViewerObject* attached_object = attachment->getObject(); - if (!attached_object) continue; - const LLUUID& item_id = attachment->getItemID(); - if (item_id.isNull()) continue; - LLInventoryItem* item = gInventory.getItem(item_id); - if (!item) continue; - - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item(gAgent.getID(), - item->getLinkedUUID(), - folder_id, - item->getName(), - LLAssetType::AT_LINK, - cb); - } - } - - /////////////////// - // Gestures - - /* Disabling this for now, otherwise this adds all your default gestures and all previous - active gestures. Need to rethink the intended behavior. - for (LLGestureManager::item_map_t::iterator iter = LLGestureManager::instance().mActive.begin(); - iter != LLGestureManager::instance().mActive.end(); - ++iter) - { - const LLUUID &gesture_id = (*iter).first; - LLViewerInventoryItem* item = gInventory.getItem(gesture_id); - if (item) - { - LLPointer<LLInventoryCallback> cb = NULL; - link_inventory_item(gAgent.getID(), - item->getUUID(), - folder_id, - item->getName(), - LLAssetType::AT_LINK, - cb); - } - } - */ - return folder_id; } @@ -1759,7 +1684,7 @@ void LLAgentWearables::userRemoveAllClothesStep2(BOOL proceed) } } -void LLAgentWearables::userRemoveAllAttachments(void* userdata) +void LLAgentWearables::userRemoveAllAttachments() { LLVOAvatar* avatarp = gAgent.getAvatarObject(); if (!avatarp) @@ -1819,7 +1744,7 @@ void LLAgentWearables::userAttachMultipleAttachments(LLInventoryModel::item_arra msg->nextBlockFast(_PREHASH_HeaderData); msg->addUUIDFast(_PREHASH_CompoundMsgID, compound_msg_id ); msg->addU8Fast(_PREHASH_TotalObjects, obj_count ); - msg->addBOOLFast(_PREHASH_FirstDetachAll, true ); + msg->addBOOLFast(_PREHASH_FirstDetachAll, true ); // BAP changing this doesn't seem to matter? } const LLInventoryItem* item = obj_item_array.get(i).get(); diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index cb4de555d5..f34b23e220 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -181,7 +181,7 @@ public: // MULTI-WEARABLE: assuming one wearable per type. Need upstream changes. static void userRemoveWearable(void* userdata); // userdata is EWearableType static void userRemoveAllClothes(void* userdata); // userdata is NULL - static void userRemoveAllAttachments(void* userdata); // userdata is NULL + static void userRemoveAllAttachments(); static void userAttachMultipleAttachments(LLInventoryModel::item_array_t& obj_item_array); BOOL itemUpdatePending(const LLUUID& item_id) const; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 6c234f23fe..dfed1cb57a 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -239,33 +239,25 @@ void LLOutfitFetch::done() } } -class LLUpdateAppearanceOnCount: public LLInventoryCallback +class LLUpdateAppearanceOnDestroy: public LLInventoryCallback { public: - LLUpdateAppearanceOnCount(S32 count): - mCount(count) + LLUpdateAppearanceOnDestroy(): + mFireCount(0) { } - virtual ~LLUpdateAppearanceOnCount() + virtual ~LLUpdateAppearanceOnDestroy() { + LLAppearanceManager::updateAppearanceFromCOF(); } /* virtual */ void fire(const LLUUID& inv_item) { - mCount--; - if (mCount==0) - { - done(); - } - } - - void done() - { - LLAppearanceManager::updateAppearanceFromCOF(); + mFireCount++; } private: - S32 mCount; + U32 mFireCount; }; struct LLFoundData @@ -362,25 +354,42 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory } // Update appearance from outfit folder. -/* static */ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append, bool follow_folder_links) +/* static */ void LLAppearanceManager::changeOutfit(bool proceed, const LLUUID& category, bool append) { if (!proceed) return; - - updateCOFFromOutfit(category, append, follow_folder_links); + + if (append) + { + updateCOFFromCategory(category, append); // append is true - add non-duplicates to COF. + } + else + { + LLViewerInventoryCategory* catp = gInventory.getCategory(category); + if (catp->getPreferredType() == LLAssetType::AT_NONE || + LLAssetType::lookupIsEnsembleCategoryType(catp->getPreferredType())) + { + updateCOFFromCategory(category, append); // append is false - rebuild COF. + } + else if (catp->getPreferredType() == LLAssetType::AT_OUTFIT) + { + rebuildCOFFromOutfit(category); + } + } } -// Update COF contents from outfit folder. -/* static */ void LLAppearanceManager::updateCOFFromOutfit(const LLUUID& category, bool append, bool follow_folder_links) +// Append to current COF contents by recursively traversing a folder. +/* static */ void LLAppearanceManager::updateCOFFromCategory(const LLUUID& category, bool append) { - // BAP consolidate into one "get all 3 types of descendents" function, use both places. + // BAP consolidate into one "get all 3 types of descendents" function, use both places. LLInventoryModel::item_array_t wear_items; - LLInventoryModel::item_array_t obj_items; - LLInventoryModel::item_array_t gest_items; + LLInventoryModel::item_array_t obj_items; + LLInventoryModel::item_array_t gest_items; + bool follow_folder_links = false; getUserDescendents(category, wear_items, obj_items, gest_items, follow_folder_links); // Find all the wearables that are in the category's subtree. - lldebugs << "updateCOFFromOutfit()" << llendl; + lldebugs << "appendCOFFromCategory()" << llendl; if( !wear_items.count() && !obj_items.count() && !gest_items.count()) { LLNotifications::instance().add("CouldNotPutOnOutfit"); @@ -395,31 +404,26 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory LLInventoryModel::item_array_t cof_items; gInventory.collectDescendents(current_outfit_id, cof_cats, cof_items, LLInventoryModel::EXCLUDE_TRASH); + // Remove duplicates if (append) { - // Remove duplicates removeDuplicateItems(wear_items, cof_items); removeDuplicateItems(obj_items, cof_items); removeDuplicateItems(gest_items, cof_items); } - - if (wear_items.count() > 0 || obj_items.count() > 0) + S32 total_links = gest_items.count() + wear_items.count() + obj_items.count(); + + if (!append && total_links > 0) { - if (!append) + // Remove all current outfit folder links since we're now replacing the contents. + for (S32 i = 0; i < cof_items.count(); ++i) { - // Remove all current outfit folder links if we're now replacing the contents. - for (S32 i = 0; i < cof_items.count(); ++i) - { - gInventory.purgeObject(cof_items.get(i)->getUUID()); - } + gInventory.purgeObject(cof_items.get(i)->getUUID()); } } - // BAP should we just link all contents, rather than restricting to these 3 types? - - S32 total_links = gest_items.count() + wear_items.count() + obj_items.count(); - LLPointer<LLUpdateAppearanceOnCount> link_waiter = new LLUpdateAppearanceOnCount(total_links); + LLPointer<LLUpdateAppearanceOnDestroy> link_waiter = new LLUpdateAppearanceOnDestroy; // Link all gestures in this folder if (gest_items.count() > 0) @@ -469,11 +473,86 @@ void removeDuplicateItems(LLInventoryModel::item_array_t& dst, const LLInventory } } } +} + +/* static */ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, + LLPointer<LLInventoryCallback> cb) +{ + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + gInventory.collectDescendents(src_id, cats, items, + LLInventoryModel::EXCLUDE_TRASH); + for (S32 i = 0; i < items.count(); ++i) + { + const LLViewerInventoryItem* item = items.get(i).get(); + if (item->getActualType() == LLAssetType::AT_LINK) + { + link_inventory_item(gAgent.getID(), + item->getLinkedUUID(), + dst_id, + item->getName(), + LLAssetType::AT_LINK, cb); + } + else if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) + { + link_inventory_item(gAgent.getID(), + item->getLinkedUUID(), + dst_id, + item->getName(), + LLAssetType::AT_LINK_FOLDER, cb); + } + else + { + copy_inventory_item( + gAgent.getID(), + item->getPermissions().getOwner(), + item->getUUID(), + dst_id, + item->getName(), + cb); + } + } +} - // In the particular case that we're switching to a different outfit, - // create a link to the folder that we wore. +// Replace COF contents from a given outfit folder. +/* static */ void LLAppearanceManager::rebuildCOFFromOutfit(const LLUUID& category) +{ + lldebugs << "rebuildCOFFromOutfit()" << llendl; + + // Find all the wearables that are in the category's subtree. + LLInventoryModel::item_array_t items; + getCOFValidDescendents(category, items); + + if( items.count() == 0) + { + LLNotifications::instance().add("CouldNotPutOnOutfit"); + return; + } + + const LLUUID ¤t_outfit_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_CURRENT_OUTFIT); + // Processes that take time should show the busy cursor + //inc_busy_count(); + + LLInventoryModel::cat_array_t cof_cats; + LLInventoryModel::item_array_t cof_items; + gInventory.collectDescendents(current_outfit_id, cof_cats, cof_items, + LLInventoryModel::EXCLUDE_TRASH); + + if (items.count() > 0) + { + // Remove all current outfit folder links since we're now replacing the contents. + for (S32 i = 0; i < cof_items.count(); ++i) + { + gInventory.purgeObject(cof_items.get(i)->getUUID()); + } + } + + LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; + LLAppearanceManager::shallowCopyCategory(category, current_outfit_id, link_waiter); + + // Create a link to the outfit that we wore. LLViewerInventoryCategory* catp = gInventory.getCategory(category); - if (!append && catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT) + if (catp && catp->getPreferredType() == LLAssetType::AT_OUTFIT) { link_inventory_item(gAgent.getID(), category, current_outfit_id, catp->getName(), LLAssetType::AT_LINK_FOLDER, LLPointer<LLInventoryCallback>(NULL)); @@ -621,7 +700,7 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, //If the folder doesn't contain only gestures, take off all attachments. if (!(wear_items.count() == 0 && obj_items.count() == 0 && gest_items.count() > 0) ) { - LLAgentWearables::userRemoveAllAttachments(NULL); + LLAgentWearables::userRemoveAllAttachments(); } if( obj_items.count() > 0 ) @@ -635,6 +714,21 @@ void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, } } +/* static */ +void LLAppearanceManager::getCOFValidDescendents(const LLUUID& category, + LLInventoryModel::item_array_t& items) +{ + LLInventoryModel::cat_array_t cats; + LLFindCOFValidItems is_cof_valid; + bool follow_folder_links = false; + gInventory.collectDescendentsIf(category, + cats, + items, + LLInventoryModel::EXCLUDE_TRASH, + is_cof_valid, + follow_folder_links); +} + /* static */ void LLAppearanceManager::getUserDescendents(const LLUUID& category, LLInventoryModel::item_array_t& wear_items, LLInventoryModel::item_array_t& obj_items, @@ -708,14 +802,13 @@ void LLAppearanceManager::wearInventoryCategoryOnAvatar( LLInventoryCategory* ca lldebugs << "wearInventoryCategoryOnAvatar( " << category->getName() << " )" << llendl; - bool follow_folder_links = (category->getPreferredType() == LLAssetType::AT_CURRENT_OUTFIT || category->getPreferredType() == LLAssetType::AT_OUTFIT ); if( gFloaterCustomize ) { - gFloaterCustomize->askToSaveIfDirty(boost::bind(LLAppearanceManager::changeOutfit, _1, category->getUUID(), append, follow_folder_links)); + gFloaterCustomize->askToSaveIfDirty(boost::bind(LLAppearanceManager::changeOutfit, _1, category->getUUID(), append)); } else { - LLAppearanceManager::changeOutfit(TRUE, category->getUUID(), append, follow_folder_links ); + LLAppearanceManager::changeOutfit(TRUE, category->getUUID(), append); } } @@ -767,18 +860,43 @@ void LLAppearanceManager::wearOutfitByName(const std::string& name) //dec_busy_count(); } +/* static */ void LLAppearanceManager::wearItem( LLInventoryItem* item, bool do_update ) { - // BAP add check for already in COF. - LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0; - link_inventory_item( gAgent.getID(), - item->getLinkedUUID(), - getCOF(), - item->getName(), - LLAssetType::AT_LINK, - cb); + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(LLAppearanceManager::getCOF(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + bool linked_already = false; + for (S32 i=0; i<item_array.count(); i++) + { + const LLInventoryItem* inv_item = item_array.get(i).get(); + if (inv_item->getLinkedUUID() == item->getLinkedUUID()) + { + linked_already = true; + break; + } + } + if (linked_already) + { + if (do_update) + LLAppearanceManager::updateAppearanceFromCOF(); + } + else + { + LLPointer<LLInventoryCallback> cb = do_update ? new ModifiedCOFCallback : 0; + link_inventory_item( gAgent.getID(), + item->getLinkedUUID(), + getCOF(), + item->getName(), + LLAssetType::AT_LINK, + cb); + } } +/* static */ void LLAppearanceManager::wearEnsemble( LLInventoryCategory* cat, bool do_update ) { // BAP add check for already in COF. @@ -791,3 +909,25 @@ void LLAppearanceManager::wearEnsemble( LLInventoryCategory* cat, bool do_update cb); } +/* static */ +void LLAppearanceManager::removeItemLinks(LLUUID& item_id, bool do_update) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(LLAppearanceManager::getCOF(), + cat_array, + item_array, + LLInventoryModel::EXCLUDE_TRASH); + for (S32 i=0; i<item_array.count(); i++) + { + const LLInventoryItem* item = item_array.get(i).get(); + if (item->getLinkedUUID() == item_id) + { + gInventory.purgeObject(item_array.get(i)->getUUID()); + } + } + if (do_update) + { + LLAppearanceManager::updateAppearanceFromCOF(); + } +} diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 89b95833d7..2aa10e0bea 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -35,6 +35,7 @@ #include "llsingleton.h" #include "llinventorymodel.h" +#include "llviewerinventory.h" class LLWearable; struct LLWearableHoldingPattern; @@ -44,20 +45,29 @@ class LLAppearanceManager: public LLSingleton<LLAppearanceManager> public: static void updateAppearanceFromCOF(); static bool needToSaveCOF(); - static void changeOutfit(bool proceed, const LLUUID& category, bool append, bool follow_folder_links); - static void updateCOFFromOutfit(const LLUUID& category, bool append, bool follow_folder_links); + static void changeOutfit(bool proceed, const LLUUID& category, bool append); + static void updateCOFFromCategory(const LLUUID& category, bool append); + static void rebuildCOFFromOutfit(const LLUUID& category); static void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append); static void wearInventoryCategoryOnAvatar(LLInventoryCategory* category, bool append); static void wearOutfitByName(const std::string& name); + static void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, + LLPointer<LLInventoryCallback> cb); // Add COF link to individual item. static void wearItem(LLInventoryItem* item, bool do_update = true); // Add COF link to ensemble folder. static void wearEnsemble(LLInventoryCategory* item, bool do_update = true); + static LLUUID getCOF(); + + // Remove COF entries + static void removeItemLinks(LLUUID& item_id, bool do_update = true); private: - static LLUUID getCOF(); + static void getCOFValidDescendents(const LLUUID& category, + LLInventoryModel::item_array_t& items); + static void getUserDescendents(const LLUUID& category, LLInventoryModel::item_array_t& wear_items, LLInventoryModel::item_array_t& obj_items, diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 19e1273dc6..355660faa5 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -74,6 +74,7 @@ #include "llrender.h" #include "lllocationhistory.h" #include "llfasttimerview.h" + #include "llweb.h" #include "llsecondlifeurls.h" @@ -765,6 +766,7 @@ bool LLAppViewer::init() // // Initialize the window // + gGLActive = TRUE; initWindow(); // call all self-registered classes @@ -869,12 +871,16 @@ bool LLAppViewer::init() gSimFrames = (F32)gFrameCount; LLViewerJoystick::getInstance()->init(false); - + gGLActive = FALSE; return true; } static LLFastTimer::DeclareTimer FTM_MESSAGES("System Messages"); static LLFastTimer::DeclareTimer FTM_SLEEP("Sleep"); +static LLFastTimer::DeclareTimer FTM_TEXTURE_CACHE("Texture Cache"); +static LLFastTimer::DeclareTimer FTM_DECODE("Image Decode"); +static LLFastTimer::DeclareTimer FTM_VFS("VFS Thread"); +static LLFastTimer::DeclareTimer FTM_PAUSE_THREADS("Pause Threads"); static LLFastTimer::DeclareTimer FTM_IDLE("Idle"); static LLFastTimer::DeclareTimer FTM_PUMP("Pump"); @@ -914,6 +920,7 @@ bool LLAppViewer::mainLoop() while (!LLApp::isExiting()) { LLFastTimer::nextFrame(); // Should be outside of any timer instances + try { pingMainloopTimeout("Main:MiscNativeWindowEvents"); @@ -923,7 +930,7 @@ bool LLAppViewer::mainLoop() LLFastTimer t2(FTM_MESSAGES); gViewerWindow->mWindow->processMiscNativeEvents(); } - + pingMainloopTimeout("Main:GatherInput"); if (gViewerWindow) @@ -1007,10 +1014,11 @@ bool LLAppViewer::mainLoop() if (!LLApp::isExiting()) { pingMainloopTimeout("Main:Display"); + gGLActive = TRUE; display(); - pingMainloopTimeout("Main:Snapshot"); LLFloaterSnapshot::update(); // take snapshots + gGLActive = FALSE; } } @@ -1070,11 +1078,24 @@ bool LLAppViewer::mainLoop() { S32 work_pending = 0; S32 io_pending = 0; - work_pending += LLAppViewer::getTextureCache()->update(1); // unpauses the texture cache thread - work_pending += LLAppViewer::getImageDecodeThread()->update(1); // unpauses the image thread - work_pending += LLAppViewer::getTextureFetch()->update(1); // unpauses the texture fetch thread - io_pending += LLVFSThread::updateClass(1); - io_pending += LLLFSThread::updateClass(1); + { + LLFastTimer ftm(FTM_TEXTURE_CACHE); + work_pending += LLAppViewer::getTextureCache()->update(1); // unpauses the texture cache thread + } + { + LLFastTimer ftm(FTM_DECODE); + work_pending += LLAppViewer::getImageDecodeThread()->update(1); // unpauses the image thread + } + { + LLFastTimer ftm(FTM_DECODE); + work_pending += LLAppViewer::getTextureFetch()->update(1); // unpauses the texture fetch thread + } + + { + LLFastTimer ftm(FTM_VFS); + io_pending += LLVFSThread::updateClass(1); + } + if (io_pending > 1000) { ms_sleep(llmin(io_pending/100,100)); // give the vfs some time to catch up @@ -1100,6 +1121,8 @@ bool LLAppViewer::mainLoop() // if (LLThread::processorCount()==1) //pause() should only be required when on a single processor client... if (run_multiple_threads == FALSE) { + LLFastTimer ftm(FTM_PAUSE_THREADS); + LLAppViewer::getTextureCache()->pause(); LLAppViewer::getImageDecodeThread()->pause(); // LLAppViewer::getTextureFetch()->pause(); // Don't pause the fetch (IO) thread @@ -3317,10 +3340,13 @@ void LLAppViewer::idle() if (LLStartUp::getStartupState() < STATE_STARTED) { // Skip rest if idle startup returns false (essentially, no world yet) + gGLActive = TRUE; if (!idle_startup()) { + gGLActive = FALSE; return; } + gGLActive = FALSE; } @@ -3419,10 +3445,8 @@ void LLAppViewer::idle() // floating throughout the various object lists. // - stop_glerror(); idleNetwork(); - stop_glerror(); - + // Check for away from keyboard, kick idle agents. idle_afk_check(); @@ -3512,8 +3536,6 @@ void LLAppViewer::idle() LLHUDManager::getInstance()->sendEffects(); } - stop_glerror(); - //////////////////////////////////////// // // Unpack layer data that we've received @@ -3569,7 +3591,6 @@ void LLAppViewer::idle() gWindVec.setVec(0.0f, 0.0f, 0.0f); } } - stop_glerror(); ////////////////////////////////////// // @@ -3584,7 +3605,6 @@ void LLAppViewer::idle() LLWorld::getInstance()->updateParticles(); } - stop_glerror(); if (LLViewerJoystick::getInstance()->getOverrideCamera()) { @@ -3629,10 +3649,9 @@ void LLAppViewer::idle() // forcibly quit if it has taken too long if (mQuitRequested) { + gGLActive = TRUE; idleShutdown(); } - - stop_glerror(); } void LLAppViewer::idleShutdown() @@ -3771,7 +3790,6 @@ void LLAppViewer::idleNetwork() llpushcallstacks ; LLTimer check_message_timer; // Read all available packets from network - stop_glerror(); const S64 frame_count = gFrameCount; // U32->S64 F32 total_time = 0.0f; @@ -3784,8 +3802,7 @@ void LLAppViewer::idleNetwork() // server going down, so this is OK. break; } - stop_glerror(); - + total_decoded++; gPacketsIn++; @@ -3825,9 +3842,7 @@ void LLAppViewer::idleNetwork() // we want to clear the control after sending out all necessary agent updates gAgent.resetControlFlags(); - stop_glerror(); - - + // Decode enqueued messages... S32 remaining_possible_decodes = MESSAGE_MAX_PER_FRAME - total_decoded; diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 98d7ab712b..12cff32780 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -245,6 +245,8 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, } #endif + gGLActive = TRUE; + viewer_app_ptr->cleanup(); #if WINDOWS_CRT_MEM_CHECKS diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 42ed783f94..a2dc97f7f5 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -1079,8 +1079,9 @@ LLTalkButton::Params::Params() speak_button.tab_stop(false); speak_button.is_toggle(true); speak_button.picture_style(true); - speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected")); - speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off")); + // Use default button art. JC + //speak_button.image_selected(LLUI::getUIImage("SegmentedBtn_Left_Selected")); + //speak_button.image_unselected(LLUI::getUIImage("SegmentedBtn_Left_Off")); show_button.name("right"); show_button.label(LLStringUtil::null); diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index bd5b9c30a2..24a57cb0c1 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -102,6 +102,17 @@ LLDebugView::LLDebugView(const LLDebugView::Params& p) gTextureView = LLUICtrlFactory::create<LLTextureView>(tvp); addChild(gTextureView); //gTextureView->reshape(r.getWidth(), r.getHeight(), TRUE); +#if !LL_RELEASE_FOR_DOWNLOAD + r.set(150, rect.getHeight() - 50, 900 + LLImageGL::sTextureLoadedCounter.size() * 30, 100); + LLTextureSizeView::Params tsvp; + tsvp.name("gTextureSizeView"); + tsvp.rect(r); + tsvp.follows.flags(FOLLOWS_BOTTOM|FOLLOWS_LEFT); + tsvp.visible(false); + gTextureSizeView = LLUICtrlFactory::create<LLTextureSizeView>(tsvp); + addChild(gTextureSizeView); +#endif + } @@ -110,5 +121,6 @@ LLDebugView::~LLDebugView() // These have already been deleted. Fix the globals appropriately. gDebugView = NULL; gTextureView = NULL; + gTextureSizeView = NULL; } diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 7cc78aff92..4cf12a1533 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -678,6 +678,11 @@ BOOL LLDrawable::updateMoveDamped() void LLDrawable::updateDistance(LLCamera& camera, bool force_update) { + if (LLViewerCamera::sCurCameraID != LLViewerCamera::CAMERA_WORLD) + { + llerrs << "WTF?" << llendl; + } + //switch LOD with the spatial group to avoid artifacts //LLSpatialGroup* sg = getSpatialGroup(); @@ -695,19 +700,22 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update) pos += volume->getRegion()->getOriginAgent(); } - for (S32 i = 0; i < getNumFaces(); i++) + if (isState(LLDrawable::HAS_ALPHA)) { - LLFace* facep = getFace(i); - if (force_update || facep->getPoolType() == LLDrawPool::POOL_ALPHA) + for (S32 i = 0; i < getNumFaces(); i++) { - LLVector3 box = (facep->mExtents[1] - facep->mExtents[0]) * 0.25f; - LLVector3 v = (facep->mCenterLocal-camera.getOrigin()); - LLVector3 at = camera.getAtAxis(); - for (U32 j = 0; j < 3; j++) + LLFace* facep = getFace(i); + if (force_update || facep->getPoolType() == LLDrawPool::POOL_ALPHA) { - v.mV[j] -= box.mV[j] * at.mV[j]; + LLVector3 box = (facep->mExtents[1] - facep->mExtents[0]) * 0.25f; + LLVector3 v = (facep->mCenterLocal-camera.getOrigin()); + const LLVector3& at = camera.getAtAxis(); + for (U32 j = 0; j < 3; j++) + { + v.mV[j] -= box.mV[j] * at.mV[j]; + } + facep->mDistance = v * camera.getAtAxis(); } - facep->mDistance = v * camera.getAtAxis(); } } } @@ -1002,8 +1010,8 @@ BOOL LLDrawable::isVisible() const // Spatial Partition Bridging Drawable //======================================= -LLSpatialBridge::LLSpatialBridge(LLDrawable* root, U32 data_mask) -: LLSpatialPartition(data_mask, FALSE) +LLSpatialBridge::LLSpatialBridge(LLDrawable* root, BOOL render_by_group, U32 data_mask) +: LLSpatialPartition(data_mask, render_by_group, FALSE) { mDrawable = root; root->setSpatialBridge(this); @@ -1241,7 +1249,9 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>* (camera_in.AABBInFrustumNoFarClip(center, size) && AABBSphereIntersect(mExtents[0], mExtents[1], camera_in.getOrigin(), camera_in.mFrustumCornerDist))) { - if (!LLPipeline::sImpostorRender && LLPipeline::calcPixelArea(center, size, camera_in) < FORCE_INVISIBLE_AREA) + if (!LLPipeline::sImpostorRender && + !LLPipeline::sShadowRender && + LLPipeline::calcPixelArea(center, size, camera_in) < FORCE_INVISIBLE_AREA) { return; } @@ -1280,12 +1290,25 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update) return; } - LLCamera camera = transformCamera(camera_in); - - mDrawable->updateDistance(camera, force_update); - if (mDrawable->getVObj()) { + if (mDrawable->getVObj()->isAttachment()) + { + LLDrawable* parent = mDrawable->getParent(); + if (parent && parent->getVObj()) + { + LLVOAvatar* av = parent->getVObj()->asAvatar(); + if (av && av->isImpostor()) + { + return; + } + } + } + + LLCamera camera = transformCamera(camera_in); + + mDrawable->updateDistance(camera, force_update); + LLViewerObject::const_child_list_t& child_list = mDrawable->getVObj()->getChildren(); for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); iter != child_list.end(); iter++) @@ -1427,9 +1450,8 @@ void LLDrawable::updateFaceSize(S32 idx) } LLBridgePartition::LLBridgePartition() -: LLSpatialPartition(0, TRUE) +: LLSpatialPartition(0, FALSE, 0) { - mRenderByGroup = FALSE; mDrawableType = LLPipeline::RENDER_TYPE_AVATAR; mPartitionType = LLViewerRegion::PARTITION_BRIDGE; mLODPeriod = 16; diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index c765980c30..986440397b 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -264,7 +264,8 @@ public: BUILT = 0x08000000, FORCE_INVISIBLE = 0x10000000, // stay invis until CLEAR_INVISIBLE is set (set of orphaned) CLEAR_INVISIBLE = 0x20000000, // clear FORCE_INVISIBLE next draw frame - REBUILD_SHADOW = 0x40000000 + REBUILD_SHADOW = 0x40000000, + HAS_ALPHA = 0x80000000, } EDrawableFlags; LLXformMatrix mXform; @@ -299,7 +300,7 @@ private: LLVector3d mPositionGroup; F64 mBinRadius; S32 mGeneration; - + LLVector3 mCurrentScale; static U32 sCurVisible; // Counter for what value of mVisible means currently visible diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 3a064a4e7d..976f02eeb7 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -279,7 +279,7 @@ S32 LLFacePool::drawLoopSetTex(face_array_t& face_list, S32 stage) iter != face_list.end(); iter++) { LLFace *facep = *iter; - gGL.getTexUnit(stage)->bind(facep->getTexture()) ; + gGL.getTexUnit(stage)->bind(facep->getTexture()); gGL.getTexUnit(0)->activate(); res += facep->renderIndexed(); } @@ -474,14 +474,17 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (params.mTexture.notNull()) { - gGL.getTexUnit(0)->bind(params.mTexture) ; + gGL.getTexUnit(0)->bind(params.mTexture.get()); if (params.mTextureMatrix) { glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; } - params.mTexture->addTextureStats(params.mVSize); + if(params.mTexture.notNull())//will be removed. + { + params.mTexture->addTextureStats(params.mVSize); + } } else { diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index 966de41df3..67870c10e9 100644 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -61,12 +61,17 @@ public: POOL_GRASS, POOL_FULLBRIGHT, POOL_BUMP, - POOL_INVISIBLE, + POOL_INVISIBLE, // see below * POOL_AVATAR, POOL_WATER, POOL_GLOW, POOL_ALPHA, NUM_POOL_TYPES, + // * invisiprims work by rendering to the depth buffer but not the color buffer, occluding anything rendered after them + // - and the LLDrawPool types enum controls what order things are rendered in + // - so, it has absolute control over what invisprims block + // ...invisiprims being rendered in pool_invisible + // ...shiny/bump mapped objects in rendered in POOL_BUMP }; LLDrawPool(const U32 type); diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 88f79fc1b9..a5a29dea7b 100644 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -87,22 +87,23 @@ void LLDrawPoolAlpha::beginDeferredPass(S32 pass) void LLDrawPoolAlpha::endDeferredPass(S32 pass) { - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.4f); + +} + +void LLDrawPoolAlpha::renderDeferred(S32 pass) +{ + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); { LLFastTimer t(FTM_RENDER_GRASS); gDeferredTreeProgram.bind(); LLGLEnable test(GL_ALPHA_TEST); //render alpha masked objects LLRenderPass::renderTexture(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask()); + gDeferredTreeProgram.unbind(); } gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } -void LLDrawPoolAlpha::renderDeferred(S32 pass) -{ - -} - S32 LLDrawPoolAlpha::getNumPostDeferredPasses() { @@ -260,6 +261,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) { BOOL initialized_lighting = FALSE; BOOL light_enabled = TRUE; + S32 diffuse_channel = 0; + //BOOL is_particle = FALSE; BOOL use_shaders = (LLPipeline::sUnderWaterRender && gPipeline.canUseVertexShaders()) || gPipeline.canUseWindLightShadersOnObjects(); @@ -290,19 +293,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) LLRenderPass::applyModelMatrix(params); - if (params.mTexture.notNull()) - { - gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->bind(params.mTexture) ; - params.mTexture->addTextureStats(params.mVSize); - if (params.mTextureMatrix) - { - glMatrixMode(GL_TEXTURE); - glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); - gPipeline.mTextureMatrixOps++; - } - } - if (params.mFullbright) { // Turn off lighting if it hasn't already been so. @@ -343,11 +333,13 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) if (deferred_render && current_shader != NULL) { gPipeline.unbindDeferredShader(*current_shader); + diffuse_channel = 0; } current_shader = target_shader; if (deferred_render) { gPipeline.bindDeferredShader(*current_shader); + diffuse_channel = current_shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); } else { @@ -356,11 +348,12 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) } else if (!use_shaders && current_shader != NULL) { - LLGLSLShader::bindNoShader(); if (deferred_render) { gPipeline.unbindDeferredShader(*current_shader); + diffuse_channel = 0; } + LLGLSLShader::bindNoShader(); current_shader = NULL; } @@ -368,6 +361,24 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) { params.mGroup->rebuildMesh(); } + + + if (params.mTexture.notNull()) + { + gGL.getTexUnit(diffuse_channel)->bind(params.mTexture.get()); + if(params.mTexture.notNull()) + { + params.mTexture->addTextureStats(params.mVSize); + } + if (params.mTextureMatrix) + { + gGL.getTexUnit(0)->activate(); + glMatrixMode(GL_TEXTURE); + glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); + gPipeline.mTextureMatrixOps++; + } + } + params.mVertexBuffer->setBuffer(mask); params.mVertexBuffer->drawRange(LLRender::TRIANGLES, params.mStart, params.mEnd, params.mCount, params.mOffset); gPipeline.addTrianglesDrawn(params.mCount/3); @@ -382,6 +393,15 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask) } } + if (deferred_render && current_shader != NULL) + { + gPipeline.unbindDeferredShader(*current_shader); + LLVertexBuffer::unbind(); + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + LLGLState::checkClientArrays(); + } + if (!light_enabled) { gPipeline.enableLightsDynamic(); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 565f906a3b..546b60f286 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -92,6 +92,7 @@ BOOL gAvatarEmbossBumpMap = FALSE; static BOOL sRenderingSkinned = FALSE; S32 normal_channel = -1; S32 specular_channel = -1; +S32 diffuse_channel = -1; static LLFastTimer::DeclareTimer FTM_SHADOW_AVATAR("Avatar Shadow"); @@ -388,6 +389,7 @@ void LLDrawPoolAvatar::beginFootShadow() } gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); + diffuse_channel = 0; } void LLDrawPoolAvatar::endFootShadow() @@ -440,7 +442,8 @@ void LLDrawPoolAvatar::beginDeferredImpostor() normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL); specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP); - + diffuse_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); + sVertexProgram->bind(); } @@ -449,6 +452,7 @@ void LLDrawPoolAvatar::endDeferredImpostor() sShaderLevel = mVertexShaderLevel; sVertexProgram->disableTexture(LLViewerShaderMgr::DEFERRED_NORMAL); sVertexProgram->disableTexture(LLViewerShaderMgr::SPECULAR_MAP); + sVertexProgram->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); sVertexProgram->unbind(); gGL.getTexUnit(0)->activate(); } @@ -685,7 +689,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) avatarp->mImpostor.bindTexture(1, specular_channel); } } - avatarp->renderImpostor(); + avatarp->renderImpostor(LLColor4U(255,255,255,255), diffuse_channel); } else if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FOOT_SHADOWS) && !LLPipeline::sRenderDeferred) { diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 331ba67d36..e087feeaec 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -309,8 +309,8 @@ void LLDrawPoolBump::endRenderPass(S32 pass) void LLDrawPoolBump::beginShiny(bool invisible) { LLFastTimer t(FTM_RENDER_SHINY); - if (!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY)|| - invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) + if ((!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY))|| + (invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))) { return; } @@ -384,8 +384,8 @@ void LLDrawPoolBump::beginShiny(bool invisible) void LLDrawPoolBump::renderShiny(bool invisible) { LLFastTimer t(FTM_RENDER_SHINY); - if (!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY)|| - invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) + if ((!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY))|| + (invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))) { return; } @@ -411,8 +411,8 @@ void LLDrawPoolBump::renderShiny(bool invisible) void LLDrawPoolBump::endShiny(bool invisible) { LLFastTimer t(FTM_RENDER_SHINY); - if (!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY)|| - invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) + if ((!invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_SHINY))|| + (invisible && !gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))) { return; } @@ -572,6 +572,8 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params, S32 channel) LLViewerTexture* bump = NULL; U8 bump_code = params.mBump; + + //Note: texture atlas does not support bump texture now. LLViewerFetchedTexture* tex = LLViewerTextureManager::staticCastToFetchedTexture(params.mTexture) ; if(!tex) { @@ -831,7 +833,7 @@ void LLBumpImageList::updateImages() if( image ) { BOOL destroy = TRUE; - if( image->hasValidGLTexture()) + if( image->hasGLTexture()) { if( image->getBoundRecently() ) { @@ -858,7 +860,7 @@ void LLBumpImageList::updateImages() if( image ) { BOOL destroy = TRUE; - if( image->hasValidGLTexture()) + if( image->hasGLTexture()) { if( image->getBoundRecently() ) { @@ -963,7 +965,7 @@ void LLBumpImageList::onSourceStandardLoaded( BOOL success, LLViewerFetchedTextu LLPointer<LLImageRaw> nrm_image = new LLImageRaw(src->getWidth(), src->getHeight(), 4); generateNormalMapFromAlpha(src, nrm_image); src_vi->setExplicitFormat(GL_RGBA, GL_RGBA); - src_vi->createGLTexture(0, nrm_image); + src_vi->createGLTexture(src_vi->getDiscardLevel(), nrm_image); } } @@ -1147,14 +1149,14 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI if (!LLPipeline::sRenderDeferred) { bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); - bump->createGLTexture(0, dst_image); + bump->createGLTexture(bump->getDiscardLevel(), dst_image); } else { LLPointer<LLImageRaw> nrm_image = new LLImageRaw(src->getWidth(), src->getHeight(), 4); generateNormalMapFromAlpha(src, nrm_image); bump->setExplicitFormat(GL_RGBA, GL_RGBA); - bump->createGLTexture(0, nrm_image); + bump->createGLTexture(bump->getDiscardLevel(), nrm_image); } @@ -1216,7 +1218,7 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) if (params.mTexture.notNull()) { gGL.getTexUnit(diffuse_channel)->bind(params.mTexture) ; - params.mTexture->addTextureStats(params.mVSize); + params.mTexture->addTextureStats(params.mVSize); } else { diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 331536fdca..ca7a1b47c2 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -47,6 +47,9 @@ static LLGLSLShader* simple_shader = NULL; static LLGLSLShader* fullbright_shader = NULL; +static LLFastTimer::DeclareTimer FTM_RENDER_SIMPLE_DEFERRED("Deferred Simple"); +static LLFastTimer::DeclareTimer FTM_RENDER_GRASS_DEFERRED("Deferred Grass"); + void LLDrawPoolGlow::render(S32 pass) { LLFastTimer t(FTM_RENDER_GLOW); @@ -156,13 +159,13 @@ void LLDrawPoolSimple::render(S32 pass) void LLDrawPoolSimple::beginDeferredPass(S32 pass) { - LLFastTimer t(FTM_RENDER_SIMPLE); + LLFastTimer t(FTM_RENDER_SIMPLE_DEFERRED); gDeferredDiffuseProgram.bind(); } void LLDrawPoolSimple::endDeferredPass(S32 pass) { - LLFastTimer t(FTM_RENDER_SIMPLE); + LLFastTimer t(FTM_RENDER_SIMPLE_DEFERRED); LLRenderPass::endRenderPass(pass); gDeferredDiffuseProgram.unbind(); @@ -174,7 +177,7 @@ void LLDrawPoolSimple::renderDeferred(S32 pass) LLGLDisable alpha_test(GL_ALPHA_TEST); { //render simple - LLFastTimer t(FTM_RENDER_SIMPLE); + LLFastTimer t(FTM_RENDER_SIMPLE_DEFERRED); renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask()); } } @@ -258,10 +261,10 @@ void LLDrawPoolGrass::endDeferredPass(S32 pass) void LLDrawPoolGrass::renderDeferred(S32 pass) { - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); { - LLFastTimer t(FTM_RENDER_GRASS); + LLFastTimer t(FTM_RENDER_GRASS_DEFERRED); gDeferredTreeProgram.bind(); LLGLEnable test(GL_ALPHA_TEST); //render grass diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index 345dd6bb84..790e75cfaa 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -77,7 +77,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : GL_ALPHA8, GL_ALPHA, LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); - gGL.getTexUnit(0)->bind(mAlphaRampImagep); + //gGL.getTexUnit(0)->bind(mAlphaRampImagep.get()); mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", @@ -86,12 +86,12 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) : GL_ALPHA8, GL_ALPHA, LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); - gGL.getTexUnit(0)->bind(m2DAlphaRampImagep); + //gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get()); m2DAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP); mTexturep->setBoostLevel(LLViewerTexture::BOOST_TERRAIN); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + //gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } LLDrawPoolTerrain::~LLDrawPoolTerrain() diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp index 5cb1fcb635..8d2cbc583c 100644 --- a/indra/newview/lldrawpooltree.cpp +++ b/indra/newview/lldrawpooltree.cpp @@ -52,7 +52,6 @@ LLDrawPoolTree::LLDrawPoolTree(LLViewerTexture *texturep) : LLFacePool(POOL_TREE), mTexturep(texturep) { - gGL.getTexUnit(0)->bind(mTexturep); mTexturep->setAddressMode(LLTexUnit::TAM_WRAP); } @@ -138,7 +137,7 @@ void LLDrawPoolTree::endRenderPass(S32 pass) void LLDrawPoolTree::beginDeferredPass(S32 pass) { LLFastTimer t(FTM_RENDER_TREES); - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); shader = &gDeferredTreeProgram; shader->bind(); @@ -164,6 +163,9 @@ void LLDrawPoolTree::beginShadowPass(S32 pass) { LLFastTimer t(FTM_SHADOW_TREE); gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); + glPolygonOffset(gSavedSettings.getF32("RenderDeferredTreeShadowOffset"), + gSavedSettings.getF32("RenderDeferredTreeShadowBias")); + gDeferredShadowProgram.bind(); } @@ -176,7 +178,11 @@ void LLDrawPoolTree::endShadowPass(S32 pass) { LLFastTimer t(FTM_SHADOW_TREE); gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); - gDeferredShadowProgram.unbind(); + + glPolygonOffset(gSavedSettings.getF32("RenderDeferredSpotShadowOffset"), + gSavedSettings.getF32("RenderDeferredSpotShadowBias")); + + //gDeferredShadowProgram.unbind(); } @@ -247,7 +253,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting) LLGLState normalize(GL_NORMALIZE, TRUE); // Bind the texture for this tree. - gGL.getTexUnit(sDiffTex)->bind(mTexturep); + gGL.getTexUnit(sDiffTex)->bind(mTexturep.get()); U32 indices_drawn = 0; diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index fd4dc123d5..f56359afc3 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -136,6 +136,19 @@ void LLDrawPoolWater::endPostDeferredPass(S32 pass) deferred_render = FALSE; } +//=============================== +//DEFERRED IMPLEMENTATION +//=============================== +void LLDrawPoolWater::renderDeferred(S32 pass) +{ + LLFastTimer t(FTM_RENDER_WATER); + deferred_render = TRUE; + shade(); + deferred_render = FALSE; +} + +//========================================= + void LLDrawPoolWater::render(S32 pass) { LLFastTimer ftm(FTM_RENDER_WATER); @@ -337,7 +350,10 @@ void LLDrawPoolWater::renderReflection(LLFace* face) void LLDrawPoolWater::shade() { - gGL.setColorMask(true, true); + if (!deferred_render) + { + gGL.setColorMask(true, true); + } LLVOSky *voskyp = gSky.mVOSkyp; @@ -400,6 +416,15 @@ void LLDrawPoolWater::shade() shader = &gWaterProgram; } + if (deferred_render) + { + gPipeline.bindDeferredShader(*shader); + } + else + { + shader->bind(); + } + sTime = (F32)LLFrameTimer::getElapsedSeconds()*0.5f; S32 reftex = shader->enableTexture(LLViewerShaderMgr::WATER_REFTEX); @@ -435,15 +460,6 @@ void LLDrawPoolWater::shade() S32 screentex = shader->enableTexture(LLViewerShaderMgr::WATER_SCREENTEX); - if (deferred_render) - { - gPipeline.bindDeferredShader(*shader); - } - else - { - shader->bind(); - } - if (screentex > -1) { shader->uniform4fv(LLViewerShaderMgr::WATER_FOGCOLOR, 1, sWaterFogColor.mV); @@ -547,8 +563,15 @@ void LLDrawPoolWater::shade() { //smash background faces to far clip plane if (water->getIsEdgePatch()) { - LLGLClampToFarClip far_clip(glh_get_current_projection()); - face->renderIndexed(); + if (deferred_render) + { + face->renderIndexed(); + } + else + { + LLGLClampToFarClip far_clip(glh_get_current_projection()); + face->renderIndexed(); + } } else { @@ -577,7 +600,10 @@ void LLDrawPoolWater::shade() gGL.getTexUnit(0)->activate(); gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); - gGL.setColorMask(true, false); + if (!deferred_render) + { + gGL.setColorMask(true, false); + } } diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h index e28ac1cfab..68a8172dd0 100644 --- a/indra/newview/lldrawpoolwater.h +++ b/indra/newview/lldrawpoolwater.h @@ -71,10 +71,12 @@ public: /*virtual*/ LLDrawPool *instancePool(); static void restoreGL(); - /*virtual*/ S32 getNumPostDeferredPasses() { return getNumPasses(); } + /*virtual*/ S32 getNumPostDeferredPasses() { return 0; } //getNumPasses(); } /*virtual*/ void beginPostDeferredPass(S32 pass); /*virtual*/ void endPostDeferredPass(S32 pass); /*virtual*/ void renderPostDeferred(S32 pass) { render(pass); } + /*virtual*/ S32 getNumDeferredPasses() { return 1; } + /*virtual*/ void renderDeferred(S32 pass = 0); /*virtual*/ S32 getNumPasses(); /*virtual*/ void render(S32 pass = 0); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index bef9e40c49..fc5b27dd1b 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -174,6 +174,9 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp) mLastGeomIndex = mGeomIndex; mLastIndicesCount = mIndicesCount; mLastIndicesIndex = mIndicesIndex; + + mAtlasInfop = NULL ; + mUsingAtlas = FALSE ; } @@ -200,12 +203,14 @@ void LLFace::destroy() if (group) { group->dirtyGeom(); + gPipeline.markRebuild(group, TRUE); } } } setDrawInfo(NULL); + removeAtlas(); mDrawablep = NULL; mVObjp = NULL; } @@ -264,6 +269,7 @@ void LLFace::setTexture(LLViewerTexture* tex) if(mTexture.notNull()) { mTexture->removeFace(this) ; + removeAtlas() ; } mTexture = tex ; @@ -447,8 +453,15 @@ void LLFace::renderForSelect(U32 data_mask) void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) { - if(mDrawablep.isNull() || mVertexBuffer.isNull() || mDrawablep->getSpatialGroup() == NULL || - mDrawablep->getSpatialGroup()->isState(LLSpatialGroup::GEOM_DIRTY)) + if (mDrawablep->getSpatialGroup() == NULL) + { + return; + } + + mDrawablep->getSpatialGroup()->rebuildGeom(); + mDrawablep->getSpatialGroup()->rebuildMesh(); + + if(mDrawablep.isNull() || mVertexBuffer.isNull()) { return; } @@ -467,17 +480,10 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) glMultMatrixf((GLfloat*)mDrawablep->getRegion()->mRenderMatrix.mMatrix); } - setFaceColor(color); - renderSetColor(); - + glColor4fv(color.mV); mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); -#if !LL_RELEASE_FOR_DOWNLOAD - LLGLState::checkClientArrays("", LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0); -#endif mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex); - unsetFaceColor(); - unsetFaceColor(); gGL.popMatrix(); } } @@ -888,6 +894,13 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { mVertexBuffer->getBinormalStrider(binormals, mGeomIndex); } + + F32 tcoord_xoffset = 0.f ; + F32 tcoord_yoffset = 0.f ; + F32 tcoord_xscale = 1.f ; + F32 tcoord_yscale = 1.f ; + BOOL in_atlas = FALSE ; + if (rebuild_tcoord) { mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex); @@ -895,6 +908,18 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, { mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex); } + + in_atlas = isAtlasInUse() ; + if(in_atlas) + { + const LLVector2* tmp = getTexCoordOffset() ; + tcoord_xoffset = tmp->mV[0] ; + tcoord_yoffset = tmp->mV[1] ; + + tmp = getTexCoordScale() ; + tcoord_xscale = tmp->mV[0] ; + tcoord_yscale = tmp->mV[1] ; + } } if (rebuild_color) { @@ -982,7 +1007,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, 0.75f }; - if (getPoolType() != LLDrawPool::POOL_ALPHA && (LLPipeline::sRenderDeferred || LLPipeline::sRenderBump && tep->getShiny())) + if (getPoolType() != LLDrawPool::POOL_ALPHA && (LLPipeline::sRenderDeferred || (LLPipeline::sRenderBump && tep->getShiny()))) { color.mV[3] = U8 (alpha[tep->getShiny()] * 255); } @@ -1021,7 +1046,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, break; case BE_BRIGHTNESS: case BE_DARKNESS: - if( mTexture.notNull() && mTexture->hasValidGLTexture()) + if( mTexture.notNull() && mTexture->hasGLTexture()) { // Offset by approximately one texel S32 cur_discard = mTexture->getDiscardLevel(); @@ -1104,6 +1129,93 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume, xform(tc, cos_ang, sin_ang, os, ot, ms, mt); } + if(in_atlas) + { + // + //manually calculate tex-coord per vertex for varying address modes. + //should be removed if shader can handle this. + // + + S32 int_part = 0 ; + switch(mTexture->getAddressMode()) + { + case LLTexUnit::TAM_CLAMP: + if(tc.mV[0] < 0.f) + { + tc.mV[0] = 0.f ; + } + else if(tc.mV[0] > 1.f) + { + tc.mV[0] = 1.f; + } + + if(tc.mV[1] < 0.f) + { + tc.mV[1] = 0.f ; + } + else if(tc.mV[1] > 1.f) + { + tc.mV[1] = 1.f; + } + break; + case LLTexUnit::TAM_MIRROR: + if(tc.mV[0] < 0.f) + { + tc.mV[0] = -tc.mV[0] ; + } + int_part = (S32)tc.mV[0] ; + if(int_part & 1) //odd number + { + tc.mV[0] = int_part + 1 - tc.mV[0] ; + } + else //even number + { + tc.mV[0] -= int_part ; + } + + if(tc.mV[1] < 0.f) + { + tc.mV[1] = -tc.mV[1] ; + } + int_part = (S32)tc.mV[1] ; + if(int_part & 1) //odd number + { + tc.mV[1] = int_part + 1 - tc.mV[1] ; + } + else //even number + { + tc.mV[1] -= int_part ; + } + break; + case LLTexUnit::TAM_WRAP: + if(tc.mV[0] > 1.f) + tc.mV[0] -= (S32)(tc.mV[0] - 0.00001f) ; + else if(tc.mV[0] < -1.f) + tc.mV[0] -= (S32)(tc.mV[0] + 0.00001f) ; + + if(tc.mV[1] > 1.f) + tc.mV[1] -= (S32)(tc.mV[1] - 0.00001f) ; + else if(tc.mV[1] < -1.f) + tc.mV[1] -= (S32)(tc.mV[1] + 0.00001f) ; + + if(tc.mV[0] < 0.f) + { + tc.mV[0] = 1.0f + tc.mV[0] ; + } + if(tc.mV[1] < 0.f) + { + tc.mV[1] = 1.0f + tc.mV[1] ; + } + break; + default: + break; + } + + tc.mV[0] = tcoord_xoffset + tcoord_xscale * tc.mV[0] ; + tc.mV[1] = tcoord_yoffset + tcoord_yscale * tc.mV[1] ; + } + + *tex_coords++ = tc; if (bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)) @@ -1358,3 +1470,156 @@ LLVector3 LLFace::getPositionAgent() const return mCenterLocal * getRenderMatrix(); } } + +// +//atlas +// +void LLFace::removeAtlas() +{ + setAtlasInUse(FALSE) ; + mAtlasInfop = NULL ; +} + +const LLTextureAtlas* LLFace::getAtlas()const +{ + if(mAtlasInfop) + { + return mAtlasInfop->getAtlas() ; + } + return NULL ; +} + +const LLVector2* LLFace::getTexCoordOffset()const +{ + if(isAtlasInUse()) + { + return mAtlasInfop->getTexCoordOffset() ; + } + return NULL ; +} +const LLVector2* LLFace::getTexCoordScale() const +{ + if(isAtlasInUse()) + { + return mAtlasInfop->getTexCoordScale() ; + } + return NULL ; +} + +BOOL LLFace::isAtlasInUse()const +{ + return mUsingAtlas ; +} + +BOOL LLFace::canUseAtlas()const +{ + //no drawable or no spatial group, do not use atlas + if(!mDrawablep || !mDrawablep->getSpatialGroup()) + { + return FALSE ; + } + + //if bump face, do not use atlas + if(getTextureEntry() && getTextureEntry()->getBumpmap()) + { + return FALSE ; + } + + //if animated texture, do not use atlas + if(isState(TEXTURE_ANIM)) + { + return FALSE ; + } + + return TRUE ; +} + +void LLFace::setAtlasInUse(BOOL flag) +{ + //no valid atlas to use. + if(flag && (!mAtlasInfop || !mAtlasInfop->isValid())) + { + flag = FALSE ; + } + + if(!flag && !mUsingAtlas) + { + return ; + } + + // + //at this stage (flag || mUsingAtlas) is always true. + // + + //rebuild the tex coords + if(mDrawablep) + { + gPipeline.markRebuild(mDrawablep, LLDrawable::REBUILD_TCOORD); + mUsingAtlas = flag ; + } + else + { + mUsingAtlas = FALSE ; + } +} + +LLTextureAtlasSlot* LLFace::getAtlasInfo() +{ + return mAtlasInfop ; +} + +void LLFace::setAtlasInfo(LLTextureAtlasSlot* atlasp) +{ + if(mAtlasInfop != atlasp) + { + if(mAtlasInfop) + { + //llerrs << "Atlas slot changed!" << llendl ; + } + mAtlasInfop = atlasp ; + } +} + +LLViewerTexture* LLFace::getTexture() const +{ + if(isAtlasInUse()) + { + return (LLViewerTexture*)mAtlasInfop->getAtlas() ; + } + + return mTexture ; +} + +//switch to atlas or switch back to gl texture +//return TRUE if using atlas. +BOOL LLFace::switchTexture() +{ + //no valid atlas or texture + if(!mAtlasInfop || !mAtlasInfop->isValid() || !mTexture) + { + return FALSE ; + } + + if(mTexture->getTexelsInAtlas() >= (U32)mVSize || + mTexture->getTexelsInAtlas() >= mTexture->getTexelsInGLTexture()) + { + //switch to use atlas + //atlas resolution is qualified, use it. + if(!mUsingAtlas) + { + setAtlasInUse(TRUE) ; + } + } + else //if atlas not qualified. + { + //switch back to GL texture + if(mUsingAtlas && mTexture->isGLTextureCreated() && + mTexture->getDiscardLevel() < mTexture->getDiscardLevelInAtlas()) + { + setAtlasInUse(FALSE) ; + } + } + + return mUsingAtlas ; +} + diff --git a/indra/newview/llface.h b/indra/newview/llface.h index e0728fe15e..cafad5706c 100644 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -47,6 +47,7 @@ #include "llvertexbuffer.h" #include "llviewertexture.h" #include "lldrawable.h" +#include "lltextureatlasmanager.h" class LLFacePool; class LLVolume; @@ -55,6 +56,7 @@ class LLTextureEntry; class LLVertexProgram; class LLViewerTexture; class LLGeometryManager; +class LLTextureAtlasSlot; const F32 MIN_ALPHA_SIZE = 1024.f; const F32 MIN_TEX_ANIM_SIZE = 512.f; @@ -86,7 +88,6 @@ public: U16 getGeomCount() const { return mGeomCount; } // vertex count for this face U16 getGeomIndex() const { return mGeomIndex; } // index into draw pool U16 getGeomStart() const { return mGeomIndex; } // index into draw pool - LLViewerTexture* getTexture() const { return mTexture; } void setTexture(LLViewerTexture* tex) ; LLXformMatrix* getXform() const { return mXform; } BOOL hasGeometry() const { return mGeomCount > 0; } @@ -119,7 +120,7 @@ public: LLVertexBuffer* getVertexBuffer() const { return mVertexBuffer; } void setPoolType(U32 type) { mPoolType = type; } S32 getTEOffset() { return mTEOffset; } - LLViewerTexture* getTexture() { return mTexture; } + LLViewerTexture* getTexture() const; void setViewerObject(LLViewerObject* object); void setPool(LLFacePool *pool, LLViewerTexture *texturep); @@ -185,7 +186,17 @@ public: void setIndicesIndex(S32 idx) { mIndicesIndex = idx; } void setDrawInfo(LLDrawInfo* draw_info); -protected: + //for atlas + LLTextureAtlasSlot* getAtlasInfo() ; + void setAtlasInUse(BOOL flag); + void setAtlasInfo(LLTextureAtlasSlot* atlasp); + BOOL isAtlasInUse()const; + BOOL canUseAtlas() const; + const LLVector2* getTexCoordScale() const ; + const LLVector2* getTexCoordOffset()const; + const LLTextureAtlas* getAtlas()const ; + void removeAtlas() ; + BOOL switchTexture() ; public: @@ -230,6 +241,10 @@ protected: S32 mReferenceIndex; F32 mVSize; F32 mPixelArea; + + //atlas + LLPointer<LLTextureAtlasSlot> mAtlasInfop ; + BOOL mUsingAtlas ; protected: static BOOL sSafeRenderSelect; @@ -258,7 +273,7 @@ public: const LLTextureEntry* lte = lhs->getTextureEntry(); const LLTextureEntry* rte = rhs->getTextureEntry(); - if (lhs->getTexture() != rhs->getTexture()) + if(lhs->getTexture() != rhs->getTexture()) { return lhs->getTexture() < rhs->getTexture(); } diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index caa10e9452..e28d223a10 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -35,32 +35,32 @@ #include "llfloaterabout.h" -#include "llsys.h" -#include "llgl.h" -#include "llui.h" // for tr() -#include "v3dmath.h" - -#include "llcurl.h" -#include "llimagej2c.h" -#include "llaudioengine.h" - +// Viewer includes +#include "llagent.h" +#include "llappviewer.h" +#include "llsecondlifeurls.h" +#include "lluictrlfactory.h" #include "llviewertexteditor.h" #include "llviewercontrol.h" -#include "llagent.h" #include "llviewerstats.h" #include "llviewerregion.h" #include "llversionviewer.h" #include "llviewerbuild.h" -#include "lluictrlfactory.h" -#include "lluri.h" #include "llweb.h" -#include "llsecondlifeurls.h" -#include "lltrans.h" -#include "llappviewer.h" -#include "llglheaders.h" -#include "llwindow.h" +// Linden library includes +#include "llaudioengine.h" #include "llbutton.h" +#include "llcurl.h" +#include "llglheaders.h" +#include "llfloater.h" +#include "llfloaterreg.h" +#include "llimagej2c.h" +#include "llsys.h" +#include "lltrans.h" +#include "lluri.h" +#include "v3dmath.h" +#include "llwindow.h" #if LL_WINDOWS #include "lldxhardware.h" @@ -76,6 +76,19 @@ static std::string get_viewer_release_notes_url(); ///---------------------------------------------------------------------------- /// Class LLFloaterAbout ///---------------------------------------------------------------------------- +class LLFloaterAbout + : public LLFloater +{ + friend class LLFloaterReg; +private: + LLFloaterAbout(const LLSD& key); + virtual ~LLFloaterAbout(); + +public: + /*virtual*/ BOOL postBuild(); + void onClickCopyToClipboard(); +}; + // Default constructor LLFloaterAbout::LLFloaterAbout(const LLSD& key) @@ -99,6 +112,9 @@ BOOL LLFloaterAbout::postBuild() LLViewerTextEditor *credits_widget = getChild<LLViewerTextEditor>("credits_editor", true); + getChild<LLUICtrl>("copy_btn")->setCommitCallback( + boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this)); + // make sure that we handle hyperlinks in the About text support_widget->setParseHTML(TRUE); @@ -255,3 +271,22 @@ static std::string get_viewer_release_notes_url() return LLWeb::escapeURL(url.str()); } + +void LLFloaterAbout::onClickCopyToClipboard() +{ + LLViewerTextEditor *support_widget = + getChild<LLViewerTextEditor>("support_editor", true); + support_widget->selectAll(); + support_widget->copy(); + support_widget->deselect(); +} + +///---------------------------------------------------------------------------- +/// LLFloaterAboutUtil +///---------------------------------------------------------------------------- +void LLFloaterAboutUtil::registerFloater() +{ + LLFloaterReg::add("sl_about", "floater_about.xml", + &LLFloaterReg::build<LLFloaterAbout>); + +} diff --git a/indra/newview/llfloaterabout.h b/indra/newview/llfloaterabout.h index c15a20d549..1092282ae2 100644 --- a/indra/newview/llfloaterabout.h +++ b/indra/newview/llfloaterabout.h @@ -33,19 +33,9 @@ #ifndef LL_LLFLOATERABOUT_H #define LL_LLFLOATERABOUT_H -#include "llfloater.h" - -class LLFloaterAbout - : public LLFloater +namespace LLFloaterAboutUtil { - friend class LLFloaterReg; -private: - LLFloaterAbout(const LLSD& key); - virtual ~LLFloaterAbout(); - -public: - /*virtual*/ BOOL postBuild(); -}; - + void registerFloater(); +} #endif // LL_LLFLOATERABOUT_H diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index 45a42f994d..27eb12b9cc 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -569,16 +569,7 @@ void LLFloaterInventory::draw() { if (LLInventoryModel::isEverythingFetched()) { - LLLocale locale(LLLocale::USER_LOCALE); - std::ostringstream title; - //title << "Inventory"; - title<<getString("Title"); - std::string item_count_string; - LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); - title << " (" << item_count_string << getString("Items")<<")"; - //TODO:: Translate mFilterText - title << mFilterText; - setTitle(title.str()); + updateTitle(); } LLFloater::draw(); } @@ -690,22 +681,30 @@ BOOL LLFloaterInventory::handleKeyHere(KEY key, MASK mask) } -void LLFloaterInventory::changed(U32 mask) +void LLFloaterInventory::updateTitle() { - std::ostringstream title; - //title << "Inventory"; - title<<getString("Title"); + LLLocale locale(LLLocale::USER_LOCALE); + std::string item_count_string; + LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); + + LLStringUtil::format_map_t string_args; + string_args["[ITEM_COUNT]"] = item_count_string; + string_args["[FILTER]"] = mFilterText; + if (LLInventoryModel::backgroundFetchActive()) { - LLLocale locale(LLLocale::USER_LOCALE); - std::string item_count_string; - LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); - title << " ( "<< getString("Fetched") << item_count_string << getString("Items")<<")"; + setTitle(getString("TitleFetching", string_args)); } - //TODO:: Translate mFilterText - title << mFilterText; - setTitle(title.str()); + else + { + setTitle(getString("TitleCompleted", string_args)); + } +} + +void LLFloaterInventory::changed(U32 mask) +{ + updateTitle(); } //---------------------------------------------------------------------------- @@ -1230,7 +1229,11 @@ BOOL LLInventoryPanel::postBuild() // build everything. mInventoryObserver = new LLInventoryPanelObserver(this); mInventory->addObserver(mInventoryObserver); - rebuildViewsFor(LLUUID::null, LLInventoryObserver::ADD); + // build view of inventory if inventory ready, otherwise wait for modelChanged() callback + if (mInventory->isInventoryUsable()) + { + rebuildViewsFor(LLUUID::null, LLInventoryObserver::ADD); + } // bit of a hack to make sure the inventory is open. mFolders->openFolder(std::string("My Inventory")); @@ -1327,6 +1330,14 @@ void LLInventoryPanel::modelChanged(U32 mask) LLFastTimer t2(FTM_REFRESH); bool handled = false; + + // inventory just initialized, do complete build + if ((mask & LLInventoryObserver::ADD) && gInventory.getChangedIDs().empty()) + { + rebuildViewsFor(LLUUID::null, LLInventoryObserver::ADD); + return; + } + if(mask & LLInventoryObserver::LABEL) { handled = true; diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h index fd61e121ea..a40efe020b 100644 --- a/indra/newview/llfloaterinventory.h +++ b/indra/newview/llfloaterinventory.h @@ -291,6 +291,9 @@ protected: LLSaveFolderState* mSavedFolderState; std::string mFilterText; + +private: + void updateTitle(); }; class LLSelectFirstFilteredItem : public LLFolderViewFunctor diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index a27070de39..fbc0ff3cf5 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -148,11 +148,11 @@ void LLFloaterPostcard::draw() F32 ratio = (F32)mJPEGImage->getWidth() / (F32)mJPEGImage->getHeight(); if ((F32)rect.getWidth() / (F32)rect.getHeight() >= ratio) { - rect.mRight = (S32)((F32)rect.mLeft + ((F32)rect.getHeight() * ratio)); + rect.mRight = LLRect::tCoordType((F32)rect.mLeft + ((F32)rect.getHeight() * ratio)); } else { - rect.mBottom = (S32)((F32)rect.mTop - ((F32)rect.getWidth() / ratio)); + rect.mBottom = LLRect::tCoordType((F32)rect.mTop - ((F32)rect.getWidth() / ratio)); } { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 2dc96d1fb3..c197c78a41 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -233,10 +233,6 @@ void handleNameTagOptionChanged(const LLSD& newvalue) { gSavedSettings.setBOOL("SmallAvatarNames", TRUE); } - else - { - gSavedSettings.setBOOL("SmallAvatarNames", FALSE); - } } bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater) @@ -528,25 +524,26 @@ void LLFloaterPreference::onOpen(const LLSD& key) bool canChoose = gAgent.getID().notNull() && (gAgent.isMature() || gAgent.isGodlike()); + LLComboBox* maturity_combo = getChild<LLComboBox>("maturity_desired_combobox"); + if (canChoose) { // if they're not adult or a god, they shouldn't see the adult selection, so delete it if (!gAgent.isAdult() && !gAgent.isGodlike()) { - LLComboBox* pMaturityCombo = getChild<LLComboBox>("maturity_desired_combobox"); // we're going to remove the adult entry from the combo. This obviously depends // on the order of items in the XML file, but there doesn't seem to be a reasonable // way to depend on the field in XML called 'name'. - pMaturityCombo->remove(0); + maturity_combo->remove(0); } childSetVisible("maturity_desired_combobox", true); - childSetVisible("maturity_desired_prompt", true); + childSetVisible("maturity_desired_textbox", false); } else { - childSetVisible("maturity_desired_prompt", false); + childSetText("maturity_desired_textbox", maturity_combo->getSelectedItemLabel()); childSetVisible("maturity_desired_combobox", false); } @@ -880,10 +877,20 @@ void LLFloaterPreference::refreshEnabledState() { mRadioTerrainDetail->setValue(1); mRadioTerrainDetail->setEnabled(FALSE); + for (S32 i = 0; i < mRadioTerrainDetail->getItemCount(); ++i) + { + mRadioTerrainDetail->setIndexEnabled(i, FALSE); + } } else { mRadioTerrainDetail->setEnabled(TRUE); + + for (S32 i = 0; i < mRadioTerrainDetail->getItemCount(); ++i) + { + mRadioTerrainDetail->setIndexEnabled(i, TRUE); + } + } // WindLight diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp index a6aa01e83b..fe98c84301 100644 --- a/indra/newview/llfloatersellland.cpp +++ b/indra/newview/llfloatersellland.cpp @@ -58,6 +58,7 @@ class LLFloaterSellLandUI public: LLFloaterSellLandUI(const LLSD& key); virtual ~LLFloaterSellLandUI(); + void onClose(); private: class SelectionObserver : public LLParcelObserver @@ -131,6 +132,7 @@ LLFloaterSellLandUI::LLFloaterSellLandUI(const LLSD& key) { LLViewerParcelMgr::getInstance()->addObserver(&mParcelSelectionObserver); // LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_sell_land.xml"); + mCloseSignal.connect(boost::bind(&LLFloaterSellLandUI::onClose, this)); } LLFloaterSellLandUI::~LLFloaterSellLandUI() @@ -138,6 +140,13 @@ LLFloaterSellLandUI::~LLFloaterSellLandUI() LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver); } +// Because we are single_instance, we are not destroyed on close. +void LLFloaterSellLandUI::onClose() +{ + // Must release parcel selection to allow land to deselect, see EXT-803 + mParcelSelection = NULL; +} + void LLFloaterSellLandUI::SelectionObserver::changed() { if (LLViewerParcelMgr::getInstance()->selectionEmpty()) @@ -253,10 +262,7 @@ void LLFloaterSellLandUI::refreshUI() if (!parcelp) return; LLTextureCtrl* snapshot = getChild<LLTextureCtrl>("info_image"); - if (snapshot) - { - snapshot->setImageAssetID(mParcelSnapshot); - } + snapshot->setImageAssetID(mParcelSnapshot); childSetText("info_parcel", parcelp->getName()); childSetTextArg("info_size", "[AREA]", llformat("%d", mParcelActualArea)); diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index 616e9bac35..8979575ef7 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -111,6 +111,11 @@ void LLFloaterSettingsDebug::onCommitSettings() LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo"); LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata(); + if (!controlp) + { + return; + } + LLVector3 vector; LLVector3d vectord; LLRect rect; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 13a2594c45..235e819218 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1106,15 +1106,18 @@ LLSnapshotLivePreview::ESnapshotType LLFloaterSnapshot::Impl::getTypeIndex(LLFlo LLFloaterSnapshot::ESnapshotFormat LLFloaterSnapshot::Impl::getFormatIndex(LLFloaterSnapshot* floater) { ESnapshotFormat index = SNAPSHOT_FORMAT_PNG; - LLSD value = floater->childGetValue("local_format_combo"); - const std::string id = value.asString(); - if (id == "PNG") - index = SNAPSHOT_FORMAT_PNG; - else if (id == "JPEG") - index = SNAPSHOT_FORMAT_JPEG; - else if (id == "BMP") - index = SNAPSHOT_FORMAT_BMP; - return index; + if(floater->hasChild("local_format_combo")) + { + LLComboBox* local_format_combo = floater->findChild<LLComboBox>("local_format_combo"); + const std::string id = local_format_combo->getSelectedItemLabel(); + if (id == "PNG") + index = SNAPSHOT_FORMAT_PNG; + else if (id == "JPEG") + index = SNAPSHOT_FORMAT_JPEG; + else if (id == "BMP") + index = SNAPSHOT_FORMAT_BMP; + } + return index; } diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp index 18745284cb..02979acdd7 100644 --- a/indra/newview/llfloaterwindlight.cpp +++ b/indra/newview/llfloaterwindlight.cpp @@ -59,6 +59,8 @@ #include "llwlparamset.h" #include "llwlparammanager.h" #include "llpostprocess.h" +#include "lltabcontainer.h" + #undef max @@ -434,6 +436,11 @@ void LLFloaterWindLight::syncMenu() childSetValue("WLGamma", param_mgr->mWLGamma.x); childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness()); + + LLTabContainer* tab = getChild<LLTabContainer>("WindLight Tabs"); + LLPanel* panel = getChild<LLPanel>("Scattering"); + + tab->enableTabButton(tab->getIndexForPanel(panel), gSavedSettings.getBOOL("RenderDeferredGI")); } diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp index e366340a10..07b81ef134 100644 --- a/indra/newview/llhudeffectlookat.cpp +++ b/indra/newview/llhudeffectlookat.cpp @@ -421,8 +421,8 @@ BOOL LLHUDEffectLookAt::setLookAt(ELookAtType target_type, LLViewerObject *objec BOOL lookAtChanged = (target_type != mTargetType) || (object != mTargetObject); // lookat position has moved a certain amount and we haven't just sent an update - lookAtChanged = lookAtChanged || (dist_vec(position, mLastSentOffsetGlobal) > MIN_DELTAPOS_FOR_UPDATE) && - ((current_time - mLastSendTime) > (1.f / MAX_SENDS_PER_SEC)); + lookAtChanged = lookAtChanged || ((dist_vec(position, mLastSentOffsetGlobal) > MIN_DELTAPOS_FOR_UPDATE) && + ((current_time - mLastSendTime) > (1.f / MAX_SENDS_PER_SEC))); if (lookAtChanged) { diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index 8086400493..55019f91f8 100644 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -1063,6 +1063,8 @@ void LLHUDText::renderAllHUD() LLVertexBuffer::unbind(); + LLVertexBuffer::unbind(); + LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index eb07078402..40c5a243cc 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1481,8 +1481,8 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, LLVOAvatarSelf* avatar = gAgent.getAvatarObject(); if(!avatar) return FALSE; - // cannot drag categories into library or COF - if(!isAgentInventory() || isCOFFolder()) + // cannot drag categories into library + if(!isAgentInventory()) { return FALSE; } @@ -1729,6 +1729,34 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id, return accept; } +bool LLFindCOFValidItems::operator()(LLInventoryCategory* cat, + LLInventoryItem* item) +{ + // Valid COF items are: + // - links to wearables (body parts or clothing) + // - links to attachments + // - links to gestures + // - links to ensemble folders + LLViewerInventoryItem *linked_item = ((LLViewerInventoryItem*)item)->getLinkedItem(); // BAP - safe? + if (linked_item) + { + LLAssetType::EType type = linked_item->getType(); + return (type == LLAssetType::AT_CLOTHING || + type == LLAssetType::AT_BODYPART || + type == LLAssetType::AT_GESTURE || + type == LLAssetType::AT_OBJECT); + } + else + { + LLViewerInventoryCategory *linked_category = ((LLViewerInventoryItem*)item)->getLinkedCategory(); // BAP - safe? + // BAP remove AT_NONE support after ensembles are fully working? + return (linked_category && + ((linked_category->getPreferredType() == LLAssetType::AT_NONE) || + (LLAssetType::lookupIsEnsembleCategoryType(linked_category->getPreferredType())))); + } +} + + bool LLFindWearables::operator()(LLInventoryCategory* cat, LLInventoryItem* item) { @@ -1743,6 +1771,8 @@ bool LLFindWearables::operator()(LLInventoryCategory* cat, return FALSE; } + + //Used by LLFolderBridge as callback for directory recursion. class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver { @@ -1948,6 +1978,15 @@ void LLFolderBridge::performAction(LLFolderView* folder, LLInventoryModel* model modifyOutfit(FALSE); return; } + else if ("wearasensemble" == action) + { + LLInventoryModel* model = getInventoryModel(); + if(!model) return; + LLViewerInventoryCategory* cat = getCategory(); + if(!cat) return; + LLAppearanceManager::wearEnsemble(cat,true); + return; + } else if ("addtooutfit" == action) { modifyOutfit(TRUE); @@ -2277,8 +2316,11 @@ void LLFolderBridge::folderOptionsMenu() if(!model) return; const LLInventoryCategory* category = model->getCategory(mUUID); - const bool is_default_folder = category && - (LLAssetType::lookupIsProtectedCategoryType(category->getPreferredType())); + LLAssetType::EType type = category->getPreferredType(); + const bool is_default_folder = category && LLAssetType::lookupIsProtectedCategoryType(type); + // BAP change once we're no longer treating regular categories as ensembles. + const bool is_ensemble = category && (type == LLAssetType::AT_NONE || + LLAssetType::lookupIsEnsembleCategoryType(type)); // calling card related functionality for folders. @@ -2313,6 +2355,10 @@ void LLFolderBridge::folderOptionsMenu() mItems.push_back(std::string("Add To Outfit")); mItems.push_back(std::string("Replace Outfit")); } + if (is_ensemble) + { + mItems.push_back(std::string("Wear As Ensemble")); + } mItems.push_back(std::string("Take Off Items")); } hideContextEntries(*mMenu, mItems, disabled_items); @@ -2370,8 +2416,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { LLViewerInventoryCategory *cat = getCategory(); - if (!isCOFFolder() && cat && - LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())) + // BAP removed protected check to re-enable standard ops in untyped folders. + // Not sure what the right thing is to do here. + if (!isCOFFolder() && cat /*&& + LLAssetType::lookupIsProtectedCategoryType(cat->getPreferredType())*/) { // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694. if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat)) @@ -3983,6 +4031,16 @@ void remove_inventory_category_from_avatar( LLInventoryCategory* category ) } } +struct OnRemoveStruct +{ + LLUUID mUUID; + LLFolderView *mFolderToDeleteSelected; + OnRemoveStruct(const LLUUID& uuid, LLFolderView *fv = NULL): + mUUID(uuid), + mFolderToDeleteSelected(fv) + { + } +}; void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_id) { @@ -4030,10 +4088,10 @@ void remove_inventory_category_from_avatar_step2( BOOL proceed, LLUUID category_ if( gAgentWearables.isWearingItem (item_array.get(i)->getUUID()) ) { LLWearableList::instance().getAsset(item_array.get(i)->getAssetUUID(), - item_array.get(i)->getName(), - item_array.get(i)->getType(), - LLWearableBridge::onRemoveFromAvatarArrived, - new LLUUID(item_array.get(i)->getUUID())); + item_array.get(i)->getName(), + item_array.get(i)->getType(), + LLWearableBridge::onRemoveFromAvatarArrived, + new OnRemoveStruct(item_array.get(i)->getUUID())); } } @@ -4134,12 +4192,25 @@ void LLWearableBridge::performAction(LLFolderView* folder, LLInventoryModel* mod { LLViewerInventoryItem* item = getItem(); if (item) - { - LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - LLWearableBridge::onRemoveFromAvatarArrived, - new LLUUID(mUUID)); + { + if (item->getIsLinkType() && + model->isObjectDescendentOf(mUUID,LLAppearanceManager::getCOF())) + { + // Delete link after item has been taken off. + LLWearableList::instance().getAsset(item->getAssetUUID(), + item->getName(), + item->getType(), + LLWearableBridge::onRemoveFromAvatarArrived, + new OnRemoveStruct(mUUID, folder)); + } + else + { + LLWearableList::instance().getAsset(item->getAssetUUID(), + item->getName(), + item->getType(), + LLWearableBridge::onRemoveFromAvatarArrived, + new OnRemoveStruct(mUUID)); + } } } } @@ -4452,11 +4523,12 @@ void LLWearableBridge::onRemoveFromAvatar(void* user_data) LLViewerInventoryItem* item = self->getItem(); if (item) { + LLUUID parent_id = item->getParentUUID(); LLWearableList::instance().getAsset(item->getAssetUUID(), - item->getName(), - item->getType(), - onRemoveFromAvatarArrived, - new LLUUID(self->mUUID)); + item->getName(), + item->getType(), + onRemoveFromAvatarArrived, + new OnRemoveStruct(LLUUID(self->mUUID))); } } } @@ -4465,10 +4537,11 @@ void LLWearableBridge::onRemoveFromAvatar(void* user_data) void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, void* userdata) { - LLUUID* item_id = (LLUUID*) userdata; + OnRemoveStruct *on_remove_struct = (OnRemoveStruct*) userdata; + LLUUID item_id = on_remove_struct->mUUID; if(wearable) { - if( gAgentWearables.isWearingItem( *item_id ) ) + if( gAgentWearables.isWearingItem( item_id ) ) { EWearableType type = wearable->getType(); @@ -4481,7 +4554,11 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable, } } } - delete item_id; + if (on_remove_struct->mFolderToDeleteSelected) + { + on_remove_struct->mFolderToDeleteSelected->removeSelectedItems(); + } + delete on_remove_struct; } LLInvFVBridgeAction* LLInvFVBridgeAction::createAction(LLAssetType::EType asset_type, diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 4cbf3e169b..2f3171a868 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -474,7 +474,10 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) { LLViewerInventoryCategory *linked_cat = item->getLinkedCategory(); - if (linked_cat) + if (linked_cat && linked_cat->getPreferredType() != LLAssetType::AT_OUTFIT) + // BAP - was + // LLAssetType::lookupIsEnsembleCategoryType(linked_cat->getPreferredType())) + // Change back once ensemble typing is in place. { if(add(linked_cat,NULL)) { @@ -2492,6 +2495,10 @@ void LLInventoryModel::buildParentChildMap() // root of the agent's inv found. // The inv tree is built. mIsAgentInvUsable = true; + + llinfos << "Inventory initialized, notifying observers" << llendl; + addChangedMask(LLInventoryObserver::ALL, LLUUID::null); + notifyObservers(); } } } diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index e3e4f6aca0..91a1906fab 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -731,6 +731,21 @@ protected: }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Class LLFindCOFValidItems +// +// Collects items that can be legitimately linked to in the COF. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +class LLFindCOFValidItems : public LLInventoryCollectFunctor +{ +public: + LLFindCOFValidItems() {} + virtual ~LLFindCOFValidItems() {} + virtual bool operator()(LLInventoryCategory* cat, + LLInventoryItem* item); + +}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLFindWearables // // Collects wearables based on item type. diff --git a/indra/newview/lllandmarklist.cpp b/indra/newview/lllandmarklist.cpp index 318344f9ef..2e8084759a 100644 --- a/indra/newview/lllandmarklist.cpp +++ b/indra/newview/lllandmarklist.cpp @@ -128,14 +128,16 @@ void LLLandmarkList::processGetAssetReply( else { LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED ); - + // SJB: No use case for a notification here. Use lldebugs instead if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ) { - LLNotifications::instance().add("LandmarkMissing"); + LL_WARNS("Landmarks") << "Missing Landmark" << LL_ENDL; + //LLNotifications::instance().add("LandmarkMissing"); } else { - LLNotifications::instance().add("UnableToLoadLandmark"); + LL_WARNS("Landmarks") << "Unable to load Landmark" << LL_ENDL; + //LLNotifications::instance().add("UnableToLoadLandmark"); } gLandmarkList.mBadList.insert(uuid); diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 3d1d6cad74..f62d7229a3 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -85,6 +85,7 @@ void LLManip::rebuild(LLViewerObject* vobj) if (group) { group->dirtyGeom(); + gPipeline.markRebuild(group, TRUE); } } } diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index ce16b95bc0..4ac109bf3d 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -52,6 +52,7 @@ #include "llbutton.h" #include "llcheckboxctrl.h" #include "llcolorswatch.h" +#include "lltexturectrl.h" #include "llcombobox.h" #include "llfirstuse.h" #include "llfocusmgr.h" @@ -72,6 +73,7 @@ #include "llvovolume.h" #include "llworld.h" #include "pipeline.h" +#include "llviewershadermgr.h" #include "lldrawpool.h" #include "lluictrlfactory.h" @@ -110,12 +112,28 @@ BOOL LLPanelVolume::postBuild() LightColorSwatch->setOnSelectCallback(boost::bind(&LLPanelVolume::onLightSelectColor, this, _2)); childSetCommitCallback("colorswatch",onCommitLight,this); } + + LLTextureCtrl* LightTexPicker = getChild<LLTextureCtrl>("light texture control"); + if (LightTexPicker) + { + LightTexPicker->setOnCancelCallback(boost::bind(&LLPanelVolume::onLightCancelTexture, this, _2)); + LightTexPicker->setOnSelectCallback(boost::bind(&LLPanelVolume::onLightSelectTexture, this, _2)); + childSetCommitCallback("light texture control", onCommitLight, this); + } + childSetCommitCallback("Light Intensity",onCommitLight,this); childSetValidate("Light Intensity",precommitValidate); childSetCommitCallback("Light Radius",onCommitLight,this); childSetValidate("Light Radius",precommitValidate); childSetCommitCallback("Light Falloff",onCommitLight,this); childSetValidate("Light Falloff",precommitValidate); + + childSetCommitCallback("Light FOV", onCommitLight, this); + childSetValidate("Light FOV", precommitValidate); + childSetCommitCallback("Light Focus", onCommitLight, this); + childSetValidate("Light Focus", precommitValidate); + childSetCommitCallback("Light Ambiance", onCommitLight, this); + childSetValidate("Light Ambiance", precommitValidate); } // Start with everyone disabled @@ -220,14 +238,32 @@ void LLPanelVolume::getState( ) LightColorSwatch->setValid( TRUE ); LightColorSwatch->set(volobjp->getLightBaseColor()); } + + LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); + if (LightTextureCtrl) + { + LightTextureCtrl->setEnabled(TRUE); + LightTextureCtrl->setValid(TRUE); + LightTextureCtrl->setImageAssetID(volobjp->getLightTextureID()); + } + childSetEnabled("Light Intensity",true); childSetEnabled("Light Radius",true); childSetEnabled("Light Falloff",true); + childSetEnabled("Light FOV", true); + childSetEnabled("Light Focus", true); + childSetEnabled("Light Ambiance", true); + childSetValue("Light Intensity",volobjp->getLightIntensity()); childSetValue("Light Radius",volobjp->getLightRadius()); childSetValue("Light Falloff",volobjp->getLightFalloff()); + LLVector3 params = volobjp->getSpotLightParams(); + childSetValue("Light FOV", params.mV[0]); + childSetValue("Light Focus", params.mV[1]); + childSetValue("Light Ambiance", params.mV[2]); + mLightSavedColor = volobjp->getLightColor(); } else @@ -243,9 +279,20 @@ void LLPanelVolume::getState( ) LightColorSwatch->setEnabled( FALSE ); LightColorSwatch->setValid( FALSE ); } + LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); + if (LightTextureCtrl) + { + LightTextureCtrl->setEnabled(FALSE); + LightTextureCtrl->setValid(FALSE); + } + childSetEnabled("Light Intensity",false); childSetEnabled("Light Radius",false); childSetEnabled("Light Falloff",false); + + childSetEnabled("Light FOV",false); + childSetEnabled("Light Focus",false); + childSetEnabled("Light Ambiance",false); } // Flexible properties @@ -335,6 +382,15 @@ void LLPanelVolume::refresh() { mRootObject = NULL; } + + BOOL visible = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 0 ? TRUE : FALSE; + + childSetVisible("label texture", visible); + childSetVisible("Light FOV", visible); + childSetVisible("Light Focus", visible); + childSetVisible("Light Ambiance", visible); + childSetVisible("light texture control", visible); + } @@ -361,6 +417,13 @@ void LLPanelVolume::clearCtrls() LightColorSwatch->setEnabled( FALSE ); LightColorSwatch->setValid( FALSE ); } + LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); + if(LightTextureCtrl) + { + LightTextureCtrl->setEnabled( FALSE ); + LightTextureCtrl->setValid( FALSE ); + } + childSetEnabled("Light Intensity",false); childSetEnabled("Light Radius",false); childSetEnabled("Light Falloff",false); @@ -436,6 +499,15 @@ void LLPanelVolume::onLightCancelColor(const LLSD& data) onLightSelectColor(data); } +void LLPanelVolume::onLightCancelTexture(const LLSD& data) +{ + LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); + if (LightTextureCtrl) + { + LightTextureCtrl->setImageAssetID(mLightSavedTexture); + } +} + void LLPanelVolume::onLightSelectColor(const LLSD& data) { LLViewerObject* objectp = mObject; @@ -456,6 +528,24 @@ void LLPanelVolume::onLightSelectColor(const LLSD& data) } } +void LLPanelVolume::onLightSelectTexture(const LLSD& data) +{ + if (mObject.isNull() || (mObject->getPCode() != LL_PCODE_VOLUME)) + { + return; + } + LLVOVolume *volobjp = (LLVOVolume *) mObject.get(); + + + LLTextureCtrl* LightTextureCtrl = getChild<LLTextureCtrl>("light texture control"); + if(LightTextureCtrl) + { + LLUUID id = LightTextureCtrl->getImageAssetID(); + volobjp->setLightTextureID(id); + mLightSavedTexture = id; + } +} + // static void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata ) { @@ -471,12 +561,47 @@ void LLPanelVolume::onCommitLight( LLUICtrl* ctrl, void* userdata ) volobjp->setLightIntensity((F32)self->childGetValue("Light Intensity").asReal()); volobjp->setLightRadius((F32)self->childGetValue("Light Radius").asReal()); volobjp->setLightFalloff((F32)self->childGetValue("Light Falloff").asReal()); + LLColorSwatchCtrl* LightColorSwatch = self->getChild<LLColorSwatchCtrl>("colorswatch"); if(LightColorSwatch) { LLColor4 clr = LightColorSwatch->get(); volobjp->setLightColor(LLColor3(clr)); } + + LLTextureCtrl* LightTextureCtrl = self->getChild<LLTextureCtrl>("light texture control"); + if(LightTextureCtrl) + { + LLUUID id = LightTextureCtrl->getImageAssetID(); + if (id.notNull()) + { + if (volobjp->getLightTextureID().isNull()) + { //this commit is making this a spot light, set UI to default params + volobjp->setLightTextureID(id); + LLVector3 spot_params = volobjp->getSpotLightParams(); + self->childSetValue("Light FOV", spot_params.mV[0]); + self->childSetValue("Light Focus", spot_params.mV[1]); + self->childSetValue("Light Ambiance", spot_params.mV[2]); + } + else + { //modifying existing params + LLVector3 spot_params; + spot_params.mV[0] = (F32) self->childGetValue("Light FOV").asReal(); + spot_params.mV[1] = (F32) self->childGetValue("Light Focus").asReal(); + spot_params.mV[2] = (F32) self->childGetValue("Light Ambiance").asReal(); + volobjp->setSpotLightParams(spot_params); + } + } + else if (volobjp->getLightTextureID().notNull()) + { //no longer a spot light + volobjp->setLightTextureID(id); + //self->childDisable("Light FOV"); + //self->childDisable("Light Focus"); + //self->childDisable("Light Ambiance"); + } + } + + } // static diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h index f285141bbe..9d197aafa5 100644 --- a/indra/newview/llpanelvolume.h +++ b/indra/newview/llpanelvolume.h @@ -74,6 +74,10 @@ public: void onLightCancelColor(const LLSD& data); void onLightSelectColor(const LLSD& data); + void onLightCancelTexture(const LLSD& data); + void onLightSelectTexture(const LLSD& data); + + protected: void getState(); @@ -99,6 +103,7 @@ protected: */ LLColor4 mLightSavedColor; + LLUUID mLightSavedTexture; LLPointer<LLViewerObject> mObject; LLPointer<LLViewerObject> mRootObject; }; diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index b256914d29..0ecdec65d6 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -289,8 +289,37 @@ LLScriptEdCore::LLScriptEdCore( setFollowsAll(); setBorderVisible(FALSE); - - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_script_ed.xml"); + setXMLFilename("panel_script_ed.xml"); +} + +LLScriptEdCore::~LLScriptEdCore() +{ + deleteBridges(); + + // If the search window is up for this editor, close it. + LLFloaterScriptSearch* script_search = LLFloaterScriptSearch::getInstance(); + if (script_search && script_search->getEditorCore() == this) + { + script_search->closeFloater(); + delete script_search; + } +} + +BOOL LLScriptEdCore::postBuild() +{ + mErrorList = getChild<LLScrollListCtrl>("lsl errors"); + + mFunctions = getChild<LLComboBox>( "Insert..."); + + childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); + + mEditor = getChild<LLViewerTextEditor>("Script Editor"); + + childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this); + childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE)); + + initMenu(); + std::vector<std::string> funcs; std::vector<std::string> tooltips; @@ -360,36 +389,7 @@ LLScriptEdCore::LLScriptEdCore( { mFunctions->add(*iter); } -} - -LLScriptEdCore::~LLScriptEdCore() -{ - deleteBridges(); - - // If the search window is up for this editor, close it. - LLFloaterScriptSearch* script_search = LLFloaterScriptSearch::getInstance(); - if (script_search && script_search->getEditorCore() == this) - { - script_search->closeFloater(); - delete script_search; - } -} -BOOL LLScriptEdCore::postBuild() -{ - - mErrorList = getChild<LLScrollListCtrl>("lsl errors"); - - mFunctions = getChild<LLComboBox>( "Insert..."); - - childSetCommitCallback("Insert...", &LLScriptEdCore::onBtnInsertFunction, this); - - mEditor = getChild<LLViewerTextEditor>("Script Editor"); - - childSetCommitCallback("lsl errors", &LLScriptEdCore::onErrorList, this); - childSetAction("Save_btn", boost::bind(&LLScriptEdCore::doSave,this,FALSE)); - - initMenu(); return TRUE; } diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index aa603c417f..3c6645f116 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -182,7 +182,8 @@ void LLProgressView::draw() LLPanel::draw(); if (mFadeTimer.getElapsedTimeF32() > FADE_IN_TIME) { - gFocusMgr.removeTopCtrlWithoutCallback(this); + // Fade is complete, release focus + gFocusMgr.releaseFocusIfNeeded( this ); LLPanel::setVisible(FALSE); gStartTexture = NULL; } diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index dea9af0657..4e13cb17a2 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -47,6 +47,7 @@ #include "llrender.h" #include "lloctree.h" #include "llvoavatar.h" +#include "lltextureatlas.h" static LLFastTimer::DeclareTimer FTM_FRUSTUM_CULL("Frustum Culling"); static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound"); @@ -88,8 +89,6 @@ protected: static LLOcclusionQueryPool sQueryPool; -BOOL LLSpatialPartition::sFreezeState = FALSE; - //static counter for frame to switch LOD on void sg_assert(BOOL expr) @@ -283,10 +282,10 @@ S32 LLSphereAABB(const LLVector3& center, const LLVector3& size, const LLVector3 LLSpatialGroup::~LLSpatialGroup() { - if (sNoDelete) + /*if (sNoDelete) { llerrs << "Illegal deletion of LLSpatialGroup!" << llendl; - } + }*/ if (isState(DEAD)) { @@ -297,13 +296,136 @@ LLSpatialGroup::~LLSpatialGroup() if (gGLManager.mHasOcclusionQuery && mOcclusionQuery) { - sQueryPool.release(mOcclusionQuery); + sQueryPool.release(mOcclusionQuery[LLViewerCamera::sCurCameraID]); } delete [] mOcclusionVerts; LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); clearDrawMap(); + clearAtlasList() ; +} + +BOOL LLSpatialGroup::hasAtlas(LLTextureAtlas* atlasp) +{ + S8 type = atlasp->getComponents() - 1 ; + for(std::list<LLTextureAtlas*>::iterator iter = mAtlasList[type].begin(); iter != mAtlasList[type].end() ; ++iter) + { + if(atlasp == *iter) + { + return TRUE ; + } + } + return FALSE ; +} + +void LLSpatialGroup::addAtlas(LLTextureAtlas* atlasp, S8 recursive_level) +{ + if(!hasAtlas(atlasp)) + { + mAtlasList[atlasp->getComponents() - 1].push_back(atlasp) ; + atlasp->addSpatialGroup(this) ; + } + + --recursive_level; + if(recursive_level)//levels propagating up. + { + LLSpatialGroup* parent = getParent() ; + if(parent) + { + parent->addAtlas(atlasp, recursive_level) ; + } + } +} + +void LLSpatialGroup::removeAtlas(LLTextureAtlas* atlasp, BOOL remove_group, S8 recursive_level) +{ + mAtlasList[atlasp->getComponents() - 1].remove(atlasp) ; + if(remove_group) + { + atlasp->removeSpatialGroup(this) ; + } + + --recursive_level; + if(recursive_level)//levels propagating up. + { + LLSpatialGroup* parent = getParent() ; + if(parent) + { + parent->removeAtlas(atlasp, recursive_level) ; + } + } +} + +void LLSpatialGroup::clearAtlasList() +{ + std::list<LLTextureAtlas*>::iterator iter ; + for(S8 i = 0 ; i < 4 ; i++) + { + if(mAtlasList[i].size() > 0) + { + for(iter = mAtlasList[i].begin(); iter != mAtlasList[i].end() ; ++iter) + { + ((LLTextureAtlas*)*iter)->removeSpatialGroup(this) ; + } + mAtlasList[i].clear() ; + } + } +} + +LLTextureAtlas* LLSpatialGroup::getAtlas(S8 ncomponents, S8 to_be_reserved, S8 recursive_level) +{ + S8 type = ncomponents - 1 ; + if(mAtlasList[type].size() > 0) + { + for(std::list<LLTextureAtlas*>::iterator iter = mAtlasList[type].begin(); iter != mAtlasList[type].end() ; ++iter) + { + if(!((LLTextureAtlas*)*iter)->isFull(to_be_reserved)) + { + return *iter ; + } + } + } + + --recursive_level; + if(recursive_level) + { + LLSpatialGroup* parent = getParent() ; + if(parent) + { + return parent->getAtlas(ncomponents, to_be_reserved, recursive_level) ; + } + } + return NULL ; +} + +void LLSpatialGroup::setCurUpdatingSlot(LLTextureAtlasSlot* slotp) +{ + mCurUpdatingSlotp = slotp; + + //if(!hasAtlas(mCurUpdatingSlotp->getAtlas())) + //{ + // addAtlas(mCurUpdatingSlotp->getAtlas()) ; + //} +} + +LLTextureAtlasSlot* LLSpatialGroup::getCurUpdatingSlot(LLViewerTexture* imagep, S8 recursive_level) +{ + if(gFrameCount && mCurUpdatingTime == gFrameCount && mCurUpdatingTexture == imagep) + { + return mCurUpdatingSlotp ; + } + + //--recursive_level ; + //if(recursive_level) + //{ + // LLSpatialGroup* parent = getParent() ; + // if(parent) + // { + // return parent->getCurUpdatingSlot(imagep, recursive_level) ; + // } + //} + return NULL ; } void LLSpatialGroup::clearDrawMap() @@ -313,15 +435,12 @@ void LLSpatialGroup::clearDrawMap() BOOL LLSpatialGroup::isVisible() const { - return mVisible == LLDrawable::getCurrentFrame() ? TRUE : FALSE; + return mVisible[LLViewerCamera::sCurCameraID] == LLDrawable::getCurrentFrame() ? TRUE : FALSE; } void LLSpatialGroup::setVisible() { - if (!LLSpatialPartition::sFreezeState) - { - mVisible = LLDrawable::getCurrentFrame(); - } + mVisible[LLViewerCamera::sCurCameraID] = LLDrawable::getCurrentFrame(); } void LLSpatialGroup::validate() @@ -380,63 +499,6 @@ void LLSpatialGroup::validate() #endif } - - -class LLOctreeStateCheck : public LLOctreeTraveler<LLDrawable> -{ -public: - U32 mInheritedMask; - - LLOctreeStateCheck(): mInheritedMask(0) { } - - virtual void traverse(const LLSpatialGroup::OctreeNode* node) - { - LLSpatialGroup* group = (LLSpatialGroup*) node->getListener(0); - - node->accept(this); - - U32 temp = mInheritedMask; - mInheritedMask |= group->getState() & - (LLSpatialGroup::OCCLUDED); - - for (U32 i = 0; i < node->getChildCount(); i++) - { - traverse(node->getChild(i)); - } - - mInheritedMask = temp; - } - - virtual void visit(const LLOctreeNode<LLDrawable>* state) - { - LLSpatialGroup* group = (LLSpatialGroup*) state->getListener(0); - - if (mInheritedMask && !group->isState(mInheritedMask)) - { - llerrs << "Spatial group failed inherited mask test." << llendl; - } - - if (group->isState(LLSpatialGroup::DIRTY)) - { - assert_parent_state(group, LLSpatialGroup::DIRTY); - } - } - - void assert_parent_state(LLSpatialGroup* group, U32 state) - { - LLSpatialGroup* parent = group->getParent(); - while (parent) - { - if (!parent->isState(state)) - { - llerrs << "Spatial group failed parent state check." << llendl; - } - parent = parent->getParent(); - } - } -}; - - void LLSpatialGroup::checkStates() { #if LL_OCTREE_PARANOIA_CHECK @@ -470,17 +532,17 @@ void validate_draw_info(LLDrawInfo& params) } //bad indices - U32* indicesp = (U32*) params.mVertexBuffer->getIndicesPointer(); + U16* indicesp = (U16*) params.mVertexBuffer->getIndicesPointer(); if (indicesp) { for (U32 i = params.mOffset; i < params.mOffset+params.mCount; i++) { - if (indicesp[i] < params.mStart) + if (indicesp[i] < (U16)params.mStart) { llerrs << "Draw batch has vertex buffer index out of range error (index too low)." << llendl; } - if (indicesp[i] > params.mEnd) + if (indicesp[i] > (U16)params.mEnd) { llerrs << "Draw batch has vertex buffer index out of range error (index too high)." << llendl; } @@ -541,7 +603,9 @@ BOOL LLSpatialGroup::addObject(LLDrawable *drawablep, BOOL add_all, BOOL from_oc { drawablep->setSpatialGroup(this); validate_drawable(drawablep); - setState(OBJECT_DIRTY | GEOM_DIRTY | DISCARD_QUERY); + setState(OBJECT_DIRTY | GEOM_DIRTY); + setOcclusionState(LLSpatialGroup::DISCARD_QUERY, LLSpatialGroup::STATE_MODE_ALL_CAMERAS); + gPipeline.markRebuild(this, TRUE); if (drawablep->isSpatialBridge()) { mBridgeList.push_back((LLSpatialBridge*) drawablep); @@ -576,22 +640,23 @@ static LLFastTimer::DeclareTimer FTM_REBUILD_VBO("VBO Rebuilt"); void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group) { - if (!gPipeline.hasRenderType(mDrawableType)) + /*if (!gPipeline.hasRenderType(mDrawableType)) { return; - } - - if (!LLPipeline::sSkipUpdate && group->changeLOD()) - { - group->mLastUpdateDistance = group->mDistance; - group->mLastUpdateViewAngle = group->mViewAngle; - } + }*/ if (group->isDead() || !group->isState(LLSpatialGroup::GEOM_DIRTY)) { + /*if (!group->isState(LLSpatialGroup::GEOM_DIRTY) && mRenderByGroup) + { + llerrs << "WTF?" << llendl; + }*/ return; } + group->mLastUpdateDistance = group->mDistance; + group->mLastUpdateViewAngle = group->mViewAngle; + LLFastTimer ftm(FTM_REBUILD_VBO); group->clearDrawMap(); @@ -629,6 +694,7 @@ void LLSpatialPartition::rebuildGeom(LLSpatialGroup* group) group->clearState(LLSpatialGroup::GEOM_DIRTY); } + void LLSpatialPartition::rebuildMesh(LLSpatialGroup* group) { @@ -667,8 +733,11 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO drawablep = *i; minMax = drawablep->getSpatialExtents(); + update_min_max(newMin, newMax, minMax[0]); + update_min_max(newMin, newMax, minMax[1]); + //bin up the object - for (U32 i = 0; i < 3; i++) + /*for (U32 i = 0; i < 3; i++) { if (minMax[0].mV[i] < newMin.mV[i]) { @@ -678,7 +747,7 @@ BOOL LLSpatialGroup::boundObjects(BOOL empty, LLVector3& minOut, LLVector3& maxO { newMax.mV[i] = minMax[1].mV[i]; } - } + }*/ } mObjectBounds[0] = (newMin + newMax) * 0.5f; @@ -742,6 +811,10 @@ LLSpatialGroup* LLSpatialGroup::getParent() return NULL; } + if(!mOctreeNode) + { + return NULL; + } OctreeNode* parent = mOctreeNode->getOctParent(); if (parent) @@ -767,6 +840,8 @@ BOOL LLSpatialGroup::removeObject(LLDrawable *drawablep, BOOL from_octree) { drawablep->setSpatialGroup(NULL); setState(GEOM_DIRTY); + gPipeline.markRebuild(this, TRUE); + if (drawablep->isSpatialBridge()) { for (bridge_list_t::iterator i = mBridgeList.begin(); i != mBridgeList.end(); ++i) @@ -803,6 +878,7 @@ void LLSpatialGroup::shift(const LLVector3 &offset) //if (!mSpatialPartition->mRenderByGroup) { setState(GEOM_DIRTY); + gPipeline.markRebuild(this, TRUE); } if (mOcclusionVerts) @@ -843,18 +919,21 @@ public: void LLSpatialGroup::setState(U32 state) { - if (!LLSpatialPartition::sFreezeState) + mState |= state; + + if (state > LLSpatialGroup::STATE_MASK) { - mState |= state; + llerrs << "WTF?" << llendl; } } void LLSpatialGroup::setState(U32 state, S32 mode) { LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); - if (LLSpatialPartition::sFreezeState) + + if (state > LLSpatialGroup::STATE_MASK) { - return; + llerrs << "WTF?" << llendl; } if (mode > STATE_MODE_SINGLE) @@ -902,20 +981,23 @@ public: void LLSpatialGroup::clearState(U32 state) { - if (!LLSpatialPartition::sFreezeState) + if (state > LLSpatialGroup::STATE_MASK) { - mState &= ~state; + llerrs << "WTF?" << llendl; } + + mState &= ~state; } void LLSpatialGroup::clearState(U32 state, S32 mode) { - LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); - if (LLSpatialPartition::sFreezeState) + if (state > LLSpatialGroup::STATE_MASK) { - return; + llerrs << "WTF?" << llendl; } + LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); + if (mode > STATE_MODE_SINGLE) { if (mode == STATE_MODE_DIFF) @@ -935,6 +1017,128 @@ void LLSpatialGroup::clearState(U32 state, S32 mode) } } +BOOL LLSpatialGroup::isState(U32 state) const +{ + if (state > LLSpatialGroup::STATE_MASK) + { + llerrs << "WTF?" << llendl; + } + + return mState & state ? TRUE : FALSE; +} + +//===================================== +// Occlusion State Set/Clear +//===================================== +class LLSpatialSetOcclusionState : public LLSpatialGroup::OctreeTraveler +{ +public: + U32 mState; + LLSpatialSetOcclusionState(U32 state) : mState(state) { } + virtual void visit(const LLSpatialGroup::OctreeNode* branch) { ((LLSpatialGroup*) branch->getListener(0))->setOcclusionState(mState); } +}; + +class LLSpatialSetOcclusionStateDiff : public LLSpatialSetOcclusionState +{ +public: + LLSpatialSetOcclusionStateDiff(U32 state) : LLSpatialSetOcclusionState(state) { } + + virtual void traverse(const LLSpatialGroup::OctreeNode* n) + { + LLSpatialGroup* group = (LLSpatialGroup*) n->getListener(0); + + if (!group->isOcclusionState(mState)) + { + LLSpatialGroup::OctreeTraveler::traverse(n); + } + } +}; + + +void LLSpatialGroup::setOcclusionState(U32 state, S32 mode) +{ + LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); + + if (mode > STATE_MODE_SINGLE) + { + if (mode == STATE_MODE_DIFF) + { + LLSpatialSetOcclusionStateDiff setter(state); + setter.traverse(mOctreeNode); + } + else if (mode == STATE_MODE_BRANCH) + { + LLSpatialSetOcclusionState setter(state); + setter.traverse(mOctreeNode); + } + else + { + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + mOcclusionState[i] |= state; + } + } + } + else + { + mOcclusionState[LLViewerCamera::sCurCameraID] |= state; + } +} + +class LLSpatialClearOcclusionState : public LLSpatialGroup::OctreeTraveler +{ +public: + U32 mState; + + LLSpatialClearOcclusionState(U32 state) : mState(state) { } + virtual void visit(const LLSpatialGroup::OctreeNode* branch) { ((LLSpatialGroup*) branch->getListener(0))->clearOcclusionState(mState); } +}; + +class LLSpatialClearOcclusionStateDiff : public LLSpatialClearOcclusionState +{ +public: + LLSpatialClearOcclusionStateDiff(U32 state) : LLSpatialClearOcclusionState(state) { } + + virtual void traverse(const LLSpatialGroup::OctreeNode* n) + { + LLSpatialGroup* group = (LLSpatialGroup*) n->getListener(0); + + if (group->isOcclusionState(mState)) + { + LLSpatialGroup::OctreeTraveler::traverse(n); + } + } +}; + +void LLSpatialGroup::clearOcclusionState(U32 state, S32 mode) +{ + LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); + + if (mode > STATE_MODE_SINGLE) + { + if (mode == STATE_MODE_DIFF) + { + LLSpatialClearOcclusionStateDiff clearer(state); + clearer.traverse(mOctreeNode); + } + else if (mode == STATE_MODE_BRANCH) + { + LLSpatialClearOcclusionState clearer(state); + clearer.traverse(mOctreeNode); + } + else + { + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + mOcclusionState[i] &= ~state; + } + } + } + else + { + mOcclusionState[LLViewerCamera::sCurCameraID] &= ~state; + } +} //====================================== // Octree Listener Implementation //====================================== @@ -946,13 +1150,16 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) : mSpatialPartition(part), mVertexBuffer(NULL), mBufferUsage(GL_STATIC_DRAW_ARB), - mVisible(0), mDistance(0.f), mDepth(0.f), mLastUpdateDistance(-1.f), mLastUpdateTime(gFrameTimeSeconds), mViewAngle(0.f), - mLastUpdateViewAngle(-1.f) + mLastUpdateViewAngle(-1.f), + mAtlasList(4), + mCurUpdatingTime(0), + mCurUpdatingSlotp(NULL), + mCurUpdatingTexture (NULL) { sNodeCount++; LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); @@ -960,14 +1167,25 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) : sg_assert(mOctreeNode->getListenerCount() == 0); mOctreeNode->addListener(this); setState(SG_INITIAL_STATE_MASK); + gPipeline.markRebuild(this, TRUE); mBounds[0] = LLVector3(node->getCenter()); mBounds[1] = LLVector3(node->getSize()); part->mLODSeed = (part->mLODSeed+1)%part->mLODPeriod; mLODHash = part->mLODSeed; - - mOcclusionQuery = 0; + + OctreeNode* oct_parent = node->getOctParent(); + + LLSpatialGroup* parent = oct_parent ? (LLSpatialGroup*) oct_parent->getListener(0) : NULL; + + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + mOcclusionQuery[i] = 0; + mOcclusionState[i] = parent ? SG_STATE_INHERIT_MASK & parent->mOcclusionState[i] : 0; + mVisible[i] = 0; + } + mOcclusionVerts = NULL; mRadius = 1; @@ -976,13 +1194,18 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) : void LLSpatialGroup::updateDistance(LLCamera &camera) { + if (LLViewerCamera::sCurCameraID != LLViewerCamera::CAMERA_WORLD) + { + llerrs << "WTF?" << llendl; + } + #if !LL_RELEASE_FOR_DOWNLOAD if (isState(LLSpatialGroup::OBJECT_DIRTY)) { llerrs << "Spatial group dirty on distance update." << llendl; } #endif - if (!getData().empty() && !LLSpatialPartition::sFreezeState) + if (!getData().empty()) { mRadius = mSpatialPartition->mRenderByGroup ? mObjectBounds[1].magVec() : (F32) mOctreeNode->getSize().magVec(); @@ -1018,6 +1241,7 @@ F32 LLSpatialPartition::calcDistance(LLSpatialGroup* group, LLCamera& camera) //NOTE: If there is a trivial way to detect that alpha sorting here would not change the render order, //not setting this node to dirty would be a very good thing group->setState(LLSpatialGroup::ALPHA_DIRTY); + gPipeline.markRebuild(group, FALSE); } } } @@ -1054,6 +1278,18 @@ F32 LLSpatialPartition::calcPixelArea(LLSpatialGroup* group, LLCamera& camera) return LLPipeline::calcPixelArea(group->mObjectBounds[0], group->mObjectBounds[1], camera); } +F32 LLSpatialGroup::getUpdateUrgency() const +{ + if (!isVisible()) + { + return 0.f; + } + else + { + return (gFrameTimeSeconds - mLastUpdateTime+4.f)/mDistance; + } +} + BOOL LLSpatialGroup::needsUpdate() { return (LLDrawable::getCurrentFrame()%mSpatialPartition->mLODPeriod == mLODHash) ? TRUE : FALSE; @@ -1140,8 +1376,7 @@ void LLSpatialGroup::handleChildAddition(const OctreeNode* parent, OctreeNode* c LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); if (child->getListenerCount() == 0) { - LLSpatialGroup* group = new LLSpatialGroup(child, mSpatialPartition); - group->setState(mState & SG_STATE_INHERIT_MASK); + new LLSpatialGroup(child, mSpatialPartition); } else { @@ -1161,16 +1396,21 @@ void LLSpatialGroup::handleChildRemoval(const OctreeNode* parent, const OctreeNo void LLSpatialGroup::destroyGL() { setState(LLSpatialGroup::GEOM_DIRTY | LLSpatialGroup::IMAGE_DIRTY); + gPipeline.markRebuild(this, TRUE); + mLastUpdateTime = gFrameTimeSeconds; mVertexBuffer = NULL; mBufferMap.clear(); clearDrawMap(); - if (mOcclusionQuery) + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) { - sQueryPool.release(mOcclusionQuery); - mOcclusionQuery = 0; + if (mOcclusionQuery[i]) + { + sQueryPool.release(mOcclusionQuery[i]); + mOcclusionQuery[i] = 0; + } } delete [] mOcclusionVerts; @@ -1266,38 +1506,43 @@ void LLSpatialGroup::checkOcclusion() if (LLPipeline::sUseOcclusion > 1) { LLSpatialGroup* parent = getParent(); - if (parent && parent->isState(LLSpatialGroup::OCCLUDED)) + if (parent && parent->isOcclusionState(LLSpatialGroup::OCCLUDED)) { //if the parent has been marked as occluded, the child is implicitly occluded - clearState(QUERY_PENDING | DISCARD_QUERY); + clearOcclusionState(QUERY_PENDING | DISCARD_QUERY); } - else if (isState(QUERY_PENDING)) + else if (isOcclusionState(QUERY_PENDING)) { //otherwise, if a query is pending, read it back LLFastTimer t(FTM_OCCLUSION_READBACK); GLuint res = 1; - if (!isState(DISCARD_QUERY) && mOcclusionQuery) + if (!isOcclusionState(DISCARD_QUERY) && mOcclusionQuery[LLViewerCamera::sCurCameraID]) { - glGetQueryObjectuivARB(mOcclusionQuery, GL_QUERY_RESULT_ARB, &res); + glGetQueryObjectuivARB(mOcclusionQuery[LLViewerCamera::sCurCameraID], GL_QUERY_RESULT_ARB, &res); + } + + if (isOcclusionState(DISCARD_QUERY)) + { + res = 2; } if (res > 0) { assert_states_valid(this); - clearState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); + clearOcclusionState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); assert_states_valid(this); } else { assert_states_valid(this); - setState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); + setOcclusionState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); assert_states_valid(this); } - clearState(QUERY_PENDING | DISCARD_QUERY); + clearOcclusionState(QUERY_PENDING | DISCARD_QUERY); } - else if (mSpatialPartition->isOcclusionEnabled() && isState(LLSpatialGroup::OCCLUDED)) + else if (mSpatialPartition->isOcclusionEnabled() && isOcclusionState(LLSpatialGroup::OCCLUDED)) { //check occlusion has been issued for occluded node that has not had a query issued assert_states_valid(this); - clearState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); + clearOcclusionState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); assert_states_valid(this); } } @@ -1309,9 +1554,9 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera) { if (earlyFail(camera, this)) { - setState(LLSpatialGroup::DISCARD_QUERY); + setOcclusionState(LLSpatialGroup::DISCARD_QUERY); assert_states_valid(this); - clearState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); + clearOcclusionState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); assert_states_valid(this); } else @@ -1319,9 +1564,9 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera) { LLFastTimer t(FTM_RENDER_OCCLUSION); - if (!mOcclusionQuery) + if (!mOcclusionQuery[LLViewerCamera::sCurCameraID]) { - mOcclusionQuery = sQueryPool.allocate(); + mOcclusionQuery[LLViewerCamera::sCurCameraID] = sQueryPool.allocate(); } if (!mOcclusionVerts || isState(LLSpatialGroup::OCCLUSION_DIRTY)) @@ -1329,22 +1574,33 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera) buildOcclusion(); } - glBeginQueryARB(GL_SAMPLES_PASSED_ARB, mOcclusionQuery); + glBeginQueryARB(GL_SAMPLES_PASSED_ARB, mOcclusionQuery[LLViewerCamera::sCurCameraID]); glVertexPointer(3, GL_FLOAT, 0, mOcclusionVerts); - glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, - GL_UNSIGNED_BYTE, get_box_fan_indices(camera, mBounds[0])); + if (camera->getOrigin().isExactlyZero()) + { //origin is invalid, draw entire box + glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, + GL_UNSIGNED_BYTE, sOcclusionIndices); + glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, + GL_UNSIGNED_BYTE, sOcclusionIndices+b111*8); + } + else + { + glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, + GL_UNSIGNED_BYTE, get_box_fan_indices(camera, mBounds[0])); + } glEndQueryARB(GL_SAMPLES_PASSED_ARB); } - setState(LLSpatialGroup::QUERY_PENDING); - clearState(LLSpatialGroup::DISCARD_QUERY); + setOcclusionState(LLSpatialGroup::QUERY_PENDING); + clearOcclusionState(LLSpatialGroup::DISCARD_QUERY); } } } //============================================== -LLSpatialPartition::LLSpatialPartition(U32 data_mask, U32 buffer_usage) +LLSpatialPartition::LLSpatialPartition(U32 data_mask, BOOL render_by_group, U32 buffer_usage) +: mRenderByGroup(render_by_group) { LLMemType mt(LLMemType::MTYPE_SPACE_PARTITION); mOcclusionEnabled = TRUE; @@ -1356,7 +1612,6 @@ LLSpatialPartition::LLSpatialPartition(U32 data_mask, U32 buffer_usage) mBufferUsage = buffer_usage; mDepthMask = FALSE; mSlopRatio = 0.25f; - mRenderByGroup = TRUE; mInfiniteFarClip = FALSE; LLGLNamePool::registerPool(&sQueryPool); @@ -1393,9 +1648,9 @@ LLSpatialGroup *LLSpatialPartition::put(LLDrawable *drawablep, BOOL was_visible) LLSpatialGroup* group = drawablep->getSpatialGroup(); - if (group && was_visible && group->isState(LLSpatialGroup::QUERY_PENDING)) + if (group && was_visible && group->isOcclusionState(LLSpatialGroup::QUERY_PENDING)) { - group->setState(LLSpatialGroup::DISCARD_QUERY); + group->setOcclusionState(LLSpatialGroup::DISCARD_QUERY, LLSpatialGroup::STATE_MODE_ALL_CAMERAS); } return group; @@ -1494,7 +1749,7 @@ public: if (group->mOctreeNode->getParent() && //never occlusion cull the root node LLPipeline::sUseOcclusion && //ignore occlusion if disabled - group->isState(LLSpatialGroup::OCCLUDED)) + group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { gPipeline.markOccluder(group); return true; @@ -1576,7 +1831,7 @@ public: virtual void processGroup(LLSpatialGroup* group) { if (group->needsUpdate() || - group->mVisible < LLDrawable::getCurrentFrame() - 1) + group->mVisible[LLViewerCamera::sCurCameraID] < LLDrawable::getCurrentFrame() - 1) { group->doOcclusion(mCamera); } @@ -1644,7 +1899,7 @@ public: { if (group->mOctreeNode->getParent() && //never occlusion cull the root node LLPipeline::sUseOcclusion && //ignore occlusion if disabled - group->isState(LLSpatialGroup::OCCLUDED)) + group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { return true; } @@ -1652,13 +1907,57 @@ public: return false; } + virtual void traverse(const LLSpatialGroup::OctreeNode* n) + { + LLSpatialGroup* group = (LLSpatialGroup*) n->getListener(0); + + if (earlyFail(group)) + { + return; + } + + if (mRes == 2) + { + //fully in, don't traverse further (won't effect extents + } + else if (mRes && group->isState(LLSpatialGroup::SKIP_FRUSTUM_CHECK)) + { //don't need to do frustum check + LLSpatialGroup::OctreeTraveler::traverse(n); + } + else + { + mRes = frustumCheck(group); + + if (mRes) + { //at least partially in, run on down + LLSpatialGroup::OctreeTraveler::traverse(n); + } + + mRes = 0; + } + } + virtual void processGroup(LLSpatialGroup* group) { - if (group->mObjectBounds[1].magVecSquared() < 256.f * 256.f) - { //megaprims and water edge patches be damned! + if (group->isState(LLSpatialGroup::DIRTY) || group->getData().empty()) + { + llerrs << "WTF?" << llendl; + } + + if (mRes < 2) + { + if (mCamera->AABBInFrustum(group->mObjectBounds[0], group->mObjectBounds[1]) > 0) + { + mEmpty = FALSE; + update_min_max(mMin, mMax, group->mObjectExtents[0]); + update_min_max(mMin, mMax, group->mObjectExtents[1]); + } + } + else + { mEmpty = FALSE; - update_min_max(mMin, mMax, group->mObjectExtents[0]); - update_min_max(mMin, mMax, group->mObjectExtents[1]); + update_min_max(mMin, mMax, group->mExtents[0]); + update_min_max(mMin, mMax, group->mExtents[1]); } } @@ -1676,9 +1975,9 @@ public: virtual bool earlyFail(LLSpatialGroup* group) { if (mResult || //already found a node, don't check any more - group->mOctreeNode->getParent() && //never occlusion cull the root node - LLPipeline::sUseOcclusion && //ignore occlusion if disabled - group->isState(LLSpatialGroup::OCCLUDED)) + (group->mOctreeNode->getParent() && //never occlusion cull the root node + LLPipeline::sUseOcclusion && //ignore occlusion if disabled + group->isOcclusionState(LLSpatialGroup::OCCLUDED))) { return true; } @@ -1857,6 +2156,12 @@ BOOL LLSpatialPartition::isOcclusionEnabled() BOOL LLSpatialPartition::getVisibleExtents(LLCamera& camera, LLVector3& visMin, LLVector3& visMax) { + { + LLFastTimer ftm(FTM_CULL_REBOUND); + LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); + group->rebound(); + } + LLOctreeCullVisExtents vis(&camera, visMin, visMax); vis.traverse(mOctree); return vis.mEmpty; @@ -1876,12 +2181,9 @@ S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* result ((LLSpatialGroup*)mOctree->getListener(0))->checkStates(); #endif { - BOOL temp = sFreezeState; - sFreezeState = FALSE; LLFastTimer ftm(FTM_CULL_REBOUND); LLSpatialGroup* group = (LLSpatialGroup*) mOctree->getListener(0); group->rebound(); - sFreezeState = temp; } #if LL_OCTREE_PARANOIA_CHECK @@ -1918,6 +2220,11 @@ S32 LLSpatialPartition::cull(LLCamera &camera, std::vector<LLDrawable *>* result BOOL earlyFail(LLCamera* camera, LLSpatialGroup* group) { + if (camera->getOrigin().isExactlyZero()) + { + return FALSE; + } + const F32 vel = SG_OCCLUSION_FUDGE*2.f; LLVector3 c = group->mBounds[0]; LLVector3 r = group->mBounds[1] + LLVector3(vel,vel,vel); @@ -2195,7 +2502,7 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera) LLGLEnable cull(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isState(LLSpatialGroup::OCCLUDED)) && group->isVisible() && + BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && group->isVisible() && !group->getData().empty(); if (render_objects) { @@ -2436,6 +2743,39 @@ void renderBatchSize(LLDrawInfo* params) pushVerts(params, LLVertexBuffer::MAP_VERTEX); } +void renderShadowFrusta(LLDrawInfo* params) +{ + LLGLEnable blend(GL_BLEND); + gGL.setSceneBlendType(LLRender::BT_ADD); + + LLVector3 center = (params->mExtents[1]+params->mExtents[0])*0.5f; + LLVector3 size = (params->mExtents[1]-params->mExtents[0])*0.5f; + + if (gPipeline.mShadowCamera[4].AABBInFrustum(center, size)) + { + glColor3f(1,0,0); + pushVerts(params, LLVertexBuffer::MAP_VERTEX); + } + if (gPipeline.mShadowCamera[5].AABBInFrustum(center, size)) + { + glColor3f(0,1,0); + pushVerts(params, LLVertexBuffer::MAP_VERTEX); + } + if (gPipeline.mShadowCamera[6].AABBInFrustum(center, size)) + { + glColor3f(0,0,1); + pushVerts(params, LLVertexBuffer::MAP_VERTEX); + } + if (gPipeline.mShadowCamera[7].AABBInFrustum(center, size)) + { + glColor3f(1,0,1); + pushVerts(params, LLVertexBuffer::MAP_VERTEX); + } + + gGL.setSceneBlendType(LLRender::BT_ALPHA); +} + + void renderLights(LLDrawable* drawablep) { if (!drawablep->isLight()) @@ -2571,6 +2911,9 @@ public: //draw tight fit bounding boxes for spatial group if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCTREE)) { + group->rebuildGeom(); + group->rebuildMesh(); + renderOctree(group); stop_glerror(); } @@ -2578,6 +2921,9 @@ public: //render visibility wireframe if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION)) { + group->rebuildGeom(); + group->rebuildMesh(); + gGL.flush(); glPushMatrix(); gGLLastMatrix = NULL; @@ -2603,6 +2949,19 @@ public: LLVector3 nodeCenter = group->mBounds[0]; LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter()); + group->rebuildGeom(); + group->rebuildMesh(); + + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_BBOXES)) + { + if (!group->getData().empty()) + { + gGL.color3f(0,0,1); + drawBoxOutline(group->mObjectBounds[0], + group->mObjectBounds[1]); + } + } + for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i) { LLDrawable* drawable = *i; @@ -2612,6 +2971,16 @@ public: renderBoundingBox(drawable); } + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_BUILD_QUEUE)) + { + if (drawable->isState(LLDrawable::IN_REBUILD_Q2)) + { + gGL.color4f(0.6f, 0.6f, 0.1f, 1.f); + const LLVector3* ext = drawable->getSpatialExtents(); + drawBoxOutline((ext[0]+ext[1])*0.5f, (ext[1]-ext[0])*0.5f); + } + } + if (drawable->getVOVolume() && gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY)) { renderTexturePriority(drawable); @@ -2660,6 +3029,10 @@ public: { renderBatchSize(draw_info); } + if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) + { + renderShadowFrusta(draw_info); + } } } } @@ -2710,6 +3083,79 @@ void LLSpatialPartition::renderIntersectingBBoxes(LLCamera* camera) pusher.traverse(mOctree); } +class LLOctreeStateCheck : public LLOctreeTraveler<LLDrawable> +{ +public: + U32 mInheritedMask[LLViewerCamera::NUM_CAMERAS]; + + LLOctreeStateCheck() + { + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + mInheritedMask[i] = 0; + } + } + + virtual void traverse(const LLSpatialGroup::OctreeNode* node) + { + LLSpatialGroup* group = (LLSpatialGroup*) node->getListener(0); + + node->accept(this); + + + U32 temp[LLViewerCamera::NUM_CAMERAS]; + + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + temp[i] = mInheritedMask[i]; + mInheritedMask[i] |= group->mOcclusionState[i] & LLSpatialGroup::OCCLUDED; + } + + for (U32 i = 0; i < node->getChildCount(); i++) + { + traverse(node->getChild(i)); + } + + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + mInheritedMask[i] = temp[i]; + } + } + + + virtual void visit(const LLOctreeNode<LLDrawable>* state) + { + LLSpatialGroup* group = (LLSpatialGroup*) state->getListener(0); + + for (U32 i = 0; i < LLViewerCamera::NUM_CAMERAS; i++) + { + if (mInheritedMask[i] && !(group->mOcclusionState[i] & mInheritedMask[i])) + { + llerrs << "Spatial group failed inherited mask test." << llendl; + } + } + + if (group->isState(LLSpatialGroup::DIRTY)) + { + assert_parent_state(group, LLSpatialGroup::DIRTY); + } + } + + void assert_parent_state(LLSpatialGroup* group, U32 state) + { + LLSpatialGroup* parent = group->getParent(); + while (parent) + { + if (!parent->isState(state)) + { + llerrs << "Spatial group failed parent state check." << llendl; + } + parent = parent->getParent(); + } + } +}; + + void LLSpatialPartition::renderDebug() { if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCTREE | @@ -2722,7 +3168,9 @@ void LLSpatialPartition::renderDebug() LLPipeline::RENDER_DEBUG_TEXTURE_ANIM | LLPipeline::RENDER_DEBUG_RAYCAST | LLPipeline::RENDER_DEBUG_AVATAR_VOLUME | - LLPipeline::RENDER_DEBUG_AGENT_TARGET)) + LLPipeline::RENDER_DEBUG_AGENT_TARGET | + LLPipeline::RENDER_DEBUG_BUILD_QUEUE | + LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) { return; } @@ -2757,6 +3205,12 @@ void LLSpatialPartition::renderDebug() render_debug.traverse(mOctree); } +void LLSpatialGroup::drawObjectBox(LLColor4 col) +{ + gGL.color4fv(col.mV); + drawBox(mObjectBounds[0], mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); +} + BOOL LLSpatialPartition::isVisible(const LLVector3& v) { @@ -2937,10 +3391,10 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset, LLDrawInfo::~LLDrawInfo() { - if (LLSpatialGroup::sNoDelete) + /*if (LLSpatialGroup::sNoDelete) { llerrs << "LLDrawInfo deleted illegally!" << llendl; - } + }*/ if (mFace) { diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 13ab35402c..16e8782a8e 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -44,6 +44,7 @@ #include "llcubemap.h" #include "lldrawpool.h" #include "llface.h" +#include "llviewercamera.h" #include <queue> @@ -53,6 +54,8 @@ class LLSpatialPartition; class LLSpatialBridge; class LLSpatialGroup; +class LLTextureAtlas; +class LLTextureAtlasSlot; S32 AABBSphereIntersect(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &rad); S32 AABBSphereIntersectR2(const LLVector3& min, const LLVector3& max, const LLVector3 &origin, const F32 &radius_squared); @@ -72,7 +75,7 @@ public: LLPointer<LLVertexBuffer> mVertexBuffer; - LLPointer<LLViewerTexture> mTexture; + LLPointer<LLViewerTexture> mTexture; LLColor4U mGlowColor; S32 mDebugColor; const LLMatrix4* mTextureMatrix; @@ -154,12 +157,14 @@ public: class LLSpatialGroup : public LLOctreeListener<LLDrawable> { friend class LLSpatialPartition; + friend class LLOctreeStateCheck; public: static U32 sNodeCount; static BOOL sNoDelete; //deletion of spatial groups and draw info not allowed if TRUE typedef std::vector<LLPointer<LLSpatialGroup> > sg_vector_t; typedef std::set<LLPointer<LLSpatialGroup> > sg_set_t; + typedef std::list<LLPointer<LLSpatialGroup> > sg_list_t; typedef std::vector<LLPointer<LLSpatialBridge> > bridge_list_t; typedef std::vector<LLPointer<LLDrawInfo> > drawmap_elem_t; typedef std::map<U32, drawmap_elem_t > draw_map_t; @@ -184,6 +189,14 @@ public: } }; + struct CompareUpdateUrgency + { + bool operator()(const LLPointer<LLSpatialGroup> lhs, const LLPointer<LLSpatialGroup> rhs) + { + return lhs->getUpdateUrgency() > rhs->getUpdateUrgency(); + } + }; + struct CompareDepthGreater { bool operator()(const LLSpatialGroup* const& lhs, const LLSpatialGroup* const& rhs) @@ -194,35 +207,44 @@ public: typedef enum { - OCCLUDED = 0x00000001, - IN_QUEUE = 0x00000002, - QUERY_PENDING = 0x00000004, - ACTIVE_OCCLUSION = 0x00000008, - DISCARD_QUERY = 0x00000010, - DEAD = 0x00000020, - EARLY_FAIL = 0x00000040, - DIRTY = 0x00000080, - OBJECT_DIRTY = 0x00000100, - GEOM_DIRTY = 0x00000200, - ALPHA_DIRTY = 0x00000800, - SKIP_FRUSTUM_CHECK = 0x00001000, - IN_IMAGE_QUEUE = 0x00002000, - IMAGE_DIRTY = 0x00004000, - OCCLUSION_DIRTY = 0x00008000, - MESH_DIRTY = 0x00010000, + OCCLUDED = 0x00010000, + QUERY_PENDING = 0x00020000, + ACTIVE_OCCLUSION = 0x00040000, + DISCARD_QUERY = 0x00080000, + EARLY_FAIL = 0x00100000, + } eOcclusionState; + + typedef enum + { + DEAD = 0x00000001, + DIRTY = 0x00000002, + OBJECT_DIRTY = 0x00000004, + GEOM_DIRTY = 0x00000008, + ALPHA_DIRTY = 0x00000010, + SKIP_FRUSTUM_CHECK = 0x00000020, + IN_IMAGE_QUEUE = 0x00000040, + IMAGE_DIRTY = 0x00000080, + OCCLUSION_DIRTY = 0x00000100, + MESH_DIRTY = 0x00000200, + NEW_DRAWINFO = 0x00000400, + IN_BUILD_Q1 = 0x00000800, + IN_BUILD_Q2 = 0x00001000, + STATE_MASK = 0x0000FFFF, } eSpatialState; typedef enum { STATE_MODE_SINGLE = 0, //set one node STATE_MODE_BRANCH, //set entire branch - STATE_MODE_DIFF //set entire branch as long as current state is different + STATE_MODE_DIFF, //set entire branch as long as current state is different + STATE_MODE_ALL_CAMERAS, //used for occlusion state, set state for all cameras } eSetStateMode; LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part); BOOL isDead() { return isState(DEAD); } - BOOL isState(U32 state) const { return mState & state ? TRUE : FALSE; } + BOOL isState(U32 state) const; + BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; } U32 getState() { return mState; } void setState(U32 state); void clearState(U32 state); @@ -233,10 +255,14 @@ public: void validateDrawMap(); void setState(U32 state, S32 mode); + void clearState(U32 state, S32 mode); + + void setOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE); + void clearOcclusionState(U32 state, S32 mode = STATE_MODE_SINGLE); LLSpatialGroup* getParent(); - void clearState(U32 state, S32 mode); + BOOL addObject(LLDrawable *drawablep, BOOL add_all = FALSE, BOOL from_octree = FALSE); BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE); BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group @@ -253,6 +279,7 @@ public: void updateDistance(LLCamera& camera); BOOL needsUpdate(); + F32 getUpdateUrgency() const; BOOL changeLOD(); void rebuildGeom(); void rebuildMesh(); @@ -262,6 +289,8 @@ public: element_list& getData() { return mOctreeNode->getData(); } U32 getElementCount() const { return mOctreeNode->getElementCount(); } + void drawObjectBox(LLColor4 col); + //LISTENER FUNCTIONS virtual void handleInsertion(const TreeNode* node, LLDrawable* face); virtual void handleRemoval(const TreeNode* node, LLDrawable* face); @@ -270,10 +299,41 @@ public: virtual void handleChildAddition(const OctreeNode* parent, OctreeNode* child); virtual void handleChildRemoval(const OctreeNode* parent, const OctreeNode* child); +//------------------- +//for atlas use +//------------------- + //atlas + void setCurUpdatingTime(U32 t) {mCurUpdatingTime = t ;} + U32 getCurUpdatingTime() const { return mCurUpdatingTime ;} + + void setCurUpdatingSlot(LLTextureAtlasSlot* slotp) ; + LLTextureAtlasSlot* getCurUpdatingSlot(LLViewerTexture* imagep, S8 recursive_level = 3) ; + + void setCurUpdatingTexture(LLViewerTexture* tex){ mCurUpdatingTexture = tex ;} + LLViewerTexture* getCurUpdatingTexture() const { return mCurUpdatingTexture ;} + + BOOL hasAtlas(LLTextureAtlas* atlasp) ; + LLTextureAtlas* getAtlas(S8 ncomponents, S8 to_be_reserved, S8 recursive_level = 3) ; + void addAtlas(LLTextureAtlas* atlasp, S8 recursive_level = 3) ; + void removeAtlas(LLTextureAtlas* atlasp, BOOL remove_group = TRUE, S8 recursive_level = 3) ; + void clearAtlasList() ; +private: + U32 mCurUpdatingTime ; + //do not make the below two to use LLPointer + //because mCurUpdatingTime invalidates them automatically. + LLTextureAtlasSlot* mCurUpdatingSlotp ; + LLViewerTexture* mCurUpdatingTexture ; + + std::vector< std::list<LLTextureAtlas*> > mAtlasList ; +//------------------- +//end for atlas use +//------------------- + protected: virtual ~LLSpatialGroup(); U32 mState; + U32 mOcclusionState[LLViewerCamera::NUM_CAMERAS]; S32 mLODHash; static S32 sLODSeed; @@ -292,12 +352,12 @@ public: LLPointer<LLVertexBuffer> mVertexBuffer; F32* mOcclusionVerts; - GLuint mOcclusionQuery; + GLuint mOcclusionQuery[LLViewerCamera::NUM_CAMERAS]; U32 mBufferUsage; draw_map_t mDrawMap; - S32 mVisible; + S32 mVisible[LLViewerCamera::NUM_CAMERAS]; F32 mDistance; F32 mDepth; F32 mLastUpdateDistance; @@ -326,9 +386,7 @@ public: class LLSpatialPartition: public LLGeometryManager { public: - static BOOL sFreezeState; //if true, no spatialgroup state updates will be made - - LLSpatialPartition(U32 data_mask, U32 mBufferUsage = GL_STATIC_DRAW_ARB); + LLSpatialPartition(U32 data_mask, BOOL render_by_group, U32 mBufferUsage); virtual ~LLSpatialPartition(); LLSpatialGroup *put(LLDrawable *drawablep, BOOL was_visible = FALSE); @@ -374,7 +432,7 @@ public: BOOL mOcclusionEnabled; // if TRUE, occlusion culling is performed BOOL mInfiniteFarClip; // if TRUE, frustum culling ignores far clip plane U32 mBufferUsage; - BOOL mRenderByGroup; + const BOOL mRenderByGroup; U32 mLODSeed; U32 mLODPeriod; //number of frames between LOD updates for a given spatial group (staggered by mLODSeed) U32 mVertexDataMask; @@ -393,7 +451,7 @@ protected: public: typedef std::vector<LLPointer<LLSpatialBridge> > bridge_vector_t; - LLSpatialBridge(LLDrawable* root, U32 data_mask); + LLSpatialBridge(LLDrawable* root, BOOL render_by_group, U32 data_mask); virtual BOOL isSpatialBridge() const { return TRUE; } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 44e76a0bc1..6a55b571ae 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -436,8 +436,8 @@ bool idle_startup() } else { - // Update images? - gTextureList.updateImages(0.01f); + //note: Removing this line will cause incorrect button size in the login screen. -- bao. + gTextureList.updateImages(0.01f) ; } if ( STATE_FIRST == LLStartUp::getStartupState() ) @@ -2158,10 +2158,6 @@ bool idle_startup() // lets create "Friends" and "Friends/All" in the Inventory "Calling Cards" and fill it with buddies LLFriendCardsManager::instance().syncFriendsFolder(); - llinfos << "Setting Inventory changed mask and notifying observers" << llendl; - gInventory.addChangedMask(LLInventoryObserver::ALL, LLUUID::null); - gInventory.notifyObservers(); - // set up callbacks llinfos << "Registering Callbacks" << llendl; LLMessageSystem* msg = gMessageSystem; diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index de3d80f044..5440b2c9ad 100644 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -214,7 +214,7 @@ void LLSurface::create(const S32 grids_per_edge, LLViewerTexture* LLSurface::getSTexture() { - if (mSTexturep.notNull() && !mSTexturep->hasValidGLTexture()) + if (mSTexturep.notNull() && !mSTexturep->hasGLTexture()) { createSTexture(); } @@ -223,7 +223,7 @@ LLViewerTexture* LLSurface::getSTexture() LLViewerTexture* LLSurface::getWaterTexture() { - if (mWaterTexturep.notNull() && !mWaterTexturep->hasValidGLTexture()) + if (mWaterTexturep.notNull() && !mWaterTexturep->hasGLTexture()) { createWaterTexture(); } @@ -235,6 +235,12 @@ void LLSurface::createSTexture() if (!mSTexturep) { // Fill with dummy gray data. + + //mSTexturep = LLViewerTextureManager::getLocalTexture(sTextureSize, sTextureSize, 3, FALSE); + //mSTexturep->dontDiscard(); + //mSTexturep->setAddressMode(LLTexUnit::TAM_CLAMP); + + // GL NOT ACTIVE HERE LLPointer<LLImageRaw> raw = new LLImageRaw(sTextureSize, sTextureSize, 3); U8 *default_texture = raw->getData(); for (S32 i = 0; i < sTextureSize; i++) @@ -270,7 +276,8 @@ void LLSurface::createWaterTexture() *(default_texture + (i*sTextureSize/2 + j)*4 + 2) = MAX_WATER_COLOR.mV[2]; *(default_texture + (i*sTextureSize/2 + j)*4 + 3) = MAX_WATER_COLOR.mV[3]; } - } + } + mWaterTexturep = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE); mWaterTexturep->dontDiscard(); gGL.getTexUnit(0)->bind(mWaterTexturep); @@ -1189,7 +1196,7 @@ F32 LLSurface::getWaterHeight() const BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y, const F32 width, const F32 height) { - if (!getWaterTexture() || !mWaterTexturep->hasGLTexture()) + if (!getWaterTexture()) { return FALSE; } @@ -1273,6 +1280,11 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y, } } + if (!mWaterTexturep->hasGLTexture()) + { + mWaterTexturep->createGLTexture(0, raw); + } + mWaterTexturep->setSubImage(raw, x_begin, y_begin, x_end - x_begin, y_end - y_begin); return TRUE; } diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 5fac5fd1e4..0ce794addb 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -712,17 +712,7 @@ BOOL LLSurfacePatch::updateTexture() if (mVObjp) { mVObjp->dirtyGeom(); - } - updateCompositionStats(); - F32 tex_patch_size = meters_per_grid*grids_per_patch_edge; - if (comp->generateTexture((F32)origin_region[VX], (F32)origin_region[VY], - tex_patch_size, tex_patch_size)) - { - mSTexUpdate = FALSE; - - // Also generate the water texture - mSurfacep->generateWaterTexture((F32)origin_region.mdV[VX], (F32)origin_region.mdV[VY], - tex_patch_size, tex_patch_size); + gPipeline.markGLRebuild(mVObjp); return TRUE; } } @@ -735,6 +725,28 @@ BOOL LLSurfacePatch::updateTexture() } } +void LLSurfacePatch::updateGL() +{ + F32 meters_per_grid = getSurface()->getMetersPerGrid(); + F32 grids_per_patch_edge = (F32)getSurface()->getGridsPerPatchEdge(); + + LLViewerRegion *regionp = getSurface()->getRegion(); + LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); + + LLVLComposition* comp = regionp->getComposition(); + + updateCompositionStats(); + F32 tex_patch_size = meters_per_grid*grids_per_patch_edge; + if (comp->generateTexture((F32)origin_region[VX], (F32)origin_region[VY], + tex_patch_size, tex_patch_size)) + { + mSTexUpdate = FALSE; + + // Also generate the water texture + mSurfacep->generateWaterTexture((F32)origin_region.mdV[VX], (F32)origin_region.mdV[VY], + tex_patch_size, tex_patch_size); + } +} void LLSurfacePatch::dirtyZ() { diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h index 4cac977305..ebfb64c1d8 100644 --- a/indra/newview/llsurfacepatch.h +++ b/indra/newview/llsurfacepatch.h @@ -90,6 +90,7 @@ public: void updateCameraDistanceRegion( const LLVector3 &pos_region); void updateVisibility(); + void updateGL(); void dirtyZ(); // Dirty the z values of this patch void setHasReceivedData(); diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h index b0ac13913e..6922eae0e1 100644 --- a/indra/newview/lltexlayer.h +++ b/indra/newview/lltexlayer.h @@ -193,7 +193,7 @@ public: void applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_components); void renderAlphaMaskTextures(S32 width, S32 height, bool forceClear = false); LLTexLayer* findLayerByName(std::string name); - + LLVOAvatarSelf* getAvatar() const { return mAvatar; } const std::string getBodyRegion() const; BOOL hasComposite() const { return (mComposite.notNull()); } diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index c9117a84a5..7a1ee95a65 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -94,7 +94,7 @@ void LLTexLayerParamAlpha::getCacheByteCount(S32* gl_bytes) { S32 bytes = (S32)tex->getWidth() * tex->getHeight() * tex->getComponents(); - if (tex->hasValidGLTexture()) + if (tex->hasGLTexture()) { *gl_bytes += bytes; } diff --git a/indra/newview/lltextureatlas.cpp b/indra/newview/lltextureatlas.cpp new file mode 100644 index 0000000000..79b3686386 --- /dev/null +++ b/indra/newview/lltextureatlas.cpp @@ -0,0 +1,422 @@ +/** + * @file lltextureatlas.cpp + * @brief LLTextureAtlas class implementation. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, 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 "linden_common.h" +#include "llerror.h" +#include "llimage.h" +#include "llmath.h" +#include "llgl.h" +#include "llrender.h" +#include "lltextureatlas.h" + +//------------------- +S16 LLTextureAtlas::sMaxSubTextureSize = 64 ; +S16 LLTextureAtlas::sSlotSize = 32 ; + +#ifndef DEBUG_ATLAS +#define DEBUG_ATLAS 0 +#endif + +#ifndef DEBUG_USAGE_BITS +#define DEBUG_USAGE_BITS 0 +#endif +//************************************************************************************************************** +LLTextureAtlas::LLTextureAtlas(U8 ncomponents, S16 atlas_dim) : + LLViewerTexture(atlas_dim * sSlotSize, atlas_dim * sSlotSize, ncomponents, TRUE), + mAtlasDim(atlas_dim), + mNumSlotsReserved(0), + mMaxSlotsInAtlas(atlas_dim * atlas_dim) +{ + generateEmptyUsageBits() ; + + //generate an empty texture + generateGLTexture() ; + LLPointer<LLImageRaw> image_raw = new LLImageRaw(mFullWidth, mFullHeight, mComponents); + createGLTexture(0, image_raw, 0); + image_raw = NULL; +} + +LLTextureAtlas::~LLTextureAtlas() +{ + if(mSpatialGroupList.size() > 0) + { + llerrs << "Not clean up the spatial groups!" << llendl ; + } + releaseUsageBits() ; +} + +//virtual +S8 LLTextureAtlas::getType() const +{ + return LLViewerTexture::ATLAS_TEXTURE ; +} + +void LLTextureAtlas::getTexCoordOffset(S16 col, S16 row, F32& xoffset, F32& yoffset) +{ + xoffset = (F32)col / mAtlasDim ; + yoffset = (F32)row / mAtlasDim ; +} + +void LLTextureAtlas::getTexCoordScale(S32 w, S32 h, F32& xscale, F32& yscale) +{ + xscale = (F32)w / (mAtlasDim * sSlotSize) ; + yscale = (F32)h / (mAtlasDim * sSlotSize) ; +} + +//insert a texture piece into the atlas +LLGLuint LLTextureAtlas::insertSubTexture(LLImageGL* source_gl_tex, S32 discard_level, const LLImageRaw* raw_image, S16 slot_col, S16 slot_row) +{ + if(!getTexName()) + { + return 0 ; + } + + S32 w = raw_image->getWidth() ; + S32 h = raw_image->getHeight() ; + if(w < 8 || w > sMaxSubTextureSize || h < 8 || h > sMaxSubTextureSize) + { + //size overflow + return 0 ; + } + + BOOL res = gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, getTexName()); + if (!res) + { + llerrs << "bindTexture failed" << llendl; + } + + GLint xoffset = sSlotSize * slot_col ; + GLint yoffset = sSlotSize * slot_row ; + + if(!source_gl_tex->preAddToAtlas(discard_level, raw_image)) + { + return 0 ; + } + + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, TRUE); + glTexSubImage2D(GL_TEXTURE_2D, 0, xoffset, yoffset, w, h, + mGLTexturep->getPrimaryFormat(), mGLTexturep->getFormatType(), raw_image->getData()); + + source_gl_tex->postAddToAtlas() ; + return getTexName(); +} + +//release a sub-texture slot from the atlas +void LLTextureAtlas::releaseSlot(S16 slot_col, S16 slot_row, S8 slot_width) +{ + unmarkUsageBits(slot_width, slot_col, slot_row) ; + mNumSlotsReserved -= slot_width * slot_width ; +} + +BOOL LLTextureAtlas::isEmpty() const +{ + return !mNumSlotsReserved ; +} + +BOOL LLTextureAtlas::isFull(S8 to_be_reserved) const +{ + return mNumSlotsReserved + to_be_reserved > mMaxSlotsInAtlas ; +} +F32 LLTextureAtlas::getFullness() const +{ + return (F32)mNumSlotsReserved / mMaxSlotsInAtlas ; +} + +void LLTextureAtlas::addSpatialGroup(LLSpatialGroup* groupp) +{ + if(groupp && !hasSpatialGroup(groupp)) + { + mSpatialGroupList.push_back(groupp); + } +} + +void LLTextureAtlas::removeSpatialGroup(LLSpatialGroup* groupp) +{ + if(groupp) + { + mSpatialGroupList.remove(groupp); + } +} + +void LLTextureAtlas::clearSpatialGroup() +{ + mSpatialGroupList.clear(); +} +void LLTextureAtlas::removeLastSpatialGroup() +{ + mSpatialGroupList.pop_back() ; +} + +LLSpatialGroup* LLTextureAtlas::getLastSpatialGroup() +{ + if(mSpatialGroupList.size() > 0) + { + return mSpatialGroupList.back() ; + } + return NULL ; +} + +BOOL LLTextureAtlas::hasSpatialGroup(LLSpatialGroup* groupp) +{ + for(std::list<LLSpatialGroup*>::iterator iter = mSpatialGroupList.begin(); iter != mSpatialGroupList.end() ; ++iter) + { + if(*iter == groupp) + { + return TRUE ; + } + } + return FALSE ; +} + +//-------------------------------------------------------------------------------------- +//private +void LLTextureAtlas::generateEmptyUsageBits() +{ + S32 col_len = (mAtlasDim + 7) >> 3 ; + mUsageBits = new U8*[mAtlasDim] ; + *mUsageBits = new U8[mAtlasDim * col_len] ; + + mUsageBits[0] = *mUsageBits ; + for(S32 i = 1 ; i < mAtlasDim ; i++) + { + mUsageBits[i] = mUsageBits[i-1] + col_len ; + + for(S32 j = 0 ; j < col_len ; j++) + { + //init by 0 for all bits. + mUsageBits[i][j] = 0 ; + } + } + + //do not forget mUsageBits[0]! + for(S32 j = 0 ; j < col_len ; j++) + { + //init by 0 for all bits. + mUsageBits[0][j] = 0 ; + } + + mTestBits = NULL ; +#if DEBUG_USAGE_BITS + //------------ + //test + mTestBits = new U8*[mAtlasDim] ; + *mTestBits = new U8[mAtlasDim * mAtlasDim] ; + mTestBits[0] = *mTestBits ; + for(S32 i = 1 ; i < mAtlasDim ; i++) + { + mTestBits[i] = mTestBits[i-1] + mAtlasDim ; + + for(S32 j = 0 ; j < mAtlasDim ; j++) + { + //init by 0 for all bits. + mTestBits[i][j] = 0 ; + } + } + + for(S32 j = 0 ; j < mAtlasDim ; j++) + { + //init by 0 for all bits. + mTestBits[0][j] = 0 ; + } +#endif +} + +void LLTextureAtlas::releaseUsageBits() +{ + if(mUsageBits) + { + delete[] *mUsageBits ; + delete[] mUsageBits ; + } + mUsageBits = NULL ; + + //test + if( mTestBits) + { + delete[] *mTestBits; + delete[] mTestBits; + } + mTestBits = NULL ; +} + +void LLTextureAtlas::markUsageBits(S8 bits_len, U8 mask, S16 col, S16 row) +{ + S16 x = col >> 3 ; + + for(S8 i = 0 ; i < bits_len ; i++) + { + mUsageBits[row + i][x] |= mask ; + } + +#if DEBUG_USAGE_BITS + //test + for(S8 i = row ; i < row + bits_len ; i++) + { + for(S8 j = col ; j < col + bits_len ; j++) + { + mTestBits[i][j] = 1 ; + } + } +#endif +} + +void LLTextureAtlas::unmarkUsageBits(S8 bits_len, S16 col, S16 row) +{ + S16 x = col >> 3 ; + U8 mask = 1 ; + for(S8 i = 1 ; i < bits_len ; i++) + { + mask |= (1 << i) ; + } + mask <<= (col & 7) ; + mask = ~mask ; + + for(S8 i = 0 ; i < bits_len ; i++) + { + mUsageBits[row + i][x] &= mask ; + } + +#if DEBUG_USAGE_BITS + //test + for(S8 i = row ; i < row + bits_len ; i++) + { + for(S8 j = col ; j < col + bits_len ; j++) + { + mTestBits[i][j] = 0 ; + } + } +#endif +} + +//return true if any of bits in the range marked. +BOOL LLTextureAtlas::areUsageBitsMarked(S8 bits_len, U8 mask, S16 col, S16 row) +{ + BOOL ret = FALSE ; + S16 x = col >> 3 ; + + for(S8 i = 0 ; i < bits_len ; i++) + { + if(mUsageBits[row + i][x] & mask) + { + ret = TRUE ; + break ; + //return TRUE ; + } + } + +#if DEBUG_USAGE_BITS + //test + BOOL ret2 = FALSE ; + for(S8 i = row ; i < row + bits_len ; i++) + { + for(S8 j = col ; j < col + bits_len ; j++) + { + if(mTestBits[i][j]) + { + ret2 = TRUE ; + } + } + } + + if(ret != ret2) + { + llerrs << "bits map corrupted." << llendl ; + } +#endif + return ret ;//FALSE ; +} + +//---------------------------------------------------------------------- +// +//index order: Z order, i.e.: +// |-----|-----|-----|-----| +// | 10 | 11 | 14 | 15 | +// |-----|-----|-----|-----| +// | 8 | 9 | 12 | 13 | +// |-----|-----|-----|-----| +// | 2 | 3 | 6 | 7 | +// |-----|-----|-----|-----| +// | 0 | 1 | 4 | 5 | +// |-----|-----|-----|-----| +void LLTextureAtlas::getPositionFromIndex(S16 index, S16& col, S16& row) +{ + col = 0 ; + row = 0 ; + + S16 index_copy = index ; + for(S16 i = 0 ; index_copy && i < 16 ; i += 2) + { + col |= ((index & (1 << i)) >> i) << (i >> 1) ; + row |= ((index & (1 << (i + 1))) >> (i + 1)) << (i >> 1) ; + index_copy >>= 2 ; + } +} +void LLTextureAtlas::getIndexFromPosition(S16 col, S16 row, S16& index) +{ + index = 0 ; + S16 col_copy = col ; + S16 row_copy = row ; + for(S16 i = 0 ; (col_copy || row_copy) && i < 16 ; i++) + { + index |= ((col & 1 << i) << i) | ((row & 1 << i) << ( i + 1)) ; + col_copy >>= 1 ; + row_copy >>= 1 ; + } +} +//---------------------------------------------------------------------- +//return TRUE if succeeds. +BOOL LLTextureAtlas::getNextAvailableSlot(S8 bits_len, S16& col, S16& row) +{ + S16 index_step = bits_len * bits_len ; + + U8 mask = 1 ; + for(S8 i = 1 ; i < bits_len ; i++) + { + mask |= (1 << i) ; + } + + U8 cur_mask ; + for(S16 index = 0 ; index < mMaxSlotsInAtlas ; index += index_step) + { + getPositionFromIndex(index, col, row) ; + + cur_mask = mask << (col & 7) ; + if(!areUsageBitsMarked(bits_len, cur_mask, col, row)) + { + markUsageBits(bits_len, cur_mask, col, row) ; + mNumSlotsReserved += bits_len * bits_len ; + + return TRUE ; + } + } + + return FALSE ; +} diff --git a/indra/newview/lltextureatlas.h b/indra/newview/lltextureatlas.h new file mode 100644 index 0000000000..1f756ccf1a --- /dev/null +++ b/indra/newview/lltextureatlas.h @@ -0,0 +1,95 @@ +/** + * @file lltextureatlas.h + * @brief LLTextureAtlas base class. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, 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_TEXTUREATLAS_H +#define LL_TEXTUREATLAS_H + +#include "llviewertexture.h" +class LLSpatialGroup ; + +class LLTextureAtlas : public LLViewerTexture +{ +protected: + /*virtual*/ ~LLTextureAtlas() ; + +public: + LLTextureAtlas(U8 ncomponents, S16 atlas_dim = 16) ; + + /*virtual*/ S8 getType() const; + + LLGLuint insertSubTexture(LLImageGL* source_gl_tex, S32 discard_level, const LLImageRaw* raw_image, S16 slot_col, S16 slot_row) ; + void releaseSlot(S16 slot_col, S16 slot_row, S8 slot_width); + + BOOL getNextAvailableSlot(S8 bits_len, S16& col, S16& row) ; + void getTexCoordOffset(S16 col, S16 row, F32& xoffset, F32& yOffset) ; + void getTexCoordScale(S32 w, S32 h, F32& xscale, F32& yscale) ; + + BOOL isEmpty() const ; + BOOL isFull(S8 to_be_reserved = 1) const ; + F32 getFullness() const ; + + void addSpatialGroup(LLSpatialGroup* groupp) ; + void removeSpatialGroup(LLSpatialGroup* groupp) ; + LLSpatialGroup* getLastSpatialGroup() ; + void removeLastSpatialGroup() ; + BOOL hasSpatialGroup(LLSpatialGroup* groupp) ; + void clearSpatialGroup() ; + std::list<LLSpatialGroup*>* getSpatialGroupList() {return &mSpatialGroupList;} +private: + void generateEmptyUsageBits() ; + void releaseUsageBits() ; + + void markUsageBits(S8 bits_len, U8 mask, S16 col, S16 row) ; + void unmarkUsageBits(S8 bits_len, S16 col, S16 row) ; + + void getPositionFromIndex(S16 index, S16& col, S16& row) ; + void getIndexFromPosition(S16 col, S16 row, S16& index) ; + BOOL areUsageBitsMarked(S8 bits_len, U8 mask, S16 col, S16 row) ; + +private: + S16 mAtlasDim ; //number of slots per edge, i.e, there are "mAtlasDim * mAtlasDim" total slots in the atlas. + S16 mNumSlotsReserved ; + S16 mMaxSlotsInAtlas ; + U8 **mUsageBits ; + std::list<LLSpatialGroup*> mSpatialGroupList ; + +public: + //debug use only + U8 **mTestBits ; + +public: + static S16 sMaxSubTextureSize ; + static S16 sSlotSize ; +}; + +#endif + diff --git a/indra/newview/lltextureatlasmanager.cpp b/indra/newview/lltextureatlasmanager.cpp new file mode 100644 index 0000000000..8f026787ca --- /dev/null +++ b/indra/newview/lltextureatlasmanager.cpp @@ -0,0 +1,273 @@ +/** + * @file lltextureatlasmanager.cpp + * @brief LLTextureAtlasManager class implementation. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, 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 "linden_common.h" +#include "llerror.h" +#include "llmath.h" +#include "lltextureatlas.h" +#include "lltextureatlasmanager.h" +#include "llspatialpartition.h" + +const S8 MAX_NUM_EMPTY_ATLAS = 2 ; +const F32 MIN_ATLAS_FULLNESS = 0.6f ; + +//********************************************************************************************* +//implementation of class LLTextureAtlasInfo +//********************************************************************************************* +LLTextureAtlasSlot::LLTextureAtlasSlot(LLTextureAtlas* atlasp, LLSpatialGroup* groupp, S16 col, S16 row, F32 xoffset, F32 yoffset, S8 slot_width) : + mAtlasp(atlasp), + mGroupp(groupp), + mCol(col), + mRow(row), + mReservedSlotWidth(slot_width), + mValid(FALSE), + mUpdatedTime(0), + mTexCoordOffset(xoffset, yoffset), + mTexCoordScale(1.f, 1.f) +{ + llassert_always(mAtlasp || mGroupp || mReservedSlotWidth) ; +} + +LLTextureAtlasSlot::~LLTextureAtlasSlot() +{ + if(mAtlasp) + { + mAtlasp->releaseSlot(mCol, mRow, mReservedSlotWidth) ; + if(mAtlasp->isEmpty()) + { + LLTextureAtlasManager::getInstance()->releaseAtlas(mAtlasp) ; + } + mAtlasp = NULL ; + } +} + +//void LLTextureAtlasSlot::setAtlas(LLTextureAtlas* atlasp) +//{ +// mAtlasp = atlasp ; +//} +//void LLTextureAtlasSlot::setSlotPos(S16 col, S16 row) +//{ +// mCol = col ; +// mRow = row ; +//} +//void LLTextureAtlasSlot::setSlotWidth(S8 width) +//{ +// //slot is a square with each edge length a power-of-two number +// mReservedSlotWidth = width ; +//} +//void LLTextureAtlasSlot::setTexCoordOffset(F32 xoffset, F32 yoffset) +//{ +// mTexCoordOffset.mV[0] = xoffset ; +// mTexCoordOffset.mV[1] = yoffset ; +//} + +void LLTextureAtlasSlot::setSpatialGroup(LLSpatialGroup* groupp) +{ + mGroupp = groupp ; +} +void LLTextureAtlasSlot::setTexCoordScale(F32 xscale, F32 yscale) +{ + mTexCoordScale.mV[0] = xscale ; + mTexCoordScale.mV[1] = yscale ; +} +//********************************************************************************************* +//END of implementation of class LLTextureAtlasInfo +//********************************************************************************************* + +//********************************************************************************************* +//implementation of class LLTextureAtlasManager +//********************************************************************************************* +LLTextureAtlasManager::LLTextureAtlasManager() : + mAtlasMap(4), + mEmptyAtlasMap(4) +{ +} + +LLTextureAtlasManager::~LLTextureAtlasManager() +{ + for(S32 i = 0 ; i < 4 ; i++) + { + for(ll_texture_atlas_list_t::iterator j = mAtlasMap[i].begin() ; j != mAtlasMap[i].end() ; ++j) + { + *j = NULL ; + } + for(ll_texture_atlas_list_t::iterator j = mEmptyAtlasMap[i].begin() ; j != mEmptyAtlasMap[i].end() ; ++j) + { + *j = NULL ; + } + + mAtlasMap[i].clear() ; + mEmptyAtlasMap[i].clear() ; + } + mAtlasMap.clear() ; + mEmptyAtlasMap.clear() ; +} + +//return TRUE if qualified +BOOL LLTextureAtlasManager::canAddToAtlas(S32 w, S32 h, S8 ncomponents, LLGLenum target) +{ + if(ncomponents < 1 || ncomponents > 4) + { + return FALSE ; + } + //only support GL_TEXTURE_2D + if(GL_TEXTURE_2D != target) + { + return FALSE ; + } + //real image size overflows + if(w < 8 || w > LLTextureAtlas::sMaxSubTextureSize || h < 8 || h > LLTextureAtlas::sMaxSubTextureSize) + { + return FALSE ; + } + + //if non-power-of-two number + if((w & (w - 1)) || (h & (h - 1))) + { + return FALSE ; + } + + return TRUE ; +} + +void LLTextureAtlasManager::releaseAtlas(LLTextureAtlas* atlasp) +{ + LLSpatialGroup* groupp = atlasp->getLastSpatialGroup() ; + while(groupp) + { + groupp->removeAtlas(atlasp, FALSE) ; + atlasp->removeLastSpatialGroup() ; + + groupp = atlasp->getLastSpatialGroup() ; + } + + S8 type = atlasp->getComponents() - 1 ; + //insert to the empty list + if(mEmptyAtlasMap[type].size() < MAX_NUM_EMPTY_ATLAS) + { + mEmptyAtlasMap[type].push_back(atlasp) ; + } + + //delete the atlasp + mAtlasMap[type].remove(atlasp) ; +} + +// +//this function reserves an appropriate slot from atlas pool for an image. +//return non-NULL if succeeds. +//Note: +//1, this function does not check if the image this slot assigned for qualifies for atlas or not, +// call LLTextureAtlasManager::canAddToAtlas(...) to do the check before calling this function. +//2, this function also dose not check if the image is already in atlas. It always assigns a new slot anyway. +//3, this function tries to group sub-textures from same spatial group into ONE atlas to improve render batching. +// +LLPointer<LLTextureAtlasSlot> LLTextureAtlasManager::reserveAtlasSlot(S32 sub_texture_size, S8 ncomponents, + LLSpatialGroup* groupp, LLViewerTexture* imagep) +{ + if(!groupp) + { + //do not insert to atlas if does not have a group. + return NULL ; + } + + //bits_len must <= 8 and is a power of two number, i.e.: must be one of these numbers: 1, 2, 4, 8. + if(sub_texture_size > LLTextureAtlas::sMaxSubTextureSize) + { + sub_texture_size = LLTextureAtlas::sMaxSubTextureSize ; + } + S8 bits_len = sub_texture_size / LLTextureAtlas::sSlotSize ; + if(bits_len < 1) + { + bits_len = 1 ; + } + + S16 col = -1, row = -1; + S8 total_bits = bits_len * bits_len ; + + //insert to the atlas reserved by the same spatial group + LLPointer<LLTextureAtlas> atlasp = groupp->getAtlas(ncomponents, total_bits) ; + if(atlasp.notNull()) + { + if(!atlasp->getNextAvailableSlot(bits_len, col, row)) + { + //failed + atlasp = NULL ; + } + } + + //search an atlas to fit for 'size' + if(!atlasp) + { + S8 atlas_index = ncomponents - 1 ; + ll_texture_atlas_list_t::iterator iter = mAtlasMap[atlas_index].begin() ; + for(; iter != mAtlasMap[atlas_index].end(); ++iter) + { + LLTextureAtlas* cur = (LLTextureAtlas*)*iter ; + if(cur->getFullness() < MIN_ATLAS_FULLNESS)//this atlas is empty enough for this group to insert more sub-textures later if necessary. + { + if(cur->getNextAvailableSlot(bits_len, col, row)) + { + atlasp = cur ; + groupp->addAtlas(atlasp) ; + break ; + } + } + } + } + + //create a new atlas if necessary + if(!atlasp) + { + if(mEmptyAtlasMap[ncomponents - 1].size() > 0) + { + //there is an empty one + atlasp = mEmptyAtlasMap[ncomponents - 1].back() ; + mEmptyAtlasMap[ncomponents - 1].pop_back() ; + } + else + { + atlasp = new LLTextureAtlas(ncomponents, 16) ; + } + mAtlasMap[ncomponents - 1].push_back(atlasp) ; + atlasp->getNextAvailableSlot(bits_len, col, row) ; + groupp->addAtlas(atlasp) ; + } + + F32 xoffset, yoffset ; + atlasp->getTexCoordOffset(col, row, xoffset, yoffset) ; + LLPointer<LLTextureAtlasSlot> slot_infop = new LLTextureAtlasSlot(atlasp, groupp, col, row, xoffset, yoffset, bits_len) ; + + return slot_infop ; +} + +//********************************************************************************************* +//END of implementation of class LLTextureAtlasManager +//********************************************************************************************* diff --git a/indra/newview/lltextureatlasmanager.h b/indra/newview/lltextureatlasmanager.h new file mode 100644 index 0000000000..4dba0759f9 --- /dev/null +++ b/indra/newview/lltextureatlasmanager.h @@ -0,0 +1,111 @@ +/** + * @file lltextureatlasmanager.h + * @brief LLTextureAtlasManager base class. + * + * $LicenseInfo:firstyear=2002&license=viewergpl$ + * + * Copyright (c) 2002-2009, 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_TEXTUREATLASMANAGER_H +#define LL_TEXTUREATLASMANAGER_H + +#include "llmemory.h" + +class LLSpatialGroup ; +class LLViewerTexture ; + +//just use it as a structure. +class LLTextureAtlasSlot : public LLRefCount +{ +public: + LLTextureAtlasSlot(LLTextureAtlas* atlasp, LLSpatialGroup* groupp, S16 col, S16 row, F32 xoffset, F32 yoffset, S8 slot_width) ; + +protected: + virtual ~LLTextureAtlasSlot(); + +public: + + // + //do not allow to change those values + // + //void setAtlas(LLTextureAtlas* atlasp) ; + //void setSlotPos(S16 col, S16 row) ; + //void setSlotWidth(S8 width) ; + //void setTexCoordOffset(F32 xoffser, F32 yoffset) ; + // + + void setSpatialGroup(LLSpatialGroup* groupp) ; + void setTexCoordScale(F32 xscale, F32 yscale) ; + void setValid() {mValid = TRUE ;} + + LLTextureAtlas* getAtlas()const {return mAtlasp;} + LLSpatialGroup* getSpatialGroup() const {return mGroupp ;} + S16 getSlotCol()const {return mCol;} + S16 getSlotRow()const {return mRow;} + S8 getSlotWidth()const{return mReservedSlotWidth;} + BOOL isValid()const { return mValid;} + const LLVector2* getTexCoordOffset()const {return &mTexCoordOffset;} + const LLVector2* getTexCoordScale() const {return &mTexCoordScale;} + + void setUpdatedTime(U32 t) {mUpdatedTime = t;} + U32 getUpdatedTime()const {return mUpdatedTime;} + +private: + LLTextureAtlas* mAtlasp; + S16 mCol ;//col of the slot + S16 mRow ;//row of the slot + S8 mReservedSlotWidth ; //slot is a square with each edge length a power-of-two number + LLSpatialGroup* mGroupp ; + BOOL mValid ; + + LLVector2 mTexCoordOffset ; + LLVector2 mTexCoordScale ; + + U32 mUpdatedTime ; +} ; + +class LLTextureAtlasManager : public LLSingleton<LLTextureAtlasManager> +{ +private: + typedef std::list<LLPointer<LLTextureAtlas> > ll_texture_atlas_list_t ; + +public: + LLTextureAtlasManager(); + ~LLTextureAtlasManager(); + + LLPointer<LLTextureAtlasSlot> reserveAtlasSlot(S32 sub_texture_size, S8 ncomponents, + LLSpatialGroup* groupp, LLViewerTexture* imagep) ; + void releaseAtlas(LLTextureAtlas* atlasp); + + BOOL canAddToAtlas(S32 w, S32 h, S8 ncomponents, LLGLenum target) ; + +private: + std::vector<ll_texture_atlas_list_t> mAtlasMap ; + std::vector<ll_texture_atlas_list_t> mEmptyAtlasMap ; //delay some empty atlases deletion to avoid possible creation of new atlas immediately. +}; + +#endif diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 9da2446354..ea675c5a6e 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -56,6 +56,7 @@ extern F32 texmem_lower_bound_scale; LLTextureView *gTextureView = NULL; +LLTextureSizeView *gTextureSizeView = NULL; //static std::set<LLViewerFetchedTexture*> LLTextureView::sDebugImages; @@ -315,7 +316,7 @@ void LLTextureBar::draw() pip_x += pip_width + pip_space; // we don't want to show bind/resident pips for textures using the default texture - if (mImagep->hasValidGLTexture()) + if (mImagep->hasGLTexture()) { // Draw the bound pip last_event = mImagep->getTimePassedSinceLastBound(); @@ -536,6 +537,73 @@ LLRect LLGLTexMemBar::getRequiredRect() } //////////////////////////////////////////////////////////////////////////// +class LLGLTexSizeBar +{ +public: + LLGLTexSizeBar(S32 index, S32 left, S32 bottom, S32 right, S32 line_height) + { + mIndex = index ; + mLeft = left ; + mBottom = bottom ; + mRight = right ; + mLineHeight = line_height ; + mTopLoaded = 0 ; + mTopBound = 0 ; + mScale = 1.0f ; + } + + void setTop(S32 loaded, S32 bound, F32 scale) {mTopLoaded = loaded ; mTopBound = bound; mScale = scale ;} + + void draw(); + BOOL handleHover(S32 x, S32 y, MASK mask) ; + +private: + S32 mIndex ; + S32 mLeft ; + S32 mBottom ; + S32 mRight ; + S32 mTopLoaded ; + S32 mTopBound ; + S32 mLineHeight ; + F32 mScale ; +}; + +BOOL LLGLTexSizeBar::handleHover(S32 x, S32 y, MASK mask) +{ +#if !LL_RELEASE_FOR_DOWNLOAD + if(y > mBottom && (y < mBottom + (S32)(mTopLoaded * mScale) || y < mBottom + (S32)(mTopBound * mScale))) + { + LLImageGL::setCurTexSizebar(mIndex); + } +#endif + return TRUE ; +} +void LLGLTexSizeBar::draw() +{ +#if !LL_RELEASE_FOR_DOWNLOAD + LLGLSUIDefault gls_ui; + + if(LLImageGL::sCurTexSizeBar == mIndex) + { + F32 text_color[] = {1.f, 1.f, 1.f, 0.75f}; + std::string text; + + text = llformat("%d", mTopLoaded) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, mLeft, mBottom + (S32)(mTopLoaded * mScale) + mLineHeight, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + + text = llformat("%d", mTopBound) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, (mLeft + mRight) / 2, mBottom + (S32)(mTopBound * mScale) + mLineHeight, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + } + + F32 loaded_color[] = {1.0f, 0.0f, 0.0f, 0.75f}; + F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f}; + gl_rect_2d(mLeft, mBottom + (S32)(mTopLoaded * mScale), (mLeft + mRight) / 2, mBottom, loaded_color) ; + gl_rect_2d((mLeft + mRight) / 2, mBottom + (S32)(mTopBound * mScale), mRight, mBottom, bound_color) ; +#endif +} +//////////////////////////////////////////////////////////////////////////// LLTextureView::LLTextureView(const LLTextureView::Params& p) : LLContainerView(p), @@ -820,4 +888,163 @@ BOOL LLTextureView::handleKey(KEY key, MASK mask, BOOL called_from_parent) return FALSE; } +//----------------------------------------------------------------- +LLTextureSizeView::LLTextureSizeView(const LLTextureSizeView::Params& p) + : LLView(p) +{ + setVisible(FALSE) ; + + mTextureSizeBarWidth = 30 ; +} + +LLTextureSizeView::~LLTextureSizeView() +{ + if(mTextureSizeBar.size()) + { + for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++) + { + delete mTextureSizeBar[i] ; + } + mTextureSizeBar.clear() ; + } +} +void LLTextureSizeView::draw() +{ +#if !LL_RELEASE_FOR_DOWNLOAD + if(mTextureSizeBar.size() == 0) + { + S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + mTextureSizeBar.resize(LLImageGL::sTextureLoadedCounter.size()) ; + mTextureSizeBarRect.set(700, line_height * 2 + 400, 700 + mTextureSizeBar.size() * mTextureSizeBarWidth, line_height * 2) ; + + for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++) + { + mTextureSizeBar[i] = new LLGLTexSizeBar(i, mTextureSizeBarRect.mLeft + i * mTextureSizeBarWidth , + line_height * 2, mTextureSizeBarRect.mLeft + (i + 1) * mTextureSizeBarWidth, line_height) ; + } + } + + F32 size_bar_scale = drawTextureSizeDistributionGraph() ; + for(U32 i = 0 ; i < mTextureSizeBar.size() ; i++) + { + mTextureSizeBar[i]->setTop(LLImageGL::sTextureLoadedCounter[i], LLImageGL::sTextureBoundCounter[i], size_bar_scale) ; + mTextureSizeBar[i]->draw() ; + } + LLImageGL::resetCurTexSizebar(); + + LLView::draw(); +#endif +} + +BOOL LLTextureSizeView::handleHover(S32 x, S32 y, MASK mask) +{ + if(x > mTextureSizeBarRect.mLeft && x < mTextureSizeBarRect.mRight) + { + mTextureSizeBar[(x - mTextureSizeBarRect.mLeft) / mTextureSizeBarWidth]->handleHover(x, y, mask) ; + } + + return TRUE ; +} + +//draw background of texture size bar graph +F32 LLTextureSizeView::drawTextureSizeDistributionGraph() +{ + F32 scale = 1.0f ; +#if !LL_RELEASE_FOR_DOWNLOAD + LLGLSUIDefault gls_ui; + + //scale + { + S32 count = 0 ; + for(U32 i = 0 ; i < LLImageGL::sTextureLoadedCounter.size() ; i++) + { + if(LLImageGL::sTextureLoadedCounter[i] > count) + { + count = LLImageGL::sTextureLoadedCounter[i] ; + } + } + if(count > mTextureSizeBarRect.getHeight()) + { + scale = (F32)mTextureSizeBarRect.getHeight() / count ; + } + } + + S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); + S32 left = mTextureSizeBarRect.mLeft ; + S32 bottom = mTextureSizeBarRect.mBottom ; + S32 right = mTextureSizeBarRect.mRight ; + S32 top = mTextureSizeBarRect.mTop ; + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + + //background rect + gl_rect_2d(left - 25, top + 30, right + 100, bottom - 25, LLColor4(0.0f, 0.0f, 0.0f, 0.25f)) ; + + //-------------------------------------------------- + gGL.color4f(1.0f, 0.5f, 0.5f, 0.75f); + gl_line_2d(left, bottom, right, bottom) ; //x axis + gl_line_2d(left, bottom, left, top) ; //y axis + + //ruler + //-------------------------------------------------- + gGL.color4f(1.0f, 0.5f, 0.5f, 0.5f); + for(S32 i = bottom + 50 ; i <= top ; i += 50) + { + gl_line_2d(left, i, right, i) ; + } + + //texts + //-------------------------------------------------- + F32 text_color[] = {1.f, 1.f, 1.f, 0.75f}; + std::string text; + + //------- + //x axis: size label + text = llformat("%d", 0) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 12, bottom - line_height / 2, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + for(U32 i = 1 ; i < mTextureSizeBar.size() ; i++) + { + text = llformat("%d", (1 << (i / 2)) + ((i & 1) ? ((1 << (i / 2)) >> 1) : 0)) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + i * mTextureSizeBarWidth + 12, bottom - line_height / 2, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + } + text = llformat("(w + h)/2") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, right + 10, bottom - line_height / 2, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + //------- + + //y axis: number label + for(S32 i = bottom + 50 ; i <= top ; i += 50) + { + text = llformat("%d", (S32)((i - bottom) / scale)) ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left - 20, i + line_height / 2 , + text_color, LLFontGL::LEFT, LLFontGL::TOP); + LLFontGL::getFontMonospace()->renderUTF8(text, 0, right + 5, i + line_height / 2 , + text_color, LLFontGL::LEFT, LLFontGL::TOP); + } + + //-------------------------------------------------- + F32 loaded_color[] = {1.0f, 0.0f, 0.0f, 0.75f}; + gl_rect_2d(left + 70, top + line_height * 2, left + 90, top + line_height, loaded_color) ; + text = llformat("Loaded") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 100, top + line_height * 2, + loaded_color, LLFontGL::LEFT, LLFontGL::TOP); + + F32 bound_color[] = {1.0f, 1.0f, 0.0f, 0.75f}; + gl_rect_2d(left + 170, top + line_height * 2, left + 190, top + line_height, bound_color) ; + text = llformat("Bound") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 200, top + line_height * 2, + bound_color, LLFontGL::LEFT, LLFontGL::TOP); + + //-------------------------------------------------- + + //title + text = llformat("Texture Size Distribution") ; + LLFontGL::getFontMonospace()->renderUTF8(text, 0, left + 250, top + line_height * 3, + text_color, LLFontGL::LEFT, LLFontGL::TOP); + +#endif + return scale ; +} diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h index 20be17aef4..e917c0235e 100644 --- a/indra/newview/lltextureview.h +++ b/indra/newview/lltextureview.h @@ -78,5 +78,25 @@ public: static std::set<LLViewerFetchedTexture*> sDebugImages; }; +class LLGLTexSizeBar; + +class LLTextureSizeView : public LLView +{ +public: + LLTextureSizeView(const Params&); + ~LLTextureSizeView(); + + /*virtual*/ void draw(); + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) ; + +private: + F32 drawTextureSizeDistributionGraph() ; + +private: + std::vector<LLGLTexSizeBar*> mTextureSizeBar ; + LLRect mTextureSizeBarRect ; + S32 mTextureSizeBarWidth ; +}; extern LLTextureView *gTextureView; +extern LLTextureSizeView *gTextureSizeView; #endif // LL_TEXTURE_VIEW_H diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp index 8accf6babf..53d71a42cf 100644 --- a/indra/newview/lltoolgun.cpp +++ b/indra/newview/lltoolgun.cpp @@ -140,7 +140,7 @@ void LLToolGun::draw() { LLUIImagePtr crosshair = LLUI::getUIImage("crosshairs.tga"); crosshair->draw( - ( gViewerWindow->getWorldViewWidth() - crosshair->getWidth() ) / 2, - ( gViewerWindow->getWorldViewHeight() - crosshair->getHeight() ) / 2); + ( gViewerWindow->getVirtualWorldViewRect().getWidth() - crosshair->getWidth() ) / 2, + ( gViewerWindow->getVirtualWorldViewRect().getHeight() - crosshair->getHeight() ) / 2); } } diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index d6297c30c7..5c210c5c28 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -210,8 +210,8 @@ BOOL LLToolPie::pickLeftMouseDownCallback() } // else nothing (fall through to touch) case CLICK_ACTION_PAY: - if (object && object->flagTakesMoney() - || parent && parent->flagTakesMoney()) + if ((object && object->flagTakesMoney()) + || (parent && parent->flagTakesMoney())) { // pay event goes to object actually clicked on mClickActionObject = object; diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index be6e539ffd..328653d2b8 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -74,13 +74,12 @@ public: static void selectionPropertiesReceived(); static void showAvatarInspector(const LLUUID& id); - private: BOOL outsideSlop (S32 x, S32 y, S32 start_x, S32 start_y); BOOL pickLeftMouseDownCallback(); BOOL pickRightMouseDownCallback(); BOOL useClickAction (MASK mask, LLViewerObject* object,LLViewerObject* parent); - + void showVisualContextMenuEffect(); private: BOOL mGrabMouseButtonDown; @@ -90,6 +89,7 @@ private: LLPointer<LLViewerObject> mClickActionObject; U8 mClickAction; LLSafeHandle<LLObjectSelection> mLeftClickSelection; + }; diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 3f3c10a7c7..ee6ef6ffee 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -56,6 +56,8 @@ // System includes #include <iomanip> // for setprecision +U32 LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; + //glu pick matrix implementation borrowed from Mesa3D glh::matrix4f gl_pick_matrix(GLfloat x, GLfloat y, GLfloat width, GLfloat height, GLint* viewport) { @@ -779,8 +781,8 @@ BOOL LLViewerCamera::areVertsVisible(LLViewerObject* volumep, BOOL all_verts) BOOL in_frustum = pointInFrustum(LLVector3(vec)) > 0; - if ( !in_frustum && all_verts || - in_frustum && !all_verts) + if (( !in_frustum && all_verts) || + (in_frustum && !all_verts)) { return !all_verts; } diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index b99dd39584..90b77f771f 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -55,6 +55,24 @@ const BOOL NOT_FOR_SELECTION = FALSE; class LLViewerCamera : public LLCamera, public LLSingleton<LLViewerCamera> { public: + + typedef enum + { + CAMERA_WORLD = 0, + CAMERA_SHADOW0, + CAMERA_SHADOW1, + CAMERA_SHADOW2, + CAMERA_SHADOW3, + CAMERA_SHADOW4, + CAMERA_SHADOW5, + CAMERA_WATER0, + CAMERA_WATER1, + CAMERA_GI_SOURCE, + NUM_CAMERAS + } eCameraID; + + static U32 sCurCameraID; + LLViewerCamera(); void updateCameraLocation(const LLVector3 ¢er, diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index be832ebe32..b888560fc7 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -493,6 +493,8 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderAnimateTrees")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); + gSavedSettings.getControl("RenderUIBuffer")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); + gSavedSettings.getControl("RenderShadowResolutionScale")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); @@ -523,6 +525,8 @@ void settings_setup_listeners() gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2)); gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2)); gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); + gSavedSettings.getControl("RenderDeferredShadow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); + gSavedSettings.getControl("RenderDeferredGI")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _2)); gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _2)); gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _2)); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 6d2482d3f0..a6a72e9666 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -125,6 +125,11 @@ void display_startup() return; } + gPipeline.updateGL(); + + // Update images? + //gImageList.updateImages(0.01f); + LLGLSDefault gls_default; // Required for HTML update in login screen @@ -558,6 +563,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) stop_glerror(); } + gPipeline.updateGL(); + stop_glerror(); + S32 water_clip = 0; if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_ENVIRONMENT) > 1) && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_WATER)) @@ -606,6 +614,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLGLState::checkClientArrays(); static LLCullResult result; + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip); stop_glerror(); @@ -647,6 +656,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) gPipeline.generateSunShadow(*LLViewerCamera::getInstance()); } + LLVertexBuffer::unbind(); + LLGLState::checkStates(); LLGLState::checkTextureChannels(); LLGLState::checkClientArrays(); @@ -678,6 +689,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) LLMemType mt_gw(LLMemType::MTYPE_DISPLAY_GEN_REFLECTION); LLAppViewer::instance()->pingMainloopTimeout("Display:Imagery"); gPipeline.generateWaterReflection(*LLViewerCamera::getInstance()); + gPipeline.generateHighlight(*LLViewerCamera::getInstance()); } ////////////////////////////////////// @@ -702,6 +714,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) const F32 max_image_decode_time = llmin(0.005f, 0.005f*10.f*gFrameIntervalSeconds); // 50 ms/second decode time (no more than 5ms/frame) gTextureList.updateImages(max_image_decode_time); + + //remove dead textures from GL + LLImageGL::deleteDeadTextures(); stop_glerror(); } llpushcallstacks ; @@ -715,6 +730,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) // LLAppViewer::instance()->pingMainloopTimeout("Display:StateSort"); { + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; LLMemType mt_ss(LLMemType::MTYPE_DISPLAY_STATE_SORT); gPipeline.stateSort(*LLViewerCamera::getInstance(), result); stop_glerror(); @@ -797,6 +813,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender) { gPipeline.mDeferredScreen.bindTarget(); + glClearColor(0,0,0,0); gPipeline.mDeferredScreen.clear(); } else @@ -813,6 +830,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot()) && !gRestoreGL) { + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; LLMemType mt_rg(LLMemType::MTYPE_DISPLAY_RENDER_GEOM); gGL.setColorMask(true, false); if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender) @@ -831,6 +849,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) for (U32 i = 0; i < 16; i++) { gGLLastModelView[i] = gGLModelView[i]; + gGLLastProjection[i] = gGLProjection[i]; } stop_glerror(); } @@ -870,6 +889,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) render_ui(); } + gPipeline.rebuildGroups(); + LLSpatialGroup::sNoDelete = FALSE; } @@ -944,6 +965,7 @@ void render_hud_attachments() static LLCullResult result; LLSpatialGroup::sNoDelete = TRUE; + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; gPipeline.updateCull(hud_cam, result); gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_BUMP); @@ -951,6 +973,15 @@ void render_hud_attachments() gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_VOLUME); gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_ALPHA); gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_FULLBRIGHT); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_BUMP); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_SHINY); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_INVISIBLE); + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY); gPipeline.stateSort(hud_cam, result); @@ -1259,7 +1290,73 @@ void render_ui_2d() glPopMatrix(); stop_glerror(); } - gViewerWindow->draw(); + + + if (gSavedSettings.getBOOL("RenderUIBuffer")) + { + if (LLUI::sDirty) + { + LLUI::sDirty = FALSE; + LLRect t_rect; + + gPipeline.mUIScreen.bindTarget(); + gGL.setColorMask(true, true); + { + static const S32 pad = 8; + + LLUI::sDirtyRect.mLeft -= pad; + LLUI::sDirtyRect.mRight += pad; + LLUI::sDirtyRect.mBottom -= pad; + LLUI::sDirtyRect.mTop += pad; + + LLGLEnable scissor(GL_SCISSOR_TEST); + static LLRect last_rect = LLUI::sDirtyRect; + + //union with last rect to avoid mouse poop + last_rect.unionWith(LLUI::sDirtyRect); + + t_rect = LLUI::sDirtyRect; + LLUI::sDirtyRect = last_rect; + last_rect = t_rect; + + last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / LLUI::sGLScaleFactor.mV[0]); + last_rect.mRight = LLRect::tCoordType(last_rect.mRight / LLUI::sGLScaleFactor.mV[0]); + last_rect.mTop = LLRect::tCoordType(last_rect.mTop / LLUI::sGLScaleFactor.mV[1]); + last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / LLUI::sGLScaleFactor.mV[1]); + + LLRect clip_rect(last_rect); + + glClear(GL_COLOR_BUFFER_BIT); + + gViewerWindow->draw(); + } + + gPipeline.mUIScreen.flush(); + gGL.setColorMask(true, false); + + LLUI::sDirtyRect = t_rect; + + } + + LLGLDisable cull(GL_CULL_FACE); + LLGLDisable blend(GL_BLEND); + S32 width = gViewerWindow->getWindowWidth(); + S32 height = gViewerWindow->getWindowHeight(); + gGL.getTexUnit(0)->bind(&gPipeline.mUIScreen); + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.color4f(1,1,1,1); + gGL.texCoord2f(0, 0); gGL.vertex2i(0, 0); + gGL.texCoord2f(width, 0); gGL.vertex2i(width, 0); + gGL.texCoord2f(0, height); gGL.vertex2i(0, height); + gGL.texCoord2f(width, height); gGL.vertex2i(width, height); + gGL.end(); + } + else + { + gViewerWindow->draw(); + } + + // reset current origin for font rendering, in case of tiling render LLFontGL::sCurOrigin.set(0, 0); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 1fc387027d..441d0ebeaa 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -124,7 +124,8 @@ void LLViewerFloaterReg::registerFloaters() { // *NOTE: Please keep these alphabetized for easier merges - + + LLFloaterAboutUtil::registerFloater(); LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>); LLFloaterReg::add("active_speakers", "floater_active_speakers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterActiveSpeakers>); LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>); @@ -225,7 +226,6 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("stats", "floater_stats.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater>); LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRunQueue>); LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>); - LLFloaterReg::add("sl_about", "floater_about.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAbout>); LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>); LLFloaterReg::add("search", "floater_directory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDirectory>); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index f3557bb8f7..176e1b5499 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -901,20 +901,27 @@ void link_inventory_item( return; } + LLUUID transaction_id; + std::string desc = "Link"; + LLInventoryType::EType inv_type = LLInventoryType::IT_NONE; + LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_LinkInventoryItem); - msg->nextBlockFast(_PREHASH_AgentData); + msg->nextBlock(_PREHASH_AgentData); { msg->addUUIDFast(_PREHASH_AgentID, agent_id); msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); } - msg->nextBlockFast(_PREHASH_InventoryData); + msg->nextBlock(_PREHASH_InventoryBlock); { msg->addU32Fast(_PREHASH_CallbackID, gInventoryCallbacks.registerCB(cb)); msg->addUUIDFast(_PREHASH_FolderID, parent_id); + msg->addUUIDFast(_PREHASH_TransactionID, transaction_id); msg->addUUIDFast(_PREHASH_OldItemID, item_id); + msg->addS8Fast(_PREHASH_Type, (S8)asset_type); + msg->addS8Fast(_PREHASH_InvType, (S8)inv_type); msg->addStringFast(_PREHASH_Name, new_name); - msg->addU8Fast(_PREHASH_AssetType, asset_type); + msg->addStringFast(_PREHASH_Description, desc); } gAgent.sendReliableMessage(); } diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 28f883312a..cd60a8d560 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -564,7 +564,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy) // Ignore the warning if that's the case. if (!gSavedSettings.getBOOL("RenderUnloadedAvatar")) { - llwarns << "Layerset without composite" << llendl; + //llwarns << "Layerset without composite" << llendl; } gGL.getTexUnit(0)->bind(LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT)); } @@ -576,6 +576,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass, BOOL is_dummy) { old_mode = mTexture->getAddressMode(); } + gGL.getTexUnit(0)->bind(mTexture.get()); gGL.getTexUnit(0)->bind(mTexture); gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); } diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index fc2f00a2ea..2dc317e067 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -716,7 +716,7 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c if (idx >=2 && idx <= 12) { U32 keyidx = ((mask<<16)|key); - (mRemapKeys[mode])[keyidx] = ((0<<16)|KEY_F1+(idx-1)); + (mRemapKeys[mode])[keyidx] = ((0<<16)|(KEY_F1+(idx-1))); return TRUE; } } diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 60eabd730f..e7576d5c76 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -115,11 +115,14 @@ void LLViewerMediaFocus::setFocusFace( BOOL b, LLPointer<LLViewerObject> objectp else { gFocusMgr.setKeyboardFocus(NULL); - mFocus = NULL; if(! parcel->getMediaPreventCameraZoom()) { - gAgent.setFocusOnAvatar(TRUE, ANIMATE); + if (!mFocus->isEmpty()) + { + gAgent.setFocusOnAvatar(TRUE, ANIMATE); + } } + mFocus = NULL; // LLViewerMedia::remObserver(this, mObjectID); // Null out the media hud media pointer diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 12d5687877..9d278e6a6c 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -979,6 +979,10 @@ U32 info_display_from_string(std::string info_display) { return LLPipeline::RENDER_DEBUG_AVATAR_VOLUME; } + else if ("raycast" == info_display) + { + return LLPipeline::RENDER_DEBUG_RAYCAST; + } else if ("agent target" == info_display) { return LLPipeline::RENDER_DEBUG_AGENT_TARGET; @@ -1172,6 +1176,29 @@ class LLAdvancedCheckDisableTextures : public view_listener_t } }; +////////////////////// +// TEXTURE ATLAS // +////////////////////// + +class LLAdvancedToggleTextureAtlas : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLViewerTexture::sUseTextureAtlas = !LLViewerTexture::sUseTextureAtlas; + gSavedSettings.setBOOL("EnableTextureAtlas", LLViewerTexture::sUseTextureAtlas) ; + return true; + } +}; + +class LLAdvancedCheckTextureAtlas : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool new_value = LLViewerTexture::sUseTextureAtlas; // <-- make this using LLCacheControl + return new_value; + } +}; + ////////////////////////// // DUMP SCRIPTED CAMERA // ////////////////////////// @@ -2145,11 +2172,48 @@ class LLAdvancedEnableObjectObjectOcclusion: public view_listener_t bool handleEvent(const LLSD& userdata) { - bool new_value = gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable(userdata.asString()); + bool new_value = gGLManager.mHasOcclusionQuery; // && LLFeatureManager::getInstance()->isFeatureAvailable(userdata.asString()); return new_value; } }; +///////////////////////////////////// +// Enable Framebuffer Objects /// +///////////////////////////////////// +class LLAdvancedEnableRenderFBO: public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool new_value = gGLManager.mHasFramebufferObject; + return new_value; + } +}; + +///////////////////////////////////// +// Enable Deferred Rendering /// +///////////////////////////////////// +class LLAdvancedEnableRenderDeferred: public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool new_value = gSavedSettings.getBOOL("RenderUseFBO") && LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_WINDLIGHT > 0) && + LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_AVATAR) > 0; + return new_value; + } +}; + +///////////////////////////////////// +// Enable Global Illumination /// +///////////////////////////////////// +class LLAdvancedEnableRenderDeferredGI: public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + bool new_value = gSavedSettings.getBOOL("RenderUseFBO") && gSavedSettings.getBOOL("RenderDeferred"); + return new_value; + } +}; + ////////////////// @@ -2772,7 +2836,7 @@ class LLSelfRemoveAllAttachments : public view_listener_t { bool handleEvent(const LLSD& userdata) { - LLAgentWearables::userRemoveAllAttachments(NULL); + LLAgentWearables::userRemoveAllAttachments(); return true; } }; @@ -7792,7 +7856,12 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe"); view_listener_t::addMenu(new LLAdvancedToggleDisableTextures(), "Advanced.ToggleDisableTextures"); view_listener_t::addMenu(new LLAdvancedCheckDisableTextures(), "Advanced.CheckDisableTextures"); + view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas"); + view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas"); view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion"); + view_listener_t::addMenu(new LLAdvancedEnableRenderFBO(), "Advanced.EnableRenderFBO"); + view_listener_t::addMenu(new LLAdvancedEnableRenderDeferred(), "Advanced.EnableRenderDeferred"); + view_listener_t::addMenu(new LLAdvancedEnableRenderDeferredGI(), "Advanced.EnableRenderDeferredGI"); view_listener_t::addMenu(new LLAdvancedToggleRandomizeFramerate(), "Advanced.ToggleRandomizeFramerate"); view_listener_t::addMenu(new LLAdvancedCheckRandomizeFramerate(), "Advanced.CheckRandomizeFramerate"); view_listener_t::addMenu(new LLAdvancedTogglePeriodicSlowFrame(), "Advanced.TogglePeriodicSlowFrame"); @@ -7897,7 +7966,7 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedForceErrorInfiniteLoop(), "Advanced.ForceErrorInfiniteLoop"); view_listener_t::addMenu(new LLAdvancedForceErrorSoftwareException(), "Advanced.ForceErrorSoftwareException"); view_listener_t::addMenu(new LLAdvancedForceErrorDriverCrash(), "Advanced.ForceErrorDriverCrash"); - view_listener_t::addMenu(new LLAdvancedForceErrorDriverCrash(), "Advanced.ForceErrorDisconnectViewer"); + view_listener_t::addMenu(new LLAdvancedForceErrorDisconnectViewer(), "Advanced.ForceErrorDisconnectViewer"); // Advanced (toplevel) view_listener_t::addMenu(new LLAdvancedToggleShowObjectUpdates(), "Advanced.ToggleShowObjectUpdates"); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 2a2b095833..a2277e4406 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3111,6 +3111,10 @@ void send_agent_update(BOOL force_send, BOOL send_reliable) { flags |= AU_FLAGS_HIDETITLE; } + if (gAgent.getAutoPilot()) + { + flags |= AU_FLAGS_CLIENT_AUTOPILOT; + } flag_change = last_flags ^ flags; @@ -3263,7 +3267,6 @@ void process_object_update(LLMessageSystem *mesgsys, void **user_data) // Update the object... gObjectList.processObjectUpdate(mesgsys, user_data, OUT_FULL); - stop_glerror(); } void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data) @@ -3281,7 +3284,6 @@ void process_compressed_object_update(LLMessageSystem *mesgsys, void **user_data // Update the object... gObjectList.processCompressedObjectUpdate(mesgsys, user_data, OUT_FULL_COMPRESSED); - stop_glerror(); } void process_cached_object_update(LLMessageSystem *mesgsys, void **user_data) @@ -3299,7 +3301,6 @@ void process_cached_object_update(LLMessageSystem *mesgsys, void **user_data) // Update the object... gObjectList.processCachedObjectUpdate(mesgsys, user_data, OUT_FULL_CACHED); - stop_glerror(); } diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index cf77f7e2b6..d3d5f060e1 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -660,8 +660,8 @@ BOOL LLViewerObject::setDrawableParent(LLDrawable* parentp) mDrawable->mParent = parentp; gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE); - if( old_parent != parentp && - old_parent || (parentp && parentp->isActive())) + if( (old_parent != parentp && old_parent) + || (parentp && parentp->isActive())) { // *TODO we should not be relying on setDrawable parent to call markMoved gPipeline.markMoved(mDrawable, FALSE); @@ -2803,6 +2803,11 @@ BOOL LLViewerObject::updateGeometry(LLDrawable *drawable) return TRUE; } +void LLViewerObject::updateGL() +{ + +} + void LLViewerObject::updateFaceSize(S32 idx) { @@ -4188,6 +4193,11 @@ void LLViewerObject::updateText() } } +LLVOAvatar* LLViewerObject::asAvatar() +{ + return NULL; +} + BOOL LLViewerObject::isParticleSource() const { return !mPartSourcep.isNull() && !mPartSourcep->isDead(); @@ -4494,7 +4504,11 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para new_block = new LLSculptParams(); break; } - + case LLNetworkData::PARAMS_LIGHT_IMAGE: + { + new_block = new LLLightImageParams(); + break; + } default: { llinfos << "Unknown param type." << llendl; @@ -4585,7 +4599,7 @@ bool LLViewerObject::setParameterEntry(U16 param_type, const LLNetworkData& new_ bool LLViewerObject::setParameterEntryInUse(U16 param_type, BOOL in_use, bool local_origin) { ExtraParameter* param = getExtraParameterEntryCreate(param_type); - if (param->in_use != in_use) + if (param && param->in_use != in_use) { param->in_use = in_use; parameterChanged(param_type, param->data, in_use, local_origin); @@ -4998,7 +5012,7 @@ U32 LLViewerObject::getPartitionType() const return LLViewerRegion::PARTITION_NONE; } -void LLViewerObject::dirtySpatialGroup() const +void LLViewerObject::dirtySpatialGroup(BOOL priority) const { if (mDrawable) { @@ -5006,6 +5020,7 @@ void LLViewerObject::dirtySpatialGroup() const if (group) { group->dirtyGeom(); + gPipeline.markRebuild(group, priority); } } } diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 836e05728f..08e2ec47cd 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -75,6 +75,7 @@ class LLViewerPartSourceScript; class LLViewerRegion; class LLViewerObjectMedia; class LLVOInventoryListener; +class LLVOAvatar; typedef enum e_object_update_type { @@ -117,7 +118,7 @@ public: //============================================================================ -class LLViewerObject : public LLPrimitive, public LLRefCount +class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate { protected: ~LLViewerObject(); // use unref() @@ -144,6 +145,8 @@ public: BOOL isOrphaned() const { return mOrphaned; } BOOL isParticleSource() const; + virtual LLVOAvatar* asAvatar(); + static void initVOClasses(); static void cleanupVOClasses(); @@ -195,6 +198,7 @@ public: virtual LLDrawable* createDrawable(LLPipeline *pipeline); virtual BOOL updateGeometry(LLDrawable *drawable); + virtual void updateGL(); virtual void updateFaceSize(S32 idx); virtual BOOL updateLOD(); virtual BOOL setDrawableParent(LLDrawable* parentp); @@ -219,6 +223,7 @@ public: virtual BOOL isFlexible() const { return FALSE; } virtual BOOL isSculpted() const { return FALSE; } + virtual BOOL hasLightTexture() const { return FALSE; } // This method returns true if the object is over land owned by // the agent. @@ -470,7 +475,7 @@ public: virtual S32 getLOD() const { return 3; } virtual U32 getPartitionType() const; - virtual void dirtySpatialGroup() const; + virtual void dirtySpatialGroup(BOOL priority = FALSE) const; virtual void dirtyMesh(); virtual LLNetworkData* getParameterEntry(U16 param_type) const; diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp index 1a91240abb..9896adad97 100644 --- a/indra/newview/llviewerparceloverlay.cpp +++ b/indra/newview/llviewerparceloverlay.cpp @@ -53,6 +53,8 @@ #include "llselectmgr.h" #include "llfloatertools.h" #include "llglheaders.h" +#include "pipeline.h" + const U8 OVERLAY_IMG_COMPONENTS = 4; @@ -72,8 +74,6 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_ // Use mipmaps = FALSE, clamped, NEAREST filter, for sharp edges mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS); mTexture = LLViewerTextureManager::getLocalTexture(mImageRaw.get(), FALSE); - gGL.getTexUnit(0)->activate(); - gGL.getTexUnit(0)->bind(mTexture); mTexture->setAddressMode(LLTexUnit::TAM_CLAMP); mTexture->setFilteringOption(LLTexUnit::TFO_POINT); @@ -87,7 +87,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_ { raw[i] = 0; } - mTexture->setSubImage(mImageRaw, 0, 0, mParcelGridsPerEdge, mParcelGridsPerEdge); + //mTexture->setSubImage(mImageRaw, 0, 0, mParcelGridsPerEdge, mParcelGridsPerEdge); // Create storage for ownership information from simulator // and initialize it. @@ -97,8 +97,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_ mOwnership[i] = PARCEL_PUBLIC; } - // Make sure the texture matches the ownership information. - updateOverlayTexture(); + gPipeline.markGLRebuild(this); } @@ -283,6 +282,10 @@ void LLViewerParcelOverlay::updateOverlayTexture() // Copy data into GL texture from raw data if (i >= COUNT) { + if (!mTexture->hasGLTexture()) + { + mTexture->createGLTexture(0, mImageRaw); + } mTexture->setSubImage(mImageRaw, 0, 0, mParcelGridsPerEdge, mParcelGridsPerEdge); mOverlayTextureIdx = -1; } @@ -709,6 +712,11 @@ void LLViewerParcelOverlay::setDirty() mDirty = TRUE; } +void LLViewerParcelOverlay::updateGL() +{ + updateOverlayTexture(); +} + void LLViewerParcelOverlay::idleUpdate(bool force_update) { LLMemType mt_iup(LLMemType::MTYPE_IDLE_UPDATE_PARCEL_OVERLAY); @@ -719,7 +727,7 @@ void LLViewerParcelOverlay::idleUpdate(bool force_update) if (mOverlayTextureIdx >= 0 && (!(mDirty && force_update))) { // We are in the middle of updating the overlay texture - updateOverlayTexture(); + gPipeline.markGLRebuild(this); return; } // Only if we're dirty and it's been a while since the last update. diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h index e673b811ed..161b7a386b 100644 --- a/indra/newview/llviewerparceloverlay.h +++ b/indra/newview/llviewerparceloverlay.h @@ -40,13 +40,14 @@ #include "llframetimer.h" #include "lluuid.h" #include "llviewertexture.h" +#include "llgl.h" class LLViewerRegion; class LLVector3; class LLColor4U; class LLVector2; -class LLViewerParcelOverlay +class LLViewerParcelOverlay : public LLGLUpdate { public: LLViewerParcelOverlay(LLViewerRegion* region, F32 region_width_meters); @@ -76,6 +77,7 @@ public: void setDirty(); void idleUpdate(bool update_now = false); + void updateGL(); private: // This is in parcel rows and columns, not grid rows and columns diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp index a8cbcd86c6..4752bf1a85 100644 --- a/indra/newview/llviewerpartsource.cpp +++ b/indra/newview/llviewerpartsource.cpp @@ -101,7 +101,7 @@ LLViewerPartSourceScript::LLViewerPartSourceScript(LLViewerObject *source_objp) mSourceObjectp = source_objp; mPosAgent = mSourceObjectp->getPositionAgent(); mImagep = LLViewerTextureManager::getFetchedTextureFromFile("pixiesmall.j2c"); - gGL.getTexUnit(0)->bind(mImagep); + mImagep->setAddressMode(LLTexUnit::TAM_CLAMP); } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index b5bd2f93af..6dc9f5c465 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -104,6 +104,7 @@ LLGLSLShader gPostNightVisionProgram; // Deferred rendering shaders LLGLSLShader gDeferredImpostorProgram; +LLGLSLShader gDeferredEdgeProgram; LLGLSLShader gDeferredWaterProgram; LLGLSLShader gDeferredDiffuseProgram; LLGLSLShader gDeferredBumpProgram; @@ -113,6 +114,8 @@ LLGLSLShader gDeferredAvatarProgram; LLGLSLShader gDeferredAvatarAlphaProgram; LLGLSLShader gDeferredLightProgram; LLGLSLShader gDeferredMultiLightProgram; +LLGLSLShader gDeferredSpotLightProgram; +LLGLSLShader gDeferredMultiSpotLightProgram; LLGLSLShader gDeferredSunProgram; LLGLSLShader gDeferredBlurLightProgram; LLGLSLShader gDeferredSoftenProgram; @@ -120,6 +123,13 @@ LLGLSLShader gDeferredShadowProgram; LLGLSLShader gDeferredAvatarShadowProgram; LLGLSLShader gDeferredAlphaProgram; LLGLSLShader gDeferredFullbrightProgram; +LLGLSLShader gDeferredGIProgram; +LLGLSLShader gDeferredGIFinalProgram; +LLGLSLShader gDeferredPostGIProgram; +LLGLSLShader gDeferredPostProgram; + +LLGLSLShader gLuminanceGatherProgram; + //current avatar shader parameter pointer GLint gAvatarMatrixParam; @@ -151,6 +161,11 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gDeferredMultiLightProgram); mShaderList.push_back(&gDeferredAlphaProgram); mShaderList.push_back(&gDeferredFullbrightProgram); + mShaderList.push_back(&gDeferredPostGIProgram); + mShaderList.push_back(&gDeferredEdgeProgram); + mShaderList.push_back(&gDeferredPostProgram); + mShaderList.push_back(&gDeferredGIProgram); + mShaderList.push_back(&gDeferredGIFinalProgram); mShaderList.push_back(&gDeferredWaterProgram); mShaderList.push_back(&gDeferredAvatarAlphaProgram); } @@ -220,13 +235,35 @@ void LLViewerShaderMgr::initAttribsAndUniforms(void) mReservedUniforms.push_back("shadowMap1"); mReservedUniforms.push_back("shadowMap2"); mReservedUniforms.push_back("shadowMap3"); + mReservedUniforms.push_back("shadowMap4"); + mReservedUniforms.push_back("shadowMap5"); + mReservedUniforms.push_back("normalMap"); mReservedUniforms.push_back("positionMap"); mReservedUniforms.push_back("diffuseRect"); mReservedUniforms.push_back("specularRect"); mReservedUniforms.push_back("noiseMap"); + mReservedUniforms.push_back("lightFunc"); mReservedUniforms.push_back("lightMap"); - + mReservedUniforms.push_back("luminanceMap"); + mReservedUniforms.push_back("giLightMap"); + mReservedUniforms.push_back("giMip"); + mReservedUniforms.push_back("edgeMap"); + mReservedUniforms.push_back("bloomMap"); + mReservedUniforms.push_back("sunLightMap"); + mReservedUniforms.push_back("localLightMap"); + mReservedUniforms.push_back("projectionMap"); + mReservedUniforms.push_back("diffuseGIMap"); + mReservedUniforms.push_back("specularGIMap"); + mReservedUniforms.push_back("normalGIMap"); + mReservedUniforms.push_back("minpGIMap"); + mReservedUniforms.push_back("maxpGIMap"); + mReservedUniforms.push_back("depthGIMap"); + mReservedUniforms.push_back("lastDiffuseGIMap"); + mReservedUniforms.push_back("lastNormalGIMap"); + mReservedUniforms.push_back("lastMinpGIMap"); + mReservedUniforms.push_back("lastMaxpGIMap"); + mWLUniforms.push_back("camPosLocal"); mTerrainUniforms.reserve(5); @@ -340,7 +377,21 @@ void LLViewerShaderMgr::setShaders() if (LLPipeline::sRenderDeferred) { - deferred_class = 1; + if (gSavedSettings.getBOOL("RenderDeferredShadow")) + { + if (gSavedSettings.getBOOL("RenderDeferredGI")) + { //shadows + gi + deferred_class = 3; + } + else + { //shadows + deferred_class = 2; + } + } + else + { //no shadows + deferred_class = 1; + } } if(!gSavedSettings.getBOOL("EnableRippleWater")) @@ -814,6 +865,8 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredTerrainProgram.unload(); gDeferredLightProgram.unload(); gDeferredMultiLightProgram.unload(); + gDeferredSpotLightProgram.unload(); + gDeferredMultiSpotLightProgram.unload(); gDeferredSunProgram.unload(); gDeferredBlurLightProgram.unload(); gDeferredSoftenProgram.unload(); @@ -823,6 +876,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() gDeferredAvatarAlphaProgram.unload(); gDeferredAlphaProgram.unload(); gDeferredFullbrightProgram.unload(); + gDeferredPostGIProgram.unload(); + gDeferredEdgeProgram.unload(); + gDeferredPostProgram.unload(); + gLuminanceGatherProgram.unload(); + gDeferredGIProgram.unload(); + gDeferredGIFinalProgram.unload(); gDeferredWaterProgram.unload(); return FALSE; } @@ -893,6 +952,26 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() if (success) { + gDeferredSpotLightProgram.mName = "Deferred SpotLight Shader"; + gDeferredSpotLightProgram.mShaderFiles.clear(); + gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredSpotLightProgram.createShader(NULL, NULL); + } + + if (success) + { + gDeferredMultiSpotLightProgram.mName = "Deferred MultiSpotLight Shader"; + gDeferredMultiSpotLightProgram.mShaderFiles.clear(); + gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredMultiSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredMultiSpotLightProgram.createShader(NULL, NULL); + } + + if (success) + { gDeferredSunProgram.mName = "Deferred Sun Shader"; gDeferredSunProgram.mShaderFiles.clear(); gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER_ARB)); @@ -1022,6 +1101,72 @@ BOOL LLViewerShaderMgr::loadShadersDeferred() success = gDeferredAvatarAlphaProgram.createShader(&mAvatarAttribs, &mAvatarUniforms); } + if (mVertexShaderLevel[SHADER_DEFERRED] > 1) + { + if (success) + { + gDeferredEdgeProgram.mName = "Deferred Edge Shader"; + gDeferredEdgeProgram.mShaderFiles.clear(); + gDeferredEdgeProgram.mShaderFiles.push_back(make_pair("deferred/edgeV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredEdgeProgram.mShaderFiles.push_back(make_pair("deferred/edgeF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredEdgeProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredEdgeProgram.createShader(NULL, NULL); + } + } + + if (mVertexShaderLevel[SHADER_DEFERRED] > 2) + { + if (success) + { + gDeferredPostProgram.mName = "Deferred Post Shader"; + gDeferredPostProgram.mShaderFiles.clear(); + gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredPostProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredPostProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredPostProgram.createShader(NULL, NULL); + } + + if (success) + { + gDeferredPostGIProgram.mName = "Deferred Post GI Shader"; + gDeferredPostGIProgram.mShaderFiles.clear(); + gDeferredPostGIProgram.mShaderFiles.push_back(make_pair("deferred/postgiV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredPostGIProgram.mShaderFiles.push_back(make_pair("deferred/postgiF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredPostGIProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredPostGIProgram.createShader(NULL, NULL); + } + + if (success) + { + gDeferredGIProgram.mName = "Deferred GI Shader"; + gDeferredGIProgram.mShaderFiles.clear(); + gDeferredGIProgram.mShaderFiles.push_back(make_pair("deferred/giV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredGIProgram.mShaderFiles.push_back(make_pair("deferred/giF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredGIProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredGIProgram.createShader(NULL, NULL); + } + + if (success) + { + gDeferredGIFinalProgram.mName = "Deferred GI Final Shader"; + gDeferredGIFinalProgram.mShaderFiles.clear(); + gDeferredGIFinalProgram.mShaderFiles.push_back(make_pair("deferred/giFinalV.glsl", GL_VERTEX_SHADER_ARB)); + gDeferredGIFinalProgram.mShaderFiles.push_back(make_pair("deferred/giFinalF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDeferredGIFinalProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gDeferredGIFinalProgram.createShader(NULL, NULL); + } + + if (success) + { + gLuminanceGatherProgram.mName = "Luminance Gather Shader"; + gLuminanceGatherProgram.mShaderFiles.clear(); + gLuminanceGatherProgram.mShaderFiles.push_back(make_pair("deferred/luminanceV.glsl", GL_VERTEX_SHADER_ARB)); + gLuminanceGatherProgram.mShaderFiles.push_back(make_pair("deferred/luminanceF.glsl", GL_FRAGMENT_SHADER_ARB)); + gLuminanceGatherProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; + success = gLuminanceGatherProgram.createShader(NULL, NULL); + } + } + return success; } diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index a743966d93..ac2b4624e0 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -116,12 +116,33 @@ public: DEFERRED_SHADOW1, DEFERRED_SHADOW2, DEFERRED_SHADOW3, + DEFERRED_SHADOW4, + DEFERRED_SHADOW5, DEFERRED_NORMAL, DEFERRED_POSITION, DEFERRED_DIFFUSE, DEFERRED_SPECULAR, DEFERRED_NOISE, + DEFERRED_LIGHTFUNC, DEFERRED_LIGHT, + DEFERRED_LUMINANCE, + DEFERRED_GI_LIGHT, + DEFERRED_GI_MIP, + DEFERRED_EDGE, + DEFERRED_BLOOM, + DEFERRED_SUN_LIGHT, + DEFERRED_LOCAL_LIGHT, + DEFERRED_PROJECTION, + DEFERRED_GI_DIFFUSE, + DEFERRED_GI_SPECULAR, + DEFERRED_GI_NORMAL, + DEFERRED_GI_MIN_POS, + DEFERRED_GI_MAX_POS, + DEFERRED_GI_DEPTH, + DEFERRED_GI_LAST_DIFFUSE, + DEFERRED_GI_LAST_NORMAL, + DEFERRED_GI_LAST_MIN_POS, + DEFERRED_GI_LAST_MAX_POS, END_RESERVED_UNIFORMS } eGLSLReservedUniforms; @@ -319,6 +340,7 @@ extern LLGLSLShader gPostNightVisionProgram; // Deferred rendering shaders extern LLGLSLShader gDeferredImpostorProgram; +extern LLGLSLShader gDeferredEdgeProgram; extern LLGLSLShader gDeferredWaterProgram; extern LLGLSLShader gDeferredDiffuseProgram; extern LLGLSLShader gDeferredBumpProgram; @@ -326,16 +348,24 @@ extern LLGLSLShader gDeferredTerrainProgram; extern LLGLSLShader gDeferredTreeProgram; extern LLGLSLShader gDeferredLightProgram; extern LLGLSLShader gDeferredMultiLightProgram; +extern LLGLSLShader gDeferredSpotLightProgram; +extern LLGLSLShader gDeferredMultiSpotLightProgram; extern LLGLSLShader gDeferredSunProgram; +extern LLGLSLShader gDeferredGIProgram; +extern LLGLSLShader gDeferredGIFinalProgram; extern LLGLSLShader gDeferredBlurLightProgram; extern LLGLSLShader gDeferredAvatarProgram; extern LLGLSLShader gDeferredSoftenProgram; extern LLGLSLShader gDeferredShadowProgram; +extern LLGLSLShader gDeferredPostGIProgram; +extern LLGLSLShader gDeferredPostProgram; extern LLGLSLShader gDeferredAvatarShadowProgram; extern LLGLSLShader gDeferredAlphaProgram; extern LLGLSLShader gDeferredFullbrightProgram; extern LLGLSLShader gDeferredAvatarAlphaProgram; +extern LLGLSLShader gLuminanceGatherProgram; + //current avatar shader parameter pointer extern GLint gAvatarMatrixParam; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index ec82f62a8b..e3d657068f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -60,6 +60,8 @@ #include "llviewercontrol.h" #include "pipeline.h" #include "llappviewer.h" +#include "lltextureatlas.h" +#include "lltextureatlasmanager.h" /////////////////////////////////////////////////////////////////////////////// // statics @@ -83,6 +85,7 @@ S32 LLViewerTexture::sMaxBoundTextureMemInMegaBytes = 0; S32 LLViewerTexture::sMaxTotalTextureMemInMegaBytes = 0; S32 LLViewerTexture::sMaxDesiredTextureMemInBytes = 0 ; BOOL LLViewerTexture::sDontLoadVolumeTextures = FALSE; +BOOL LLViewerTexture::sUseTextureAtlas = FALSE ; const F32 desired_discard_bias_min = -2.0f; // -max number of levels to improve image quality by const F32 desired_discard_bias_max = 1.5f; // max number of levels to reduce image quality by @@ -244,7 +247,7 @@ void LLViewerTextureManager::init() LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ; #if 1 - LLPointer<LLViewerFetchedTexture> imagep = new LLViewerFetchedTexture(IMG_DEFAULT, TRUE); + LLPointer<LLViewerFetchedTexture> imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT); LLViewerFetchedTexture::sDefaultImagep = imagep; const S32 dim = 128; @@ -273,7 +276,6 @@ void LLViewerTextureManager::init() } imagep->createGLTexture(0, image_raw); image_raw = NULL; - gTextureList.addImage(imagep); LLViewerFetchedTexture::sDefaultImagep->dontDiscard(); #else LLViewerFetchedTexture::sDefaultImagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, TRUE); @@ -369,6 +371,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity } } sDesiredDiscardBias = llclamp(sDesiredDiscardBias, desired_discard_bias_min, desired_discard_bias_max); + LLViewerTexture::sUseTextureAtlas = gSavedSettings.getBOOL("EnableTextureAtlas") ; } //end of static functions @@ -668,7 +671,7 @@ LLGLuint LLViewerTexture::getTexName() const return mGLTexturep->getTexName() ; } -BOOL LLViewerTexture::hasValidGLTexture() const +BOOL LLViewerTexture::hasGLTexture() const { if(mGLTexturep.notNull()) { @@ -677,11 +680,6 @@ BOOL LLViewerTexture::hasValidGLTexture() const return FALSE ; } -BOOL LLViewerTexture::hasGLTexture() const -{ - return mGLTexturep.notNull() ; -} - BOOL LLViewerTexture::getBoundRecently() const { if(mGLTexturep.notNull()) @@ -780,6 +778,34 @@ BOOL LLViewerTexture::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool return mGLTexturep->readBackRaw(discard_level, imageraw, compressed_ok) ; } +U32 LLViewerTexture::getTexelsInAtlas() const +{ + llassert_always(mGLTexturep.notNull()) ; + + return mGLTexturep->getTexelsInAtlas() ; +} + +U32 LLViewerTexture::getTexelsInGLTexture() const +{ + llassert_always(mGLTexturep.notNull()) ; + + return mGLTexturep->getTexelsInGLTexture() ; +} + +BOOL LLViewerTexture::isGLTextureCreated() const +{ + llassert_always(mGLTexturep.notNull()) ; + + return mGLTexturep->isGLTextureCreated() ; +} + +S32 LLViewerTexture::getDiscardLevelInAtlas() const +{ + llassert_always(mGLTexturep.notNull()) ; + + return mGLTexturep->getDiscardLevelInAtlas() ; +} + void LLViewerTexture::destroyGLTexture() { if(mGLTexturep.notNull() && mGLTexturep->getHasGLTexture()) @@ -797,6 +823,7 @@ void LLViewerTexture::updateBindStatsForTester() LLViewerTextureManager::sTesterp->updateTextureBindingStats(this) ; } } + //---------------------------------------------------------------------------------------------- //end of LLViewerTexture //---------------------------------------------------------------------------------------------- @@ -1045,7 +1072,11 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/) return FALSE; } - res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename); + if(!(res = insertToAtlas())) + { + res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename); + resetFaceAtlas() ; + } setActive() ; } @@ -1742,6 +1773,197 @@ void LLViewerFetchedTexture::destroyRawImage() mIsRawImageValid = FALSE; mRawDiscardLevel = INVALID_DISCARD_LEVEL; } + +//---------------------------------------------------------------------------------------------- +//atlasing +//---------------------------------------------------------------------------------------------- +void LLViewerFetchedTexture::resetFaceAtlas() +{ + //Nothing should be done here. +} + +//invalidate all atlas slots for this image. +void LLViewerFetchedTexture::invalidateAtlas(BOOL rebuild_geom) +{ + for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) + { + if(*iter) + { + LLFace* facep = (LLFace*)*iter ; + facep->removeAtlas() ; + if(rebuild_geom && facep->getDrawable() && facep->getDrawable()->getSpatialGroup()) + { + facep->getDrawable()->getSpatialGroup()->setState(LLSpatialGroup::GEOM_DIRTY); + } + } + } +} + +BOOL LLViewerFetchedTexture::insertToAtlas() +{ + if(!LLViewerTexture::sUseTextureAtlas) + { + return FALSE ; + } + if(mFaceList.size() < 1) + { + return FALSE ; + } + if(mGLTexturep->getDiscardLevelInAtlas() > 0 && mRawDiscardLevel >= mGLTexturep->getDiscardLevelInAtlas()) + { + return FALSE ; + } + if(!LLTextureAtlasManager::getInstance()->canAddToAtlas(mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents(), mGLTexturep->getTexTarget())) + { + return FALSE ; + } + + BOOL ret = TRUE ;//if ret is set to false, will generate a gl texture for this image. + S32 raw_w = mRawImage->getWidth() ; + S32 raw_h = mRawImage->getHeight() ; + F32 xscale = 1.0f, yscale = 1.0f ; + LLPointer<LLTextureAtlasSlot> slot_infop; + LLTextureAtlasSlot* cur_slotp ;//no need to be smart pointer. + LLSpatialGroup* groupp ; + LLFace* facep; + + //if the atlas slot pointers for some faces are null, process them later. + ll_face_list_t waiting_list ; + + for(ll_face_list_t::iterator iter = mFaceList.begin(); iter != mFaceList.end(); ++iter) + { + if(*iter) + { + facep = (LLFace*)*iter ; + + //face can not use atlas. + if(!facep->canUseAtlas()) + { + if(facep->getAtlasInfo()) + { + facep->removeAtlas() ; + } + ret = FALSE ; + continue ; + } + + //the atlas slot is updated + slot_infop = facep->getAtlasInfo() ; + groupp = facep->getDrawable()->getSpatialGroup() ; + + if(slot_infop) + { + if(slot_infop->getSpatialGroup() != groupp) + { + if((cur_slotp = groupp->getCurUpdatingSlot(this))) //switch slot + { + facep->setAtlasInfo(cur_slotp) ; + facep->setAtlasInUse(TRUE) ; + continue ; + } + else //do not forget to update slot_infop->getSpatialGroup(). + { + LLSpatialGroup* gp = slot_infop->getSpatialGroup() ; + gp->setCurUpdatingTime(gFrameCount) ; + gp->setCurUpdatingTexture(this) ; + gp->setCurUpdatingSlot(slot_infop) ; + } + } + else //same group + { + if(gFrameCount && slot_infop->getUpdatedTime() == gFrameCount)//slot is just updated + { + facep->setAtlasInUse(TRUE) ; + continue ; + } + } + } + else + { + //if the slot is null, wait to process them later. + waiting_list.push_back(facep) ; + continue ; + } + + //---------- + //insert to atlas + if(!slot_infop->getAtlas()->insertSubTexture(mGLTexturep, mRawDiscardLevel, mRawImage, slot_infop->getSlotCol(), slot_infop->getSlotRow())) + { + + //the texture does not qualify to add to atlas, do not bother to try for other faces. + //invalidateAtlas(); + return FALSE ; + } + + //update texture scale + slot_infop->getAtlas()->getTexCoordScale(raw_w, raw_h, xscale, yscale) ; + slot_infop->setTexCoordScale(xscale, yscale) ; + slot_infop->setValid() ; + slot_infop->setUpdatedTime(gFrameCount) ; + + //update spatial group atlas info + groupp->setCurUpdatingTime(gFrameCount) ; + groupp->setCurUpdatingTexture(this) ; + groupp->setCurUpdatingSlot(slot_infop) ; + + //make the face to switch to the atlas. + facep->setAtlasInUse(TRUE) ; + } + } + + //process the waiting_list + for(ll_face_list_t::iterator iter = waiting_list.begin(); iter != waiting_list.end(); ++iter) + { + facep = (LLFace*)*iter ; + groupp = facep->getDrawable()->getSpatialGroup() ; + + //check if this texture already inserted to atlas for this group + if((cur_slotp = groupp->getCurUpdatingSlot(this))) + { + facep->setAtlasInfo(cur_slotp) ; + facep->setAtlasInUse(TRUE) ; + continue ; + } + + //need to reserve a slot from atlas + slot_infop = LLTextureAtlasManager::getInstance()->reserveAtlasSlot(llmax(mFullWidth, mFullHeight), getComponents(), groupp, this) ; + + facep->setAtlasInfo(slot_infop) ; + + groupp->setCurUpdatingTime(gFrameCount) ; + groupp->setCurUpdatingTexture(this) ; + groupp->setCurUpdatingSlot(slot_infop) ; + + //slot allocation failed. + if(!slot_infop || !slot_infop->getAtlas()) + { + ret = FALSE ; + facep->setAtlasInUse(FALSE) ; + continue ; + } + + //insert to atlas + if(!slot_infop->getAtlas()->insertSubTexture(mGLTexturep, mRawDiscardLevel, mRawImage, slot_infop->getSlotCol(), slot_infop->getSlotRow())) + { + //the texture does not qualify to add to atlas, do not bother to try for other faces. + ret = FALSE ; + //invalidateAtlas(); + break ; + } + + //update texture scale + slot_infop->getAtlas()->getTexCoordScale(raw_w, raw_h, xscale, yscale) ; + slot_infop->setTexCoordScale(xscale, yscale) ; + slot_infop->setValid() ; + slot_infop->setUpdatedTime(gFrameCount) ; + + //make the face to switch to the atlas. + facep->setAtlasInUse(TRUE) ; + } + + return ret ; +} + //---------------------------------------------------------------------------------------------- //end of LLViewerFetchedTexture //---------------------------------------------------------------------------------------------- diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 142c212435..0be1bf81de 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -98,6 +98,7 @@ public: DYNAMIC_TEXTURE, FETCHED_TEXTURE, LOD_TEXTURE, + ATLAS_TEXTURE, INVALID_TEXTURE_TYPE }; @@ -171,7 +172,6 @@ public: /*virtual*/S32 getHeight(S32 discard_level = -1) const; BOOL hasGLTexture() const ; - BOOL hasValidGLTexture() const ; LLGLuint getTexName() const ; BOOL createGLTexture() ; BOOL createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename = 0); @@ -197,6 +197,11 @@ public: BOOL getMissed() const ; BOOL isValidForSculpt(S32 discard_level, S32 image_width, S32 image_height, S32 ncomponents) ; BOOL readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compressed_ok) const; + + U32 getTexelsInAtlas() const ; + U32 getTexelsInGLTexture() const ; + BOOL isGLTextureCreated() const ; + S32 getDiscardLevelInAtlas() const ; //--------------------------------------------------------------------------------------------- //end of functions to access LLImageGL //--------------------------------------------------------------------------------------------- @@ -263,6 +268,7 @@ public: static S32 sMaxTotalTextureMemInMegaBytes; static S32 sMaxDesiredTextureMemInBytes ; static BOOL sDontLoadVolumeTextures; + static BOOL sUseTextureAtlas ; static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects. }; @@ -388,6 +394,11 @@ private: F32 calcDecodePriorityForUnknownTexture(F32 pixel_priority) ; + //for atlas + void resetFaceAtlas() ; + void invalidateAtlas(BOOL rebuild_geom) ; + BOOL insertToAtlas() ; + private: BOOL mFullyLoaded; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index f7fbe96aa7..5fd5397970 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1898,6 +1898,11 @@ void LLViewerWindow::draw() //S32 screen_x, screen_y; + if (!gSavedSettings.getBOOL("RenderUIBuffer")) + { + LLUI::sDirtyRect = this->getWindowRect(); + } + // HACK for timecode debugging if (gSavedSettings.getBOOL("DisplayTimecode")) { @@ -3874,7 +3879,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei { if(image_width > window_width || image_height > window_height) //need to enlarge the scene { - if (gGLManager.mHasFramebufferObject && !show_ui) + if (!LLPipeline::sRenderDeferred && gGLManager.mHasFramebufferObject && !show_ui) { GLint max_size = 0; glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &max_size); @@ -3962,9 +3967,17 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei else { const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor)); - display(do_rebuild, scale_factor, subfield, TRUE); - // Required for showing the GUI in snapshots? See DEV-16350 for details. JC - render_ui(scale_factor, subfield); + + if (LLPipeline::sRenderDeferred) + { + display(do_rebuild, scale_factor, subfield, FALSE); + } + else + { + display(do_rebuild, scale_factor, subfield, TRUE); + // Required for showing the GUI in snapshots? See DEV-16350 for details. JC + render_ui(scale_factor, subfield); + } } S32 subimage_x_offset = llclamp(buffer_x_offset - (subimage_x * window_width), 0, window_width); @@ -4109,8 +4122,8 @@ void LLViewerWindow::drawMouselookInstructions() font->renderUTF8( instructions, 0, - mWorldViewRect.getCenterX(), - mWorldViewRect.mBottom + INSTRUCTIONS_PAD, + getVirtualWorldViewRect().getCenterX(), + getVirtualWorldViewRect().mBottom + INSTRUCTIONS_PAD, LLColor4( 0.0f, 0.0f, 0.0f, 0.6f ), LLFontGL::HCENTER, LLFontGL::TOP); } diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp index f26ba6f46e..d124cbcdce 100644 --- a/indra/newview/llvlcomposition.cpp +++ b/indra/newview/llvlcomposition.cpp @@ -448,6 +448,10 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y, } } + if (!texturep->hasGLTexture()) + { + texturep->createGLTexture(0, raw); + } texturep->setSubImage(raw, tex_x_begin, tex_y_begin, tex_x_end - tex_x_begin, tex_y_end - tex_y_begin); LLSurface::sTextureUpdateTime += gen_timer.getElapsedTimeF32(); LLSurface::sTexelsUpdated += (tex_x_end - tex_x_begin) * (tex_y_end - tex_y_begin); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 018cce4b49..60d64d50b9 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -80,6 +80,7 @@ #include "llsky.h" #include "llanimstatelabels.h" #include "lltrans.h" +#include "llappearancemgr.h" #include "llgesturemgr.h" //needed to trigger the voice gesticulations #include "llvoiceclient.h" @@ -680,6 +681,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, } mDirtyMesh = TRUE; // Dirty geometry, need to regenerate. + mMeshTexturesDirty = FALSE; mShadow0Facep = NULL; mShadow1Facep = NULL; mHeadp = NULL; @@ -718,8 +720,10 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id, mRippleTimeLast = 0.f; mShadowImagep = LLViewerTextureManager::getFetchedTextureFromFile("foot_shadow.j2c"); - gGL.getTexUnit(0)->bind(mShadowImagep); - mShadowImagep->setAddressMode(LLTexUnit::TAM_CLAMP); + + // GL NOT ACTIVE HERE + //gGL.getTexUnit(0)->bind(mShadowImagep.get()); + //mShadowImagep->setAddressMode(LLTexUnit::TAM_CLAMP); mInAir = FALSE; @@ -1400,7 +1404,7 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e LLVector3* normal, LLVector3* bi_normal) { - if (isSelf() && !gAgent.needsRenderAvatar() || !LLPipeline::sPickAvatar) + if ((isSelf() && !gAgent.needsRenderAvatar()) || !LLPipeline::sPickAvatar) { return FALSE; } @@ -1612,6 +1616,11 @@ BOOL LLVOAvatar::buildSkeleton(const LLVOAvatarSkeletonInfo *info) return TRUE; } +LLVOAvatar* LLVOAvatar::asAvatar() +{ + return this; +} + //----------------------------------------------------------------------------- // LLVOAvatar::startDefaultMotions() //----------------------------------------------------------------------------- @@ -2176,10 +2185,14 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) idleUpdateVoiceVisualizer( voice_enabled ); idleUpdateMisc( detailed_update ); idleUpdateAppearanceAnimation(); - idleUpdateLipSync( voice_enabled ); - idleUpdateLoadingEffect(); - idleUpdateBelowWater(); // wind effect uses this - idleUpdateWindEffect(); + if (detailed_update) + { + idleUpdateLipSync( voice_enabled ); + idleUpdateLoadingEffect(); + idleUpdateBelowWater(); // wind effect uses this + idleUpdateWindEffect(); + } + idleUpdateNameTag( root_pos_last ); idleUpdateRenderCost(); idleUpdateTractorBeam(); @@ -3032,7 +3045,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) if (!visible) { - updateMotions(LLCharacter::HIDDEN_UPDATE); + //updateMotions(LLCharacter::HIDDEN_UPDATE); return FALSE; } @@ -3702,7 +3715,8 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass) if (pass == AVATAR_RENDER_PASS_SINGLE) { - const bool should_alpha_mask = mSupportsAlphaLayers && !LLDrawPoolAlpha::sShowDebugAlpha; // Don't alpha mask if "Highlight Transparent" checked + const bool should_alpha_mask = mSupportsAlphaLayers && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked + && !LLDrawPoolAvatar::sSkipTransparent; LLGLState test(GL_ALPHA_TEST, should_alpha_mask); @@ -3817,20 +3831,8 @@ U32 LLVOAvatar::renderRigid() if (isTextureVisible(TEX_EYES_BAKED) || mIsDummy) { - // If the meshes need to be drawn, enable alpha masking but not blending - bool should_alpha_mask = mSupportsAlphaLayers && !LLDrawPoolAlpha::sShowDebugAlpha; - - LLGLState test(GL_ALPHA_TEST, should_alpha_mask); - - if (should_alpha_mask) - { - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); - } - num_indices += mMeshLOD[MESH_ID_EYEBALL_LEFT]->render(mAdjustedPixelArea, TRUE, mIsDummy); num_indices += mMeshLOD[MESH_ID_EYEBALL_RIGHT]->render(mAdjustedPixelArea, TRUE, mIsDummy); - - gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); } return num_indices; @@ -3875,7 +3877,7 @@ U32 LLVOAvatar::renderFootShadows() LLGLDepthTest test(GL_TRUE, GL_FALSE); //render foot shadows LLGLEnable blend(GL_BLEND); - gGL.getTexUnit(0)->bind(mShadowImagep); + gGL.getTexUnit(0)->bind(mShadowImagep.get()); glColor4fv(mShadow0Facep->getRenderColor().mV); mShadow0Facep->renderIndexed(foot_mask); glColor4fv(mShadow1Facep->getRenderColor().mV); @@ -3884,7 +3886,7 @@ U32 LLVOAvatar::renderFootShadows() return num_indices; } -U32 LLVOAvatar::renderImpostor(LLColor4U color) +U32 LLVOAvatar::renderImpostor(LLColor4U color, S32 diffuse_channel) { if (!mImpostor.isComplete()) { @@ -3904,7 +3906,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color) gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f); gGL.color4ubv(color.mV); - gGL.getTexUnit(0)->bind(&mImpostor); + gGL.getTexUnit(diffuse_channel)->bind(&mImpostor); gGL.begin(LLRender::QUADS); gGL.texCoord2f(0,0); gGL.vertex3fv((pos+left-up).mV); @@ -3942,6 +3944,7 @@ void LLVOAvatar::updateTextures(LLAgent &agent) } std::vector<BOOL> layer_baked; + // GL NOT ACTIVE HERE - *TODO for (U32 i = 0; i < mBakedTextureDatas.size(); i++) { layer_baked.push_back(isTextureDefined(mBakedTextureDatas[i].mTextureIndex)); @@ -5171,6 +5174,15 @@ LLDrawable *LLVOAvatar::createDrawable(LLPipeline *pipeline) } +void LLVOAvatar::updateGL() +{ + if (mMeshTexturesDirty) + { + updateMeshTextures(); + mMeshTexturesDirty = FALSE; + } +} + //----------------------------------------------------------------------------- // updateGeometry() //----------------------------------------------------------------------------- @@ -5222,7 +5234,7 @@ void LLVOAvatar::updateShadowFaces() sprite.setSize(0.4f + cos_elev * 0.8f, 0.3f); LLVector3 sun_vec = gSky.mVOSkyp ? gSky.mVOSkyp->getToSun() : LLVector3(0.f, 0.f, 0.f); - if (mShadowImagep->hasValidGLTexture()) + if (mShadowImagep->hasGLTexture()) { LLVector3 normal; LLVector3d shadow_pos; @@ -5481,6 +5493,18 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) if (isSelf()) { // Then make sure the inventory is in sync with the avatar. + + // Update COF contents, don't trigger appearance update. + if (gAgent.getAvatarObject() == NULL) + { + llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl; + } + else + { + LLAppearanceManager::removeItemLinks(item_id, false); + } + + // BAP - needs to change for label to track link. gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id); gInventory.notifyObservers(); } @@ -6354,7 +6378,8 @@ void LLVOAvatar::onFirstTEMessageReceived() } } - updateMeshTextures(); + mMeshTexturesDirty = TRUE; + gPipeline.markGLRebuild(this); } } @@ -6417,6 +6442,8 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } setCompositeUpdatesEnabled( FALSE ); + mMeshTexturesDirty = TRUE; + gPipeline.markGLRebuild(this); // ! BACKWARDS COMPATIBILITY ! // Non-self avatars will no longer have component textures @@ -6425,8 +6452,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) releaseComponentTextures(); } - updateMeshTextures(); // enables updates for laysets without baked textures. - + // parse visual params S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_VisualParam); if( num_blocks > 1 ) @@ -7436,13 +7462,18 @@ void LLVOAvatar::updateFreezeCounter(S32 counter) BOOL LLVOAvatar::updateLOD() { + if (isImpostor()) + { + return TRUE; + } + BOOL res = updateJointLODs(); LLFace* facep = mDrawable->getFace(0); if (facep->mVertexBuffer.isNull() || - LLVertexBuffer::sEnableVBOs && + (LLVertexBuffer::sEnableVBOs && ((facep->mVertexBuffer->getUsage() == GL_STATIC_DRAW ? TRUE : FALSE) != - (facep->getPool()->getVertexShaderLevel() > 0 ? TRUE : FALSE))) + (facep->getPool()->getVertexShaderLevel() > 0 ? TRUE : FALSE)))) { mDirtyMesh = TRUE; } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 4dc70511ce..ef5358198d 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -114,6 +114,8 @@ protected: // LLViewerObject interface and related //-------------------------------------------------------------------- public: + virtual void updateGL(); + virtual LLVOAvatar* asAvatar(); virtual U32 processUpdateMessage(LLMessageSystem *mesgsys, void **user_data, U32 block_num, @@ -329,7 +331,7 @@ private: public: U32 renderFootShadows(); - U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255)); + U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0); U32 renderRigid(); U32 renderSkinned(EAvatarRenderPass pass); U32 renderTransparent(BOOL first_pass); @@ -560,6 +562,7 @@ protected: /*virtual*/ void restoreMeshData(); private: BOOL mDirtyMesh; + BOOL mMeshTexturesDirty; typedef std::multimap<std::string, LLPolyMesh*> polymesh_map_t; polymesh_map_t mMeshes; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index a7b5b60842..20b8750fbf 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -82,6 +82,7 @@ #include "llgesturemgr.h" //needed to trigger the voice gesticulations #include "llvoiceclient.h" #include "llvoicevisualizer.h" // Ventrella +#include "llappearancemgr.h" #include "boost/lexical_cast.hpp" @@ -983,6 +984,11 @@ LLViewerJointAttachment *LLVOAvatarSelf::attachObject(LLViewerObject *viewer_obj updateAttachmentVisibility(gAgent.getCameraMode()); // Then make sure the inventory is in sync with the avatar. + LLViewerInventoryItem *item = gInventory.getItem(attachment->getItemID()); + if (item) + { + LLAppearanceManager::wearItem(item,false); // Add COF link for item. + } gInventory.addChangedMask(LLInventoryObserver::LABEL, attachment->getItemID()); gInventory.notifyObservers(); @@ -1331,7 +1337,7 @@ void LLVOAvatarSelf::getLocalTextureByteCount(S32* gl_bytes) const { S32 bytes = (S32)image_gl->getWidth() * image_gl->getHeight() * image_gl->getComponents(); - if (image_gl->hasValidGLTexture()) + if (image_gl->hasGLTexture()) { *gl_bytes += bytes; } @@ -1539,7 +1545,7 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded() // Check for the case that texture is defined but not sufficiently loaded to display anything. LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex ); - if (!baked_img || !baked_img->hasValidGLTexture()) + if (!baked_img || !baked_img->hasGLTexture()) { loading = TRUE; } diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp index 130e1fd749..8d3c8b6f1a 100644 --- a/indra/newview/llvoclouds.cpp +++ b/indra/newview/llvoclouds.cpp @@ -125,7 +125,10 @@ BOOL LLVOClouds::updateGeometry(LLDrawable *drawable) return TRUE; } - dirtySpatialGroup(); + if (drawable->isVisible()) + { + dirtySpatialGroup(TRUE); + } LLFace *facep; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 38c9ce28c4..7585842623 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -155,6 +155,11 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable) group = drawable->getSpatialGroup(); } + if (group && group->isVisible()) + { + dirtySpatialGroup(TRUE); + } + if (!num_parts) { if (group && drawable->getNumFaces()) @@ -353,12 +358,11 @@ U32 LLVOPartGroup::getPartitionType() const } LLParticlePartition::LLParticlePartition() -: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK) +: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK, TRUE, GL_DYNAMIC_DRAW_ARB) { mRenderPass = LLRenderPass::PASS_ALPHA; mDrawableType = LLPipeline::RENDER_TYPE_PARTICLES; mPartitionType = LLViewerRegion::PARTITION_PARTICLE; - mBufferUsage = GL_DYNAMIC_DRAW_ARB; mSlopRatio = 0.f; mLODPeriod = 1; } @@ -485,7 +489,9 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group) U32 end = start + facep->getGeomCount()-1; U32 offset = facep->getIndicesStart(); U32 count = facep->getIndicesCount(); - LLDrawInfo* info = new LLDrawInfo(start,end,count,offset,facep->getTexture(), buffer, fullbright); + LLDrawInfo* info = new LLDrawInfo(start,end,count,offset,facep->getTexture(), + //facep->getTexture(), + buffer, fullbright); info->mExtents[0] = group->mObjectExtents[0]; info->mExtents[1] = group->mObjectExtents[1]; info->mVSize = vsize; diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index ae5992099d..33b86660fa 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -1095,10 +1095,10 @@ BOOL LLVOSky::updateSky() mLastTotalAmbient.mV[2] - mTotalAmbient.mV[2]); if ( mForceUpdate - || ((dot_lighting < LIGHT_DIRECTION_THRESHOLD) + || (((dot_lighting < LIGHT_DIRECTION_THRESHOLD) || (delta_color.length() > COLOR_CHANGE_THRESHOLD) || !mInitialized) - && !direction.isExactlyZero()) + && !direction.isExactlyZero())) { mLastLightingDirection = direction; mLastTotalAmbient = mTotalAmbient; diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 157d719fcc..164f0f0cad 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -178,11 +178,19 @@ LLDrawable *LLVOSurfacePatch::createDrawable(LLPipeline *pipeline) static LLFastTimer::DeclareTimer FTM_UPDATE_TERRAIN("Update Terrain"); +void LLVOSurfacePatch::updateGL() +{ + if (mPatchp) + { + mPatchp->updateGL(); + } +} + BOOL LLVOSurfacePatch::updateGeometry(LLDrawable *drawable) { LLFastTimer ftm(FTM_UPDATE_TERRAIN); - dirtySpatialGroup(); + dirtySpatialGroup(TRUE); S32 min_comp, max_comp, range; min_comp = lltrunc(mPatchp->getMinComposition()); @@ -1014,12 +1022,10 @@ U32 LLVOSurfacePatch::getPartitionType() const } LLTerrainPartition::LLTerrainPartition() -: LLSpatialPartition(LLDrawPoolTerrain::VERTEX_DATA_MASK) +: LLSpatialPartition(LLDrawPoolTerrain::VERTEX_DATA_MASK, FALSE, GL_DYNAMIC_DRAW_ARB) { mOcclusionEnabled = FALSE; - mRenderByGroup = FALSE; mInfiniteFarClip = TRUE; - mBufferUsage = GL_DYNAMIC_DRAW_ARB; mDrawableType = LLPipeline::RENDER_TYPE_TERRAIN; mPartitionType = LLViewerRegion::PARTITION_TERRAIN; } diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h index 2dd8651899..aaf4d41fa1 100644 --- a/indra/newview/llvosurfacepatch.h +++ b/indra/newview/llvosurfacepatch.h @@ -64,6 +64,7 @@ public: virtual U32 getPartitionType() const; /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); + /*virtual*/ void updateGL(); /*virtual*/ BOOL updateGeometry(LLDrawable *drawable); /*virtual*/ BOOL updateLOD(); /*virtual*/ void updateFaceSize(S32 idx); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 86d9f31d07..615ae13bc2 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -312,10 +312,6 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys, // Load Species-Specific data // mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - if (mTreeImagep) - { - gGL.getTexUnit(0)->bind(mTreeImagep); - } mBranchLength = sSpeciesTable[mSpecies]->mBranchLength; mTrunkLength = sSpeciesTable[mSpecies]->mTrunkLength; mLeafScale = sSpeciesTable[mSpecies]->mLeafScale; @@ -1305,9 +1301,8 @@ U32 LLVOTree::getPartitionType() const } LLTreePartition::LLTreePartition() -: LLSpatialPartition(0) +: LLSpatialPartition(0, FALSE, 0) { - mRenderByGroup = FALSE; mDrawableType = LLPipeline::RENDER_TYPE_TREE; mPartitionType = LLViewerRegion::PARTITION_TREE; mSlopRatio = 0.f; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 940accdd06..93cb0f0f45 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -69,8 +69,10 @@ const S32 MIN_QUIET_FRAMES_COALESCE = 30; const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; const F32 FORCE_CULL_AREA = 8.f; +const F32 MAX_LOD_DISTANCE = 24.f; const S32 MAX_SCULPT_REZ = 128; + BOOL gAnimateTextures = TRUE; //extern BOOL gHideSelectedObjects; @@ -97,6 +99,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mNumFaces = 0; mLODChanged = FALSE; mSculptChanged = FALSE; + mSpotLightPriority = 0.f; } LLVOVolume::~LLVOVolume() @@ -320,11 +323,6 @@ void LLVOVolume::animateTextures() te->getScale(&scale_s, &scale_t); } - LLVector3 scale(scale_s, scale_t, 1.f); - LLVector3 trans(off_s+0.5f, off_t+0.5f, 0.f); - LLQuaternion quat; - quat.setQuat(rot, 0, 0, -1.f); - if (!facep->mTextureMatrix) { facep->mTextureMatrix = new LLMatrix4(); @@ -332,7 +330,43 @@ void LLVOVolume::animateTextures() LLMatrix4& tex_mat = *facep->mTextureMatrix; tex_mat.setIdentity(); - tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f)); + LLVector3 trans ; + + if(facep->isAtlasInUse()) + { + // + //if use atlas for animated texture + //apply the following transform to the animation matrix. + // + + F32 tcoord_xoffset = 0.f ; + F32 tcoord_yoffset = 0.f ; + F32 tcoord_xscale = 1.f ; + F32 tcoord_yscale = 1.f ; + if(facep->isAtlasInUse()) + { + const LLVector2* tmp = facep->getTexCoordOffset() ; + tcoord_xoffset = tmp->mV[0] ; + tcoord_yoffset = tmp->mV[1] ; + + tmp = facep->getTexCoordScale() ; + tcoord_xscale = tmp->mV[0] ; + tcoord_yscale = tmp->mV[1] ; + } + trans.set(LLVector3(tcoord_xoffset + tcoord_xscale * (off_s+0.5f), tcoord_yoffset + tcoord_yscale * (off_t+0.5f), 0.f)); + + tex_mat.translate(LLVector3(-(tcoord_xoffset + tcoord_xscale * 0.5f), -(tcoord_yoffset + tcoord_yscale * 0.5f), 0.f)); + } + else //non atlas + { + trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f)); + tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f)); + } + + LLVector3 scale(scale_s, scale_t, 1.f); + LLQuaternion quat; + quat.setQuat(rot, 0, 0, -1.f); + tex_mat.rotate(quat); LLMatrix4 mat; @@ -473,8 +507,8 @@ void LLVOVolume::updateTextures() if (face->mTextureMatrix != NULL) { - if (vsize < MIN_TEX_ANIM_SIZE && old_size > MIN_TEX_ANIM_SIZE || - vsize > MIN_TEX_ANIM_SIZE && old_size < MIN_TEX_ANIM_SIZE) + if ((vsize < MIN_TEX_ANIM_SIZE && old_size > MIN_TEX_ANIM_SIZE) || + (vsize > MIN_TEX_ANIM_SIZE && old_size < MIN_TEX_ANIM_SIZE)) { gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_TCOORD, FALSE); } @@ -541,6 +575,19 @@ void LLVOVolume::updateTextures() } } + if (getLightTextureID().notNull()) + { + LLLightImageParams* params = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + LLUUID id = params->getLightTexture(); + mLightTexture = LLViewerTextureManager::getFetchedTexture(id); + if (mLightTexture.notNull()) + { + F32 rad = getLightRadius(); + mLightTexture->addTextureStats(gPipeline.calcPixelArea(getPositionAgent(), + LLVector3(rad,rad,rad), + *LLViewerCamera::getInstance())); + } + } if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA)) { @@ -711,7 +758,17 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &volume_params, const S32 detail mSculptTexture = LLViewerTextureManager::getFetchedTexture(volume_params.getSculptID(), TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); if (mSculptTexture.notNull()) { - sculpt(); + //ignore sculpt GL usage since bao fixed this in a separate branch + if (!gGLActive) + { + gGLActive = TRUE; + sculpt(); + gGLActive = FALSE; + } + else + { + sculpt(); + } mSculptLevel = getVolume()->getSculptLevel(); } } @@ -836,12 +893,15 @@ BOOL LLVOVolume::calcLOD() } //update face texture sizes on lod calculation - updateTextures(); + //if (mDrawable->isVisible()) + //{ + // updateTextures(); + //} S32 cur_detail = 0; F32 radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length(); - F32 distance = mDrawable->mDistanceWRTCamera; + F32 distance = llmin(mDrawable->mDistanceWRTCamera, MAX_LOD_DISTANCE); distance *= sDistanceFactor; F32 rampDist = LLVOVolume::sLODFactor * 2; @@ -1452,6 +1512,41 @@ void LLVOVolume::updateTEData() //---------------------------------------------------------------------------- +void LLVOVolume::setLightTextureID(LLUUID id) +{ + if (id.notNull()) + { + if (!hasLightTexture()) + { + setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE, TRUE, true); + } + LLLightImageParams* param_block = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + if (param_block && param_block->getLightTexture() != id) + { + param_block->setLightTexture(id); + parameterChanged(LLNetworkData::PARAMS_LIGHT_IMAGE, true); + } + } + else + { + if (hasLightTexture()) + { + setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE, FALSE, true); + mLightTexture = NULL; + } + } +} + +void LLVOVolume::setSpotLightParams(LLVector3 params) +{ + LLLightImageParams* param_block = (LLLightImageParams*) getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + if (param_block && param_block->getParams() != params) + { + param_block->setParams(params); + parameterChanged(LLNetworkData::PARAMS_LIGHT_IMAGE, true); + } +} + void LLVOVolume::setIsLight(BOOL is_light) { if (is_light != getIsLight()) @@ -1578,6 +1673,83 @@ LLColor3 LLVOVolume::getLightColor() const } } +LLUUID LLVOVolume::getLightTextureID() const +{ + if (getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE)) + { + const LLLightImageParams *param_block = (const LLLightImageParams *)getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + if (param_block) + { + return param_block->getLightTexture(); + } + } + + return LLUUID::null; +} + + +LLVector3 LLVOVolume::getSpotLightParams() const +{ + if (getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE)) + { + const LLLightImageParams *param_block = (const LLLightImageParams *)getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE); + if (param_block) + { + return param_block->getParams(); + } + } + + return LLVector3(); +} + +F32 LLVOVolume::getSpotLightPriority() const +{ + return mSpotLightPriority; +} + +void LLVOVolume::updateSpotLightPriority() +{ + LLVector3 pos = mDrawable->getPositionAgent(); + LLVector3 at(0,0,-1); + at *= getRenderRotation(); + + F32 r = getLightRadius()*0.5f; + + pos += at * r; + + at = LLViewerCamera::getInstance()->getAtAxis(); + + pos -= at * r; + + mSpotLightPriority = gPipeline.calcPixelArea(pos, LLVector3(r,r,r), *LLViewerCamera::getInstance()); + + if (mLightTexture.notNull()) + { + mLightTexture->addTextureStats(mSpotLightPriority); + mLightTexture->setBoostLevel(LLViewerTexture::BOOST_CLOUDS); + } +} + + +LLViewerTexture* LLVOVolume::getLightTexture() +{ + LLUUID id = getLightTextureID(); + + if (id.notNull()) + { + if (mLightTexture.isNull() || id != mLightTexture->getID()) + { + mLightTexture = LLViewerTextureManager::getFetchedTexture(id); + } + } + else + { + mLightTexture = NULL; + } + + return mLightTexture; +} + F32 LLVOVolume::getLightIntensity() const { const LLLightParams *param_block = (const LLLightParams *)getParameterEntry(LLNetworkData::PARAMS_LIGHT); @@ -1669,6 +1841,16 @@ BOOL LLVOVolume::isSculpted() const return FALSE; } +BOOL LLVOVolume::hasLightTexture() const +{ + if (getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE)) + { + return TRUE; + } + + return FALSE; +} + BOOL LLVOVolume::isVolumeGlobal() const { if (mVolumeImpl) @@ -2116,9 +2298,9 @@ U32 LLVOVolume::getPartitionType() const } LLVolumePartition::LLVolumePartition() -: LLSpatialPartition(LLVOVolume::VERTEX_DATA_MASK, FALSE) +: LLSpatialPartition(LLVOVolume::VERTEX_DATA_MASK, TRUE, GL_DYNAMIC_DRAW_ARB) { - mLODPeriod = 16; + mLODPeriod = 32; mDepthMask = FALSE; mDrawableType = LLPipeline::RENDER_TYPE_VOLUME; mPartitionType = LLViewerRegion::PARTITION_VOLUME; @@ -2127,10 +2309,10 @@ LLVolumePartition::LLVolumePartition() } LLVolumeBridge::LLVolumeBridge(LLDrawable* drawablep) -: LLSpatialBridge(drawablep, LLVOVolume::VERTEX_DATA_MASK) +: LLSpatialBridge(drawablep, TRUE, LLVOVolume::VERTEX_DATA_MASK) { mDepthMask = FALSE; - mLODPeriod = 16; + mLODPeriod = 32; mDrawableType = LLPipeline::RENDER_TYPE_VOLUME; mPartitionType = LLViewerRegion::PARTITION_BRIDGE; @@ -2154,8 +2336,15 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, S32 idx = draw_vec.size()-1; - BOOL fullbright = (type == LLRenderPass::PASS_FULLBRIGHT || - type == LLRenderPass::PASS_ALPHA) ? facep->isState(LLFace::FULLBRIGHT) : FALSE; + BOOL fullbright = (type == LLRenderPass::PASS_FULLBRIGHT) || + (type == LLRenderPass::PASS_INVISIBLE) || + (type == LLRenderPass::PASS_ALPHA ? facep->isState(LLFace::FULLBRIGHT) : FALSE); + + if (!fullbright && type != LLRenderPass::PASS_GLOW && !facep->mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL)) + { + llwarns << "Non fullbright face has no normals!" << llendl; + return; + } const LLMatrix4* tex_mat = NULL; if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE) @@ -2218,7 +2407,7 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 end = start + facep->getGeomCount()-1; U32 offset = facep->getIndicesStart(); U32 count = facep->getIndicesCount(); - LLPointer<LLDrawInfo> draw_info = new LLDrawInfo(start,end,count,offset,tex, + LLPointer<LLDrawInfo> draw_info = new LLDrawInfo(start,end,count,offset, tex, facep->mVertexBuffer, fullbright, bump); draw_info->mGroup = group; draw_info->mVSize = facep->getVirtualSize(); @@ -2246,11 +2435,6 @@ static LLFastTimer::DeclareTimer FTM_REBUILD_VBO("VBO Rebuilt"); void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) { - if (LLPipeline::sSkipUpdate) - { - return; - } - if (group->changeLOD()) { group->mLastUpdateDistance = group->mDistance; @@ -2312,6 +2496,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) vobj->updateTextures(); vobj->preRebuild(); + drawablep->clearState(LLDrawable::HAS_ALPHA); + //for each face for (S32 i = 0; i < drawablep->getNumFaces(); i++) { @@ -2373,13 +2559,15 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) if (type == LLDrawPool::POOL_ALPHA) { if (LLPipeline::sFastAlpha && - (te->getColor().mV[VW] == 1.0f) && - facep->getTexture()->getIsAlphaMask()) + (te->getColor().mV[VW] == 1.0f) && + (!te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible, need to figure out why - for now, avoid + facep->getTexture()->getIsAlphaMask()) { //can be treated as alpha mask simple_faces.push_back(facep); } else { + drawablep->setState(LLDrawable::HAS_ALPHA); alpha_faces.push_back(facep); } } @@ -2413,7 +2601,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) { //needs normal + binormal bump_faces.push_back(facep); } - else if (te->getShiny() && LLPipeline::sRenderBump || + else if ((te->getShiny() && LLPipeline::sRenderBump) || !te->getFullbright()) { //needs normal simple_faces.push_back(facep); @@ -2468,16 +2656,18 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) if (LLPipeline::sDelayVBUpdate) { - group->setState(LLSpatialGroup::MESH_DIRTY); + group->setState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO); } mFaceList.clear(); } +static LLFastTimer::DeclareTimer FTM_VOLUME_GEOM("Volume Geometry"); void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) { - if (group->isState(LLSpatialGroup::MESH_DIRTY)) + if (group->isState(LLSpatialGroup::MESH_DIRTY) && !group->isState(LLSpatialGroup::GEOM_DIRTY)) { + LLFastTimer tm(FTM_VOLUME_GEOM); S32 num_mapped_veretx_buffer = LLVertexBuffer::sMappedCount ; group->mBuilt = 1.f; @@ -2554,7 +2744,12 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group) } } - group->clearState(LLSpatialGroup::MESH_DIRTY); + group->clearState(LLSpatialGroup::MESH_DIRTY | LLSpatialGroup::NEW_DRAWINFO); + } + + if (group->isState(LLSpatialGroup::NEW_DRAWINFO)) + { + llerrs << "WTF?" << llendl; } } @@ -2699,6 +2894,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: BOOL force_simple = facep->mPixelArea < FORCE_SIMPLE_RENDER_AREA; BOOL fullbright = facep->isState(LLFace::FULLBRIGHT); + if ((mask & LLVertexBuffer::MAP_NORMAL) == 0) + { //paranoia check to make sure GL doesn't try to read non-existant normals + fullbright = TRUE; + } + const LLTextureEntry* te = facep->getTextureEntry(); BOOL is_alpha = facep->getPoolType() == LLDrawPool::POOL_ALPHA ? TRUE : FALSE; @@ -2708,6 +2908,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: // can we safely treat this as an alpha mask? if (LLPipeline::sFastAlpha && (te->getColor().mV[VW] == 1.0f) && + (!te->getFullbright()) && // hack: alpha masking renders fullbright faces invisible, need to figure out why - for now, avoid facep->getTexture()->getIsAlphaMask()) { if (te->getFullbright()) @@ -2730,6 +2931,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } } else if (gPipeline.canUseVertexShaders() + && group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD && LLPipeline::sRenderBump && te->getShiny()) { @@ -2786,7 +2988,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } } - if (!is_alpha && te->getShiny()) + if (!is_alpha && te->getShiny() && LLPipeline::sRenderBump) { registerFace(group, facep, LLRenderPass::PASS_SHINY); } @@ -2797,7 +2999,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright); facep->setPoolType((fullbright) ? LLDrawPool::POOL_FULLBRIGHT : LLDrawPool::POOL_SIMPLE); - if (!force_simple && te->getBumpmap()) + if (!force_simple && te->getBumpmap() && LLPipeline::sRenderBump) { registerFace(group, facep, LLRenderPass::PASS_BUMP); } diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index d343d4db74..1b90219836 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -198,9 +198,18 @@ public: void setLightRadius(F32 radius); void setLightFalloff(F32 falloff); void setLightCutoff(F32 cutoff); + void setLightTextureID(LLUUID id); + void setSpotLightParams(LLVector3 params); + BOOL getIsLight() const; LLColor3 getLightBaseColor() const; // not scaled by intensity LLColor3 getLightColor() const; // scaled by intensity + LLUUID getLightTextureID() const; + LLVector3 getSpotLightParams() const; + void updateSpotLightPriority(); + F32 getSpotLightPriority() const; + + LLViewerTexture* getLightTexture(); F32 getLightIntensity() const; F32 getLightRadius() const; F32 getLightFalloff() const; @@ -210,6 +219,8 @@ public: U32 getVolumeInterfaceID() const; virtual BOOL isFlexible() const; virtual BOOL isSculpted() const; + virtual BOOL hasLightTexture() const; + BOOL isVolumeGlobal() const; BOOL canBeFlexible() const; BOOL setIsFlexible(BOOL is_flexible); @@ -232,12 +243,14 @@ private: BOOL mLODChanged; S32 mSculptLevel; BOOL mSculptChanged; + F32 mSpotLightPriority; LLMatrix4 mRelativeXform; LLMatrix3 mRelativeXformInvTrans; BOOL mVolumeChanged; F32 mVObjRadius; LLVolumeInterface *mVolumeImpl; LLPointer<LLViewerFetchedTexture> mSculptTexture; + LLPointer<LLViewerFetchedTexture> mLightTexture; // statics public: diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index e2357957ab..0c967f9020 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -277,9 +277,8 @@ U32 LLVOWater::getPartitionType() const } LLWaterPartition::LLWaterPartition() -: LLSpatialPartition(0) +: LLSpatialPartition(0, FALSE, 0) { - mRenderByGroup = FALSE; mInfiniteFarClip = TRUE; mDrawableType = LLPipeline::RENDER_TYPE_WATER; mPartitionType = LLViewerRegion::PARTITION_WATER; diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index 3661be500b..136ffe607d 100644 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -154,7 +154,7 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate) std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename)); llinfos << "Loading water settings from " << pathName << llendl; - std::ifstream presetsXML; + llifstream presetsXML; presetsXML.open(pathName.c_str()); // That failed, try loading from the users area instead. @@ -162,7 +162,8 @@ void LLWaterParamManager::loadPreset(const std::string & name,bool propagate) { pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename); llinfos << "Loading User water setting from " << pathName << llendl; - presetsXML.open(pathName.c_str()); + presetsXML.clear(); + presetsXML.open(pathName.c_str()); } if (presetsXML) @@ -279,8 +280,6 @@ void LLWaterParamManager::update(LLViewerCamera * cam) waterfloater->syncMenu(); } - stop_glerror(); - // only do this if we're dealing with shaders if(gPipeline.canUseVertexShaders()) { diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 7d9d0a6191..4bf64816c7 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -206,7 +206,8 @@ void LLWLParamManager::loadPreset(const std::string & name,bool propagate) { 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()); + presetsXML.clear(); + presetsXML.open(pathName.c_str()); } if (presetsXML) @@ -396,8 +397,6 @@ void LLWLParamManager::update(LLViewerCamera * cam) F32 camYaw = cam->getYaw(); - stop_glerror(); - // *TODO: potential optimization - this block may only need to be // executed some of the time. For example for water shaders only. { diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 700971dcc4..b8ecd9556f 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -635,7 +635,6 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) #ifdef IMMEDIATE_IMAGE_LOAD siminfo->mCurrentImage = LLViewerTextureManager::getFetchedTexture(siminfo->mMapImageID[LLWorldMap::getInstance()->mCurrentMap], MIPMAP_TRUE, FALSE, LLViewerTexture::LOD_TEXTURE); - gGL.getTexUnit(0)->bind(siminfo->mCurrentImage); siminfo->mCurrentImage->setAddressMode(LLTexUnit::TAM_CLAMP); #endif diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 4d7423eaae..79308f7e16 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -372,7 +372,7 @@ void LLWorldMapView::draw() current_image->setBoostLevel(LLViewerTexture::BOOST_MAP_LAYER); current_image->setKnownDrawSize(llround(pix_width * LLUI::sGLScaleFactor.mV[VX]), llround(pix_height * LLUI::sGLScaleFactor.mV[VY])); - if (!current_image->hasValidGLTexture()) + if (!current_image->hasGLTexture()) { continue; // better to draw nothing than the default image } @@ -474,7 +474,7 @@ void LLWorldMapView::draw() bool sim_visible = (gMapScale >= map_scale_cutoff) && (simimage != NULL) && - (simimage->hasValidGLTexture()); + (simimage->hasGLTexture()); if (sim_visible) { @@ -583,7 +583,7 @@ void LLWorldMapView::draw() gGL.vertex3f(right, top, 0.f); gGL.end(); - if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->hasValidGLTexture()) + if (gSavedSettings.getBOOL("MapShowLandForSale") && overlayimage && overlayimage->hasGLTexture()) { gGL.getTexUnit(0)->bind(overlayimage); gGL.color4f(1.f, 1.f, 1.f, alpha); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index b0c3e8d711..38052abfa3 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -102,6 +102,8 @@ #include "llwaterparammanager.h" #include "llspatialpartition.h" #include "llmutelist.h" +#include "lltoolpie.h" + #ifdef _DEBUG // Debug indices is disabled for now for debug performance - djs 4/24/02 @@ -161,6 +163,8 @@ LLFastTimer::DeclareTimer FTM_RENDER_BLOOM_FBO("First FBO"); LLFastTimer::DeclareTimer FTM_STATESORT("Sort Draw State"); LLFastTimer::DeclareTimer FTM_PIPELINE("Pipeline"); LLFastTimer::DeclareTimer FTM_CLIENT_COPY("Client Copy"); +LLFastTimer::DeclareTimer FTM_RENDER_DEFERRED("Deferred Shading"); + static LLFastTimer::DeclareTimer FTM_STATESORT_DRAWABLE("Sort Drawables"); static LLFastTimer::DeclareTimer FTM_STATESORT_POSTSORT("Post Sort"); @@ -186,6 +190,8 @@ std::string gPoolNames[] = "POOL_ALPHA", }; +void drawBox(const LLVector3& c, const LLVector3& r); + U32 nhpo2(U32 v) { U32 r = 1; @@ -267,7 +273,6 @@ BOOL LLPipeline::sDisableShaders = FALSE; BOOL LLPipeline::sRenderBump = TRUE; BOOL LLPipeline::sUseFarClip = TRUE; BOOL LLPipeline::sShadowRender = FALSE; -BOOL LLPipeline::sSkipUpdate = FALSE; BOOL LLPipeline::sWaterReflections = FALSE; BOOL LLPipeline::sRenderGlow = FALSE; BOOL LLPipeline::sReflectionRender = FALSE; @@ -279,6 +284,8 @@ BOOL LLPipeline::sRenderAttachedLights = TRUE; BOOL LLPipeline::sRenderAttachedParticles = TRUE; BOOL LLPipeline::sRenderDeferred = FALSE; S32 LLPipeline::sVisibleLightCount = 0; +F32 LLPipeline::sMinRenderSize = 0.f; + static LLCullResult* sCull = NULL; @@ -294,11 +301,11 @@ static const U32 gl_cube_face[] = void validate_framebuffer_object(); + void addDeferredAttachments(LLRenderTarget& target) { - target.addColorAttachment(GL_RGBA16F_ARB); //specular - target.addColorAttachment(GL_RGBA16F_ARB); //normal+z - target.addColorAttachment(GL_RGBA16F_ARB); //position + target.addColorAttachment(GL_RGBA); //specular + target.addColorAttachment(GL_RGBA); //normal+z } LLPipeline::LLPipeline() : @@ -340,6 +347,8 @@ LLPipeline::LLPipeline() : mLightingDetail(0) { mNoiseMap = 0; + mTrueNoiseMap = 0; + mLightFunc = 0; } void LLPipeline::init() @@ -389,6 +398,11 @@ void LLPipeline::init() LLViewerShaderMgr::instance()->setShaders(); stop_glerror(); + + for (U32 i = 0; i < 2; ++i) + { + mSpotLightFade[i] = 1.f; + } } LLPipeline::~LLPipeline() @@ -496,13 +510,6 @@ void LLPipeline::resizeScreenTexture() GLuint resX = gViewerWindow->getWorldViewWidth(); GLuint resY = gViewerWindow->getWorldViewHeight(); - U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor"); - if (res_mod > 1 && res_mod < resX && res_mod < resY) - { - resX /= res_mod; - resY /= res_mod; - } - allocateScreenBuffer(resX,resY); llinfos << "RESIZED SCREEN TEXTURE: " << resX << "x" << resY << llendl; @@ -512,17 +519,59 @@ void LLPipeline::resizeScreenTexture() void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) { U32 samples = gSavedSettings.getU32("RenderFSAASamples"); + + U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor"); + if (res_mod > 1 && res_mod < resX && res_mod < resY) + { + resX /= res_mod; + resY /= res_mod; + } + + if (gSavedSettings.getBOOL("RenderUIBuffer")) + { + mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + } + if (LLPipeline::sRenderDeferred) { //allocate deferred rendering color buffers - mDeferredScreen.allocate(resX, resY, GL_RGBA16F_ARB, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); addDeferredAttachments(mDeferredScreen); - mScreen.allocate(resX, resY, GL_RGBA16F_ARB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); - + mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE); + + for (U32 i = 0; i < 3; i++) + { + mDeferredLight[i].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + } + for (U32 i = 0; i < 2; i++) { - mDeferredLight[i].allocate(resX, resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE); + } + + F32 scale = gSavedSettings.getF32("RenderShadowResolutionScale"); + + for (U32 i = 0; i < 4; i++) + { + mShadow[i].allocate(U32(resX*scale),U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE); } + + + U32 width = nhpo2(U32(resX*scale))/2; + U32 height = width; + + for (U32 i = 4; i < 6; i++) + { + mShadow[i].allocate(width, height, 0, TRUE, FALSE); + } + + + + width = nhpo2(resX)/2; + height = nhpo2(resY)/2; + mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE); } else { @@ -532,25 +581,23 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY) if (gGLManager.mHasFramebufferMultisample && samples > 1) { + mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); + mScreen.setSampleBuffer(&mSampleBuffer); + if (LLPipeline::sRenderDeferred) { - mSampleBuffer.allocate(resX,resY,GL_RGBA16F_ARB,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); addDeferredAttachments(mSampleBuffer); mDeferredScreen.setSampleBuffer(&mSampleBuffer); } - else - { - mSampleBuffer.allocate(resX,resY,GL_RGBA,TRUE,TRUE,LLTexUnit::TT_RECT_TEXTURE,FALSE,samples); - } - mScreen.setSampleBuffer(&mSampleBuffer); stop_glerror(); } - else if (LLPipeline::sRenderDeferred) + + if (LLPipeline::sRenderDeferred) { //share depth buffer between deferred targets mDeferredScreen.shareDepthBuffer(mScreen); - for (U32 i = 0; i < 2; i++) - { + for (U32 i = 0; i < 3; i++) + { //share stencil buffer with screen space lightmap to stencil out sky mDeferredScreen.shareDepthBuffer(mDeferredLight[i]); } } @@ -583,17 +630,42 @@ void LLPipeline::releaseGLBuffers() mNoiseMap = 0; } + if (mTrueNoiseMap) + { + LLImageGL::deleteTextures(1, &mTrueNoiseMap); + mTrueNoiseMap = 0; + } + + if (mLightFunc) + { + LLImageGL::deleteTextures(1, &mLightFunc); + mLightFunc = 0; + } + mWaterRef.release(); mWaterDis.release(); mScreen.release(); + mUIScreen.release(); mSampleBuffer.releaseSampleBuffer(); mDeferredScreen.release(); + mDeferredDepth.release(); + for (U32 i = 0; i < 3; i++) + { + mDeferredLight[i].release(); + } + + mEdgeMap.release(); + mGIMap.release(); + mGIMapPost[0].release(); + mGIMapPost[1].release(); + mHighlight.release(); + mLuminanceMap.release(); - - for (U32 i = 0; i < 4; i++) + for (U32 i = 0; i < 6; i++) { - mSunShadow[i].release(); + mShadow[i].release(); } + for (U32 i = 0; i < 3; i++) { mGlow[i].release(); @@ -617,6 +689,7 @@ void LLPipeline::createGLBuffers() mWaterDis.allocate(res,res,GL_RGBA,TRUE,FALSE); } + mHighlight.allocate(256,256,GL_RGBA, FALSE, FALSE); stop_glerror(); @@ -638,11 +711,6 @@ void LLPipeline::createGLBuffers() if (sRenderDeferred) { - mSunShadow[0].allocate(1024,1024, 0, TRUE, FALSE); - mSunShadow[1].allocate(1024,1024, 0, TRUE, FALSE); - mSunShadow[2].allocate(1024,1024, 0, TRUE, FALSE); - mSunShadow[3].allocate(1024,1024, 0, TRUE, FALSE); - if (!mNoiseMap) { const U32 noiseRes = 128; @@ -662,6 +730,66 @@ void LLPipeline::createGLBuffers() LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB, GL_FLOAT, noise); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } + + if (!mTrueNoiseMap) + { + const U32 noiseRes = 128; + F32 noise[noiseRes*noiseRes*3]; + for (U32 i = 0; i < noiseRes*noiseRes*3; i++) + { + noise[i] = ll_frand()*2.0-1.0; + } + + LLImageGL::generateTextures(1, &mTrueNoiseMap); + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTrueNoiseMap); + LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_RGB16F_ARB, noiseRes, noiseRes, GL_RGB,GL_FLOAT, noise); + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + if (!mLightFunc) + { + U32 lightResX = gSavedSettings.getU32("RenderSpecularResX"); + U32 lightResY = gSavedSettings.getU32("RenderSpecularResY"); + U8* lg = new U8[lightResX*lightResY]; + + for (U32 y = 0; y < lightResY; ++y) + { + for (U32 x = 0; x < lightResX; ++x) + { + //spec func + F32 sa = (F32) x/(lightResX-1); + F32 spec = (F32) y/(lightResY-1); + //lg[y*lightResX+x] = (U8) (powf(sa, 128.f*spec*spec)*255); + + //F32 sp = acosf(sa)/(1.f-spec); + + sa = powf(sa, gSavedSettings.getF32("RenderSpecularExponent")); + F32 a = acosf(sa*0.25f+0.75f); + F32 m = llmax(0.5f-spec*0.5f, 0.001f); + F32 t2 = tanf(a)/m; + t2 *= t2; + + F32 c4a = (3.f+4.f*cosf(2.f*a)+cosf(4.f*a))/8.f; + F32 bd = 1.f/(4.f*m*m*c4a)*powf(F_E, -t2); + + lg[y*lightResX+x] = (U8) (llclamp(bd, 0.f, 1.f)*255); + } + } + + LLImageGL::generateTextures(1, &mLightFunc); + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc); + LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_ALPHA, lightResX, lightResY, GL_ALPHA, GL_UNSIGNED_BYTE, lg); + gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR); + + delete [] lg; + } + + if (gSavedSettings.getBOOL("RenderDeferredGI")) + { + mGIMap.allocate(512,512,GL_RGBA, TRUE, FALSE); + addDeferredAttachments(mGIMap); + } } } @@ -1038,6 +1166,31 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable) break; } } + + { + HighlightItem item(drawablep); + mHighlightSet.erase(item); + + if (mHighlightObject == drawablep) + { + mHighlightObject = NULL; + } + } + + for (U32 i = 0; i < 2; ++i) + { + if (mShadowSpotLight[i] == drawablep) + { + mShadowSpotLight[i] = NULL; + } + + if (mTargetShadowSpotLight[i] == drawablep) + { + mTargetShadowSpotLight[i] = NULL; + } + } + + } U32 LLPipeline::addObject(LLViewerObject *vobj) @@ -1357,6 +1510,8 @@ BOOL LLPipeline::getVisibleExtents(LLCamera& camera, LLVector3& min, LLVector3& min = LLVector3(F32_MAX, F32_MAX, F32_MAX); max = LLVector3(-F32_MAX, -F32_MAX, -F32_MAX); + U32 saved_camera_id = LLViewerCamera::sCurCameraID; + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; BOOL res = TRUE; @@ -1381,6 +1536,8 @@ BOOL LLPipeline::getVisibleExtents(LLCamera& camera, LLVector3& min, LLVector3& } } + LLViewerCamera::sCurCameraID = saved_camera_id; + return res; } @@ -1397,8 +1554,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl BOOL to_texture = LLPipeline::sUseOcclusion > 1 && !hasRenderType(LLPipeline::RENDER_TYPE_HUD) && - !sReflectionRender && - !sShadowRender && + LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD && gPipeline.canUseVertexShaders() && sRenderGlow; @@ -1407,11 +1563,15 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl mScreen.bindTarget(); } + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadMatrixd(gGLLastProjection); + glMatrixMode(GL_MODELVIEW); glPushMatrix(); gGLLastMatrix = NULL; - //glLoadMatrixd(gGLModelView); glLoadMatrixd(gGLLastModelView); + LLVertexBuffer::unbind(); LLGLDisable blend(GL_BLEND); LLGLDisable test(GL_ALPHA_TEST); @@ -1480,6 +1640,9 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl } + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (sUseOcclusion > 1) @@ -1491,10 +1654,6 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl { mScreen.flush(); } - else if (LLPipeline::sUseOcclusion > 1) - { - glFlush(); - } } void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) @@ -1506,7 +1665,7 @@ void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) group->setVisible(); - if (!sSkipUpdate) + if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD) { group->updateDistance(camera); } @@ -1518,6 +1677,12 @@ void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) return; } + if (sMinRenderSize > 0.f && + llmax(llmax(group->mBounds[1].mV[0], group->mBounds[1].mV[1]), group->mBounds[1].mV[2]) < sMinRenderSize) + { + return; + } + assertInitialized(); if (!group->mSpatialPartition->mRenderByGroup) @@ -1534,22 +1699,22 @@ void LLPipeline::markNotCulled(LLSpatialGroup* group, LLCamera& camera) void LLPipeline::markOccluder(LLSpatialGroup* group) { - if (sUseOcclusion > 1 && group && !group->isState(LLSpatialGroup::ACTIVE_OCCLUSION)) + if (sUseOcclusion > 1 && group && !group->isOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION)) { LLSpatialGroup* parent = group->getParent(); - if (!parent || !parent->isState(LLSpatialGroup::OCCLUDED)) + if (!parent || !parent->isOcclusionState(LLSpatialGroup::OCCLUDED)) { //only mark top most occluders as active occlusion sCull->pushOcclusionGroup(group); - group->setState(LLSpatialGroup::ACTIVE_OCCLUSION); + group->setOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION); if (parent && - !parent->isState(LLSpatialGroup::ACTIVE_OCCLUSION) && + !parent->isOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION) && parent->getElementCount() == 0 && parent->needsUpdate()) { sCull->pushOcclusionGroup(group); - parent->setState(LLSpatialGroup::ACTIVE_OCCLUSION); + parent->setOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION); } } } @@ -1572,18 +1737,18 @@ void LLPipeline::doOcclusion(LLCamera& camera) gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); LLGLDepthTest depth(GL_TRUE, GL_FALSE); + LLGLDisable cull(GL_CULL_FACE); if (LLPipeline::sUseOcclusion > 1) { for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter) { LLSpatialGroup* group = *iter; group->doOcclusion(&camera); - group->clearState(LLSpatialGroup::ACTIVE_OCCLUSION); + group->clearOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION); } } gGL.setColorMask(true, false); - glFlush(); } BOOL LLPipeline::updateDrawableGeom(LLDrawable* drawablep, BOOL priority) @@ -1597,6 +1762,78 @@ BOOL LLPipeline::updateDrawableGeom(LLDrawable* drawablep, BOOL priority) return update_complete; } +void LLPipeline::updateGL() +{ + while (!LLGLUpdate::sGLQ.empty()) + { + LLGLUpdate* glu = LLGLUpdate::sGLQ.front(); + glu->updateGL(); + glu->mInQ = FALSE; + LLGLUpdate::sGLQ.pop_front(); + } +} + +void LLPipeline::rebuildPriorityGroups() +{ + LLTimer update_timer; + LLMemType mt(LLMemType::MTYPE_PIPELINE); + + assertInitialized(); + + // Iterate through all drawables on the priority build queue, + for (LLSpatialGroup::sg_list_t::iterator iter = mGroupQ1.begin(); + iter != mGroupQ1.end(); ++iter) + { + LLSpatialGroup* group = *iter; + group->rebuildGeom(); + group->clearState(LLSpatialGroup::IN_BUILD_Q1); + } + + mGroupQ1.clear(); +} + +void LLPipeline::rebuildGroups() +{ + // Iterate through some drawables on the non-priority build queue + S32 size = (S32) mGroupQ2.size(); + S32 min_count = llclamp((S32) ((F32) (size * size)/4096*0.25f), 1, size); + + S32 count = 0; + + std::sort(mGroupQ2.begin(), mGroupQ2.end(), LLSpatialGroup::CompareUpdateUrgency()); + + LLSpatialGroup::sg_vector_t::iterator iter; + for (iter = mGroupQ2.begin(); + iter != mGroupQ2.end(); ++iter) + { + LLSpatialGroup* group = *iter; + + if (group->isDead()) + { + continue; + } + + group->rebuildGeom(); + + if (group->mSpatialPartition->mRenderByGroup) + { + count++; + } + + group->clearState(LLSpatialGroup::IN_BUILD_Q2); + + if (count > min_count) + { + ++iter; + break; + } + } + + mGroupQ2.erase(mGroupQ2.begin(), iter); + + updateMovedList(mMovedBridge); +} + void LLPipeline::updateGeom(F32 max_dtime) { LLTimer update_timer; @@ -1711,6 +1948,16 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera) if (drawablep->isSpatialBridge()) { + LLDrawable* root = ((LLSpatialBridge*) drawablep)->mDrawable; + + if (root && root->getParent() && root->getVObj() && root->getVObj()->isAttachment()) + { + LLVOAvatar* av = root->getParent()->getVObj()->asAvatar(); + if (av->isImpostor()) + { + return; + } + } sCull->pushBridge((LLSpatialBridge*) drawablep); } else @@ -1840,6 +2087,59 @@ void LLPipeline::markTextured(LLDrawable *drawablep) } } +void LLPipeline::markGLRebuild(LLGLUpdate* glu) +{ + if (glu && !glu->mInQ) + { + LLGLUpdate::sGLQ.push_back(glu); + glu->mInQ = TRUE; + } +} + +void LLPipeline::markRebuild(LLSpatialGroup* group, BOOL priority) +{ + LLMemType mt(LLMemType::MTYPE_PIPELINE); + //assert_main_thread(); + + if (group && !group->isDead() && group->mSpatialPartition) + { + if (group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_HUD) + { + priority = TRUE; + } + + if (priority) + { + if (!group->isState(LLSpatialGroup::IN_BUILD_Q1)) + { + mGroupQ1.push_back(group); + group->setState(LLSpatialGroup::IN_BUILD_Q1); + + if (group->isState(LLSpatialGroup::IN_BUILD_Q2)) + { + LLSpatialGroup::sg_vector_t::iterator iter = std::find(mGroupQ2.begin(), mGroupQ2.end(), group); + if (iter != mGroupQ2.end()) + { + mGroupQ2.erase(iter); + } + group->clearState(LLSpatialGroup::IN_BUILD_Q2); + } + } + } + else if (!group->isState(LLSpatialGroup::IN_BUILD_Q2 | LLSpatialGroup::IN_BUILD_Q1)) + { + //llerrs << "Non-priority updates not yet supported!" << llendl; + if (std::find(mGroupQ2.begin(), mGroupQ2.end(), group) != mGroupQ2.end()) + { + llerrs << "WTF?" << llendl; + } + mGroupQ2.push_back(group); + group->setState(LLSpatialGroup::IN_BUILD_Q2); + + } + } +} + void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags flag, BOOL priority) { LLMemType mt(LLMemType::MTYPE_PIPELINE_MARK_REBUILD); @@ -1896,48 +2196,48 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) grabReferences(result); + for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) { - for (LLCullResult::sg_list_t::iterator iter = sCull->beginDrawableGroups(); iter != sCull->endDrawableGroups(); ++iter) + LLSpatialGroup* group = *iter; + group->checkOcclusion(); + if (sUseOcclusion > 1 && group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { - LLSpatialGroup* group = *iter; - group->checkOcclusion(); - if (sUseOcclusion && group->isState(LLSpatialGroup::OCCLUDED)) - { - markOccluder(group); - } - else + markOccluder(group); + } + else + { + group->setVisible(); + for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) { - group->setVisible(); - for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) - { - markVisible(*i, camera); - } + markVisible(*i, camera); } } + } - for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter) + { + LLSpatialGroup* group = *iter; + group->checkOcclusion(); + if (sUseOcclusion > 1 && group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { - LLSpatialGroup* group = *iter; - group->checkOcclusion(); - if (sUseOcclusion && group->isState(LLSpatialGroup::OCCLUDED)) - { - markOccluder(group); - } - else - { - group->setVisible(); - stateSort(group, camera); - } + markOccluder(group); + } + else + { + group->setVisible(); + stateSort(group, camera); } } + + if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD) { for (LLCullResult::bridge_list_t::iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) { LLCullResult::bridge_list_t::iterator cur_iter = i; LLSpatialBridge* bridge = *cur_iter; LLSpatialGroup* group = bridge->getSpatialGroup(); - if (!bridge->isDead() && group && !group->isState(LLSpatialGroup::OCCLUDED)) + if (!bridge->isDead() && group && !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { stateSort(bridge, camera); } @@ -1968,7 +2268,7 @@ void LLPipeline::stateSort(LLCamera& camera, LLCullResult &result) void LLPipeline::stateSort(LLSpatialGroup* group, LLCamera& camera) { LLMemType mt(LLMemType::MTYPE_PIPELINE_STATE_SORT); - if (!sSkipUpdate && group->changeLOD()) + if (group->changeLOD()) { for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) { @@ -1982,7 +2282,7 @@ void LLPipeline::stateSort(LLSpatialGroup* group, LLCamera& camera) void LLPipeline::stateSort(LLSpatialBridge* bridge, LLCamera& camera) { LLMemType mt(LLMemType::MTYPE_PIPELINE_STATE_SORT); - if (!sSkipUpdate && bridge->getSpatialGroup()->changeLOD()) + if (!sShadowRender && bridge->getSpatialGroup()->changeLOD()) { bool force_update = false; bridge->updateDistance(camera, force_update); @@ -2039,41 +2339,48 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera) } } - LLSpatialGroup* group = drawablep->getSpatialGroup(); - if (!group || group->changeLOD()) + if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD) { - if (drawablep->isVisible() && !sSkipUpdate) + LLSpatialGroup* group = drawablep->getSpatialGroup(); + if (!group || group->changeLOD()) { - if (!drawablep->isActive()) + if (drawablep->isVisible()) { - bool force_update = false; - drawablep->updateDistance(camera, force_update); + if (!drawablep->isActive()) + { + bool force_update = false; + drawablep->updateDistance(camera, force_update); + } + else if (drawablep->isAvatar()) + { + bool force_update = false; + drawablep->updateDistance(camera, force_update); // calls vobj->updateLOD() which calls LLVOAvatar::updateVisibility() + } } - else if (drawablep->isAvatar()) - { - bool force_update = false; - drawablep->updateDistance(camera, force_update); // calls vobj->updateLOD() which calls LLVOAvatar::updateVisibility() - } } } - for (LLDrawable::face_list_t::iterator iter = drawablep->mFaces.begin(); - iter != drawablep->mFaces.end(); iter++) + if (!drawablep->getVOVolume()) { - LLFace* facep = *iter; - - if (facep->hasGeometry()) + for (LLDrawable::face_list_t::iterator iter = drawablep->mFaces.begin(); + iter != drawablep->mFaces.end(); iter++) { - if (facep->getPool()) - { - facep->getPool()->enqueue(facep); - } - else + LLFace* facep = *iter; + + if (facep->hasGeometry()) { - break; + if (facep->getPool()) + { + facep->getPool()->enqueue(facep); + } + else + { + break; + } } } } + mNumVisibleFaces += drawablep->getNumFaces(); } @@ -2230,7 +2537,7 @@ void LLPipeline::postSort(LLCamera& camera) { LLSpatialGroup* group = *i; if (!sUseOcclusion || - !group->isState(LLSpatialGroup::OCCLUDED)) + !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { group->rebuildGeom(); } @@ -2239,7 +2546,7 @@ void LLPipeline::postSort(LLCamera& camera) //rebuild groups sCull->assertDrawMapsEmpty(); - LLSpatialGroup::sNoDelete = FALSE; + /*LLSpatialGroup::sNoDelete = FALSE; for (LLCullResult::sg_list_t::iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i) { LLSpatialGroup* group = *i; @@ -2251,8 +2558,10 @@ void LLPipeline::postSort(LLCamera& camera) group->rebuildGeom(); } - LLSpatialGroup::sNoDelete = TRUE; + LLSpatialGroup::sNoDelete = TRUE;*/ + + rebuildPriorityGroups(); const S32 bin_count = 1024*8; @@ -2274,42 +2583,65 @@ void LLPipeline::postSort(LLCamera& camera) { LLSpatialGroup* group = *i; if (sUseOcclusion && - group->isState(LLSpatialGroup::OCCLUDED)) + group->isOcclusionState(LLSpatialGroup::OCCLUDED)) { continue; } - + + if (group->isState(LLSpatialGroup::NEW_DRAWINFO) && group->isState(LLSpatialGroup::GEOM_DIRTY)) + { //no way this group is going to be drawable without a rebuild + group->rebuildGeom(); + } + for (LLSpatialGroup::draw_map_t::iterator j = group->mDrawMap.begin(); j != group->mDrawMap.end(); ++j) { LLSpatialGroup::drawmap_elem_t& src_vec = j->second; - - for (LLSpatialGroup::drawmap_elem_t::iterator k = src_vec.begin(); k != src_vec.end(); ++k) + if (!hasRenderType(j->first)) { - sCull->pushDrawInfo(j->first, *k); + continue; } - } - - LLSpatialGroup::draw_map_t::iterator alpha = group->mDrawMap.find(LLRenderPass::PASS_ALPHA); - - if (alpha != group->mDrawMap.end()) - { //store alpha groups for sorting - LLSpatialBridge* bridge = group->mSpatialPartition->asBridge(); - if (!sSkipUpdate) + + for (LLSpatialGroup::drawmap_elem_t::iterator k = src_vec.begin(); k != src_vec.end(); ++k) { - if (bridge) + if (sMinRenderSize > 0.f) { - LLCamera trans_camera = bridge->transformCamera(camera); - group->updateDistance(trans_camera); + LLVector3 bounds = (*k)->mExtents[1]-(*k)->mExtents[0]; + if (llmax(llmax(bounds.mV[0], bounds.mV[1]), bounds.mV[2]) > sMinRenderSize) + { + sCull->pushDrawInfo(j->first, *k); + } } else { - group->updateDistance(camera); + sCull->pushDrawInfo(j->first, *k); } } + } + + if (hasRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA)) + { + LLSpatialGroup::draw_map_t::iterator alpha = group->mDrawMap.find(LLRenderPass::PASS_ALPHA); - if (hasRenderType(LLDrawPool::POOL_ALPHA)) - { - sCull->pushAlphaGroup(group); + if (alpha != group->mDrawMap.end()) + { //store alpha groups for sorting + LLSpatialBridge* bridge = group->mSpatialPartition->asBridge(); + if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD) + { + if (bridge) + { + LLCamera trans_camera = bridge->transformCamera(camera); + group->updateDistance(trans_camera); + } + else + { + group->updateDistance(camera); + } + } + + if (hasRenderType(LLDrawPool::POOL_ALPHA)) + { + sCull->pushAlphaGroup(group); + } } } } @@ -2408,7 +2740,7 @@ void LLPipeline::postSort(LLCamera& camera) } } - LLSpatialGroup::sNoDelete = FALSE; + //LLSpatialGroup::sNoDelete = FALSE; } @@ -2470,6 +2802,103 @@ void LLPipeline::renderHighlights() LLGLEnable color_mat(GL_COLOR_MATERIAL); disableLights(); + if (!hasRenderType(LLPipeline::RENDER_TYPE_HUD) && !mHighlightSet.empty()) + { //draw blurry highlight image over screen + LLGLEnable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + LLGLDisable test(GL_ALPHA_TEST); + + LLGLEnable stencil(GL_STENCIL_TEST); + gGL.flush(); + glStencilMask(0xFFFFFFFF); + glClearStencil(1); + glClear(GL_STENCIL_BUFFER_BIT); + + glStencilFunc(GL_ALWAYS, 0, 0xFFFFFFFF); + glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); + + gGL.setColorMask(false, false); + for (std::set<HighlightItem>::iterator iter = mHighlightSet.begin(); iter != mHighlightSet.end(); ++iter) + { + renderHighlight(iter->mItem->getVObj(), 1.f); + } + gGL.setColorMask(true, false); + + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); + glStencilFunc(GL_NOTEQUAL, 0, 0xFFFFFFFF); + + //gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); + + gGL.pushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + gGL.pushMatrix(); + glLoadIdentity(); + + gGL.getTexUnit(0)->bind(&mHighlight); + + LLVector2 tc1; + LLVector2 tc2; + + tc1.setVec(0,0); + tc2.setVec(2,2); + + gGL.begin(LLRender::TRIANGLES); + + F32 scale = gSavedSettings.getF32("RenderHighlightBrightness"); + LLColor4 color = gSavedSettings.getColor4("RenderHighlightColor"); + F32 thickness = gSavedSettings.getF32("RenderHighlightThickness"); + + for (S32 pass = 0; pass < 2; ++pass) + { + if (pass == 0) + { + gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA); + } + else + { + gGL.setSceneBlendType(LLRender::BT_ALPHA); + } + + for (S32 i = 0; i < 8; ++i) + { + for (S32 j = 0; j < 8; ++j) + { + LLVector2 tc(i-4+0.5f, j-4+0.5f); + + F32 dist = 1.f-(tc.length()/sqrtf(32.f)); + dist *= scale/64.f; + + tc *= thickness; + tc.mV[0] = (tc.mV[0])/mHighlight.getWidth(); + tc.mV[1] = (tc.mV[1])/mHighlight.getHeight(); + + gGL.color4f(color.mV[0], + color.mV[1], + color.mV[2], + color.mV[3]*dist); + + gGL.texCoord2f(tc.mV[0]+tc1.mV[0], tc.mV[1]+tc2.mV[1]); + gGL.vertex2f(-1,3); + + gGL.texCoord2f(tc.mV[0]+tc1.mV[0], tc.mV[1]+tc1.mV[1]); + gGL.vertex2f(-1,-1); + + gGL.texCoord2f(tc.mV[0]+tc2.mV[0], tc.mV[1]+tc1.mV[1]); + gGL.vertex2f(3,-1); + } + } + } + + gGL.end(); + + gGL.popMatrix(); + glMatrixMode(GL_MODELVIEW); + gGL.popMatrix(); + + //gGL.setSceneBlendType(LLRender::BT_ALPHA); + } + if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0)) { gHighlightProgram.bind(); @@ -2611,6 +3040,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) stop_glerror(); LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDrawPools"); + for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) { LLDrawPool *poolp = *iter; @@ -2859,15 +3289,18 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera) poolp->endDeferredPass(i); LLVertexBuffer::unbind(); - GLint depth; - glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); - if (depth > 3) + if (gDebugGL || gDebugPipeline) { - llerrs << "GL matrix stack corrupted!" << llendl; + GLint depth; + glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); + if (depth > 3) + { + llerrs << "GL matrix stack corrupted!" << llendl; + } + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + LLGLState::checkClientArrays(); } - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); } } else @@ -2950,15 +3383,18 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera) poolp->endPostDeferredPass(i); LLVertexBuffer::unbind(); - GLint depth; - glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); - if (depth > 3) + if (gDebugGL || gDebugPipeline) { - llerrs << "GL matrix stack corrupted!" << llendl; + GLint depth; + glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth); + if (depth > 3) + { + llerrs << "GL matrix stack corrupted!" << llendl; + } + LLGLState::checkStates(); + LLGLState::checkTextureChannels(); + LLGLState::checkClientArrays(); } - LLGLState::checkStates(); - LLGLState::checkTextureChannels(); - LLGLState::checkClientArrays(); } } else @@ -3118,7 +3554,7 @@ void LLPipeline::renderDebug() for (LLCullResult::bridge_list_t::const_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) { LLSpatialBridge* bridge = *i; - if (!bridge->isDead() && !bridge->isState(LLSpatialGroup::OCCLUDED) && hasRenderType(bridge->mDrawableType)) + if (!bridge->isDead() && hasRenderType(bridge->mDrawableType)) { glPushMatrix(); glMultMatrixf((F32*)bridge->mDrawable->getRenderMatrix().mMatrix); @@ -3129,79 +3565,91 @@ void LLPipeline::renderDebug() if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) { + LLGLEnable blend(GL_BLEND); + LLGLDepthTest depth(TRUE, FALSE); + LLGLDisable cull(GL_CULL_FACE); + gGL.color4f(1,1,1,1); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + F32 a = 0.1f; + F32 col[] = { - 1,1,0, - 0,1,1, - 1,0,1, - 1,1,1, - 1,0,0, - 0,1,0, - 0,0,1, - 0,0,0 + 1,0,0,a, + 0,1,0,a, + 0,0,1,a, + 1,0,1,a, + + 1,1,0,a, + 0,1,1,a, + 1,1,1,a, + 1,0,1,a, }; for (U32 i = 0; i < 8; i++) { - gGL.color3fv(col+i*3); - - gGL.begin(LLRender::LINES); - - LLVector3* frust = mShadowCamera[i].mAgentFrustum; - - gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[1].mV); - gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[2].mV); - gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[3].mV); - gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[0].mV); - - gGL.vertex3fv(frust[4].mV); gGL.vertex3fv(frust[5].mV); - gGL.vertex3fv(frust[5].mV); gGL.vertex3fv(frust[6].mV); - gGL.vertex3fv(frust[6].mV); gGL.vertex3fv(frust[7].mV); - gGL.vertex3fv(frust[7].mV); gGL.vertex3fv(frust[4].mV); - - gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV); - gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV); - gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[6].mV); - gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[7].mV); + if (i > 3) + { + gGL.color4fv(col+(i-4)*4); + LLVector3* frust = mShadowCamera[i].mAgentFrustum; + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV); + gGL.vertex3fv(frust[1].mV); gGL.vertex3fv(frust[5].mV); + gGL.vertex3fv(frust[2].mV); gGL.vertex3fv(frust[6].mV); + gGL.vertex3fv(frust[3].mV); gGL.vertex3fv(frust[7].mV); + gGL.vertex3fv(frust[0].mV); gGL.vertex3fv(frust[4].mV); + gGL.end(); + + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.vertex3fv(frust[0].mV); + gGL.vertex3fv(frust[1].mV); + gGL.vertex3fv(frust[3].mV); + gGL.vertex3fv(frust[2].mV); + gGL.end(); + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.vertex3fv(frust[4].mV); + gGL.vertex3fv(frust[5].mV); + gGL.vertex3fv(frust[7].mV); + gGL.vertex3fv(frust[6].mV); + gGL.end(); + } + + if (i < 4) { - LLVector3* ext = mShadowExtents[i]; + gGL.begin(LLRender::LINES); - LLVector3 box[] = + F32* c = col+i*4; + for (U32 j = 0; j < mShadowFrustPoints[i].size(); ++j) { - LLVector3(ext[0][0], ext[0][1], ext[0][2]), - LLVector3(ext[1][0], ext[0][1], ext[0][2]), - LLVector3(ext[1][0], ext[1][1], ext[0][2]), - LLVector3(ext[0][0], ext[1][1], ext[0][2]), - LLVector3(ext[0][0], ext[0][1], ext[1][2]), - LLVector3(ext[1][0], ext[0][1], ext[1][2]), - LLVector3(ext[1][0], ext[1][1], ext[1][2]), - LLVector3(ext[0][0], ext[1][1], ext[1][2]), - }; - gGL.vertex3fv(box[0].mV); gGL.vertex3fv(box[1].mV); - gGL.vertex3fv(box[1].mV); gGL.vertex3fv(box[2].mV); - gGL.vertex3fv(box[2].mV); gGL.vertex3fv(box[3].mV); - gGL.vertex3fv(box[3].mV); gGL.vertex3fv(box[0].mV); - - gGL.vertex3fv(box[4].mV); gGL.vertex3fv(box[5].mV); - gGL.vertex3fv(box[5].mV); gGL.vertex3fv(box[6].mV); - gGL.vertex3fv(box[6].mV); gGL.vertex3fv(box[7].mV); - gGL.vertex3fv(box[7].mV); gGL.vertex3fv(box[4].mV); - - gGL.vertex3fv(box[0].mV); gGL.vertex3fv(box[4].mV); - gGL.vertex3fv(box[1].mV); gGL.vertex3fv(box[5].mV); - gGL.vertex3fv(box[2].mV); gGL.vertex3fv(box[6].mV); - gGL.vertex3fv(box[3].mV); gGL.vertex3fv(box[7].mV); + gGL.color3fv(c); + + for (U32 k = 0; k < mShadowFrustPoints[i].size(); ++k) + { + if (j != k) + { + gGL.vertex3fv(mShadowFrustPoints[i][j].mV); + gGL.vertex3fv(mShadowFrustPoints[i][k].mV); + } + } + + if (!mShadowFrustOrigin[i].isExactlyZero()) + { + gGL.vertex3fv(mShadowFrustPoints[i][j].mV); + gGL.color4f(1,1,1,1); + gGL.vertex3fv(mShadowFrustOrigin[i].mV); + } + } + gGL.end(); } - gGL.end(); - - for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + /*for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); iter != LLWorld::getInstance()->getRegionList().end(); ++iter) { LLViewerRegion* region = *iter; @@ -3216,7 +3664,7 @@ void LLPipeline::renderDebug() } } } - } + }*/ } } @@ -3253,6 +3701,55 @@ void LLPipeline::renderDebug() } } + if (mRenderDebugMask & LLPipeline::RENDER_DEBUG_BUILD_QUEUE) + { + U32 count = 0; + U32 size = mBuildQ2.size(); + LLColor4 col; + + LLGLEnable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep); + + for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin(); iter != mGroupQ2.end(); ++iter) + { + LLSpatialGroup* group = *iter; + if (group->isDead()) + { + continue; + } + + LLSpatialBridge* bridge = group->mSpatialPartition->asBridge(); + + if (bridge && (!bridge->mDrawable || bridge->mDrawable->isDead())) + { + continue; + } + + if (bridge) + { + gGL.pushMatrix(); + glMultMatrixf((F32*)bridge->mDrawable->getRenderMatrix().mMatrix); + } + + F32 alpha = (F32) (size-count)/size; + + + LLVector2 c(1.f-alpha, alpha); + c.normVec(); + + + ++count; + col.set(c.mV[0], c.mV[1], 0, alpha*0.5f+0.1f); + group->drawObjectBox(col); + + if (bridge) + { + gGL.popMatrix(); + } + } + } + gGL.flush(); } @@ -3871,37 +4368,34 @@ void LLPipeline::calcNearbyLights(LLCamera& camera) F32 max_dist = LIGHT_MAX_RADIUS * 4.f; // ignore enitrely lights > 4 * max light rad // UPDATE THE EXISTING NEARBY LIGHTS - if (!LLPipeline::sSkipUpdate) + light_set_t cur_nearby_lights; + for (light_set_t::iterator iter = mNearbyLights.begin(); + iter != mNearbyLights.end(); iter++) { - light_set_t cur_nearby_lights; - for (light_set_t::iterator iter = mNearbyLights.begin(); - iter != mNearbyLights.end(); iter++) + const Light* light = &(*iter); + LLDrawable* drawable = light->drawable; + LLVOVolume* volight = drawable->getVOVolume(); + if (!volight || !drawable->isState(LLDrawable::LIGHT)) { - const Light* light = &(*iter); - LLDrawable* drawable = light->drawable; - LLVOVolume* volight = drawable->getVOVolume(); - if (!volight || !drawable->isState(LLDrawable::LIGHT)) - { - drawable->clearState(LLDrawable::NEARBY_LIGHT); - continue; - } - if (light->fade <= -LIGHT_FADE_TIME) - { - drawable->clearState(LLDrawable::NEARBY_LIGHT); - continue; - } - if (!sRenderAttachedLights && volight && volight->isAttachment()) - { - drawable->clearState(LLDrawable::NEARBY_LIGHT); - continue; - } - - F32 dist = calc_light_dist(volight, cam_pos, max_dist); - cur_nearby_lights.insert(Light(drawable, dist, light->fade)); + drawable->clearState(LLDrawable::NEARBY_LIGHT); + continue; + } + if (light->fade <= -LIGHT_FADE_TIME) + { + drawable->clearState(LLDrawable::NEARBY_LIGHT); + continue; } - mNearbyLights = cur_nearby_lights; + if (!sRenderAttachedLights && volight && volight->isAttachment()) + { + drawable->clearState(LLDrawable::NEARBY_LIGHT); + continue; + } + + F32 dist = calc_light_dist(volight, cam_pos, max_dist); + cur_nearby_lights.insert(Light(drawable, dist, light->fade)); } - + mNearbyLights = cur_nearby_lights; + // FIND NEW LIGHTS THAT ARE IN RANGE light_set_t new_nearby_lights; for (LLDrawable::drawable_set_t::iterator iter = mLights.begin(); @@ -5169,8 +5663,6 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) tc1.setVec(0,0); tc2.setVec(2,2); - - // power of two between 1 and 1024 U32 glowResPow = gSavedSettings.getS32("RenderGlowResolutionPow"); const U32 glow_res = llmax(1, @@ -5245,15 +5737,40 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGLViewport[3] = gViewerWindow->getWorldViewRect().getHeight(); glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); + tc2.setVec((F32) gViewerWindow->getWorldViewWidth(), + (F32) gViewerWindow->getWorldViewHeight()); + gGL.flush(); + LLVertexBuffer::unbind(); + + if (LLPipeline::sRenderDeferred && LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) { - LLVertexBuffer::unbind(); + LLGLDisable blend(GL_BLEND); + bindDeferredShader(gDeferredGIFinalProgram); + S32 channel = gDeferredGIFinalProgram.enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, LLTexUnit::TT_RECT_TEXTURE); + if (channel > -1) + { + mScreen.bindTexture(0, channel); + } + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.texCoord2f(tc1.mV[0], tc1.mV[1]); + gGL.vertex2f(-1,-1); + + gGL.texCoord2f(tc1.mV[0], tc2.mV[1]); + gGL.vertex2f(-1,3); + gGL.texCoord2f(tc2.mV[0], tc1.mV[1]); + gGL.vertex2f(3,-1); - tc2.setVec((F32) gViewerWindow->getWorldViewWidth(), - (F32) gViewerWindow->getWorldViewHeight()); + gGL.end(); + + unbindDeferredShader(gDeferredGIFinalProgram); + } + else + { if (res_mod > 1) { @@ -5294,7 +5811,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.getTexUnit(0)->bind(&mGlow[1]); gGL.getTexUnit(1)->activate(); 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); @@ -5313,6 +5831,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } + gGL.setSceneBlendType(LLRender::BT_ALPHA); glMatrixMode(GL_PROJECTION); glPopMatrix(); @@ -5326,46 +5845,194 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield) } -void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index) +void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, LLRenderTarget* gi_source, LLRenderTarget* last_gi_post, U32 noise_map) { + if (noise_map == 0xFFFFFFFF) + { + noise_map = mNoiseMap; + } + + LLGLState::checkTextureChannels(); + shader.bind(); S32 channel = 0; channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DIFFUSE, LLTexUnit::TT_RECT_TEXTURE); if (channel > -1) { mDeferredScreen.bindTexture(0,channel); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, LLTexUnit::TT_RECT_TEXTURE); if (channel > -1) { mDeferredScreen.bindTexture(1, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL, LLTexUnit::TT_RECT_TEXTURE); if (channel > -1) { mDeferredScreen.bindTexture(2, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } - channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_POSITION, LLTexUnit::TT_RECT_TEXTURE); + if (gi_source) + { + BOOL has_gi = FALSE; + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_DIFFUSE); + if (channel > -1) + { + has_gi = TRUE; + gi_source->bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_SPECULAR); + if (channel > -1) + { + has_gi = TRUE; + gi_source->bindTexture(1, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_NORMAL); + if (channel > -1) + { + has_gi = TRUE; + gi_source->bindTexture(2, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_MIN_POS); + if (channel > -1) + { + has_gi = TRUE; + gi_source->bindTexture(1, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_MAX_POS); + if (channel > -1) + { + has_gi = TRUE; + gi_source->bindTexture(3, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_DIFFUSE); + if (channel > -1) + { + has_gi = TRUE; + last_gi_post->bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_NORMAL); + if (channel > -1) + { + has_gi = TRUE; + last_gi_post->bindTexture(2, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_MAX_POS); + if (channel > -1) + { + has_gi = TRUE; + last_gi_post->bindTexture(1, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_MIN_POS); + if (channel > -1) + { + has_gi = TRUE; + last_gi_post->bindTexture(3, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_DEPTH); + if (channel > -1) + { + has_gi = TRUE; + gGL.getTexUnit(channel)->bind(gi_source, TRUE); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + stop_glerror(); + + glTexParameteri(LLTexUnit::getInternalType(mGIMap.getUsage()), GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); + glTexParameteri(LLTexUnit::getInternalType(mGIMap.getUsage()), GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); + + stop_glerror(); + } + + if (has_gi) + { + F32 range_x = llmin(mGIRange.mV[0], 1.f); + F32 range_y = llmin(mGIRange.mV[1], 1.f); + + LLVector2 scale(range_x,range_y); + + LLVector2 kern[25]; + + for (S32 i = 0; i < 5; ++i) + { + for (S32 j = 0; j < 5; ++j) + { + S32 idx = i*5+j; + kern[idx].mV[0] = (i-2)*0.5f; + kern[idx].mV[1] = (j-2)*0.5f; + kern[idx].scaleVec(scale); + } + } + + shader.uniform2fv("gi_kern", 25, (F32*) kern); + shader.uniformMatrix4fv("gi_mat", 1, FALSE, mGIMatrix.m); + shader.uniformMatrix4fv("gi_mat_proj", 1, FALSE, mGIMatrixProj.m); + shader.uniformMatrix4fv("gi_inv_proj", 1, FALSE, mGIInvProj.m); + shader.uniformMatrix4fv("gi_norm_mat", 1, FALSE, mGINormalMatrix.m); + } + } + + /*channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_POSITION, LLTexUnit::TT_RECT_TEXTURE); if (channel > -1) { mDeferredScreen.bindTexture(3, channel); - } + }*/ channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE); if (channel > -1) { - gGL.getTexUnit(channel)->bind(&mDeferredScreen, TRUE); + gGL.getTexUnit(channel)->bind(&mDeferredDepth, TRUE); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + stop_glerror(); + + glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); + glTexParameteri(LLTexUnit::getInternalType(mDeferredDepth.getUsage()), GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); + + stop_glerror(); + + glh::matrix4f projection = glh_get_current_projection(); + glh::matrix4f inv_proj = projection.inverse(); + + shader.uniformMatrix4fv("inv_proj", 1, FALSE, inv_proj.m); + shader.uniform4f("viewport", (F32) gGLViewport[0], + (F32) gGLViewport[1], + (F32) gGLViewport[2], + (F32) gGLViewport[3]); } channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_NOISE); if (channel > -1) { - gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE, mNoiseMap); + gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE, noise_map); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_LIGHTFUNC); + if (channel > -1) + { + gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc); } stop_glerror(); @@ -5374,19 +6041,81 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index) if (channel > -1) { mDeferredLight[light_index].bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_LUMINANCE); + if (channel > -1) + { + gGL.getTexUnit(channel)->bindManual(LLTexUnit::TT_TEXTURE, mLuminanceMap.getTexture(), true); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_BLOOM); + if (channel > -1) + { + mGlow[1].bindTexture(0, channel); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_GI_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + if (channel > -1) + { + gi_source->bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_EDGE, LLTexUnit::TT_RECT_TEXTURE); + if (channel > -1) + { + mEdgeMap.bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SUN_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + if (channel > -1) + { + mDeferredLight[1].bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); } + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_LOCAL_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + if (channel > -1) + { + mDeferredLight[2].bindTexture(0, channel); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT); + } + + stop_glerror(); for (U32 i = 0; i < 4; i++) { + channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SHADOW0+i, LLTexUnit::TT_RECT_TEXTURE); + stop_glerror(); + if (channel > -1) + { + stop_glerror(); + gGL.getTexUnit(channel)->bind(&mShadow[i], TRUE); + gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + gGL.getTexUnit(channel)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); + stop_glerror(); + + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); + stop_glerror(); + } + } + + for (U32 i = 4; i < 6; i++) + { channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_SHADOW0+i); stop_glerror(); if (channel > -1) { stop_glerror(); - gGL.getTexUnit(channel)->bind(&mSunShadow[i], TRUE); + gGL.getTexUnit(channel)->bind(&mShadow[i], TRUE); gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR); + gGL.getTexUnit(channel)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); stop_glerror(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); @@ -5397,17 +6126,19 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index) stop_glerror(); - F32 mat[64]; + F32 mat[16*6]; for (U32 i = 0; i < 16; i++) { mat[i] = mSunShadowMatrix[0].m[i]; mat[i+16] = mSunShadowMatrix[1].m[i]; mat[i+32] = mSunShadowMatrix[2].m[i]; mat[i+48] = mSunShadowMatrix[3].m[i]; + mat[i+64] = mSunShadowMatrix[4].m[i]; + mat[i+80] = mSunShadowMatrix[5].m[i]; } - shader.uniformMatrix4fv("shadow_matrix[0]", 4, FALSE, mat); - shader.uniformMatrix4fv("shadow_matrix", 4, FALSE, mat); + shader.uniformMatrix4fv("shadow_matrix[0]", 6, FALSE, mat); + shader.uniformMatrix4fv("shadow_matrix", 6, FALSE, mat); stop_glerror(); @@ -5456,7 +6187,44 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index) shader.uniform2f("screen_res", mDeferredScreen.getWidth(), mDeferredScreen.getHeight()); shader.uniform1f("near_clip", LLViewerCamera::getInstance()->getNear()*2.f); shader.uniform1f("alpha_soften", gSavedSettings.getF32("RenderDeferredAlphaSoften")); -} + shader.uniform1f ("shadow_offset", gSavedSettings.getF32("RenderShadowOffset")); + shader.uniform1f("shadow_bias", gSavedSettings.getF32("RenderShadowBias")); + shader.uniform1f("lum_scale", gSavedSettings.getF32("RenderLuminanceScale")); + shader.uniform1f("sun_lum_scale", gSavedSettings.getF32("RenderSunLuminanceScale")); + shader.uniform1f("sun_lum_offset", gSavedSettings.getF32("RenderSunLuminanceOffset")); + shader.uniform1f("lum_lod", gSavedSettings.getF32("RenderLuminanceDetail")); + shader.uniform1f("gi_range", gSavedSettings.getF32("RenderGIRange")); + shader.uniform1f("gi_brightness", gSavedSettings.getF32("RenderGIBrightness")); + shader.uniform1f("gi_luminance", gSavedSettings.getF32("RenderGILuminance")); + shader.uniform1f("gi_edge_weight", gSavedSettings.getF32("RenderGIBlurEdgeWeight")); + shader.uniform1f("gi_blur_brightness", gSavedSettings.getF32("RenderGIBlurBrightness")); + shader.uniform1f("gi_sample_width", mGILightRadius); + shader.uniform1f("gi_noise", gSavedSettings.getF32("RenderGINoise")); + shader.uniform1f("gi_attenuation", gSavedSettings.getF32("RenderGIAttenuation")); + shader.uniform1f("gi_ambiance", gSavedSettings.getF32("RenderGIAmbiance")); + shader.uniform2f("shadow_res", mShadow[0].getWidth(), mShadow[0].getHeight()); + shader.uniform2f("proj_shadow_res", mShadow[4].getWidth(), mShadow[4].getHeight()); + shader.uniform1f("depth_cutoff", gSavedSettings.getF32("RenderEdgeDepthCutoff")); + shader.uniform1f("norm_cutoff", gSavedSettings.getF32("RenderEdgeNormCutoff")); + + if (shader.getUniformLocation("norm_mat") >= 0) + { + glh::matrix4f norm_mat = glh_get_current_modelview().inverse().transpose(); + shader.uniformMatrix4fv("norm_mat", 1, FALSE, norm_mat.m); + } +} + +static LLFastTimer::DeclareTimer FTM_GI_TRACE("Trace"); +static LLFastTimer::DeclareTimer FTM_GI_GATHER("Gather"); +static LLFastTimer::DeclareTimer FTM_SUN_SHADOW("Shadow Map"); +static LLFastTimer::DeclareTimer FTM_SOFTEN_SHADOW("Shadow Soften"); +static LLFastTimer::DeclareTimer FTM_EDGE_DETECTION("Find Edges"); +static LLFastTimer::DeclareTimer FTM_LOCAL_LIGHTS("Local Lights"); +static LLFastTimer::DeclareTimer FTM_ATMOSPHERICS("Atmospherics"); +static LLFastTimer::DeclareTimer FTM_FULLSCREEN_LIGHTS("Fullscreen Lights"); +static LLFastTimer::DeclareTimer FTM_PROJECTORS("Projectors"); +static LLFastTimer::DeclareTimer FTM_POST("Post"); + void LLPipeline::renderDeferredLighting() { @@ -5465,335 +6233,673 @@ void LLPipeline::renderDeferredLighting() return; } - LLGLEnable multisample(GL_MULTISAMPLE_ARB); - - if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) { - gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD); - } + LLFastTimer ftm(FTM_RENDER_DEFERRED); - //ati doesn't seem to love actually using the stencil buffer on FBO's - LLGLEnable stencil(GL_STENCIL_TEST); - glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - gGL.setColorMask(true, true); + { + LLGLDepthTest depth(GL_TRUE); + mDeferredDepth.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), + 0, 0, mDeferredDepth.getWidth(), mDeferredDepth.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST); + } - mDeferredLight[0].bindTarget(); + LLGLEnable multisample(GL_MULTISAMPLE_ARB); - //mDeferredLight[0].copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), - // 0, 0, mDeferredLight[0].getWidth(), mDeferredLight[0].getHeight(), GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); - - //draw a cube around every light - LLVertexBuffer::unbind(); + if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) + { + gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_HUD); + } - glBlendFunc(GL_ONE, GL_ONE); - LLGLEnable cull(GL_CULL_FACE); - LLGLEnable blend(GL_BLEND); + //ati doesn't seem to love actually using the stencil buffer on FBO's + LLGLEnable stencil(GL_STENCIL_TEST); + glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF); + glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - glh::matrix4f mat = glh_copy_matrix(gGLModelView); + gGL.setColorMask(true, true); + + //draw a cube around every light + LLVertexBuffer::unbind(); - F32 vert[] = - { - -1,1, - -1,-3, - 3,1, - }; + LLGLEnable cull(GL_CULL_FACE); + LLGLEnable blend(GL_BLEND); - bindDeferredShader(gDeferredSunProgram); + glh::matrix4f mat = glh_copy_matrix(gGLModelView); - glh::matrix4f inv_trans = glh_get_current_modelview().inverse().transpose(); + F32 vert[] = + { + -1,1, + -1,-3, + 3,1, + }; + glVertexPointer(2, GL_FLOAT, 0, vert); + glColor3f(1,1,1); - const U32 slice = 32; - F32 offset[slice*3]; - for (U32 i = 0; i < 4; i++) - { - for (U32 j = 0; j < 8; j++) { - glh::vec3f v; - v.set_value(sinf(6.284f/8*j), cosf(6.284f/8*j), -(F32) i); - v.normalize(); - inv_trans.mult_matrix_vec(v); - v.normalize(); - offset[(i*8+j)*3+0] = v.v[0]; - offset[(i*8+j)*3+1] = v.v[2]; - offset[(i*8+j)*3+2] = v.v[1]; + setupHWLights(NULL); //to set mSunDir; + LLVector4 dir(mSunDir, 0.f); + glh::vec4f tc(dir.mV); + mat.mult_matrix_vec(tc); + glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], 0); } - } - gDeferredSunProgram.uniform3fv("offset", slice, offset); - gDeferredSunProgram.uniform2f("screenRes", mDeferredLight[0].getWidth(), mDeferredLight[0].getHeight()); + if (gSavedSettings.getBOOL("RenderDeferredShadow")) + { + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); - setupHWLights(NULL); //to set mSunDir; + mDeferredLight[0].bindTarget(); + if (gSavedSettings.getBOOL("RenderDeferredSun")) + { //paint shadow/SSAO light map (direct lighting lightmap) + LLFastTimer ftm(FTM_SUN_SHADOW); + bindDeferredShader(gDeferredSunProgram, 0); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); + glClearColor(1,1,1,1); + mDeferredLight[0].clear(GL_COLOR_BUFFER_BIT); + glClearColor(0,0,0,0); - LLVector4 dir(mSunDir, 0.f); + glh::matrix4f inv_trans = glh_get_current_modelview().inverse().transpose(); - glh::vec4f tc(dir.mV); - mat.mult_matrix_vec(tc); - glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], 0); - glColor3f(1,1,1); - - glVertexPointer(2, GL_FLOAT, 0, vert); - { - LLGLDisable blend(GL_BLEND); - LLGLDepthTest depth(GL_FALSE); - stop_glerror(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - stop_glerror(); - } - - unbindDeferredShader(gDeferredSunProgram); + const U32 slice = 32; + F32 offset[slice*3]; + for (U32 i = 0; i < 4; i++) + { + for (U32 j = 0; j < 8; j++) + { + glh::vec3f v; + v.set_value(sinf(6.284f/8*j), cosf(6.284f/8*j), -(F32) i); + v.normalize(); + inv_trans.mult_matrix_vec(v); + v.normalize(); + offset[(i*8+j)*3+0] = v.v[0]; + offset[(i*8+j)*3+1] = v.v[2]; + offset[(i*8+j)*3+2] = v.v[1]; + } + } - mDeferredLight[0].flush(); + gDeferredSunProgram.uniform3fv("offset", slice, offset); + gDeferredSunProgram.uniform2f("screenRes", mDeferredLight[0].getWidth(), mDeferredLight[0].getHeight()); + + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + + unbindDeferredShader(gDeferredSunProgram); + } + else + { + mDeferredLight[0].clear(GL_COLOR_BUFFER_BIT); + } - //blur lightmap - mDeferredLight[1].bindTarget(); + mDeferredLight[0].flush(); - //mDeferredLight[1].copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), - // 0, 0, mDeferredLight[0].getWidth(), mDeferredLight[0].getHeight(), GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); - - bindDeferredShader(gDeferredBlurLightProgram); + if (gSavedSettings.getBOOL("RenderDeferredBlurLight")) + { + LLFastTimer ftm(FTM_EDGE_DETECTION); + //get edge map + LLGLDisable blend(GL_BLEND); + LLGLDisable test(GL_ALPHA_TEST); + LLGLDepthTest depth(GL_FALSE); + LLGLDisable stencil(GL_STENCIL_TEST); - LLVector3 gauss[32]; // xweight, yweight, offset + { + gDeferredEdgeProgram.bind(); + mEdgeMap.bindTarget(); + bindDeferredShader(gDeferredEdgeProgram); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + unbindDeferredShader(gDeferredEdgeProgram); + mEdgeMap.flush(); + } + } - LLVector3 go = gSavedSettings.getVector3("RenderShadowGaussian"); - U32 kern_length = llclamp(gSavedSettings.getU32("RenderShadowBlurSamples"), (U32) 1, (U32) 16)*2 - 1; - F32 blur_size = gSavedSettings.getF32("RenderShadowBlurSize"); + if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) + { + { //get luminance map from previous frame's light map + LLGLEnable blend(GL_BLEND); + LLGLDisable test(GL_ALPHA_TEST); + LLGLDepthTest depth(GL_FALSE); + LLGLDisable stencil(GL_STENCIL_TEST); - // sample symmetrically with the middle sample falling exactly on 0.0 - F32 x = -(kern_length/2.0f) + 0.5f; + //static F32 fade = 1.f; - for (U32 i = 0; i < kern_length; i++) - { - gauss[i].mV[0] = llgaussian(x, go.mV[0]); - gauss[i].mV[1] = llgaussian(x, go.mV[1]); - gauss[i].mV[2] = x; - x += 1.f; - } - /* swap the x=0 position to the start of gauss[] so we can - treat it specially as an optimization. */ - LLVector3 swap; - swap = gauss[kern_length/2]; - gauss[kern_length/2] = gauss[0]; - gauss[0] = swap; - llassert(gauss[0].mV[2] == 0.0f); + { + gGL.setSceneBlendType(LLRender::BT_ALPHA); + gLuminanceGatherProgram.bind(); + gLuminanceGatherProgram.uniform2f("screen_res", mDeferredLight[0].getWidth(), mDeferredLight[0].getHeight()); + mLuminanceMap.bindTarget(); + bindDeferredShader(gLuminanceGatherProgram); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + unbindDeferredShader(gLuminanceGatherProgram); + mLuminanceMap.flush(); + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLuminanceMap.getTexture(), true); + gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR); + glGenerateMipmapEXT(GL_TEXTURE_2D); + } + } - gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f); - gDeferredBlurLightProgram.uniform3fv("kern[0]", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform1i("kern_length", kern_length); - gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); + { //paint noisy GI map (bounce lighting lightmap) + LLFastTimer ftm(FTM_GI_TRACE); + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_FALSE); + LLGLDisable test(GL_ALPHA_TEST); - { - LLGLDisable blend(GL_BLEND); - LLGLDepthTest depth(GL_FALSE); - stop_glerror(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - stop_glerror(); - } - - mDeferredLight[1].flush(); - unbindDeferredShader(gDeferredBlurLightProgram); + mGIMapPost[0].bindTarget(); - bindDeferredShader(gDeferredBlurLightProgram, 1); - mDeferredLight[0].bindTarget(); + bindDeferredShader(gDeferredGIProgram, 0, &mGIMap, 0, mTrueNoiseMap); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + unbindDeferredShader(gDeferredGIProgram); + mGIMapPost[0].flush(); + } - gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f); - gDeferredBlurLightProgram.uniform3fv("kern[0]", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); - gDeferredBlurLightProgram.uniform1i("kern_length", kern_length); - gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); + U32 pass_count = 0; + if (gSavedSettings.getBOOL("RenderDeferredBlurLight")) + { + pass_count = llclamp(gSavedSettings.getU32("RenderGIBlurPasses"), (U32) 1, (U32) 128); + } - { - LLGLDisable blend(GL_BLEND); - LLGLDepthTest depth(GL_FALSE); - stop_glerror(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - stop_glerror(); - } - mDeferredLight[0].flush(); - unbindDeferredShader(gDeferredBlurLightProgram); + for (U32 i = 0; i < pass_count; ++i) + { //gather/soften indirect lighting map + LLFastTimer ftm(FTM_GI_GATHER); + bindDeferredShader(gDeferredPostGIProgram, 0, &mGIMapPost[0], NULL, mTrueNoiseMap); + F32 blur_size = gSavedSettings.getF32("RenderGIBlurSize")/((F32) i * gSavedSettings.getF32("RenderGIBlurIncrement")+1.f); + gDeferredPostGIProgram.uniform2f("delta", 1.f, 0.f); + gDeferredPostGIProgram.uniform1f("kern_scale", blur_size); + gDeferredPostGIProgram.uniform1f("gi_blur_brightness", gSavedSettings.getF32("RenderGIBlurBrightness")); + + mGIMapPost[1].bindTarget(); + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_FALSE); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + + mGIMapPost[1].flush(); + unbindDeferredShader(gDeferredPostGIProgram); + bindDeferredShader(gDeferredPostGIProgram, 0, &mGIMapPost[1], NULL, mTrueNoiseMap); + mGIMapPost[0].bindTarget(); - stop_glerror(); - glPopMatrix(); - stop_glerror(); - glMatrixMode(GL_MODELVIEW); - stop_glerror(); - glPopMatrix(); - stop_glerror(); + gDeferredPostGIProgram.uniform2f("delta", 0.f, 1.f); - //copy depth and stencil from deferred screen - //mScreen.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), - // 0, 0, mScreen.getWidth(), mScreen.getHeight(), GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_FALSE); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + stop_glerror(); + } + mGIMapPost[0].flush(); + unbindDeferredShader(gDeferredPostGIProgram); + } + } - mScreen.bindTarget(); - mScreen.clear(GL_COLOR_BUFFER_BIT); - - bindDeferredShader(gDeferredSoftenProgram); - { - LLGLDepthTest depth(GL_FALSE); - LLGLDisable blend(GL_BLEND); - LLGLDisable test(GL_ALPHA_TEST); + if (gSavedSettings.getBOOL("RenderDeferredBlurLight")) + { //soften direct lighting lightmap + LLFastTimer ftm(FTM_SOFTEN_SHADOW); + //blur lightmap + mDeferredLight[1].bindTarget(); - //full screen blit - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); + glClearColor(1,1,1,1); + mDeferredLight[1].clear(GL_COLOR_BUFFER_BIT); + glClearColor(0,0,0,0); + + bindDeferredShader(gDeferredBlurLightProgram); - glVertexPointer(2, GL_FLOAT, 0, vert); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); - - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - } + LLVector3 go = gSavedSettings.getVector3("RenderShadowGaussian"); + const U32 kern_length = 4; + F32 blur_size = gSavedSettings.getF32("RenderShadowBlurSize"); + F32 dist_factor = gSavedSettings.getF32("RenderShadowBlurDistFactor"); - unbindDeferredShader(gDeferredSoftenProgram); + // sample symmetrically with the middle sample falling exactly on 0.0 + F32 x = 0.f; - bindDeferredShader(gDeferredLightProgram); + LLVector3 gauss[32]; // xweight, yweight, offset - std::list<LLVector4> fullscreen_lights; - std::list<LLVector4> light_colors; + for (U32 i = 0; i < kern_length; i++) + { + gauss[i].mV[0] = llgaussian(x, go.mV[0]); + gauss[i].mV[1] = llgaussian(x, go.mV[1]); + gauss[i].mV[2] = x; + x += 1.f; + } - F32 v[24]; - glVertexPointer(3, GL_FLOAT, 0, v); - { - LLGLDepthTest depth(GL_TRUE, GL_FALSE); - for (LLDrawable::drawable_set_t::iterator iter = mLights.begin(); iter != mLights.end(); ++iter) - { - LLDrawable* drawablep = *iter; + gDeferredBlurLightProgram.uniform2f("delta", 1.f, 0.f); + gDeferredBlurLightProgram.uniform1f("dist_factor", dist_factor); + gDeferredBlurLightProgram.uniform3fv("kern[0]", kern_length, gauss[0].mV); + gDeferredBlurLightProgram.uniform3fv("kern", kern_length, gauss[0].mV); + gDeferredBlurLightProgram.uniform1f("kern_scale", blur_size * (kern_length/2.f - 0.5f)); - LLVOVolume* volume = drawablep->getVOVolume(); - if (!volume) - { - continue; + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + + mDeferredLight[1].flush(); + unbindDeferredShader(gDeferredBlurLightProgram); + + bindDeferredShader(gDeferredBlurLightProgram, 1); + mDeferredLight[0].bindTarget(); + + gDeferredBlurLightProgram.uniform2f("delta", 0.f, 1.f); + + { + LLGLDisable blend(GL_BLEND); + LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_ALWAYS); + stop_glerror(); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + stop_glerror(); + } + mDeferredLight[0].flush(); + unbindDeferredShader(gDeferredBlurLightProgram); } - LLVector3 center = drawablep->getPositionAgent(); - F32* c = center.mV; - F32 s = volume->getLightRadius()*1.5f; + stop_glerror(); + glPopMatrix(); + stop_glerror(); + glMatrixMode(GL_MODELVIEW); + stop_glerror(); + glPopMatrix(); + stop_glerror(); + } + + //copy depth and stencil from deferred screen + //mScreen.copyContents(mDeferredScreen, 0, 0, mDeferredScreen.getWidth(), mDeferredScreen.getHeight(), + // 0, 0, mScreen.getWidth(), mScreen.getHeight(), GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, GL_NEAREST); - if (LLViewerCamera::getInstance()->AABBInFrustumNoFarClip(center, LLVector3(s,s,s)) == 0) + if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) + { + mDeferredLight[1].bindTarget(); + mDeferredLight[1].clear(GL_COLOR_BUFFER_BIT); + } + else + { + mScreen.bindTarget(); + mScreen.clear(GL_COLOR_BUFFER_BIT); + } + + if (gSavedSettings.getBOOL("RenderDeferredAtmospheric")) + { //apply sunlight contribution + LLFastTimer ftm(FTM_ATMOSPHERICS); + bindDeferredShader(gDeferredSoftenProgram, 0, &mGIMapPost[0]); { - continue; + LLGLDepthTest depth(GL_FALSE); + LLGLDisable blend(GL_BLEND); + LLGLDisable test(GL_ALPHA_TEST); + + //full screen blit + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glVertexPointer(2, GL_FLOAT, 0, vert); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); } - sVisibleLightCount++; - glh::vec3f tc(c); - mat.mult_matrix_vec(tc); + unbindDeferredShader(gDeferredSoftenProgram); + } + + { //render sky + LLGLDisable blend(GL_BLEND); + LLGLDisable stencil(GL_STENCIL_TEST); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + + U32 render_mask = mRenderTypeMask; + mRenderTypeMask = mRenderTypeMask & + ((1 << LLPipeline::RENDER_TYPE_SKY) | + (1 << LLPipeline::RENDER_TYPE_CLOUDS) | + (1 << LLPipeline::RENDER_TYPE_WL_SKY)); + - LLColor3 col = volume->getLightColor(); - col *= volume->getLightIntensity(); - - //vertex positions are encoded so the 3 bits of their vertex index - //correspond to their axis facing, with bit position 3,2,1 matching - //axis facing x,y,z, bit set meaning positive facing, bit clear - //meaning negative facing - v[0] = c[0]-s; v[1] = c[1]-s; v[2] = c[2]-s; // 0 - 0000 - v[3] = c[0]-s; v[4] = c[1]-s; v[5] = c[2]+s; // 1 - 0001 - v[6] = c[0]-s; v[7] = c[1]+s; v[8] = c[2]-s; // 2 - 0010 - v[9] = c[0]-s; v[10] = c[1]+s; v[11] = c[2]+s; // 3 - 0011 - - v[12] = c[0]+s; v[13] = c[1]-s; v[14] = c[2]-s; // 4 - 0100 - v[15] = c[0]+s; v[16] = c[1]-s; v[17] = c[2]+s; // 5 - 0101 - v[18] = c[0]+s; v[19] = c[1]+s; v[20] = c[2]-s; // 6 - 0110 - v[21] = c[0]+s; v[22] = c[1]+s; v[23] = c[2]+s; // 7 - 0111 - - if (LLViewerCamera::getInstance()->getOrigin().mV[0] > c[0] + s + 0.2f || - LLViewerCamera::getInstance()->getOrigin().mV[0] < c[0] - s - 0.2f || - LLViewerCamera::getInstance()->getOrigin().mV[1] > c[1] + s + 0.2f || - LLViewerCamera::getInstance()->getOrigin().mV[1] < c[1] - s - 0.2f || - LLViewerCamera::getInstance()->getOrigin().mV[2] > c[2] + s + 0.2f || - LLViewerCamera::getInstance()->getOrigin().mV[2] < c[2] - s - 0.2f) - { //draw box if camera is outside box - glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); - glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); - glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, - GL_UNSIGNED_BYTE, get_box_fan_indices(LLViewerCamera::getInstance(), center)); + renderGeomPostDeferred(*LLViewerCamera::getInstance()); + mRenderTypeMask = render_mask; + } + + BOOL render_local = gSavedSettings.getBOOL("RenderDeferredLocalLights"); + BOOL render_fullscreen = gSavedSettings.getBOOL("RenderDeferredFullscreenLights"); + + + if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) + { + mDeferredLight[1].flush(); + mDeferredLight[2].bindTarget(); + mDeferredLight[2].clear(GL_COLOR_BUFFER_BIT); + } + + if (render_local || render_fullscreen) + { + gGL.setSceneBlendType(LLRender::BT_ADD); + std::list<LLVector4> fullscreen_lights; + LLDrawable::drawable_list_t spot_lights; + LLDrawable::drawable_list_t fullscreen_spot_lights; + + for (U32 i = 0; i < 2; i++) + { + mTargetShadowSpotLight[i] = NULL; } - else - { - fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s*s)); - light_colors.push_back(LLVector4(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f)); + + std::list<LLVector4> light_colors; + + F32 v[24]; + glVertexPointer(3, GL_FLOAT, 0, v); + BOOL render_local = gSavedSettings.getBOOL("RenderDeferredLocalLights"); + + { + bindDeferredShader(gDeferredLightProgram); + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + for (LLDrawable::drawable_set_t::iterator iter = mLights.begin(); iter != mLights.end(); ++iter) + { + LLDrawable* drawablep = *iter; + + LLVOVolume* volume = drawablep->getVOVolume(); + if (!volume) + { + continue; + } + + LLVector3 center = drawablep->getPositionAgent(); + F32* c = center.mV; + F32 s = volume->getLightRadius()*1.5f; + + LLColor3 col = volume->getLightColor(); + col *= volume->getLightIntensity(); + + if (col.magVecSquared() < 0.001f) + { + continue; + } + + if (s <= 0.001f) + { + continue; + } + + if (LLViewerCamera::getInstance()->AABBInFrustumNoFarClip(center, LLVector3(s,s,s)) == 0) + { + continue; + } + + sVisibleLightCount++; + + glh::vec3f tc(c); + mat.mult_matrix_vec(tc); + + //vertex positions are encoded so the 3 bits of their vertex index + //correspond to their axis facing, with bit position 3,2,1 matching + //axis facing x,y,z, bit set meaning positive facing, bit clear + //meaning negative facing + v[0] = c[0]-s; v[1] = c[1]-s; v[2] = c[2]-s; // 0 - 0000 + v[3] = c[0]-s; v[4] = c[1]-s; v[5] = c[2]+s; // 1 - 0001 + v[6] = c[0]-s; v[7] = c[1]+s; v[8] = c[2]-s; // 2 - 0010 + v[9] = c[0]-s; v[10] = c[1]+s; v[11] = c[2]+s; // 3 - 0011 + + v[12] = c[0]+s; v[13] = c[1]-s; v[14] = c[2]-s; // 4 - 0100 + v[15] = c[0]+s; v[16] = c[1]-s; v[17] = c[2]+s; // 5 - 0101 + v[18] = c[0]+s; v[19] = c[1]+s; v[20] = c[2]-s; // 6 - 0110 + v[21] = c[0]+s; v[22] = c[1]+s; v[23] = c[2]+s; // 7 - 0111 + + if (LLViewerCamera::getInstance()->getOrigin().mV[0] > c[0] + s + 0.2f || + LLViewerCamera::getInstance()->getOrigin().mV[0] < c[0] - s - 0.2f || + LLViewerCamera::getInstance()->getOrigin().mV[1] > c[1] + s + 0.2f || + LLViewerCamera::getInstance()->getOrigin().mV[1] < c[1] - s - 0.2f || + LLViewerCamera::getInstance()->getOrigin().mV[2] > c[2] + s + 0.2f || + LLViewerCamera::getInstance()->getOrigin().mV[2] < c[2] - s - 0.2f) + { //draw box if camera is outside box + if (render_local) + { + if (volume->getLightTexture()) + { + drawablep->getVOVolume()->updateSpotLightPriority(); + spot_lights.push_back(drawablep); + continue; + } + + LLFastTimer ftm(FTM_LOCAL_LIGHTS); + glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); + glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); + glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, + GL_UNSIGNED_BYTE, get_box_fan_indices(LLViewerCamera::getInstance(), center)); + stop_glerror(); + } + } + else if (render_fullscreen) + { + if (volume->getLightTexture()) + { + drawablep->getVOVolume()->updateSpotLightPriority(); + fullscreen_spot_lights.push_back(drawablep); + continue; + } + + fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s*s)); + light_colors.push_back(LLVector4(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f)); + } + } + unbindDeferredShader(gDeferredLightProgram); } - } - } - unbindDeferredShader(gDeferredLightProgram); + if (!spot_lights.empty()) + { + LLGLDepthTest depth(GL_TRUE, GL_FALSE); + bindDeferredShader(gDeferredSpotLightProgram); - if (!fullscreen_lights.empty()) - { - bindDeferredShader(gDeferredMultiLightProgram); - LLGLDepthTest depth(GL_FALSE); + gDeferredSpotLightProgram.enableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); - //full screen blit - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); + for (LLDrawable::drawable_list_t::iterator iter = spot_lights.begin(); iter != spot_lights.end(); ++iter) + { + LLFastTimer ftm(FTM_PROJECTORS); + LLDrawable* drawablep = *iter; - U32 count = 0; + LLVOVolume* volume = drawablep->getVOVolume(); - LLVector4 light[16]; - LLVector4 col[16]; + LLVector3 center = drawablep->getPositionAgent(); + F32* c = center.mV; + F32 s = volume->getLightRadius()*1.5f; - glVertexPointer(2, GL_FLOAT, 0, vert); + sVisibleLightCount++; - while (!fullscreen_lights.empty()) - { - light[count] = fullscreen_lights.front(); - fullscreen_lights.pop_front(); - col[count] = light_colors.front(); - light_colors.pop_front(); + glh::vec3f tc(c); + mat.mult_matrix_vec(tc); + + setupSpotLight(gDeferredSpotLightProgram, drawablep); + + LLColor3 col = volume->getLightColor(); + col *= volume->getLightIntensity(); + + //vertex positions are encoded so the 3 bits of their vertex index + //correspond to their axis facing, with bit position 3,2,1 matching + //axis facing x,y,z, bit set meaning positive facing, bit clear + //meaning negative facing + v[0] = c[0]-s; v[1] = c[1]-s; v[2] = c[2]-s; // 0 - 0000 + v[3] = c[0]-s; v[4] = c[1]-s; v[5] = c[2]+s; // 1 - 0001 + v[6] = c[0]-s; v[7] = c[1]+s; v[8] = c[2]-s; // 2 - 0010 + v[9] = c[0]-s; v[10] = c[1]+s; v[11] = c[2]+s; // 3 - 0011 + + v[12] = c[0]+s; v[13] = c[1]-s; v[14] = c[2]-s; // 4 - 0100 + v[15] = c[0]+s; v[16] = c[1]-s; v[17] = c[2]+s; // 5 - 0101 + v[18] = c[0]+s; v[19] = c[1]+s; v[20] = c[2]-s; // 6 - 0110 + v[21] = c[0]+s; v[22] = c[1]+s; v[23] = c[2]+s; // 7 - 0111 + + glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); + glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); + glDrawRangeElements(GL_TRIANGLE_FAN, 0, 7, 8, + GL_UNSIGNED_BYTE, get_box_fan_indices(LLViewerCamera::getInstance(), center)); + } + gDeferredSpotLightProgram.disableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); + unbindDeferredShader(gDeferredSpotLightProgram); + } - count++; - if (count == 16 || fullscreen_lights.empty()) { - gDeferredMultiLightProgram.uniform1i("light_count", count); - gDeferredMultiLightProgram.uniform4fv("light[0]", count, (GLfloat*) light); - gDeferredMultiLightProgram.uniform4fv("light", count, (GLfloat*) light); - gDeferredMultiLightProgram.uniform4fv("light_col[0]", count, (GLfloat*) col); - gDeferredMultiLightProgram.uniform4fv("light_col", count, (GLfloat*) col); - count = 0; - glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + bindDeferredShader(gDeferredMultiLightProgram); + + LLGLDepthTest depth(GL_FALSE); + + //full screen blit + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + U32 count = 0; + + const U32 max_count = 8; + LLVector4 light[max_count]; + LLVector4 col[max_count]; + + glVertexPointer(2, GL_FLOAT, 0, vert); + + F32 far_z = 0.f; + + while (!fullscreen_lights.empty()) + { + LLFastTimer ftm(FTM_FULLSCREEN_LIGHTS); + light[count] = fullscreen_lights.front(); + fullscreen_lights.pop_front(); + col[count] = light_colors.front(); + light_colors.pop_front(); + + far_z = llmin(light[count].mV[2]-sqrtf(light[count].mV[3]), far_z); + + count++; + if (count == max_count || fullscreen_lights.empty()) + { + gDeferredMultiLightProgram.uniform1i("light_count", count); + gDeferredMultiLightProgram.uniform4fv("light[0]", count, (GLfloat*) light); + gDeferredMultiLightProgram.uniform4fv("light", count, (GLfloat*) light); + gDeferredMultiLightProgram.uniform4fv("light_col[0]", count, (GLfloat*) col); + gDeferredMultiLightProgram.uniform4fv("light_col", count, (GLfloat*) col); + gDeferredMultiLightProgram.uniform1f("far_z", far_z); + far_z = 0.f; + count = 0; + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + } + } + + unbindDeferredShader(gDeferredMultiLightProgram); + + bindDeferredShader(gDeferredMultiSpotLightProgram); + + gDeferredMultiSpotLightProgram.enableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); + + for (LLDrawable::drawable_list_t::iterator iter = fullscreen_spot_lights.begin(); iter != fullscreen_spot_lights.end(); ++iter) + { + LLFastTimer ftm(FTM_PROJECTORS); + LLDrawable* drawablep = *iter; + + LLVOVolume* volume = drawablep->getVOVolume(); + + LLVector3 center = drawablep->getPositionAgent(); + F32* c = center.mV; + F32 s = volume->getLightRadius()*1.5f; + + sVisibleLightCount++; + + glh::vec3f tc(c); + mat.mult_matrix_vec(tc); + + setupSpotLight(gDeferredMultiSpotLightProgram, drawablep); + + LLColor3 col = volume->getLightColor(); + col *= volume->getLightIntensity(); + + glTexCoord4f(tc.v[0], tc.v[1], tc.v[2], s*s); + glColor4f(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 3); + } + + gDeferredMultiSpotLightProgram.disableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); + unbindDeferredShader(gDeferredMultiSpotLightProgram); + + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); } } + + gGL.setColorMask(true, true); + + if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 2) + { + mDeferredLight[2].flush(); + + mScreen.bindTarget(); + mScreen.clear(GL_COLOR_BUFFER_BIT); - - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); + gGL.setSceneBlendType(LLRender::BT_ALPHA); + + { //mix various light maps (local, sun, gi) + LLFastTimer ftm(FTM_POST); + LLGLDisable blend(GL_BLEND); + LLGLDisable test(GL_ALPHA_TEST); + LLGLDepthTest depth(GL_FALSE); + LLGLDisable stencil(GL_STENCIL_TEST); + + bindDeferredShader(gDeferredPostProgram, 0, &mGIMapPost[0]); + + gDeferredPostProgram.bind(); + + LLVertexBuffer::unbind(); + + glVertexPointer(2, GL_FLOAT, 0, vert); + glColor3f(1,1,1); + + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glDrawArrays(GL_TRIANGLES, 0, 3); + + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); - unbindDeferredShader(gDeferredMultiLightProgram); + unbindDeferredShader(gDeferredPostProgram); + } + } } - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - { //render non-deferred geometry + { //render non-deferred geometry (alpha, fullbright, glow) LLGLDisable blend(GL_BLEND); LLGLDisable stencil(GL_STENCIL_TEST); U32 render_mask = mRenderTypeMask; mRenderTypeMask = mRenderTypeMask & - ((1 << LLPipeline::RENDER_TYPE_SKY) | - (1 << LLPipeline::RENDER_TYPE_CLOUDS) | - (1 << LLPipeline::RENDER_TYPE_WL_SKY) | - (1 << LLPipeline::RENDER_TYPE_ALPHA) | - (1 << LLPipeline::RENDER_TYPE_AVATAR) | - (1 << LLPipeline::RENDER_TYPE_WATER) | + ((1 << LLPipeline::RENDER_TYPE_ALPHA) | (1 << LLPipeline::RENDER_TYPE_FULLBRIGHT) | (1 << LLPipeline::RENDER_TYPE_VOLUME) | (1 << LLPipeline::RENDER_TYPE_GLOW) | - (1 << LLPipeline::RENDER_TYPE_BUMP)); + (1 << LLPipeline::RENDER_TYPE_BUMP) | + (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_ALPHA) | + (1 << LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK) | + (1 << LLPipeline::RENDER_TYPE_PASS_BUMP) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY) | + (1 << LLPipeline::RENDER_TYPE_PASS_GLOW) | + (1 << LLPipeline::RENDER_TYPE_PASS_GRASS) | + (1 << LLPipeline::RENDER_TYPE_PASS_SHINY) | + (1 << LLPipeline::RENDER_TYPE_PASS_INVISIBLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY) | + (1 << LLPipeline::RENDER_TYPE_AVATAR)); renderGeomPostDeferred(*LLViewerCamera::getInstance()); mRenderTypeMask = render_mask; @@ -5803,6 +6909,136 @@ void LLPipeline::renderDeferredLighting() } +void LLPipeline::setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep) +{ + //construct frustum + LLVOVolume* volume = drawablep->getVOVolume(); + LLVector3 params = volume->getSpotLightParams(); + + F32 fov = params.mV[0]; + F32 focus = params.mV[1]; + + LLVector3 pos = drawablep->getPositionAgent(); + LLQuaternion quat = volume->getRenderRotation(); + LLVector3 scale = volume->getScale(); + + //get near clip plane + LLVector3 at_axis(0,0,-scale.mV[2]*0.5f); + at_axis *= quat; + + LLVector3 np = pos+at_axis; + at_axis.normVec(); + + //get origin that has given fov for plane np, at_axis, and given scale + F32 dist = (scale.mV[1]*0.5f)/tanf(fov*0.5f); + + LLVector3 origin = np - at_axis*dist; + + //matrix from volume space to agent space + LLMatrix4 light_mat(quat, LLVector4(origin,1.f)); + + glh::matrix4f light_to_agent((F32*) light_mat.mMatrix); + glh::matrix4f light_to_screen = glh_get_current_modelview() * light_to_agent; + + glh::matrix4f screen_to_light = light_to_screen.inverse(); + + F32 s = volume->getLightRadius()*1.5f; + F32 near_clip = dist; + F32 width = scale.mV[VX]; + F32 height = scale.mV[VY]; + F32 far_clip = s+dist-scale.mV[VZ]; + + F32 fovy = fov * RAD_TO_DEG; + F32 aspect = width/height; + + glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, + 0.f, 0.5f, 0.f, 0.5f, + 0.f, 0.f, 0.5f, 0.5f, + 0.f, 0.f, 0.f, 1.f); + + glh::vec3f p1(0, 0, -(near_clip+0.01f)); + glh::vec3f p2(0, 0, -(near_clip+1.f)); + + glh::vec3f screen_origin(0, 0, 0); + + light_to_screen.mult_matrix_vec(p1); + light_to_screen.mult_matrix_vec(p2); + light_to_screen.mult_matrix_vec(screen_origin); + + glh::vec3f n = p2-p1; + n.normalize(); + + F32 proj_range = far_clip - near_clip; + glh::matrix4f light_proj = gl_perspective(fovy, aspect, near_clip, far_clip); + screen_to_light = trans * light_proj * screen_to_light; + shader.uniformMatrix4fv("proj_mat", 1, FALSE, screen_to_light.m); + shader.uniform1f("proj_near", near_clip); + shader.uniform3fv("proj_p", 1, p1.v); + shader.uniform3fv("proj_n", 1, n.v); + shader.uniform3fv("proj_origin", 1, screen_origin.v); + shader.uniform1f("proj_range", proj_range); + shader.uniform1f("proj_ambiance", params.mV[2]); + S32 s_idx = -1; + + for (U32 i = 0; i < 2; i++) + { + if (mShadowSpotLight[i] == drawablep) + { + s_idx = i; + } + } + + shader.uniform1i("proj_shadow_idx", s_idx); + + if (s_idx >= 0) + { + shader.uniform1f("shadow_fade", 1.f-mSpotLightFade[s_idx]); + } + else + { + shader.uniform1f("shadow_fade", 1.f); + } + + { + LLDrawable* potential = drawablep; + //determine if this is a good light for casting shadows + F32 m_pri = volume->getSpotLightPriority(); + + for (U32 i = 0; i < 2; i++) + { + F32 pri = 0.f; + + if (mTargetShadowSpotLight[i].notNull()) + { + pri = mTargetShadowSpotLight[i]->getVOVolume()->getSpotLightPriority(); + } + + if (m_pri > pri) + { + LLDrawable* temp = mTargetShadowSpotLight[i]; + mTargetShadowSpotLight[i] = potential; + potential = temp; + m_pri = pri; + } + } + } + + LLViewerTexture* img = volume->getLightTexture(); + + S32 channel = shader.enableTexture(LLViewerShaderMgr::DEFERRED_PROJECTION); + + if (channel > -1 && img) + { + gGL.getTexUnit(channel)->bind(img); + + F32 lod_range = logf(img->getWidth())/logf(2.f); + + shader.uniform1f("proj_focus", focus); + shader.uniform1f("proj_lod", lod_range); + shader.uniform1f("proj_ambient_lod", llclamp((proj_range-focus)/proj_range*lod_range, 0.f, 1.f)); + } +} + void LLPipeline::unbindDeferredShader(LLGLSLShader &shader) { stop_glerror(); @@ -5812,14 +7048,43 @@ void LLPipeline::unbindDeferredShader(LLGLSLShader &shader) shader.disableTexture(LLViewerShaderMgr::DEFERRED_SPECULAR, LLTexUnit::TT_RECT_TEXTURE); shader.disableTexture(LLViewerShaderMgr::DEFERRED_DEPTH, LLTexUnit::TT_RECT_TEXTURE); shader.disableTexture(LLViewerShaderMgr::DEFERRED_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_EDGE, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_SUN_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_LOCAL_LIGHT, LLTexUnit::TT_RECT_TEXTURE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_LUMINANCE); + shader.disableTexture(LLViewerShaderMgr::DIFFUSE_MAP); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_MIP); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_BLOOM); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_NORMAL); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_DIFFUSE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_SPECULAR); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_DEPTH); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_MIN_POS); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_MAX_POS); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_NORMAL); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_DIFFUSE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_MIN_POS); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_GI_LAST_MAX_POS); + for (U32 i = 0; i < 4; i++) { + if (shader.disableTexture(LLViewerShaderMgr::DEFERRED_SHADOW0+i, LLTexUnit::TT_RECT_TEXTURE) > -1) + { + glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); + } + } + + for (U32 i = 4; i < 6; i++) + { if (shader.disableTexture(LLViewerShaderMgr::DEFERRED_SHADOW0+i) > -1) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); } } + shader.disableTexture(LLViewerShaderMgr::DEFERRED_NOISE); + shader.disableTexture(LLViewerShaderMgr::DEFERRED_LIGHTFUNC); S32 channel = shader.disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP); if (channel > -1) @@ -5833,6 +7098,8 @@ void LLPipeline::unbindDeferredShader(LLGLSLShader &shader) gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.getTexUnit(0)->activate(); shader.unbind(); + + LLGLState::checkTextureChannels(); } inline float sgn(float a) @@ -5866,6 +7133,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) camera.setFar(camera.getFar()*0.87654321f); LLPipeline::sReflectionRender = TRUE; S32 occlusion = LLPipeline::sUseOcclusion; + + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD; + LLPipeline::sUseOcclusion = llmin(occlusion, 1); U32 type_mask = gPipeline.mRenderTypeMask; @@ -5900,22 +7170,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) water_clip = 1; } - - if (!LLViewerCamera::getInstance()->cameraUnderWater()) { //generate planar reflection map gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); glClearColor(0,0,0,0); - gGL.setColorMask(true, true); mWaterRef.bindTarget(); mWaterRef.getViewport(gGLViewport); - mWaterRef.clear(); - gGL.setColorMask(true, false); - + stop_glerror(); - LLVector3 origin = camera.getOrigin(); - glPushMatrix(); mat.set_scale(glh::vec3f(1,1,-1)); @@ -5930,25 +7193,21 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) LLViewerCamera::updateFrustumPlanes(camera, FALSE, TRUE); - glCullFace(GL_FRONT); + glh::matrix4f inv_mat = mat.inverse(); - //initial sky pass (no user clip plane) - { //mask out everything but the sky - U32 tmp = mRenderTypeMask; - mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) | - (1 << LLPipeline::RENDER_TYPE_WL_SKY)); - static LLCullResult result; - updateCull(camera, result); - stateSort(camera, result); - mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) | - (1 << LLPipeline::RENDER_TYPE_CLOUDS) | - (1 << LLPipeline::RENDER_TYPE_WL_SKY)); - renderGeom(camera, TRUE); - mRenderTypeMask = tmp; - } + glh::vec3f origin(0,0,0); + inv_mat.mult_matrix_vec(origin); + camera.setOrigin(origin.v); + + glCullFace(GL_FRONT); + + + static LLCullResult ref_result; + U32 ref_mask = 0; if (LLDrawPoolWater::sNeedsDistortionUpdate) { + U32 mask = mRenderTypeMask; mRenderTypeMask &= ~((1<<LLPipeline::RENDER_TYPE_WATER) | (1<<LLPipeline::RENDER_TYPE_GROUND) | (1<<LLPipeline::RENDER_TYPE_SKY) | @@ -5971,24 +7230,60 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) } } - LLSpatialPartition::sFreezeState = TRUE; - LLPipeline::sSkipUpdate = TRUE; LLGLUserClipPlane clip_plane(plane, mat, projection); - static LLCullResult result; - updateCull(camera, result, 1); - stateSort(camera, result); + LLGLDisable cull(GL_CULL_FACE); + updateCull(camera, ref_result, 1); + stateSort(camera, ref_result); + gGL.setColorMask(true, true); + mWaterRef.clear(); + gGL.setColorMask(true, false); + + } + else + { + gGL.setColorMask(true, true); + mWaterRef.clear(); + gGL.setColorMask(true, false); + } + + ref_mask = mRenderTypeMask; + mRenderTypeMask = mask; + } + + //initial sky pass (no user clip plane) + { //mask out everything but the sky + U32 tmp = mRenderTypeMask; + mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) | + (1 << LLPipeline::RENDER_TYPE_WL_SKY)); + static LLCullResult result; + updateCull(camera, result); + stateSort(camera, result); + mRenderTypeMask = tmp & ((1 << LLPipeline::RENDER_TYPE_SKY) | + (1 << LLPipeline::RENDER_TYPE_CLOUDS) | + (1 << LLPipeline::RENDER_TYPE_WL_SKY)); + renderGeom(camera, TRUE); + mRenderTypeMask = tmp; + } + + + if (LLDrawPoolWater::sNeedsDistortionUpdate) + { + mRenderTypeMask = ref_mask; + if (gSavedSettings.getBOOL("RenderWaterReflections")) + { + gPipeline.grabReferences(ref_result); + LLGLUserClipPlane clip_plane(plane, mat, projection); renderGeom(camera); - LLSpatialPartition::sFreezeState = FALSE; - LLPipeline::sSkipUpdate = FALSE; } } glCullFace(GL_BACK); glPopMatrix(); mWaterRef.flush(); - glh_set_current_modelview(current); } + camera.setOrigin(camera_in.getOrigin()); + //render distortion map static BOOL last_update = TRUE; if (last_update) @@ -6012,12 +7307,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) 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); mWaterDis.bindTarget(); mWaterDis.getViewport(gGLViewport); - mWaterDis.clear(); - gGL.setColorMask(true, false); - + if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate) { //clip out geometry on the same side of water as the camera @@ -6026,6 +7318,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in) static LLCullResult result; updateCull(camera, result, water_clip); stateSort(camera, result); + + gGL.setColorMask(true, true); + mWaterDis.clear(); + gGL.setColorMask(true, false); + renderGeom(camera); } @@ -6078,7 +7375,6 @@ glh::matrix4f look(const LLVector3 pos, const LLVector3 dir, const LLVector3 up) dirN = dir; dirN.normVec(); - ret.m[ 0] = lftN[0]; ret.m[ 1] = upN[0]; @@ -6133,10 +7429,484 @@ static LLFastTimer::DeclareTimer FTM_SHADOW_RENDER("Render Shadows"); static LLFastTimer::DeclareTimer FTM_SHADOW_ALPHA("Alpha Shadow"); static LLFastTimer::DeclareTimer FTM_SHADOW_SIMPLE("Simple Shadow"); -void LLPipeline::generateSunShadow(LLCamera& camera) +void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera& shadow_cam, LLCullResult &result, BOOL use_shader, BOOL use_occlusion) +{ + LLFastTimer t(FTM_SHADOW_RENDER); + + //clip out geometry on the same side of water as the camera + S32 occlude = LLPipeline::sUseOcclusion; + if (!use_occlusion) + { + LLPipeline::sUseOcclusion = 0; + } + LLPipeline::sShadowRender = TRUE; + + U32 types[] = { LLRenderPass::PASS_SIMPLE, LLRenderPass::PASS_FULLBRIGHT, LLRenderPass::PASS_SHINY, LLRenderPass::PASS_BUMP, LLRenderPass::PASS_FULLBRIGHT_SHINY }; + LLGLEnable cull(GL_CULL_FACE); + + if (use_shader) + { + gDeferredShadowProgram.bind(); + } + + updateCull(shadow_cam, result); + stateSort(shadow_cam, result); + + //generate shadow map + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadMatrixf(proj.m); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadMatrixf(view.m); + + stop_glerror(); + gGLLastMatrix = NULL; + + { + LLGLDepthTest depth(GL_TRUE); + glClear(GL_DEPTH_BUFFER_BIT); + } + + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + + glColor4f(1,1,1,1); + + stop_glerror(); + + gGL.setColorMask(false, false); + + //glCullFace(GL_FRONT); + + { + LLFastTimer ftm(FTM_SHADOW_SIMPLE); + LLGLDisable test(GL_ALPHA_TEST); + gGL.getTexUnit(0)->disable(); + for (U32 i = 0; i < sizeof(types)/sizeof(U32); ++i) + { + renderObjects(types[i], LLVertexBuffer::MAP_VERTEX, FALSE); + } + gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); + } + + if (use_shader) + { + gDeferredShadowProgram.unbind(); + renderGeomShadow(shadow_cam); + gDeferredShadowProgram.bind(); + } + else + { + renderGeomShadow(shadow_cam); + } + + { + LLFastTimer ftm(FTM_SHADOW_ALPHA); + LLGLEnable test(GL_ALPHA_TEST); + gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.6f); + renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE); + glColor4f(1,1,1,1); + renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE); + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + } + + //glCullFace(GL_BACK); + + gGLLastMatrix = NULL; + glLoadMatrixd(gGLModelView); + doOcclusion(shadow_cam); + + if (use_shader) + { + gDeferredShadowProgram.unbind(); + } + + gGL.setColorMask(true, true); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + gGLLastMatrix = NULL; + + LLPipeline::sUseOcclusion = occlude; + LLPipeline::sShadowRender = FALSE; +} + + +BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector3& max, std::vector<LLVector3>& fp, LLVector3 light_dir) +{ + //get point cloud of intersection of frust and min, max + + //get set of planes + std::vector<LLPlane> ps; + + if (getVisibleExtents(camera, min, max)) + { + return FALSE; + } + + ps.push_back(LLPlane(min, LLVector3(-1,0,0))); + ps.push_back(LLPlane(min, LLVector3(0,-1,0))); + ps.push_back(LLPlane(min, LLVector3(0,0,-1))); + ps.push_back(LLPlane(max, LLVector3(1,0,0))); + ps.push_back(LLPlane(max, LLVector3(0,1,0))); + ps.push_back(LLPlane(max, LLVector3(0,0,1))); + + /*if (!light_dir.isExactlyZero()) + { + LLPlane ucp; + LLPlane mcp; + + F32 maxd = -1.f; + F32 mind = 1.f; + + for (U32 i = 0; i < ps.size(); ++i) + { //pick the plane most aligned to lightDir for user clip plane + LLVector3 n(ps[i].mV); + F32 da = n*light_dir; + if (da > maxd) + { + maxd = da; + ucp = ps[i]; + } + + if (da < mind) + { + mind = da; + mcp = ps[i]; + } + } + + camera.setUserClipPlane(ucp); + + ps.clear(); + ps.push_back(ucp); + ps.push_back(mcp); + }*/ + + for (U32 i = 0; i < 6; i++) + { + ps.push_back(camera.getAgentPlane(i)); + } + + //get set of points where planes intersect and points are not above any plane + fp.clear(); + + for (U32 i = 0; i < ps.size(); ++i) + { + for (U32 j = 0; j < ps.size(); ++j) + { + for (U32 k = 0; k < ps.size(); ++k) + { + if (i == j || + i == k || + k == j) + { + continue; + } + + LLVector3 n1,n2,n3; + F32 d1,d2,d3; + + n1.setVec(ps[i].mV); + n2.setVec(ps[j].mV); + n3.setVec(ps[k].mV); + + d1 = ps[i].mV[3]; + d2 = ps[j].mV[3]; + d3 = ps[k].mV[3]; + + //get point of intersection of 3 planes "p" + LLVector3 p = (-d1*(n2%n3)-d2*(n3%n1)-d3*(n1%n2))/(n1*(n2%n3)); + + if (llround(p*n1+d1, 0.0001f) == 0.f && + llround(p*n2+d2, 0.0001f) == 0.f && + llround(p*n3+d3, 0.0001f) == 0.f) + { //point is on all three planes + BOOL found = TRUE; + for (U32 l = 0; l < ps.size() && found; ++l) + { + if (llround(ps[l].dist(p), 0.0001f) > 0.0f) + { //point is above some plane, not contained + found = FALSE; + } + } + + if (found) + { + fp.push_back(p); + } + } + } + } + } + + if (fp.empty()) + { + return FALSE; + } + + return TRUE; +} + +void LLPipeline::generateGI(LLCamera& camera, LLVector3& lightDir, std::vector<LLVector3>& vpc) +{ + if (LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) < 3) + { + return; + } + + LLVector3 up; + + //LLGLEnable depth_clamp(GL_DEPTH_CLAMP_NV); + + if (lightDir.mV[2] > 0.5f) + { + up = LLVector3(1,0,0); + } + else + { + up = LLVector3(0, 0, 1); + } + + + F32 gi_range = gSavedSettings.getF32("RenderGIRange"); + + U32 res = mGIMap.getWidth(); + + F32 atten = llmax(gSavedSettings.getF32("RenderGIAttenuation"), 0.001f); + + //set radius to range at which distance attenuation of incoming photons is near 0 + + F32 lrad = sqrtf(1.f/(atten*0.01f)); + + F32 lrange = lrad+gi_range*0.5f; + + LLVector3 pad(lrange,lrange,lrange); + + glh::matrix4f view = look(LLVector3(128.f,128.f,128.f), lightDir, up); + + LLVector3 cp = camera.getOrigin()+camera.getAtAxis()*(gi_range*0.5f); + + glh::vec3f scp(cp.mV); + view.mult_matrix_vec(scp); + cp.setVec(scp.v); + + F32 pix_width = lrange/(res*0.5f); + + //move cp to the nearest pix_width + for (U32 i = 0; i < 3; i++) + { + cp.mV[i] = llround(cp.mV[i], pix_width); + } + + LLVector3 min = cp-pad; + LLVector3 max = cp+pad; + + //set mGIRange to range in tc space[0,1] that covers texture block of intersecting lights around a point + mGIRange.mV[0] = (max.mV[0]-min.mV[0])/res; + mGIRange.mV[1] = (max.mV[1]-min.mV[1])/res; + mGILightRadius = lrad/lrange*0.5f; + + glh::matrix4f proj = gl_ortho(min.mV[0], max.mV[0], + min.mV[1], max.mV[1], + -max.mV[2], -min.mV[2]); + + LLCamera sun_cam = camera; + + glh::matrix4f eye_view = glh_get_current_modelview(); + + //get eye space to camera space matrix + mGIMatrix = view*eye_view.inverse(); + mGINormalMatrix = mGIMatrix.inverse().transpose(); + mGIInvProj = proj.inverse(); + mGIMatrixProj = proj*mGIMatrix; + + //translate and scale to [0,1] + glh::matrix4f trans(.5f, 0.f, 0.f, .5f, + 0.f, 0.5f, 0.f, 0.5f, + 0.f, 0.f, 0.5f, 0.5f, + 0.f, 0.f, 0.f, 1.f); + + mGIMatrixProj = trans*mGIMatrixProj; + + glh_set_current_modelview(view); + glh_set_current_projection(proj); + + LLViewerCamera::updateFrustumPlanes(sun_cam, TRUE, FALSE, TRUE); + + sun_cam.ignoreAgentFrustumPlane(LLCamera::AGENT_PLANE_NEAR); + static LLCullResult result; + + U32 type_mask = mRenderTypeMask; + + mRenderTypeMask = type_mask & ((1<<LLPipeline::RENDER_TYPE_SIMPLE) | + (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) | + (1<<LLPipeline::RENDER_TYPE_BUMP) | + (1<<LLPipeline::RENDER_TYPE_VOLUME) | + (1<<LLPipeline::RENDER_TYPE_TREE) | + (1<<LLPipeline::RENDER_TYPE_TERRAIN) | + (1<<LLPipeline::RENDER_TYPE_WATER) | + (1<<LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW) | + (1<<LLPipeline::RENDER_TYPE_AVATAR) | + (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_BUMP) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) | + (1 << LLPipeline::RENDER_TYPE_PASS_SHINY)); + + + + S32 occlude = LLPipeline::sUseOcclusion; + //LLPipeline::sUseOcclusion = 0; + LLPipeline::sShadowRender = TRUE; + + //only render large objects into GI map + sMinRenderSize = gSavedSettings.getF32("RenderGIMinRenderSize"); + + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_GI_SOURCE; + mGIMap.bindTarget(); + + F64 last_modelview[16]; + F64 last_projection[16]; + for (U32 i = 0; i < 16; i++) + { + last_modelview[i] = gGLLastModelView[i]; + last_projection[i] = gGLLastProjection[i]; + gGLLastModelView[i] = mGIModelview.m[i]; + gGLLastProjection[i] = mGIProjection.m[i]; + } + + sun_cam.setOrigin(0.f, 0.f, 0.f); + updateCull(sun_cam, result); + stateSort(sun_cam, result); + + for (U32 i = 0; i < 16; i++) + { + gGLLastModelView[i] = last_modelview[i]; + gGLLastProjection[i] = last_projection[i]; + } + + mGIProjection = proj; + mGIModelview = view; + + LLGLEnable cull(GL_CULL_FACE); + + //generate GI map + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadMatrixf(proj.m); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadMatrixf(view.m); + + stop_glerror(); + gGLLastMatrix = NULL; + + mGIMap.clear(); + + { + //LLGLEnable enable(GL_DEPTH_CLAMP_NV); + renderGeomDeferred(camera); + } + + mGIMap.flush(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + gGLLastMatrix = NULL; + + LLPipeline::sUseOcclusion = occlude; + LLPipeline::sShadowRender = FALSE; + sMinRenderSize = 0.f; + + mRenderTypeMask = type_mask; + +} + +void LLPipeline::renderHighlight(const LLViewerObject* obj, F32 fade) { + if (obj && obj->getVolume()) + { + for (LLViewerObject::child_list_t::const_iterator iter = obj->getChildren().begin(); iter != obj->getChildren().end(); ++iter) + { + renderHighlight(*iter, fade); + } + + LLDrawable* drawable = obj->mDrawable; + if (drawable) + { + for (S32 i = 0; i < drawable->getNumFaces(); ++i) + { + LLFace* face = drawable->getFace(i); + if (face) + { + face->renderSelected(LLViewerTexture::sNullImagep, LLColor4(1,1,1,fade)); + } + } + } + } +} + +void LLPipeline::generateHighlight(LLCamera& camera) +{ + //render highlighted object as white into offscreen render target + + if (mHighlightObject.notNull()) + { + mHighlightSet.insert(HighlightItem(mHighlightObject)); + } + + if (!mHighlightSet.empty()) + { + F32 transition = gFrameIntervalSeconds/gSavedSettings.getF32("RenderHighlightFadeTime"); + + LLGLDisable test(GL_ALPHA_TEST); + LLGLDepthTest depth(GL_FALSE); + mHighlight.bindTarget(); + disableLights(); + gGL.setColorMask(true, true); + mHighlight.clear(); + + gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep); + for (std::set<HighlightItem>::iterator iter = mHighlightSet.begin(); iter != mHighlightSet.end(); ) + { + std::set<HighlightItem>::iterator cur_iter = iter++; + + if (cur_iter->mItem.isNull()) + { + mHighlightSet.erase(cur_iter); + continue; + } + + if (cur_iter->mItem == mHighlightObject) + { + cur_iter->incrFade(transition); + } + else + { + cur_iter->incrFade(-transition); + if (cur_iter->mFade <= 0.f) + { + mHighlightSet.erase(cur_iter); + continue; + } + } + + renderHighlight(cur_iter->mItem->getVObj(), cur_iter->mFade); + } - if (!sRenderDeferred) + mHighlight.flush(); + gGL.setColorMask(true, false); + } +} + + +void LLPipeline::generateSunShadow(LLCamera& camera) +{ + if (!sRenderDeferred || !gSavedSettings.getBOOL("RenderDeferredShadow")) { return; } @@ -6149,98 +7919,173 @@ void LLPipeline::generateSunShadow(LLCamera& camera) if (clear) { clear = FALSE; - for (U32 i = 0; i < 4; i++) + for (U32 i = 0; i < 6; i++) { - mSunShadow[i].bindTarget(); - mSunShadow[i].clear(); - mSunShadow[i].flush(); + mShadow[i].bindTarget(); + mShadow[i].clear(); + mShadow[i].flush(); } } return; } clear = TRUE; + F64 last_modelview[16]; + F64 last_projection[16]; + for (U32 i = 0; i < 16; i++) + { //store last_modelview of world camera + last_modelview[i] = gGLLastModelView[i]; + last_projection[i] = gGLLastProjection[i]; + } + + U32 type_mask = mRenderTypeMask; + mRenderTypeMask = type_mask & ((1<<LLPipeline::RENDER_TYPE_SIMPLE) | + (1<<LLPipeline::RENDER_TYPE_ALPHA) | + (1<<LLPipeline::RENDER_TYPE_GRASS) | + (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) | + (1<<LLPipeline::RENDER_TYPE_BUMP) | + (1<<LLPipeline::RENDER_TYPE_VOLUME) | + (1<<LLPipeline::RENDER_TYPE_AVATAR) | + (1<<LLPipeline::RENDER_TYPE_TREE) | + (1<<LLPipeline::RENDER_TYPE_TERRAIN) | + (1<<LLPipeline::RENDER_TYPE_WATER) | + (1<<LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW) | + (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_BUMP) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) | + (1 << LLPipeline::RENDER_TYPE_PASS_SHINY) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY)); + gGL.setColorMask(false, false); //get sun view matrix - F32 range = 128.f; - //store current projection/modelview matrix glh::matrix4f saved_proj = glh_get_current_projection(); glh::matrix4f saved_view = glh_get_current_modelview(); glh::matrix4f inv_view = saved_view.inverse(); - glh::matrix4f view[4]; - glh::matrix4f proj[4]; - LLVector3 up; - + glh::matrix4f view[6]; + glh::matrix4f proj[6]; + //clip contains parallel split distances for 3 splits LLVector3 clip = gSavedSettings.getVector3("RenderShadowClipPlanes"); + //F32 slope_threshold = gSavedSettings.getF32("RenderShadowSlopeThreshold"); + //far clip on last split is minimum of camera view distance and 128 mSunClipPlanes = LLVector4(clip, clip.mV[2] * clip.mV[2]/clip.mV[1]); - const LLPickInfo& pick_info = gViewerWindow->getLastPick(); - - if (!pick_info.mPosGlobal.isExactlyZero()) - { //squish nearest frustum based on alt-zoom (tighten up nearest frustum when focusing on tiny object - F32 focus_dist = (F32) (pick_info.mPosGlobal + LLVector3d(pick_info.mObjectOffset) - gAgent.getPosGlobalFromAgent(LLViewerCamera::getInstance()->getOrigin())).magVec(); - mSunClipPlanes.mV[0] = llclamp(focus_dist*focus_dist, 2.f, mSunClipPlanes.mV[0]); - } - - // convenience array of 4 near clip plane distances - F32 dist[] = { 0.1f, mSunClipPlanes.mV[0], mSunClipPlanes.mV[1], mSunClipPlanes.mV[2], mSunClipPlanes.mV[3] }; + clip = gSavedSettings.getVector3("RenderShadowOrthoClipPlanes"); + mSunOrthoClipPlanes = LLVector4(clip, clip.mV[2]*clip.mV[2]/clip.mV[1]); //currently used for amount to extrude frusta corners for constructing shadow frusta LLVector3 n = gSavedSettings.getVector3("RenderShadowNearDist"); - F32 nearDist[] = { n.mV[0], n.mV[1], n.mV[2], n.mV[2] }; + //F32 nearDist[] = { n.mV[0], n.mV[1], n.mV[2], n.mV[2] }; - for (S32 j = 0; j < 4; j++) - { - //restore render matrices - glh_set_current_modelview(saved_view); - glh_set_current_projection(saved_proj); + LLVector3 lightDir = -mSunDir; + lightDir.normVec(); - //get center of far clip plane (for point of interest later) - LLVector3 center = camera.getOrigin() + camera.getAtAxis() * range; + glh::vec3f light_dir(lightDir.mV); - LLVector3 eye = camera.getOrigin(); + //create light space camera matrix + + LLVector3 at = lightDir; - //camera used for shadow cull/render - LLCamera shadow_cam; - - // perspective shadow map - glh::vec3f p[16]; //point cloud to be contained by shadow projection (light camera space) - glh::vec3f wp[16]; //point cloud to be contained by shadow projection (world space) - - LLVector3 lightDir = -mSunDir; - glh::vec3f light_dir(lightDir.mV); + LLVector3 up = camera.getAtAxis(); + + if (fabsf(up*lightDir) > 0.75f) + { + up = camera.getUpAxis(); + } + + /*LLVector3 left = up%at; + up = at%left;*/ - //create light space camera matrix - LLVector3 at; - F32 dl = camera.getLeftAxis() * lightDir; - F32 du = camera.getUpAxis() * lightDir; + up.normVec(); + at.normVec(); + + + F32 near_clip = 0.f; + { + //get visible point cloud + std::vector<LLVector3> fp; - //choose an at axis such that up will be most aligned with lightDir - if (dl*dl < du*du) + LLVector3 min,max; + getVisiblePointCloud(camera,min,max,fp); + + if (fp.empty()) { - at = lightDir%camera.getLeftAxis(); + mRenderTypeMask = type_mask; + return; } - else + + generateGI(camera, lightDir, fp); + + //get good split distances for frustum + for (U32 i = 0; i < fp.size(); ++i) { - at = lightDir%camera.getUpAxis(); + glh::vec3f v(fp[i].mV); + saved_view.mult_matrix_vec(v); + fp[i].setVec(v.v); } - if (at * camera.getAtAxis() < 0) + min = fp[0]; + max = fp[0]; + + //get camera space bounding box + for (U32 i = 1; i < fp.size(); ++i) { - at = -at; + update_min_max(min, max, fp[i]); } + + near_clip = -max.mV[2]; + F32 far_clip = -min.mV[2]*2.f; + + far_clip = llmin(far_clip, 128.f); + far_clip = llmin(far_clip, camera.getFar()); + + F32 range = far_clip-near_clip; + + LLVector3 split_exp = gSavedSettings.getVector3("RenderShadowSplitExponent"); + + F32 da = 1.f-llmax( fabsf(lightDir*up), fabsf(lightDir*camera.getLeftAxis()) ); - LLVector3 left = lightDir%at; - up = left%lightDir; - up.normVec(); + da = powf(da, split_exp.mV[2]); + + F32 sxp = split_exp.mV[1] + (split_exp.mV[0]-split_exp.mV[1])*da; + + + for (U32 i = 0; i < 4; ++i) + { + F32 x = (F32)(i+1)/4.f; + x = powf(x, sxp); + mSunClipPlanes.mV[i] = near_clip+range*x; + } + } + + // convenience array of 4 near clip plane distances + F32 dist[] = { near_clip, mSunClipPlanes.mV[0], mSunClipPlanes.mV[1], mSunClipPlanes.mV[2], mSunClipPlanes.mV[3] }; + + for (S32 j = 0; j < 4; j++) + { + if (!hasRenderDebugMask(RENDER_DEBUG_SHADOW_FRUSTA)) + { + mShadowFrustPoints[j].clear(); + } + + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW0+j; + + //restore render matrices + glh_set_current_modelview(saved_view); + glh_set_current_projection(saved_proj); + + LLVector3 eye = camera.getOrigin(); + + //camera used for shadow cull/render + LLCamera shadow_cam; + //create world space camera frustum for this split shadow_cam = camera; shadow_cam.setFar(16.f); @@ -6251,8 +8096,6 @@ void LLPipeline::generateSunShadow(LLCamera& camera) LLVector3 pn = shadow_cam.getAtAxis(); - LLVector3 frust_center; - LLVector3 min, max; //construct 8 corners of split frustum section @@ -6263,21 +8106,19 @@ void LLPipeline::generateSunShadow(LLCamera& camera) F32 dp = delta*pn; frust[i] = eye + (delta*dist[j])/dp; frust[i+4] = eye + (delta*dist[j+1])/dp; - frust_center += frust[i] + frust[i+4]; } - - //get frustum center - frust_center /= 8.f; shadow_cam.calcAgentFrustumPlanes(frust); - + shadow_cam.mFrustumCornerDist = 0.f; if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) { mShadowCamera[j] = shadow_cam; } - if (gPipeline.getVisibleExtents(shadow_cam, min, max)) + std::vector<LLVector3> fp; + + if (!gPipeline.getVisiblePointCloud(shadow_cam, min, max, fp, lightDir)) { //no possible shadow receivers if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) @@ -6287,6 +8128,16 @@ void LLPipeline::generateSunShadow(LLCamera& camera) mShadowCamera[j+4] = shadow_cam; } + mShadow[j].bindTarget(); + { + LLGLDepthTest depth(GL_TRUE); + mShadow[j].clear(); + } + mShadow[j].flush(); + + mShadowError.mV[j] = 0.f; + mShadowFOV.mV[j] = 0.f; + continue; } @@ -6294,53 +8145,263 @@ void LLPipeline::generateSunShadow(LLCamera& camera) { mShadowExtents[j][0] = min; mShadowExtents[j][1] = max; + mShadowFrustPoints[j] = fp; } - view[j] = look(frust_center-lightDir*nearDist[j], lightDir, up); - F32 shadow_dist = nearDist[j]; - for (U32 i = 0; i < 8; i++) + //find a good origin for shadow projection + LLVector3 origin; + + //get a temporary view projection + view[j] = look(camera.getOrigin(), lightDir, -up); + + std::vector<LLVector3> wpf; + + for (U32 i = 0; i < fp.size(); i++) { - //points in worldspace (wp) and light camera space (p) - //that must be included in shadow generation - wp[i] = glh::vec3f(frust[i].mV); - wp[i+8] = wp[i] - light_dir*shadow_dist; - view[j].mult_matrix_vec(wp[i], p[i]); - view[j].mult_matrix_vec(wp[i+8], p[i+8]); + glh::vec3f p = glh::vec3f(fp[i].mV); + view[j].mult_matrix_vec(p); + wpf.push_back(LLVector3(p.v)); } - - min = LLVector3(p[0].v); - max = LLVector3(p[0].v); - LLVector3 fmin = min; - LLVector3 fmax = max; + min = wpf[0]; + max = wpf[0]; - for (U32 i = 1; i < 16; i++) - { //find camera space AABB of frustum in light camera space - update_min_max(min, max, LLVector3(p[i].v)); - if (i < 8) - { - update_min_max(fmin, fmax, LLVector3(p[i].v)); + for (U32 i = 0; i < fp.size(); ++i) + { //get AABB in camera space + update_min_max(min, max, wpf[i]); + } + + // Construct a perspective transform with perspective along y-axis that contains + // points in wpf + //Known: + // - far clip plane + // - near clip plane + // - points in frustum + //Find: + // - origin + + //get some "interesting" points of reference + LLVector3 center = (min+max)*0.5f; + LLVector3 size = (max-min)*0.5f; + LLVector3 near_center = center; + near_center.mV[1] += size.mV[1]*2.f; + + + //put all points in wpf in quadrant 0, reletive to center of min/max + //get the best fit line using least squares + F32 bfm = 0.f; + F32 bfb = 0.f; + + for (U32 i = 0; i < wpf.size(); ++i) + { + wpf[i] -= center; + wpf[i].mV[0] = fabsf(wpf[i].mV[0]); + wpf[i].mV[2] = fabsf(wpf[i].mV[2]); + } + + if (!wpf.empty()) + { + F32 sx = 0.f; + F32 sx2 = 0.f; + F32 sy = 0.f; + F32 sxy = 0.f; + + for (U32 i = 0; i < wpf.size(); ++i) + { + sx += wpf[i].mV[0]; + sx2 += wpf[i].mV[0]*wpf[i].mV[0]; + sy += wpf[i].mV[1]; + sxy += wpf[i].mV[0]*wpf[i].mV[1]; } + + bfm = (sy*sx-wpf.size()*sxy)/(sx*sx-wpf.size()*sx2); + bfb = (sx*sxy-sy*sx2)/(sx*sx-bfm*sx2); } + + { + // best fit line is y=bfm*x+bfb + + //find point that is furthest to the right of line + F32 off_x = -1.f; + LLVector3 lp; + + for (U32 i = 0; i < wpf.size(); ++i) + { + //y = bfm*x+bfb + //x = (y-bfb)/bfm + F32 lx = (wpf[i].mV[1]-bfb)/bfm; + + lx = wpf[i].mV[0]-lx; + + if (off_x < lx) + { + off_x = lx; + lp = wpf[i]; + } + } + + //get line with slope bfm through lp + // bfb = y-bfm*x + bfb = lp.mV[1]-bfm*lp.mV[0]; + + //calculate error + mShadowError.mV[j] = 0.f; + + for (U32 i = 0; i < wpf.size(); ++i) + { + F32 lx = (wpf[i].mV[1]-bfb)/bfm; + mShadowError.mV[j] += fabsf(wpf[i].mV[0]-lx); + } + + mShadowError.mV[j] /= wpf.size(); + mShadowError.mV[j] /= size.mV[0]; + + if (mShadowError.mV[j] > gSavedSettings.getF32("RenderShadowErrorCutoff")) + { //just use ortho projection + mShadowFOV.mV[j] = -1.f; + origin.clearVec(); + proj[j] = gl_ortho(min.mV[0], max.mV[0], + min.mV[1], max.mV[1], + -max.mV[2], -min.mV[2]); + } + else + { + //origin is where line x = 0; + origin.setVec(0,bfb,0); - //generate perspective matrix that contains frustum - //proj[j] = matrix_perspective(min, max); - proj[j] = gl_ortho(min.mV[0], max.mV[0], + F32 fovz = 1.f; + F32 fovx = 1.f; + + LLVector3 zp; + LLVector3 xp; + + for (U32 i = 0; i < wpf.size(); ++i) + { + LLVector3 atz = wpf[i]-origin; + atz.mV[0] = 0.f; + atz.normVec(); + if (fovz > -atz.mV[1]) + { + zp = wpf[i]; + fovz = -atz.mV[1]; + } + + LLVector3 atx = wpf[i]-origin; + atx.mV[2] = 0.f; + atx.normVec(); + if (fovx > -atx.mV[1]) + { + fovx = -atx.mV[1]; + xp = wpf[i]; + } + } + + fovx = acos(fovx); + fovz = acos(fovz); + + F32 cutoff = llmin(gSavedSettings.getF32("RenderShadowFOVCutoff"), 1.4f); + + mShadowFOV.mV[j] = fovx; + + if (fovx < cutoff && fovz > cutoff) + { + //x is a good fit, but z is too big, move away from zp enough so that fovz matches cutoff + F32 d = zp.mV[2]/tan(cutoff); + F32 ny = zp.mV[1] + fabsf(d); + + origin.mV[1] = ny; + + fovz = 1.f; + fovx = 1.f; + + for (U32 i = 0; i < wpf.size(); ++i) + { + LLVector3 atz = wpf[i]-origin; + atz.mV[0] = 0.f; + atz.normVec(); + fovz = llmin(fovz, -atz.mV[1]); + + LLVector3 atx = wpf[i]-origin; + atx.mV[2] = 0.f; + atx.normVec(); + fovx = llmin(fovx, -atx.mV[1]); + } + + fovx = acos(fovx); + fovz = acos(fovz); + + if (fovx > cutoff || llround(fovz, 0.01f) > cutoff) + { + // llerrs << "WTF?" << llendl; + } + + mShadowFOV.mV[j] = cutoff; + } + + + origin += center; + + F32 ynear = -(max.mV[1]-origin.mV[1]); + F32 yfar = -(min.mV[1]-origin.mV[1]); + + if (ynear < 0.1f) //keep a sensible near clip plane + { + F32 diff = 0.1f-ynear; + origin.mV[1] += diff; + ynear += diff; + yfar += diff; + } + + if (fovx > cutoff) + { //just use ortho projection + origin.clearVec(); + mShadowError.mV[j] = -1.f; + proj[j] = gl_ortho(min.mV[0], max.mV[0], min.mV[1], max.mV[1], -max.mV[2], -min.mV[2]); - + } + else + { + //get perspective projection + view[j] = view[j].inverse(); + + glh::vec3f origin_agent(origin.mV); + + //translate view to origin + view[j].mult_matrix_vec(origin_agent); + + eye = LLVector3(origin_agent.v); + + if (!hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) + { + mShadowFrustOrigin[j] = eye; + } + + view[j] = look(LLVector3(origin_agent.v), lightDir, -up); + + F32 fx = 1.f/tanf(fovx); + F32 fz = 1.f/tanf(fovz); + + proj[j] = glh::matrix4f(-fx, 0, 0, 0, + 0, (yfar+ynear)/(ynear-yfar), 0, (2.f*yfar*ynear)/(ynear-yfar), + 0, 0, -fz, 0, + 0, -1.f, 0, 0); + } + } + } + shadow_cam.setFar(128.f); shadow_cam.setOriginAndLookAt(eye, up, center); + shadow_cam.setOrigin(0,0,0); + glh_set_current_modelview(view[j]); glh_set_current_projection(proj[j]); LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); - proj[j] = gl_ortho(fmin.mV[0], fmax.mV[0], - fmin.mV[1], fmax.mV[1], - -fmax.mV[2], -fmin.mV[2]); + shadow_cam.ignoreAgentFrustumPlane(LLCamera::AGENT_PLANE_NEAR); //translate and scale to from [-1, 1] to [0, 1] glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, @@ -6351,113 +8412,168 @@ void LLPipeline::generateSunShadow(LLCamera& camera) glh_set_current_modelview(view[j]); glh_set_current_projection(proj[j]); + for (U32 i = 0; i < 16; i++) + { + gGLLastModelView[i] = mShadowModelview[j].m[i]; + gGLLastProjection[i] = mShadowProjection[j].m[i]; + } + + mShadowModelview[j] = view[j]; + mShadowProjection[j] = proj[j]; + + mSunShadowMatrix[j] = trans*proj[j]*view[j]*inv_view; - U32 type_mask = mRenderTypeMask; - mRenderTypeMask = type_mask & ((1<<LLPipeline::RENDER_TYPE_SIMPLE) | - (1<<LLPipeline::RENDER_TYPE_ALPHA) | - (1<<LLPipeline::RENDER_TYPE_GRASS) | - (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) | - (1<<LLPipeline::RENDER_TYPE_BUMP) | - (1<<LLPipeline::RENDER_TYPE_VOLUME) | - (1<<LLPipeline::RENDER_TYPE_AVATAR) | - (1<<LLPipeline::RENDER_TYPE_TREE) | - (1<<LLPipeline::RENDER_TYPE_TERRAIN) | - 0); - - //clip out geometry on the same side of water as the camera - static LLCullResult result; - S32 occlude = LLPipeline::sUseOcclusion; - LLPipeline::sUseOcclusion = 1; - LLPipeline::sShadowRender = TRUE; - //hack to prevent LOD updates from using sun camera origin - shadow_cam.setOrigin(camera.getOrigin()); - updateCull(shadow_cam, result); - stateSort(shadow_cam, result); - + stop_glerror(); + + mShadow[j].bindTarget(); + mShadow[j].getViewport(gGLViewport); + + { + static LLCullResult result[4]; + + //LLGLEnable enable(GL_DEPTH_CLAMP_NV); + renderShadow(view[j], proj[j], shadow_cam, result[j], TRUE); + } + + mShadow[j].flush(); + if (!gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) { LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); mShadowCamera[j+4] = shadow_cam; } + } - LLFastTimer t(FTM_SHADOW_RENDER); + - stop_glerror(); + F32 fade_amt = gFrameIntervalSeconds * llmax(LLViewerCamera::getInstance()->getVelocityStat()->getCurrentPerSec(), 1.f); + + //update shadow targets + for (U32 i = 0; i < 2; i++) + { //for each current shadow + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW4+i; + + if (mShadowSpotLight[i].notNull() && + (mShadowSpotLight[i] == mTargetShadowSpotLight[0] || + mShadowSpotLight[i] == mTargetShadowSpotLight[1])) + { //keep this spotlight + mSpotLightFade[i] = llmin(mSpotLightFade[i]+fade_amt, 1.f); + } + else + { //fade out this light + mSpotLightFade[i] = llmax(mSpotLightFade[i]-fade_amt, 0.f); + + if (mSpotLightFade[i] == 0.f || mShadowSpotLight[i].isNull()) + { //faded out, grab one of the pending spots (whichever one isn't already taken) + if (mTargetShadowSpotLight[0] != mShadowSpotLight[(i+1)%2]) + { + mShadowSpotLight[i] = mTargetShadowSpotLight[0]; + } + else + { + mShadowSpotLight[i] = mTargetShadowSpotLight[1]; + } + } + } + } - mSunShadow[j].bindTarget(); - mSunShadow[j].getViewport(gGLViewport); + for (S32 i = 0; i < 2; i++) + { + glh_set_current_modelview(saved_view); + glh_set_current_projection(saved_proj); + if (mShadowSpotLight[i].isNull()) { - LLGLDepthTest depth(GL_TRUE); - mSunShadow[j].clear(); + continue; } - U32 types[] = { LLRenderPass::PASS_SIMPLE, LLRenderPass::PASS_FULLBRIGHT, LLRenderPass::PASS_SHINY, LLRenderPass::PASS_BUMP }; - LLGLEnable cull(GL_CULL_FACE); + LLVOVolume* volume = mShadowSpotLight[i]->getVOVolume(); - //generate sun shadow map - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadMatrixf(proj[j].m); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadMatrixf(view[j].m); + if (!volume) + { + mShadowSpotLight[i] = NULL; + continue; + } - stop_glerror(); - gGLLastMatrix = NULL; + LLDrawable* drawable = mShadowSpotLight[i]; - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - - glColor4f(1,1,1,1); + LLVector3 params = volume->getSpotLightParams(); + F32 fov = params.mV[0]; + + //get agent->light space matrix (modelview) + LLVector3 center = drawable->getPositionAgent(); + LLQuaternion quat = volume->getRenderRotation(); + + //get near clip plane + LLVector3 scale = volume->getScale(); + LLVector3 at_axis(0,0,-scale.mV[2]*0.5f); + at_axis *= quat; + + LLVector3 np = center+at_axis; + at_axis.normVec(); + + //get origin that has given fov for plane np, at_axis, and given scale + F32 dist = (scale.mV[1]*0.5f)/tanf(fov*0.5f); + + LLVector3 origin = np - at_axis*dist; + + LLMatrix4 mat(quat, LLVector4(origin, 1.f)); + + view[i+4] = glh::matrix4f((F32*) mat.mMatrix); + + view[i+4] = view[i+4].inverse(); + + //get perspective matrix + F32 near_clip = dist+0.01f; + F32 width = scale.mV[VX]; + F32 height = scale.mV[VY]; + F32 far_clip = dist+volume->getLightRadius()*1.5f; + + F32 fovy = fov * RAD_TO_DEG; + F32 aspect = width/height; - glCullFace(GL_FRONT); + proj[i+4] = gl_perspective(fovy, aspect, near_clip, far_clip); - stop_glerror(); + //translate and scale to from [-1, 1] to [0, 1] + glh::matrix4f trans(0.5f, 0.f, 0.f, 0.5f, + 0.f, 0.5f, 0.f, 0.5f, + 0.f, 0.f, 0.5f, 0.5f, + 0.f, 0.f, 0.f, 1.f); - gGL.setColorMask(false, false); + glh_set_current_modelview(view[i+4]); + glh_set_current_projection(proj[i+4]); - gDeferredShadowProgram.bind(); - { - LLFastTimer ftm(FTM_SHADOW_SIMPLE); - LLGLDisable test(GL_ALPHA_TEST); - gGL.getTexUnit(0)->disable(); - for (U32 i = 0; i < sizeof(types)/sizeof(U32); ++i) - { - renderObjects(types[i], LLVertexBuffer::MAP_VERTEX, FALSE); - } - gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE); - } + mSunShadowMatrix[i+4] = trans*proj[i+4]*view[i+4]*inv_view; + for (U32 j = 0; j < 16; j++) { - LLFastTimer ftm(FTM_SHADOW_ALPHA); - LLGLEnable test(GL_ALPHA_TEST); - gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.6f); - renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE); - glColor4f(1,1,1,1); - renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE); - gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGLLastModelView[j] = mShadowModelview[i+4].m[j]; + gGLLastProjection[j] = mShadowProjection[i+4].m[j]; } - - gDeferredShadowProgram.unbind(); - renderGeomShadow(shadow_cam); + mShadowModelview[i+4] = view[i+4]; + mShadowProjection[i+4] = proj[i+4]; - gGL.setColorMask(true, true); + LLCamera shadow_cam = camera; + shadow_cam.setFar(far_clip); + shadow_cam.setOrigin(origin); - glCullFace(GL_BACK); - LLPipeline::sUseOcclusion = occlude; - LLPipeline::sShadowRender = FALSE; - mRenderTypeMask = type_mask; - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - gGLLastMatrix = NULL; + LLViewerCamera::updateFrustumPlanes(shadow_cam, FALSE, FALSE, TRUE); - mSunShadow[j].flush(); - } + stop_glerror(); + + mShadow[i+4].bindTarget(); + mShadow[i+4].getViewport(gGLViewport); + + static LLCullResult result[2]; + + LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_SHADOW0+i+4; + + renderShadow(view[i+4], proj[i+4], shadow_cam, result[i], FALSE, FALSE); + + mShadow[i+4].flush(); + } if (!gSavedSettings.getBOOL("CameraOffset")) { @@ -6474,6 +8590,14 @@ void LLPipeline::generateSunShadow(LLCamera& camera) glMatrixMode(GL_MODELVIEW); } gGL.setColorMask(true, false); + + for (U32 i = 0; i < 16; i++) + { + gGLLastModelView[i] = last_modelview[i]; + gGLLastProjection[i] = last_projection[i]; + } + + mRenderTypeMask = type_mask; } void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture) @@ -6482,7 +8606,7 @@ void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL textu { LLSpatialGroup* group = *i; if (!group->isDead() && - (!sUseOcclusion || !group->isState(LLSpatialGroup::OCCLUDED)) && + (!sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && gPipeline.hasRenderType(group->mSpatialPartition->mDrawableType) && group->mDrawMap.find(type) != group->mDrawMap.end()) { @@ -6525,7 +8649,16 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) (1<<LLPipeline::RENDER_TYPE_SIMPLE) | (1<<LLPipeline::RENDER_TYPE_FULLBRIGHT) | (1<<LLPipeline::RENDER_TYPE_ALPHA) | - (1<<LLPipeline::RENDER_TYPE_INVISIBLE); + (1<<LLPipeline::RENDER_TYPE_INVISIBLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_SIMPLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_ALPHA) | + (1 << LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK) | + (1 << LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY) | + (1 << LLPipeline::RENDER_TYPE_PASS_SHINY) | + (1 << LLPipeline::RENDER_TYPE_PASS_INVISIBLE) | + (1 << LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY); } mask = mask & gPipeline.getRenderTypeMask(); @@ -6535,6 +8668,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) S32 occlusion = sUseOcclusion; sUseOcclusion = 0; sReflectionRender = sRenderDeferred ? FALSE : TRUE; + sShadowRender = TRUE; sImpostorRender = TRUE; markVisible(avatar->mDrawable, *LLViewerCamera::getInstance()); @@ -6611,20 +8745,23 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) if (!avatar->mImpostor.isComplete() || resX != avatar->mImpostor.getWidth() || resY != avatar->mImpostor.getHeight()) { + avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,TRUE); + if (LLPipeline::sRenderDeferred) { - avatar->mImpostor.allocate(resX,resY,GL_RGBA16F_ARB,TRUE,TRUE); addDeferredAttachments(avatar->mImpostor); } - else - { - avatar->mImpostor.allocate(resX,resY,GL_RGBA,TRUE,TRUE); - } + gGL.getTexUnit(0)->bind(&avatar->mImpostor); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); } + LLGLEnable stencil(GL_STENCIL_TEST); + glStencilMask(0xFFFFFFFF); + glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF); + glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); + { LLGLEnable scissor(GL_SCISSOR_TEST); glScissor(0, 0, resX, resY); @@ -6632,15 +8769,11 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) avatar->mImpostor.clear(); } - LLGLEnable stencil(GL_STENCIL_TEST); - - glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - if (LLPipeline::sRenderDeferred) { stop_glerror(); renderGeomDeferred(camera); + renderGeomPostDeferred(camera); } else { @@ -6650,11 +8783,16 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glStencilFunc(GL_EQUAL, 1, 0xFFFFFF); - if (!sRenderDeferred || muted) - { + { //create alpha mask based on stencil buffer (grey out if muted) LLVector3 left = camera.getLeftAxis()*tdim.mV[0]*2.f; LLVector3 up = camera.getUpAxis()*tdim.mV[1]*2.f; + if (LLPipeline::sRenderDeferred) + { + GLuint buff = GL_COLOR_ATTACHMENT0_EXT; + glDrawBuffersARB(1, &buff); + } + LLGLEnable blend(muted ? 0 : GL_BLEND); if (muted) @@ -6693,6 +8831,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar) sUseOcclusion = occlusion; sReflectionRender = FALSE; sImpostorRender = FALSE; + sShadowRender = FALSE; gPipeline.mRenderTypeMask = saved_mask; glMatrixMode(GL_PROJECTION); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 8f6867aa01..ce50a37405 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -150,6 +150,8 @@ public: void markMoved(LLDrawable *drawablep, BOOL damped_motion = FALSE); void markShift(LLDrawable *drawablep); void markTextured(LLDrawable *drawablep); + void markGLRebuild(LLGLUpdate* glu); + void markRebuild(LLSpatialGroup* group, BOOL priority = FALSE); void markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags flag = LLDrawable::REBUILD_ALL, BOOL priority = FALSE); //get the object between start and end that's closest to start. @@ -200,10 +202,14 @@ public: void updateMove(); BOOL visibleObjectsInFrustum(LLCamera& camera); BOOL getVisibleExtents(LLCamera& camera, LLVector3 &min, LLVector3& max); + BOOL getVisiblePointCloud(LLCamera& camera, LLVector3 &min, LLVector3& max, std::vector<LLVector3>& fp, LLVector3 light_dir = LLVector3(0,0,0)); void updateCull(LLCamera& camera, LLCullResult& result, S32 water_clip = 0); //if water_clip is 0, ignore water plane, 1, cull to above plane, -1, cull to below plane void createObjects(F32 max_dtime); void createObject(LLViewerObject* vobj); void updateGeom(F32 max_dtime); + void updateGL(); + void rebuildPriorityGroups(); + void rebuildGroups(); //calculate pixel area of given box from vantage point of given camera static F32 calcPixelArea(LLVector3 center, LLVector3 size, LLCamera& camera); @@ -224,12 +230,21 @@ public: void renderGeomDeferred(LLCamera& camera); void renderGeomPostDeferred(LLCamera& camera); void renderGeomShadow(LLCamera& camera); - void bindDeferredShader(LLGLSLShader& shader, U32 light_index = 0); + void bindDeferredShader(LLGLSLShader& shader, U32 light_index = 0, LLRenderTarget* gi_source = NULL, LLRenderTarget* last_gi_post = NULL, U32 noise_map = 0xFFFFFFFF); + void setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep); + void unbindDeferredShader(LLGLSLShader& shader); void renderDeferredLighting(); void generateWaterReflection(LLCamera& camera); void generateSunShadow(LLCamera& camera); + void generateHighlight(LLCamera& camera); + void renderHighlight(const LLViewerObject* obj, F32 fade); + void setHighlightObject(LLDrawable* obj) { mHighlightObject = obj; } + + + void renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera& camera, LLCullResult& result, BOOL use_shader = TRUE, BOOL use_occlusion = TRUE); + void generateGI(LLCamera& camera, LLVector3& lightDir, std::vector<LLVector3>& vpc); void renderHighlights(); void renderDebug(); @@ -324,23 +339,35 @@ public: enum LLRenderTypeMask { // Following are pool types (some are also object types) - RENDER_TYPE_SKY = LLDrawPool::POOL_SKY, - RENDER_TYPE_WL_SKY = LLDrawPool::POOL_WL_SKY, - RENDER_TYPE_GROUND = LLDrawPool::POOL_GROUND, - RENDER_TYPE_TERRAIN = LLDrawPool::POOL_TERRAIN, - RENDER_TYPE_SIMPLE = LLDrawPool::POOL_SIMPLE, - RENDER_TYPE_GRASS = LLDrawPool::POOL_GRASS, - RENDER_TYPE_FULLBRIGHT = LLDrawPool::POOL_FULLBRIGHT, - RENDER_TYPE_BUMP = LLDrawPool::POOL_BUMP, - RENDER_TYPE_AVATAR = LLDrawPool::POOL_AVATAR, - RENDER_TYPE_TREE = LLDrawPool::POOL_TREE, - RENDER_TYPE_INVISIBLE = LLDrawPool::POOL_INVISIBLE, - RENDER_TYPE_WATER = LLDrawPool::POOL_WATER, - RENDER_TYPE_ALPHA = LLDrawPool::POOL_ALPHA, - RENDER_TYPE_GLOW = LLDrawPool::POOL_GLOW, - + RENDER_TYPE_SKY = LLDrawPool::POOL_SKY, + RENDER_TYPE_WL_SKY = LLDrawPool::POOL_WL_SKY, + RENDER_TYPE_GROUND = LLDrawPool::POOL_GROUND, + RENDER_TYPE_TERRAIN = LLDrawPool::POOL_TERRAIN, + RENDER_TYPE_SIMPLE = LLDrawPool::POOL_SIMPLE, + RENDER_TYPE_GRASS = LLDrawPool::POOL_GRASS, + RENDER_TYPE_FULLBRIGHT = LLDrawPool::POOL_FULLBRIGHT, + RENDER_TYPE_BUMP = LLDrawPool::POOL_BUMP, + RENDER_TYPE_AVATAR = LLDrawPool::POOL_AVATAR, + RENDER_TYPE_TREE = LLDrawPool::POOL_TREE, + RENDER_TYPE_INVISIBLE = LLDrawPool::POOL_INVISIBLE, + RENDER_TYPE_WATER = LLDrawPool::POOL_WATER, + RENDER_TYPE_ALPHA = LLDrawPool::POOL_ALPHA, + RENDER_TYPE_GLOW = LLDrawPool::POOL_GLOW, + RENDER_TYPE_PASS_SIMPLE = LLRenderPass::PASS_SIMPLE, + RENDER_TYPE_PASS_GRASS = LLRenderPass::PASS_GRASS, + RENDER_TYPE_PASS_FULLBRIGHT = LLRenderPass::PASS_FULLBRIGHT, + RENDER_TYPE_PASS_INVISIBLE = LLRenderPass::PASS_INVISIBLE, + RENDER_TYPE_PASS_INVISI_SHINY = LLRenderPass::PASS_INVISI_SHINY, + RENDER_TYPE_PASS_FULLBRIGHT_SHINY = LLRenderPass::PASS_FULLBRIGHT_SHINY, + RENDER_TYPE_PASS_SHINY = LLRenderPass::PASS_SHINY, + RENDER_TYPE_PASS_BUMP = LLRenderPass::PASS_BUMP, + RENDER_TYPE_PASS_GLOW = LLRenderPass::PASS_GLOW, + RENDER_TYPE_PASS_ALPHA = LLRenderPass::PASS_ALPHA, + RENDER_TYPE_PASS_ALPHA_MASK = LLRenderPass::PASS_ALPHA_MASK, + RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK = LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, + RENDER_TYPE_PASS_ALPHA_SHADOW = LLRenderPass::PASS_ALPHA_SHADOW, // Following are object types (only used in drawable mRenderType) - RENDER_TYPE_HUD = LLDrawPool::NUM_POOL_TYPES, + RENDER_TYPE_HUD = LLRenderPass::NUM_RENDER_TYPES, RENDER_TYPE_VOLUME, RENDER_TYPE_PARTICLES, RENDER_TYPE_CLOUDS, @@ -383,7 +410,8 @@ public: RENDER_DEBUG_SHADOW_FRUSTA = 0x0040000, RENDER_DEBUG_SCULPTED = 0x0080000, RENDER_DEBUG_AVATAR_VOLUME = 0x0100000, - RENDER_DEBUG_AGENT_TARGET = 0x0200000, + RENDER_DEBUG_BUILD_QUEUE = 0x0200000, + RENDER_DEBUG_AGENT_TARGET = 0x0400000, }; public: @@ -423,7 +451,6 @@ public: static BOOL sUseFBO; static BOOL sUseFarClip; static BOOL sShadowRender; - static BOOL sSkipUpdate; //skip lod updates static BOOL sWaterReflections; static BOOL sDynamicLOD; static BOOL sPickAvatar; @@ -437,19 +464,47 @@ public: static BOOL sRenderAttachedParticles; static BOOL sRenderDeferred; static S32 sVisibleLightCount; + static F32 sMinRenderSize; //screen texture LLRenderTarget mScreen; + LLRenderTarget mUIScreen; LLRenderTarget mDeferredScreen; - LLRenderTarget mDeferredLight[2]; + LLRenderTarget mEdgeMap; + LLRenderTarget mDeferredDepth; + LLRenderTarget mDeferredLight[3]; LLMultisampleBuffer mSampleBuffer; + LLRenderTarget mGIMap; + LLRenderTarget mGIMapPost[2]; + LLRenderTarget mLuminanceMap; + LLRenderTarget mHighlight; //sun shadow map - LLRenderTarget mSunShadow[4]; + LLRenderTarget mShadow[6]; + std::vector<LLVector3> mShadowFrustPoints[4]; + LLVector4 mShadowError; + LLVector4 mShadowFOV; + LLVector3 mShadowFrustOrigin[4]; LLCamera mShadowCamera[8]; LLVector3 mShadowExtents[4][2]; - glh::matrix4f mSunShadowMatrix[4]; + glh::matrix4f mSunShadowMatrix[6]; + glh::matrix4f mShadowModelview[6]; + glh::matrix4f mShadowProjection[6]; + glh::matrix4f mGIMatrix; + glh::matrix4f mGIMatrixProj; + glh::matrix4f mGIModelview; + glh::matrix4f mGIProjection; + glh::matrix4f mGINormalMatrix; + glh::matrix4f mGIInvProj; + LLVector2 mGIRange; + F32 mGILightRadius; + + LLPointer<LLDrawable> mShadowSpotLight[2]; + F32 mSpotLightFade[2]; + LLPointer<LLDrawable> mTargetShadowSpotLight[2]; + LLVector4 mSunClipPlanes; + LLVector4 mSunOrthoClipPlanes; LLVector2 mScreenScale; @@ -464,6 +519,8 @@ public: //noise map U32 mNoiseMap; + U32 mTrueNoiseMap; + U32 mLightFunc; LLColor4 mSunDiffuse; LLVector3 mSunDir; @@ -524,12 +581,45 @@ protected: // LLDrawable::drawable_list_t mBuildQ1; // priority LLDrawable::drawable_list_t mBuildQ2; // non-priority + LLSpatialGroup::sg_list_t mGroupQ1; //priority + LLSpatialGroup::sg_vector_t mGroupQ2; // non-priority + LLViewerObject::vobj_list_t mCreateQ; LLDrawable::drawable_set_t mActiveQ; LLDrawable::drawable_set_t mRetexturedList; + class HighlightItem + { + public: + const LLPointer<LLDrawable> mItem; + mutable F32 mFade; + + HighlightItem(LLDrawable* item) + : mItem(item), mFade(0) + { + } + + bool operator<(const HighlightItem& rhs) const + { + return mItem < rhs.mItem; + } + + bool operator==(const HighlightItem& rhs) const + { + return mItem == rhs.mItem; + } + + void incrFade(F32 val) const + { + mFade = llclamp(mFade+val, 0.f, 1.f); + } + }; + + std::set<HighlightItem> mHighlightSet; + LLPointer<LLDrawable> mHighlightObject; + ////////////////////////////////////////////////// // // Draw pools are responsible for storing all rendered data, diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index c739d4d455..da1cd59619 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <colors> - + <!-- Named Colors --> - + <color name="EmphasisColor" value="0.38 0.694 0.573 1" /> @@ -43,6 +43,9 @@ name="DkGray2" value="0.169 0.169 0.169 1" /> <color + name="MouseGray" + value="0.191 0.191 0.191 1" /> + <color name="Black" value="0 0 0 1" /> <color @@ -69,11 +72,11 @@ <color name="Transparent" value="0 0 0 0" /> - - - + + + <!-- UI Definitions --> - + <color name="AgentChatColor" reference="LtGray" /> @@ -115,13 +118,13 @@ reference="LtGray" /> <color name="ButtonLabelDisabledColor" - reference="LtGray_50" /> + reference="White_25" /> <color name="ButtonLabelSelectedColor" reference="White" /> <color name="ButtonLabelSelectedDisabledColor" - reference="White_50" /> + reference="White_25" /> <color name="ButtonSelectedBgColor" reference="Unused?" /> @@ -307,7 +310,7 @@ reference="White"/> <color name="GroupNotifyDimmedTextColor" - reference="DkGray"/> + reference="DkGray"/> <color name="GroupOverTierColor" value="0.43 0.06 0.06 1" /> @@ -355,7 +358,7 @@ reference="Unused?" /> <color name="IconDisabledColor" - reference="White_50" /> + reference="White_25" /> <color name="IconEnabledColor" reference="White" /> @@ -370,13 +373,13 @@ reference="Black" /> <color name="LabelDisabledColor" - reference="White_50" /> + reference="White_25" /> <color name="LabelSelectedColor" reference="White" /> <color name="LabelSelectedDisabledColor" - reference="White_50" /> + reference="White_25" /> <color name="LabelTextColor" reference="LtGray" /> @@ -558,7 +561,7 @@ name="ScrollBgReadOnlyColor" reference="Transparent" /> <color - name="ScrollBgWriteableColor" + name="ScrollBgWriteableColor" reference="White_05" /> <color name="ScrollDisabledColor" @@ -592,7 +595,7 @@ reference="Unused?" /> <color name="SliderDisabledThumbColor" - reference="White_50" /> + reference="White_25" /> <color name="SliderThumbCenterColor" reference="White" /> @@ -670,5 +673,5 @@ <color name="SysWellItemSelected" value="0.3 0.3 0.3 1.0" /> - + </colors> diff --git a/indra/newview/skins/default/textures/build/Object_Cone.png b/indra/newview/skins/default/textures/build/Object_Cone.png Binary files differnew file mode 100644 index 0000000000..5167f1a820 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cone.png diff --git a/indra/newview/skins/default/textures/build/Object_Cube.png b/indra/newview/skins/default/textures/build/Object_Cube.png Binary files differnew file mode 100644 index 0000000000..e82af1ca82 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cube.png diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Cylinder.png Binary files differnew file mode 100644 index 0000000000..fe1041d4c7 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Cylinder.png diff --git a/indra/newview/skins/default/textures/build/Object_Grass.png b/indra/newview/skins/default/textures/build/Object_Grass.png Binary files differnew file mode 100644 index 0000000000..a88efd5f3e --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Grass.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png Binary files differnew file mode 100644 index 0000000000..595f64d480 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png Binary files differnew file mode 100644 index 0000000000..dd41d56fb3 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png Binary files differnew file mode 100644 index 0000000000..1489630624 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png diff --git a/indra/newview/skins/default/textures/build/Object_Prism.png b/indra/newview/skins/default/textures/build/Object_Prism.png Binary files differnew file mode 100644 index 0000000000..51c6c161a0 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Prism.png diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid.png b/indra/newview/skins/default/textures/build/Object_Pyramid.png Binary files differnew file mode 100644 index 0000000000..a147b59553 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Pyramid.png diff --git a/indra/newview/skins/default/textures/build/Object_Ring.png b/indra/newview/skins/default/textures/build/Object_Ring.png Binary files differnew file mode 100644 index 0000000000..a9790fd60c --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Ring.png diff --git a/indra/newview/skins/default/textures/build/Object_Sphere.png b/indra/newview/skins/default/textures/build/Object_Sphere.png Binary files differnew file mode 100644 index 0000000000..8e2dd92a82 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Sphere.png diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron.png Binary files differnew file mode 100644 index 0000000000..23e22b1796 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tetrahedron.png diff --git a/indra/newview/skins/default/textures/build/Object_Torus.png b/indra/newview/skins/default/textures/build/Object_Torus.png Binary files differnew file mode 100644 index 0000000000..15c62423a9 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Torus.png diff --git a/indra/newview/skins/default/textures/build/Object_Tree.png b/indra/newview/skins/default/textures/build/Object_Tree.png Binary files differnew file mode 100644 index 0000000000..82c422419b --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tree.png diff --git a/indra/newview/skins/default/textures/build/Object_Tube.png b/indra/newview/skins/default/textures/build/Object_Tube.png Binary files differnew file mode 100644 index 0000000000..e47fce7511 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Object_Tube.png diff --git a/indra/newview/skins/default/textures/build/Tool_Create.png b/indra/newview/skins/default/textures/build/Tool_Create.png Binary files differnew file mode 100644 index 0000000000..1f1097def5 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Tool_Create.png diff --git a/indra/newview/skins/default/textures/build/Tool_Dozer.png b/indra/newview/skins/default/textures/build/Tool_Dozer.png Binary files differnew file mode 100644 index 0000000000..61744666f4 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Tool_Dozer.png diff --git a/indra/newview/skins/default/textures/build/Tool_Face.png b/indra/newview/skins/default/textures/build/Tool_Face.png Binary files differnew file mode 100644 index 0000000000..5ab42a4ad6 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Tool_Face.png diff --git a/indra/newview/skins/default/textures/build/Tool_Grab.png b/indra/newview/skins/default/textures/build/Tool_Grab.png Binary files differnew file mode 100644 index 0000000000..5c58288d5e --- /dev/null +++ b/indra/newview/skins/default/textures/build/Tool_Grab.png diff --git a/indra/newview/skins/default/textures/build/Tool_Zoom.png b/indra/newview/skins/default/textures/build/Tool_Zoom.png Binary files differnew file mode 100644 index 0000000000..ad493b0d66 --- /dev/null +++ b/indra/newview/skins/default/textures/build/Tool_Zoom.png diff --git a/indra/newview/skins/default/textures/icons/Icon_For_Sale.png b/indra/newview/skins/default/textures/icons/Icon_For_Sale.png Binary files differnew file mode 100644 index 0000000000..3dec6b989c --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Icon_For_Sale.png diff --git a/indra/newview/skins/default/textures/icons/Microphone_On.png b/indra/newview/skins/default/textures/icons/Microphone_On.png Binary files differnew file mode 100644 index 0000000000..c96b500fa1 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Microphone_On.png diff --git a/indra/newview/skins/default/textures/icons/Progress_1.png b/indra/newview/skins/default/textures/icons/Progress_1.png Binary files differnew file mode 100644 index 0000000000..58b56003c4 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_1.png diff --git a/indra/newview/skins/default/textures/icons/Progress_10.png b/indra/newview/skins/default/textures/icons/Progress_10.png Binary files differnew file mode 100644 index 0000000000..07fe0be8a3 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_10.png diff --git a/indra/newview/skins/default/textures/icons/Progress_11.png b/indra/newview/skins/default/textures/icons/Progress_11.png Binary files differnew file mode 100644 index 0000000000..215d68cc46 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_11.png diff --git a/indra/newview/skins/default/textures/icons/Progress_12.png b/indra/newview/skins/default/textures/icons/Progress_12.png Binary files differnew file mode 100644 index 0000000000..d755588621 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_12.png diff --git a/indra/newview/skins/default/textures/icons/Progress_2.png b/indra/newview/skins/default/textures/icons/Progress_2.png Binary files differnew file mode 100644 index 0000000000..6640ee227b --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_2.png diff --git a/indra/newview/skins/default/textures/icons/Progress_3.png b/indra/newview/skins/default/textures/icons/Progress_3.png Binary files differnew file mode 100644 index 0000000000..5decbe977e --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_3.png diff --git a/indra/newview/skins/default/textures/icons/Progress_4.png b/indra/newview/skins/default/textures/icons/Progress_4.png Binary files differnew file mode 100644 index 0000000000..56e81c17aa --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_4.png diff --git a/indra/newview/skins/default/textures/icons/Progress_5.png b/indra/newview/skins/default/textures/icons/Progress_5.png Binary files differnew file mode 100644 index 0000000000..a89bf2ac62 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_5.png diff --git a/indra/newview/skins/default/textures/icons/Progress_6.png b/indra/newview/skins/default/textures/icons/Progress_6.png Binary files differnew file mode 100644 index 0000000000..233c479540 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_6.png diff --git a/indra/newview/skins/default/textures/icons/Progress_7.png b/indra/newview/skins/default/textures/icons/Progress_7.png Binary files differnew file mode 100644 index 0000000000..631d7a6819 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_7.png diff --git a/indra/newview/skins/default/textures/icons/Progress_8.png b/indra/newview/skins/default/textures/icons/Progress_8.png Binary files differnew file mode 100644 index 0000000000..ac0e3f13f7 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_8.png diff --git a/indra/newview/skins/default/textures/icons/Progress_9.png b/indra/newview/skins/default/textures/icons/Progress_9.png Binary files differnew file mode 100644 index 0000000000..17fb4a0335 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Progress_9.png diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png Binary files differindex 428da506f3..7c10aaaead 100644 --- a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png +++ b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png diff --git a/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png b/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png Binary files differnew file mode 100644 index 0000000000..213acbe87b --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png Binary files differindex 2dc32a576b..0b91abfb0d 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Off.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png Binary files differindex bea218a2fb..33a47236a5 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Appearance_Selected.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png Binary files differindex 2d36f70361..760db9360d 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png Binary files differindex 3c20459126..905d4c973e 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Selected.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png Binary files differindex c272372a39..691b600510 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png Binary files differindex 3828752606..909f0d0a47 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Selected.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png Binary files differnew file mode 100644 index 0000000000..cc505c4a30 --- /dev/null +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Large.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png Binary files differindex d7ec33af55..ada28e01da 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png Binary files differindex dd7e361ea9..0f8d5619ec 100644 --- a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png +++ b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Selected.png diff --git a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png Binary files differindex 918be7555f..4ed7a2b183 100644 --- a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png +++ b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 136c092afc..8440022844 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -7,6 +7,8 @@ <texture name="Accordion_Off" file_name="containers/Accordion_Off.png" preload="false" /> <texture name="Accordion_Press" file_name="containers/Accordion_Press.png" preload="false" /> +<texture name="Activate_Checkmark" file_name="taskpanel/Activate_Checkmark.png" preload="false" /> + <texture name="AddItem_Disabled" file_name="icons/AddItem_Disabled.png" preload="false" /> <texture name="AddItem_Off" file_name="icons/AddItem_Off.png" preload="false" /> <texture name="AddItem_Press" file_name="icons/AddItem_Press.png" preload="false" /> @@ -25,6 +27,33 @@ <texture name="BottomTray_BG" file_name="bottomtray/BottomTray_BG.png" preload="false" /> + <texture name="BuyArrow_Off" file_name="navbar/BuyArrow_Off.png" preload="false" /> + <texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="false" /> + <texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="false" /> + + <texture name="Cam_Avatar_Disabled" file_name="bottomtray/Cam_Avatar_Disabled.png" preload="false" /> + <texture name="Cam_Avatar_Over" file_name="bottomtray/Cam_Avatar_Over.png" preload="false" /> + <texture name="Cam_Avatar_Off" file_name="bottomtray/Cam_Avatar_Off.png" preload="false" /> + <texture name="Cam_Avatar_Press" file_name="bottomtray/Cam_Avatar_Press.png" preload="false" /> + <texture name="Cam_FreeCam_Disabled" file_name="bottomtray/Cam_FreeCam_Disabled.png" preload="false" /> + <texture name="Cam_FreeCam_Off" file_name="bottomtray/Cam_FreeCam_Off.png" preload="false" /> + <texture name="Cam_FreeCam_Over" file_name="bottomtray/Cam_FreeCam_Over.png" preload="false" /> + <texture name="Cam_FreeCam_Press" file_name="bottomtray/Cam_FreeCam_Press.png" preload="false" /> + <texture name="Cam_Orbit_Disabled" file_name="bottomtray/Cam_Orbit_Disabled.png" preload="false" /> + <texture name="Cam_Orbit_Off" file_name="bottomtray/Cam_Orbit_Off.png" preload="false" /> + <texture name="Cam_Orbit_Over" file_name="bottomtray/Cam_Orbit_Over.png" preload="false" /> + <texture name="Cam_Orbit_Press" file_name="bottomtray/Cam_Orbit_Press.png" preload="false" /> + <texture name="Cam_Pan_Disabled" file_name="bottomtray/Cam_Pan_Disabled.png" preload="false" /> + <texture name="Cam_Pan_Off" file_name="bottomtray/Cam_Pan_Off.png" preload="false" /> + <texture name="Cam_Pan_Over" file_name="bottomtray/CCam_Pan_Over.png" preload="false" /> + <texture name="Cam_Pan_Press" file_name="bottomtray/Cam_Pan_Press.png" preload="false" /> + <texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" /> + <texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" /> + <texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" /> + <texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" /> + <texture name="CameraView_Off" file_name="bottomtray/CameraView_Off.png" preload="false" /> + <texture name="CameraView_Over" file_name="bottomtray/CameraView_Over.png" preload="false" /> + <texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" /> <texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" /> <texture name="Checkbox_Off" file_name="widgets/Checkbox_Off.png" preload="true" /> @@ -53,6 +82,8 @@ <texture name="DropDown_Selected" file_name="widgets/DropDown_Selected.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> <texture name="DropDown_Off" file_name="widgets/DropDown_Off.png" preload="true" scale.left="2" scale.top="19" scale.right="18" scale.bottom="2" /> + <texture name="DropTarget" file_name="widgets/DropTarget.png" preload="false" /> + <texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" /> <texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" /> <texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" /> @@ -64,6 +95,13 @@ <texture name="ForwardArrow_Off" file_name="icons/ForwardArrow_Off.png" preload="false" /> <texture name="ForwardArrow_Press" file_name="icons/ForwardArrow_Press.png" preload="false" /> + <texture name="Generic_Group" file_name="icons/Generic_Group.png" preload="false" /> + <texture name="Generic_Group_Large" file_name="icons/Generic_Group_Large.png" preload="false" /> + <texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" /> + <texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" /> + + <texture name="Health" file_name="icons/Health.png" preload="false" /> + <texture name="Help_Off" file_name="navbar/Help_Off.png" preload="false" /> <texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" /> @@ -81,6 +119,8 @@ <texture name="Icon_Dock_Foreground" file_name="windows/Icon_Dock_Foreground.png" preload="true" /> <texture name="Icon_Dock_Press" file_name="windows/Icon_Dock_Press.png" preload="true" /> + <texture name="Icon_For_Sale" file_name="icons/Icon_For_sale.png" preload="false" /> + <texture name="Icon_Gear_Background" file_name="windows/Icon_Gear_Background.png" preload="false" /> <texture name="Icon_Gear_Foreground" file_name="windows/Icon_Gear_Foreground.png" preload="false" /> <texture name="Icon_Gear_Press" file_name="windows/Icon_Gear_Press.png" preload="false" /> @@ -103,15 +143,75 @@ <texture name="Info_Press" file_name="navbar/Info_Press.png" preload="false" /> <texture name="Inspector_Background" file_name="windows/Inspector_Background.png" preload="false" /> - <texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" /> + <texture name="Inspector_Hover" file_name="windows/Inspector_Hover.png" preload="false" /> + + <texture name="Inv_Acessories" file_name="icons/Inv_Acessories.png" preload="false" /> + <texture name="Inv_Animation" file_name="icons/Inv_Animation.png" preload="false" /> + <texture name="Inv_BodyShape" file_name="icons/Inv_BodyShape.png" preload="false" /> + <texture name="Inv_CallingCard" file_name="icons/Inv_CallingCard.png" preload="false" /> + <texture name="Inv_Clothing" file_name="icons/Inv_Clothing.png" preload="false" /> + <texture name="Inv_DangerousScript" file_name="icons/Inv_DangerousScript.png" preload="false" /> + <texture name="Inv_Eye" file_name="icons/Inv_Eye.png" preload="false" /> + <texture name="Inv_FolderClosed" file_name="icons/Inv_FolderClosed.png" preload="false" /> + <texture name="Inv_FolderOpen" file_name="icons/Inv_FolderOpen.png" preload="false" /> + <texture name="Inv_Gesture" file_name="icons/Inv_Gesture.png" preload="false" /> + <texture name="Inv_Gloves" file_name="icons/Inv_Gloves.png" preload="false" /> + <texture name="Inv_Hair" file_name="icons/Inv_Hair.png" preload="false" /> + <texture name="Inv_Jacket" file_name="icons/Inv_Jacket.png" preload="false" /> + <texture name="Inv_Landmark" file_name="icons/Inv_Landmark.png" preload="false" /> + <texture name="Inv_Notecard" file_name="icons/Inv_Notecard.png" preload="false" /> + <texture name="Inv_Object" file_name="icons/Inv_Object.png" preload="false" /> + <texture name="Inv_Pants" file_name="icons/Inv_Pants.png" preload="false" /> + <texture name="Inv_Script" file_name="icons/Inv_Script.png" preload="false" /> + <texture name="Inv_Shirt" file_name="icons/Inv_Shirt.png" preload="false" /> + <texture name="Inv_Shoe" file_name="icons/Inv_Shoe.png" preload="false" /> + <texture name="Inv_Skin" file_name="icons/Inv_Skin.png" preload="false" /> + <texture name="Inv_Skirt" file_name="icons/Inv_Skirt.png" preload="false" /> + <texture name="Inv_Snapshot" file_name="icons/Inv_Snapshot.png" preload="false" /> + <texture name="Inv_Socks" file_name="icons/Inv_Socks.png" preload="false" /> + <texture name="Inv_Sound" file_name="icons/Inv_Sound.png" preload="false" /> + <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" /> + <texture name="Inv_Trash" file_name="icons/Inv_Trash.png" preload="false" /> + <texture name="Inv_Underpants" file_name="icons/Inv_Underpants.png" preload="false" /> + <texture name="Inv_Undershirt" file_name="icons/Inv_Undershirt.png" preload="false" /> <texture name="ListItem_Select" file_name="widgets/ListItem_Select.png" preload="true" /> <texture name="ListItem_Over" file_name="widgets/ListItem_Over.png" preload="true" /> <texture name="Lock" file_name="icons/Lock.png" preload="false" /> + <texture name="Login_Pod" file_name="windows/Login_Pod.png" preload="true" /> + + <texture name="Microphone_Mute" file_name="icons/Microphone_Mute.png" preload="false" /> + <texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" /> + <texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" /> + <texture name="Move_Fly_Disabled" file_name="bottomtray/Move_Fly_Disabled.png" preload="false" /> + <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" /> + <texture name="Move_Fly_Over" file_name="bottomtray/Move_Fly_Over.png" preload="false" /> + <texture name="Move_Fly_Press" file_name="bottomtray/Move_Fly_Press.png" preload="false" /> + <texture name="Move_Run_Disabled" file_name="bottomtray/Move_Run_Disabled.png" preload="false" /> + <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" /> + <texture name="Move_Run_Over" file_name="bottomtray/Move_Run_Over.png" preload="false" /> + <texture name="Move_Run_Press" file_name="bottomtray/Move_Run_Press.png" preload="false" /> + <texture name="Move_Walk_Disabled" file_name="bottomtray/Move_Walk_Disabled.png" preload="false" /> + <texture name="Move_Walk_Off" file_name="bottomtray/Move_Walk_Off.png" preload="false" /> + <texture name="Move_Walk_Over" file_name="bottomtray/Move_Walk_Over.png" preload="false" /> + <texture name="Move_Walk_Press" file_name="bottomtray/Move_Walk_Press.png" preload="false" /> + <texture name="Movement_Backward_Off" file_name="bottomtray/Movement_Backward_Off.png" preload="false" /> + <texture name="Movement_Backward_On" file_name="bottomtray/Movement_Backward_On.png" preload="false" /> + <texture name="Movement_Down_Off" file_name="bottomtray/Movement_Down_Off.png" preload="false" /> + <texture name="Movement_Down_On" file_name="bottomtray/Movement_Down_On.png" preload="false" /> + <texture name="Movement_Forward_Off" file_name="bottomtray/Movement_Forward_Off.png" preload="false" /> + <texture name="Movement_Forward_On" file_name="bottomtray/Movement_Forward_On.png" preload="false" /> + <texture name="Movement_TurnLeft_Off" file_name="bottomtray/Movement_TurnLeft_Off.png" preload="false" /> + <texture name="Movement_TurnLeft_On" file_name="bottomtray/Movement_TurnLeft_On.png" preload="false" /> + <texture name="Movement_TurnRight_Off" file_name="bottomtray/Movement_TurnRight_Off.png" preload="false" /> + <texture name="Movement_TurnRight_On" file_name="bottomtray/Movement_TurnRight_On.png" preload="false" /> + <texture name="Movement_Up_Off" file_name="bottomtray/Movement_Up_Off.png" preload="false" /> + <texture name="Movement_Up_On" file_name="bottomtray/Movement_Up_On.png" preload="false" /> + <texture name="NavBar_BG_NoFav" file_name="navbar/NavBar_BG_NoFav.png" preload="false" /> <texture name="NavBar_BG" file_name="navbar/NavBar_BG.png" preload="false" /> @@ -120,10 +220,46 @@ <texture name="NearbyVoice_Lvl3" file_name="bottomtray/NearbyVoice_Lvl3.png" preload="false" /> <texture name="NearbyVoice_On" file_name="bottomtray/NearbyVoice_On.png" preload="false" /> + <texture name="Object_Cone" file_name="build/Object_Cone.png" preload="false" /> + <texture name="Object_Cube" file_name="build/Object_Cube.png" preload="false" /> + <texture name="Object_Cylinder" file_name="build/Object_Cylinder.png" preload="false" /> + <texture name="Object_Grass" file_name="build/Object_Grass.png" preload="false" /> + <texture name="Object_Hemi_Cone" file_name="build/Object_Hemi_Cone.png" preload="false" /> + <texture name="Object_Hemi_Cylinder" file_name="build/Object_Hemi_Cylinder.png" preload="false" /> + <texture name="Object_Hemi_Sphere" file_name="build/Object_Hemi_Sphere.png" preload="false" /> + <texture name="Object_Prism" file_name="build/Object_Prism.png" preload="false" /> + <texture name="Object_Pyramid" file_name="build/Object_Pyramid.png" preload="false" /> + <texture name="Object_Ring" file_name="build/Object_Ring.png" preload="false" /> + <texture name="Object_Sphere" file_name="build/Object_Sphere.png" preload="false" /> + <texture name="Object_Tetrahedron" file_name="build/Object_Tetrahedron.png" preload="false" /> + <texture name="Object_Torus" file_name="build/Object_Torus.png" preload="false" /> + <texture name="Object_Tree" file_name="build/Object_Tree.png" preload="false" /> + <texture name="Object_Tube" file_name="build/Object_Tube.png" preload="false" /> + <texture name="OptionsMenu_Disabled" file_name="icons/OptionsMenu_Disabled.png" preload="false" /> <texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" /> <texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" /> + <texture name="Overhead_Arrow_L" file_name="world/Overhead_Arrow_L.png" preload="false" /> + <texture name="Overhead_Arrow_M" file_name="world/Overhead_Arrow_M.png" preload="false" /> + <texture name="Overhead_Arrow_S" file_name="world/Overhead_Arrow_S.png" preload="false" /> + <texture name="Overhead_L" file_name="world/Overhead_L.png" preload="false" /> + <texture name="Overhead_M" file_name="world/Overhead_M.png" preload="false" /> + <texture name="Overhead_S" file_name="world/Overhead_S.png" preload="false" /> + + <texture name="Progress_1" file_name="icons/Progress_1.png" preload="false" /> + <texture name="Progress_2" file_name="icons/Progress_2.png" preload="false" /> + <texture name="Progress_3" file_name="icons/Progress_3.png" preload="false" /> + <texture name="Progress_4" file_name="icons/Progress_4.png" preload="false" /> + <texture name="Progress_5" file_name="icons/Progress_5.png" preload="false" /> + <texture name="Progress_6" file_name="icons/Progress_6.png" preload="false" /> + <texture name="Progress_7" file_name="icons/Progress_7.png" preload="false" /> + <texture name="Progress_8" file_name="icons/Progress_8.png" preload="false" /> + <texture name="Progress_9" file_name="icons/Progress_9.png" preload="false" /> + <texture name="Progress_10" file_name="icons/Progress_10.png" preload="false" /> + <texture name="Progress_11" file_name="icons/Progress_11.png" preload="false" /> + <texture name="Progress_12" file_name="icons/Progress_12.png" preload="false" /> + <texture name="ProgressBar" file_name="widgets/ProgressBar.png" preload="true" scale.left="4" scale.top="10" scale.right="48" scale.bottom="2" /> <texture name="ProgressTrack" file_name="widgets/ProgressTrack.png" preload="true" scale.left="4" scale.top="13" scale.right="148" scale.bottom="2" /> @@ -139,7 +275,14 @@ <texture name="RadioButton_Off" file_name="widgets/RadioButton_Off.png" preload="true" /> <texture name="RadioButton_On" file_name="widgets/RadioButton_On.png" preload="true" /> <texture name="RadioButton_Disabled" file_name="widgets/RadioButton_Disabled.png" preload="true" /> - <texture name="RadioButton_On_Disabled" file_name="widgets/RadioButton_On_Disabled.png" preload="true" /> + <texture name="RadioButton_On_Disabled" file_name="widgets/RadioButton_On_Disabled.png" preload="true" /> + + <texture name="Rec_Off" file_name="icons/Rec_Off.png" preload="false" /> + <texture name="Rec_On" file_name="icons/Rec_On.png" preload="false" /> + + <texture name="Refresh_Disabled" file_name="icons/Refresh_Disabled.png" preload="false" /> + <texture name="Refresh_Off" file_name="icons/Refresh_Off.png" preload="false" /> + <texture name="Refresh_Press" file_name="icons/Refresh_Press.png" preload="false" /> <texture name="Resize_Corner" file_name="windows/Resize_Corner.png" preload="true" /> @@ -184,6 +327,10 @@ <texture name="SliderThumb_Disabled" file_name="widgets/SliderThumb_Disabled.png" /> <texture name="SliderThumb_Press" file_name="widgets/SliderThumb_Press.png" /> + <texture name="Snapshot_Off" file_name="bottomtray/Snapshot_Off.png" preload="false" /> + <texture name="Snapshot_Over" file_name="bottomtray/Snapshot_Over.png" preload="false" /> + <texture name="Snapshot_Press" file_name="bottomtray/Snapshot_Press.png" preload="false" /> + <texture name="Stepper_Down_Disabled" file_name="widgets/Stepper_Down_Disabled.png" preload="true" /> <texture name="Stepper_Down_Off" file_name="widgets/Stepper_Down_Off.png" preload="true" /> <texture name="Stepper_Down_Press" file_name="widgets/Stepper_Down_Press.png" preload="true" /> @@ -191,6 +338,7 @@ <texture name="Stepper_Up_Off" file_name="widgets/Stepper_Up_Off.png" preload="true" /> <texture name="Stepper_Up_Press" file_name="widgets/Stepper_Up_Press.png" preload="true" /> + <texture name="TabIcon_Appearance_Large" file_name="taskpanel/TabIcon_Appearance_Large.png" preload="false" /> <texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" /> <texture name="TabIcon_Appearance_Over" file_name="taskpanel/TabIcon_Appearance_Over.png" preload="false" /> <texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" /> @@ -199,20 +347,24 @@ <texture name="TabIcon_Home_Off" file_name="taskpanel/TabIcon_Home_Off.png" preload="false" /> <texture name="TabIcon_Home_Over" file_name="taskpanel/TabIcon_Home_Over.png" preload="false" /> <texture name="TabIcon_Home_Selected" file_name="taskpanel/TabIcon_Home_Selected.png" preload="false" /> + <texture name="TabIcon_Me_Large" file_name="taskpanel/TabIcon_Me_Large.png" preload="false" /> <texture name="TabIcon_Me_Off" file_name="taskpanel/TabIcon_Me_Off.png" preload="false" /> <texture name="TabIcon_Me_Over" file_name="taskpanel/TabIcon_Me_Over.png" preload="false" /> <texture name="TabIcon_Me_Selected" file_name="taskpanel/TabIcon_Me_Selected.png" preload="false" /> <texture name="TabIcon_Open_Off" file_name="taskpanel/TabIcon_Open_Off.png" preload="false" /> <texture name="TabIcon_Open_Over" file_name="taskpanel/TabIcon_Open_Over.png" preload="false" /> + <texture name="TabIcon_People_Large" file_name="taskpanel/TabIcon_People_Large.png" preload="false" /> <texture name="TabIcon_People_Off" file_name="taskpanel/TabIcon_People_Off.png" preload="false" /> <texture name="TabIcon_People_Over" file_name="taskpanel/TabIcon_People_Over.png" preload="false" /> <texture name="TabIcon_People_Selected" file_name="taskpanel/TabIcon_People_Selected.png" preload="false" /> - <texture name="TabIcon_Places_Over" file_name="taskpanel/TabIcon_Places_Over.png" preload="false" /> + <texture name="TabIcon_Places_Large" file_name="taskpanel/TabIcon_Places_Large.png" preload="false" /> <texture name="TabIcon_Places_Off" file_name="taskpanel/TabIcon_Places_Off.png" preload="false" /> + <texture name="TabIcon_Places_Over" file_name="taskpanel/TabIcon_Places_Over.png" preload="false" /> <texture name="TabIcon_Places_Selected" file_name="taskpanel/TabIcon_Places_Selected.png" preload="false" /> + <texture name="TabIcon_Things_Large" file_name="taskpanel/TabIcon_Things_Large.png" preload="false" /> <texture name="TabIcon_Things_Off" file_name="taskpanel/TabIcon_Things_Off.png" preload="false" /> - <texture name="TabIcon_Things_Selected" file_name="taskpanel/TabIcon_Things_Selected.png" preload="false" /> <texture name="TabIcon_Things_Over" file_name="taskpanel/TabIcon_Things_Over.png" preload="false" /> + <texture name="TabIcon_Things_Selected" file_name="taskpanel/TabIcon_Things_Selected.png" preload="false" /> <texture name="TabTop_Divider" file_name="containers/TabTop_Divider.png" preload="false" /> <texture name="TabTop_Left_Press" file_name="containers/TabTop_Left_Press.png" preload="false" /> @@ -240,6 +392,12 @@ <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" /> <texture name="Toast" file_name="windows/Toast.png" preload="true" /> + <texture name="Tool_Create" file_name="build/Tool_Create.png" preload="false" /> + <texture name="Tool_Dozer" file_name="build/Tool_Dozer.png" preload="false" /> + <texture name="Tool_Face" file_name="build/Tool_Face.png" preload="false" /> + <texture name="Tool_Grab" file_name="build/Tool_Grab.png" preload="false" /> + <texture name="Tool_Zoom" file_name="build/Tool_Zoom.png" preload="false" /> + <texture name="Toolbar_Divider" file_name="containers/Toolbar_Divider.png" preload="false" /> <texture name="Toolbar_Left_Off" file_name="containers/Toolbar_Left_Off.png" preload="false" /> <texture name="Toolbar_Left_Press" file_name="containers/Toolbar_Left_Press.png" preload="false" /> diff --git a/indra/newview/skins/default/textures/widgets/DropTarget.png b/indra/newview/skins/default/textures/widgets/DropTarget.png Binary files differnew file mode 100644 index 0000000000..3740c98cbc --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/DropTarget.png diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png Binary files differindex 5dd0852a72..2292b79eda 100644 --- a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png +++ b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png Binary files differindex 350a62c0ae..1a514742d3 100644 --- a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png +++ b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png Binary files differindex c2d401b131..7478644b6a 100644 --- a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png +++ b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png Binary files differindex a164edb62d..9f72a5422b 100644 --- a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png +++ b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png Binary files differindex 990e03e2b2..07db8be1b0 100644 --- a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png +++ b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml index 15ebffa302..c4cf722159 100644 --- a/indra/newview/skins/default/xui/da/floater_about_land.xml +++ b/indra/newview/skins/default/xui/da/floater_about_land.xml @@ -2,10 +2,10 @@ <floater name="floaterland" title="Om land"> <tab_container name="landtab"> <panel label="Generelt" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> Navn: </text> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Beskrivelse: </text> <text name="LandType"> @@ -20,56 +20,56 @@ <text name="ContentRatingText"> Adult </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> Ejer: </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="Profil..." label_selected="Profil..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> Gruppe: </text> <button label="Vælg..." label_selected="Vælg..." name="Set..."/> <check_box label="Tillad dedikering til gruppe" name="check deed" tool_tip="En gruppe administrator kan dedikere denne jord til gruppen, så det vil blive støttet af gruppen's jord tildeling."/> <button label="Dedikér..." label_selected="Dedikér..." name="Deed..." tool_tip="Du kan kun dedikere jord, hvis du er en administrator i den valgte gruppe."/> <check_box label="Ejer bidrager ved dedikering" name="check contrib" tool_tip="Når land dedikeres til gruppe, kan den tidligere bidrage med nok land til at dække krav."/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> Til salg: </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> Ikke til salg. </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> Pris: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> <button label="Sælg land..." label_selected="Sælg land..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> Til salg til: [BUYER] </text> - <text length="1" name="Sell with landowners objects in parcel." type="string"> + <text name="Sell with landowners objects in parcel."> Objekter er inkluderet i salg. </text> - <text length="1" name="Selling with no objects in parcel." type="string"> + <text name="Selling with no objects in parcel."> Objekter er ikke inkluderet i salg. </text> <button label="Annullér salg af land" label_selected="Annullér salg af land" name="Cancel Land Sale"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> Købt: </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> Tue Aug 15 13:47:25 2006 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> Område: </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048 m² </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> Trafik: </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 0 </text> <button label="Køb land..." label_selected="Køb land..." name="Buy Land..."/> @@ -78,76 +78,76 @@ <button label="Efterlad land..." label_selected="Efterlad land..." name="Abandon Land..."/> <button label="Kræv tilbage..." label_selected="Kræv tilbage..." name="Reclaim Land..."/> <button label="Linden salg..." label_selected="Linden salg..." name="Linden Sale..." tool_tip="Land skal være ejet, indholdsrating sat og ikke allerede på auktion."/> - <string name="new users only"> + <panel.string name="new users only"> Kun nye brugere - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Alle - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Størrelse - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Auktion nr: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Du skal godkende dit køb for at kunne æmdre på dette land. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Gruppe ejet) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Info... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (offentlig) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (ingen) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Salg i gang) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Pacel ikke valgt. Gå til 'Verden' > 'Om land' eller vælg en anden parcel for at se detaljer. - </string> + </panel.string> </panel> <panel label="Regler" name="land_covenant_panel"> <text name="estate_section_lbl"> Estate: </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> Navn: </text> - <text length="1" name="estate_name_text" type="string"> + <text name="estate_name_text"> Hovedland </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> Ejer: </text> - <text length="1" name="estate_owner_text" type="string"> + <text name="estate_owner_text"> (ingen) </text> - <text_editor length="1" name="covenant_editor" type="string"> + <text_editor name="covenant_editor"> Der er ikke angivet specielle regler for denne Estate </text_editor> - <text length="1" name="covenant_timestamp_text" type="string"> + <text name="covenant_timestamp_text"> Sidst rettet Wed Dec 31 16:00:00 1969 </text> <text name="region_section_lbl"> Region: </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> Navn: </text> - <text length="1" name="region_name_text" type="string"> + <text name="region_name_text"> leyla </text> <text name="region_landtype_lbl"> @@ -165,90 +165,90 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel <text name="resellable_lbl"> Videresalg: </text> - <text length="1" name="resellable_clause" type="string"> + <text name="resellable_clause"> Land i denne region må ikke sælges videre. </text> <text name="changeable_lbl"> Opdel: </text> - <text length="1" name="changeable_clause" type="string"> + <text name="changeable_clause"> Land i denne region må ikke samles/opdeles. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Købt land i denne region må sælges videre - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Købt land i denne region må ikke sælges videre - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Købt jord i denne region må gerne samles eller opdeles. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Købt jord i denne region må íkke samles eller opdeles. - </string> + </panel.string> </panel> <panel label="Objekter" name="land_objects_panel"> - <text length="1" name="parcel_object_bonus" type="string"> + <text name="parcel_object_bonus"> Region objekt bonus faktor: [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string"> + <text name="Simulator primitive usage:"> Prims brugt i denne Sim: </text> - <text length="1" name="objects_available" type="string"> + <text name="objects_available"> [COUNT] ud af [MAX] ([AVAILABLE] ledige) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] ud af [MAX] ([AVAILABLE] ledige) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] ud af [MAX] ([DELETED] bliver slettet) - </string> - <text length="1" name="Primitives parcel supports:" type="string"> + </panel.string> + <text name="Primitives parcel supports:"> Prims til rådighed: </text> - <text length="1" name="object_contrib_text" type="string"> + <text name="object_contrib_text"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> Prims brugt på parcel: </text> - <text length="1" name="total_objects_text" type="string"> + <text name="total_objects_text"> [COUNT] </text> - <text length="1" name="Owned by parcel owner:" type="string"> + <text name="Owned by parcel owner:"> Ejet af Parcel ejer: </text> - <text length="1" name="owner_objects_text" type="string"> + <text name="owner_objects_text"> [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowOwner"/> <button label="Returnér..." label_selected="Returnér..." name="ReturnOwner..." tool_tip="Returnér objekter til deres ejere."/> - <text length="1" name="Set to group:" type="string"> + <text name="Set to group:"> Sat til gruppe: </text> - <text length="1" name="group_objects_text" type="string"> + <text name="group_objects_text"> [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowGroup"/> <button label="Returnér..." label_selected="Returnér..." name="ReturnGroup..." tool_tip="Returnér objekter til deres ejere."/> - <text length="1" name="Owned by others:" type="string"> + <text name="Owned by others:"> Ejet af andre: </text> - <text length="1" name="other_objects_text" type="string"> + <text name="other_objects_text"> [COUNT] </text> <button label="Vis" label_selected="Vis" name="ShowOther"/> <button label="Returnér..." label_selected="Returnér..." name="ReturnOther..." tool_tip="Returnér objekter til deres ejere."/> - <text length="1" name="Selected / sat upon:" type="string"> + <text name="Selected / sat upon:"> Valgt/siddet på: </text> - <text length="1" name="selected_objects_text" type="string"> + <text name="selected_objects_text"> [COUNT] </text> - <text length="1" name="Autoreturn" type="string"> + <text name="Autoreturn"> Autoreturnér andres objekter efter (minutter, 0 = aldrig): </text> - <text length="1" name="Object Owners:" type="string"> + <text name="Object Owners:"> Objekt ejere: </text> <button label="Gentegn liste" label_selected="Gentegn liste" name="Refresh List"/> @@ -261,205 +261,192 @@ Gå til 'Verden' > 'Om land' eller vælg en anden parcel </name_list> </panel> <panel label="Indstillinger" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> Tillad andre beboere at: </text> <check_box label="Redigere terræn" name="edit land check" tool_tip="Hvis dette er valg, kan enhver redigere dit land. Det er bedst ikke at vælge her, da det altid er muligt for dig som ejer at ændre terræn på dit eget land."/> <check_box label="Lave landemærker" name="check landmark"/> <check_box label="Flyve" name="check fly" tool_tip="Hvis valgt, kan beboere flyve på dit land. Hvis ikke valgt kan beboere kun flyve ind på dit land og over dit land."/> - <text length="1" name="allow_label2" type="string" left="194"> + <text name="allow_label2" left="194"> Lave objekter: </text> <check_box label="Alle beboere" name="edit objects check"/> <check_box label="Gruppe" name="edit group objects check"/> - <text length="1" name="allow_label3" type="string" left="170"> + <text name="allow_label3" left="170"> Anbringe objekter: </text> <check_box label="Alle beboere" name="all object entry check"/> <check_box label="Gruppe" name="group object entry check"/> - <text length="1" name="allow_label4" type="string" left="200"> + <text name="allow_label4" left="200"> Køre scripts: </text> <check_box label="Alle beboere" name="check other scripts"/> <check_box label="Gruppe" name="check group scripts"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> Land instillinger: </text> <check_box label="Sikker (ingen skade)" name="check safe" tool_tip="Hvis valgt, er det ikke muligt at forårsage skade på andre beboere. Hvis fravalgt er det muligt at få skader (f.eks. ved kamp)."/> <check_box label="Skub forbudt" name="PushRestrictCheck" tool_tip="Forhindrer scripts i at skubbe. Valg af denne mulighed, kan være nyttigt for at forhindre forstyrrende adfærd på dit land."/> <check_box label="Vis sted i søgning (L$30/uge) i kategorien:" name="ShowDirectoryCheck" tool_tip="Lad dit parcel blive vist i søge resultaterne"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Lad beboere se denne parcel i søgeresultater - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Denne mulighed er ikke til stede da parcellens område er 128 m² eller mindre. Kun større parceller kan vises i søgning. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Dette valg er lukket da du ikke kan ændre på denne parcels opsætning. - </string> + </panel.string> <combo_box name="land category with adult"> - <combo_item name="AnyCategory"> - Enhver kategori - </combo_item> - <combo_item name="LindenLocation"> - Linden sted - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Kunst & kultur - </combo_item> - <combo_item name="Business"> - Business - </combo_item> - <combo_item name="Educational"> - Uddannelse - </combo_item> - <combo_item name="Gaming"> - Spil - </combo_item> - <combo_item name="Hangout"> - Opholdssteder - </combo_item> - <combo_item name="NewcomerFriendly"> - Nybegynder venligt - </combo_item> - <combo_item name="Parks&Nature"> - Parker & natur - </combo_item> - <combo_item name="Residential"> - Beboelse - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Andet - </combo_item> + <combo_box.item name="item0" label="Enhver kategori" + /> + <combo_box.item name="item1" label="Linden sted" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Kunst & kultur" + /> + <combo_box.item name="item4" label="Business" + /> + <combo_box.item name="item5" label="Uddannelse" + /> + <combo_box.item name="item6" label="Spil" + /> + <combo_box.item name="item7" label="Afslapning" + /> + <combo_box.item name="item8" label="Nybegynder venligt" + /> + <combo_box.item name="item9" label="Parker & natur" + /> + <combo_box.item name="item10" label="Beboelse" + /> + <combo_box.item name="item11" label="Indkøb" + /> + <combo_box.item name="item12" label="Andet" + /> </combo_box> <combo_box name="land category"> - <combo_box.item name="AnyCategory" label="Alle kategorier" /> - <combo_box.item name="LindenLocation" label="Linden Location" /> - <combo_box.item name="Arts&Culture" label="Kunst & kultur" /> - <combo_box.item name="Business" label="Business" /> - <combo_box.item name="Educational" label="Uddannelse" /> - <combo_box.item name="Gaming" label="Spil" /> - <combo_box.item name="Hangout" label="Afslapning" /> - <combo_box.item name="NewcomerFriendly" label="Nybegynder venligt" /> - <combo_box.item name="Parks&Nature" label="Parker & natur" /> - <combo_box.item name="Residential" label="Beboelse" /> - <combo_box.item name="Shopping" label="Indkøb" /> - <combo_box.item name="Other" label="Andet" /> + <combo_box.item name="item0" label="Enhver kategori" /> + <combo_box.item name="item1" label="Linden sted" /> + <combo_box.item name="item3" label="Kunst & kultur" /> + <combo_box.item name="item4" label="Business" /> + <combo_box.item name="item5" label="Uddannelse" /> + <combo_box.item name="item6" label="Spil" /> + <combo_box.item name="item7" label="Afslapning" /> + <combo_box.item name="item8" label="Nybegynder venligt" /> + <combo_box.item name="item9" label="Parker & natur" /> + <combo_box.item name="item10" label="Beboelse" /> + <combo_box.item name="item11" label="Indkøb" /> + <combo_box.item name="item12" label="Andet" /> </combo_box> <button label="?" label_selected="?" name="?"/> <check_box label="Mature indhold" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Mature indhold - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Adult indhold - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Din parcel information eller indhold anses for at være 'adult'. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Din parcel information eller indhold anses for at være 'adult'. - </string> - <text length="1" name="Snapshot:" type="string"> + </panel.string> + <text name="Snapshot:"> Foto: </text> <texture_picker label="" name="snapshot_ctrl" tool_tip="Klik for at vælge et billede"/> - <text length="1" name="landing_point" type="string"> + <text name="landing_point"> Landingspunkt: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (ingen) - </string> + </panel.string> <button label="Vælg" label_selected="Vælg" name="Set" tool_tip="Indstiller landingspunkt, hvor de besøgende ankommer. Sættes til din avatars aktuelle placering i denne parcel."/> <button label="Fjern" label_selected="Fjern" name="Clear" tool_tip="Fjerner oplysning om landingspunkt."/> - <text length="1" name="Teleport Routing: " type="string"> + <text name="Teleport Routing: "> Teleport valg: </text> <combo_box name="landing type" tool_tip="Vælg hvordan du vil håndtere teleporteringer til dit land."> - <combo_box.item length="1" name="Blocked" type="string" label="Blokeret" /> - <combo_box.item length="1" name="LandingPoint" type="string" label="Landingspunkt" /> - <combo_box.item length="1" name="Anywhere" type="string" label="Hvor som helst" /> + <combo_box.item name="Blocked" label="Blokeret" /> + <combo_box.item name="LandingPoint" label="Landingspunkt" /> + <combo_box.item name="Anywhere" label="Hvor som helst" /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Skub forbudt - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Skub forbudt (Uanset region indstilling) - </string> + </panel.string> </panel> <panel label="Medier" name="land_media_panel"> - <text length="1" name="with media:" type="string" left="4"> + <text name="with media:" left="4"> Medie type: </text> <combo_box name="media type" tool_tip="Specificer om URL-adressen er til en film, hjemmeside eller et andet medie."/> - <text length="1" name="at URL:" type="string" left="4"> + <text name="at URL:" left="4"> Medie URL: </text> <button label="Vælg..." label_selected="Vælg..." name="set_media_url"/> - <text length="1" name="Description:" type="string" left="4"> + <text name="Description:" left="4"> Beskrivelse: </text> <line_editor name="url_description" tool_tip="Tekst vist ved siden af Afspil/Hent knappen"/> - <text length="1" name="Media texture:" type="string" left="4"> + <text name="Media texture:" left="4"> Erstat tekstur: </text> <texture_picker label="" name="media texture" tool_tip="Klik for at vælge billede"/> - <text length="1" name="replace_texture_help" type="string"> + <text name="replace_texture_help"> (Objekter der har denne tekstur vil vise filmen eller web-siden, efter du klikker på play knappen.) </text> - <text length="1" name="Options:" type="string"> + <text name="Options:"> Medie valg: </text> <check_box label="Auto skalér" name="media_auto_scale" tool_tip="Vælg denne mulighed for at skalere indholdet for dette parcel automatisk. Det kan være lidt langsommere og have lavere kvalitet, men ingen anden tekstur skalering eller tilpasning vil være nødvendigt."/> <check_box label="Gentag afspil" name="media_loop" tool_tip="Gentager automatisk medie, når det er færdigt med at spille starter det automatisk forfra."/> <check_box label="Skjul medie URL" name="hide_media_url" tool_tip="Klik her for at skjule medie adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> <check_box label="Skjul musik URL" name="hide_music_url" tool_tip="Klik her for at skjule musik adressen så det kun er dig og evt. parcel gruppens ejer/administratorer der kan se den."/> - <text length="1" name="media_size" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard." type="string" width="105"> + <text name="media_size" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard." width="105"> Medie Størrelse: </text> <spinner left_delta="89" name="media_size_width" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard."/> <spinner name="media_size_height" tool_tip="Størrelse for rendering af Web medie, benyt 0 for standard."/> - <text length="1" name="pixels" type="string"> + <text name="pixels"> pixels </text> - <text length="1" name="MusicURL:" type="string"> + <text name="MusicURL:"> Musik URL: </text> - <text length="1" name="Sound:" type="string"> + <text name="Sound:"> Lyd: </text> <check_box label="Begræns lyde fra bevægelser og objekter til denne parcel" name="check sound local"/> <button label="?" label_selected="?" name="?" left="400"/> - <text length="1" name="Voice settings:" type="string"> + <text name="Voice settings:"> Stemme: </text> <radio_group name="parcel_voice_channel"> - <radio_item type="string" length="1" name="Estate" label="Brug Estate kanalen" /> - <radio_item type="string" length="1" name="Private" label="Brug en privat kanal" /> - <radio_item type="string" length="1" name="Disabled" label="Slå stemme chat fra på denne parcel" /> + <radio_item name="Estate" label="Brug Estate kanalen" /> + <radio_item name="Private" label="Brug en privat kanal" /> + <radio_item name="Disabled" label="Slå stemme chat fra på denne parcel" /> </radio_group> </panel> <panel label="Adgang" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> Adgang til denne parcel </text> <check_box label="Tillad offentlig adgang" name="public_access"/> - <text length="1" name="Only Allow" type="string"> + <text name="Only Allow"> Blokér adgang for: </text> <check_box label="Beboere der ikke har givet betalings oplysninger til Linden Lab" name="limit_payment" tool_tip="Blokér beboere der ikke har afgivet identifikationsoplysninger."/> <check_box label="Beboere der ikke er godkendt som voksne" name="limit_age_verified" tool_tip="Blokér beboere der ikke har verificeret deres alder. Se support.secondlife.com for mere information."/> - <string name="estate_override"> + <panel.string name="estate_override"> En eller flere af disse valg er indstillet på estate niveau - </string> + </panel.string> <check_box label="Tillad adgang til gruppen: [GROUP]" name="GroupCheck" tool_tip="Vælg gruppe under fanen 'generelt'."/> <check_box label="Sælg adgang til:" name="PassCheck" tool_tip="Tillader midlertidig adgang til denne parcel"/> <combo_box name="pass_combo"> diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml index 27422761d9..318a23df4c 100644 --- a/indra/newview/skins/default/xui/da/floater_beacons.xml +++ b/indra/newview/skins/default/xui/da/floater_beacons.xml @@ -8,7 +8,7 @@ <check_box label="Partikel kilder" name="particles" /> <check_box label="Rendér highlights" name="highlights" /> <check_box label="Rendér pejlelys" name="beacons" /> - <text type="string" length="1" name="beacon_width_label"> + <text name="beacon_width_label"> Pejlelys bredde: </text> </panel> diff --git a/indra/newview/skins/default/xui/da/floater_customize.xml b/indra/newview/skins/default/xui/da/floater_customize.xml index aa6b8cb043..b434bea1ce 100644 --- a/indra/newview/skins/default/xui/da/floater_customize.xml +++ b/indra/newview/skins/default/xui/da/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Appearance" width="509"> <tab_container name="customize tab container" width="507"> - <panel label="Krops Dele" name="body_parts_placeholder"/> + <placeholder label="Krops Dele" name="body_parts_placeholder"/> <panel label="Kropsbygning" name="Shape"> <button label="Annullér" label_selected="Annullér" name="Revert"/> <button label="Krop" label_selected="Krop" name="Body"/> @@ -14,30 +14,30 @@ <button label="Overkrop" label_selected="Overkrop" name="Torso"/> <button label="Ben" label_selected="Ben" name="Legs"/> <radio_group name="sex radio"> - <radio_item type="string" length="1" name="radio" label="Kvinde" /> - <radio_item type="string" length="1" name="radio2" label="Mand" /> + <radio_item name="radio" label="Kvinde" /> + <radio_item name="radio2" label="Mand" /> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Vælg en ny krop ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -52,27 +52,27 @@ og bagefter 'tage den på'. <button label="Detaljer" label_selected="Detaljer" name="Face Detail"/> <button label="Sminke" label_selected="Sminke" name="Makeup"/> <button label="Kropsdetaljer" label_selected="Kropsdetaljer" name="Body Detail"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag en ny hud på ved at trække en sådan fra din beholdning over på din avatar. Du kan også oprette en hud fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -91,27 +91,27 @@ og bagefter 'tage den på'. <button label="Stil" label_selected="Stil" name="Style"/> <button label="Øjenbryn" label_selected="Øjenbryn" name="Eyebrows"/> <button label="Skæg" label_selected="Skæg" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag et ny hår på ved at trække et fra din beholdning over på din avatar. Du kan også oprette et nyt hår fra bunden og bagefter 'tage det på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -124,27 +124,27 @@ og bagefter 'tage det på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Øjne" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag et ny sæt øjne på ved at trække et sæt fra din beholdning over på din avatar. Du kan også oprette et nyt sæt øjne fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -165,26 +165,26 @@ og bagefter 'tage dem på'. <button label="Gem" label_selected="Gem" name="Save"/> <button label="Gem som..." label_selected="Gem som..." name="Save As"/> <button label="Annullér" label_selected="Annullér" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag en ny Tøje på ved at trække en fra din beholdning over på din avatar. Du kan også oprette en ny Tøje fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -199,27 +199,27 @@ Du kan også oprette en ny Tøje fra bunden og bagefter 'tage den på' <button label="Gem" label_selected="Gem" name="Save"/> <button label="Gem som..." label_selected="Gem som..." name="Save As"/> <button label="Annullér" label_selected="Annullér" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag nyr bukser på ved at trække dem fra din beholdning over på din avatar. Du kan også oprette ny bukser fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -227,27 +227,27 @@ din avatar. Du kan også oprette ny bukser fra bunden og bagefter </text> </panel> <panel label="Sko" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag et ny par sko på ved at trække dem fra din beholdning over på din avatar. Du kan også oprette et nyt par sko fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -262,27 +262,27 @@ og bagefter 'tage dem på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Strømper" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag et ny par Strømper på ved at trække dem fra din beholdning over på din avatar. Du kan også oprette et nyt par Strømper fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -297,26 +297,26 @@ og bagefter 'tage dem på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Jakke" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag en ny jakke på ved at trække en fra din beholdning over på din avatar. Du kan også oprette en ny jakke fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -332,27 +332,27 @@ Du kan også oprette en ny jakke fra bunden og bagefter 'tage den på' <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Handsker" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag nye handsker på ved at trække et par fra din beholdning over på din avatar. Du kan også oprette nye handsker fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -367,27 +367,27 @@ og bagefter 'tage dem på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Undertrøje" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag en ny undertrøje på ved at trække en fra din beholdning over på din avatar. Du kan også oprette en ny undertrøje fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -402,27 +402,27 @@ og bagefter 'tage den på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Underbukser" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag nye underbukser på ved at trække dem fra din beholdning over på din avatar. Du kan også oprette en par nye underbukser fra bunden og bagefter 'tage dem på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> @@ -437,27 +437,27 @@ og bagefter 'tage dem på'. <button label="Annullér" label_selected="Annullér" name="Revert"/> </panel> <panel label="Nederdel" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Kan ikke redigeres </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: indlæser... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: ikke båret </text> - <text length="1" name="path" type="string"> + <text name="path"> Fundet i [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Tag en ny nederdel på ved at trække en fra din beholdning over på din avatar. Du kan også oprette en ny nederdel fra bunden og bagefter 'tage den på'. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Du har ikke rettigheder til at redigere denne del. </text> <text name="Item Action Label"> diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml index 140b3d47d6..0ca7874c37 100644 --- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml @@ -5,85 +5,85 @@ <button label="?" name="WLDayCycleHelp" /> <multi_slider label="" name="WLTimeSlider" /> <multi_slider label="" name="WLDayCycleKeys" /> - <text type="string" length="1" name="WL12am"> + <text name="WL12am"> 00:00 </text> - <text type="string" length="1" name="WL3am"> + <text name="WL3am"> 03:00 </text> - <text type="string" length="1" name="WL6am"> + <text name="WL6am"> 06:00 </text> - <text type="string" length="1" name="WL9amHash"> + <text name="WL9amHash"> 09:00 </text> - <text type="string" length="1" name="WL12pmHash"> + <text name="WL12pmHash"> 12:00 </text> - <text type="string" length="1" name="WL3pm"> + <text name="WL3pm"> 15:00 </text> - <text type="string" length="1" name="WL6pm"> + <text name="WL6pm"> 18:00 </text> - <text type="string" length="1" name="WL9pm"> + <text name="WL9pm"> 21:00 </text> - <text type="string" length="1" name="WL12am2"> + <text name="WL12am2"> 00:00 </text> - <text type="string" length="1" name="WL12amHash"> + <text name="WL12amHash"> | </text> - <text type="string" length="1" name="WL3amHash"> + <text name="WL3amHash"> I </text> - <text type="string" length="1" name="WL6amHash"> + <text name="WL6amHash"> | </text> - <text type="string" length="1" name="WL9amHash2"> + <text name="WL9amHash2"> I </text> - <text type="string" length="1" name="WL12pmHash2"> + <text name="WL12pmHash2"> | </text> - <text type="string" length="1" name="WL3pmHash"> + <text name="WL3pmHash"> I </text> - <text type="string" length="1" name="WL6pmHash"> + <text name="WL6pmHash"> | </text> - <text type="string" length="1" name="WL9pmHash"> + <text name="WL9pmHash"> I </text> - <text type="string" length="1" name="WL12amHash2"> + <text name="WL12amHash2"> | </text> <button label="Tilføj key" label_selected="Tilføj key" name="WLAddKey" /> <button label="Slet key" label_selected="Slet key" name="WLDeleteKey" /> - <text type="string" length="1" name="WLCurKeyFrameText"> + <text name="WLCurKeyFrameText"> Key-frame indstillinger: </text> - <text type="string" length="1" name="WLCurKeyTimeText"> + <text name="WLCurKeyTimeText"> Key tid: </text> <spinner label="Timer" name="WLCurKeyHour" /> <spinner label="Min." name="WLCurKeyMin" /> - <text type="string" length="1" name="WLCurKeyTimeText2"> + <text name="WLCurKeyTimeText2"> Key fast indstilling: </text> <combo_box label="Faste" name="WLKeyPresets" /> - <text type="string" length="1" name="DayCycleText"> + <text name="DayCycleText"> Snap: </text> <combo_box label="5 min" name="WLSnapOptions" /> - <text type="string" length="1" name="DayCycleText2"> + <text name="DayCycleText2"> Cycluslængde: </text> <spinner label="Timer" name="WLLengthOfDayHour" /> <spinner label="Min." name="WLLengthOfDayMin" /> <spinner label="Sek." name="WLLengthOfDaySec" /> - <text type="string" length="1" name="DayCycleText3"> + <text name="DayCycleText3"> Vis: </text> <button label="Afspil" label_selected="Afspil" name="WLAnimSky" /> diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml index 04b804b362..907771c67a 100644 --- a/indra/newview/skins/default/xui/da/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_env_settings.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Environment Editor Floater" title="Redigering af omgivelser"> - <text type="string" length="1" name="EnvTimeText"> + <text name="EnvTimeText"> Tid på dagen </text> - <text type="string" length="1" name="EnvTimeText2"> + <text name="EnvTimeText2"> 00:00 </text> <slider label="" name="EnvTimeSlider" /> - <text type="string" length="1" name="EnvCloudText"> + <text name="EnvCloudText"> Skydække </text> <slider label="" name="EnvCloudSlider" /> - <text type="string" length="1" name="EnvWaterColorText"> + <text name="EnvWaterColorText"> Farve på vand </text> <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at åbne farvevælger" /> - <text type="string" length="1" name="EnvWaterFogText"> + <text name="EnvWaterFogText"> Tåge på vand </text> <slider label="" name="EnvWaterFogSlider" /> diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml index 488660853f..dcc1b8d2e8 100644 --- a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Hardware Settings Floater" title="Hardware opsætning"> - <text type="string" length="1" name="Filtering:"> + <text name="Filtering:"> Filtrering: </text> <check_box label="Anisotropic filtrering (langsommere når aktiveret)" name="ani" /> - <text type="string" length="1" name="Antialiasing:"> + <text name="Antialiasing:"> Antialiasing: </text> <combo_box label="Antialiasing" name="fsaa" width="100"> @@ -15,10 +15,10 @@ <combo_box.item name="16x" label="16x"/> </combo_box> <spinner label="Gamma:" name="gamma" /> - <text type="string" length="1" name="(brightness, lower is brighter)"> + <text name="(brightness, lower is brighter)"> (Lysstyrke, lavere er lysere, 0=benyt standard) </text> - <text type="string" length="1" name="Enable VBO:"> + <text name="Enable VBO:"> Aktivér VBO: </text> <check_box label="Aktivér OpenGL Vertex Buffer objekter" name="vbo" diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml index 8eb39f2f79..60a7d78aea 100644 --- a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Ingen" label_selected="Ingen" name="None" /> <check_box label="Vis altid mapper" name="check_show_empty" /> <check_box label="Siden sidste logoff" name="check_since_logoff" /> - <text type="string" length="1" name="- OR -"> + <text name="- OR -"> - ELLER - </text> <spinner label="Timer siden" name="spin_hours_ago" /> diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml index 7a4d570f85..280650a04b 100644 --- a/indra/newview/skins/default/xui/da/floater_joystick.xml +++ b/indra/newview/skins/default/xui/da/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Joystick opsætning"> - <check_box name="enable_joystick"> - Aktiver Joystick: - </check_box> + <check_box name="enable_joystick" label="Aktiver Joystick:"/> <spinner label="X akse mapping" name="JoystickAxis1"/> <spinner label="Y akse mapping" name="JoystickAxis2"/> <spinner label="Z akse mapping" name="JoystickAxis0"/> @@ -13,18 +11,12 @@ <check_box label="Direkte zoom" name="ZoomDirect"/> <check_box label="3D Cursor" name="Cursor3D"/> <check_box label="Auto opret" name="AutoLeveling"/> - <text length="1" name="Control Modes:" type="string"> + <text name="Control Modes:"> Kontrollér: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled"> - Build - </check_box> - <check_box name="JoystickFlycamEnabled"> - Flycam - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" label="Build"/> + <check_box name="JoystickFlycamEnabled" label="Flycam"/> <text name="XScale"> X følsomhed </text> @@ -78,12 +70,14 @@ <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Annullér" label_selected="Annullér" name="cancel_btn"/> - <string name="JoystickMonitor"> - Joystick Overvågning - </string> - <string name="Axis"> - Akse [NUM] - </string> + <stat_view label="Joystick Overvågning" name="axis_view"> + <stat_bar label="Akse 0" name="axis0"/> + <stat_bar label="Akse 1" name="axis1"/> + <stat_bar label="Akse 2" name="axis2"/> + <stat_bar label="Akse 3" name="axis3"/> + <stat_bar label="Akse 4" name="axis4"/> + <stat_bar label="Akse 5" name="axis5"/> + </stat_view> <string name="NoDevice"> intet joystick fundet </string> diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml new file mode 100644 index 0000000000..b30205310a --- /dev/null +++ b/indra/newview/skins/default/xui/da/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ Ø
+ </floater.string>
+ <floater.string name="mini_map_west">
+ V
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SØ
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NØ
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SV
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NV
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="Ø" name="floater_map_east" text="Ø">
+ Ø
+ </text>
+ <text label="V" name="floater_map_west" text="V">
+ V
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SØ" name="floater_map_southeast" text="SØ">
+ SØ
+ </text>
+ <text label="NØ" name="floater_map_northeast" text="NØ">
+ NØ
+ </text>
+ <text label="SV" name="floater_map_southwest" text="SV">
+ SV
+ </text>
+ <text label="NV" name="floater_map_northwest" text="NV">
+ NV
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_moveview.xml b/indra/newview/skins/default/xui/da/floater_moveview.xml index 70f3d9e3fd..2b50528881 100644 --- a/indra/newview/skins/default/xui/da/floater_moveview.xml +++ b/indra/newview/skins/default/xui/da/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Drej til venstre" /> <button label="" label_selected="" name="turn right btn" tool_tip="Drej til højre" /> <button label="" label_selected="" name="move up btn" tool_tip="Hop eller flyv op" /> @@ -8,4 +9,5 @@ <joystick_slide name="slide right btn" tool_tip="Gå til højre" /> <joystick_turn name="forward btn" tool_tip="Gå fremad" /> <joystick_turn name="backward btn" tool_tip="Gå bagud" /> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml index 12e4a95a5e..d37e3177fa 100644 --- a/indra/newview/skins/default/xui/da/floater_openobject.xml +++ b/indra/newview/skins/default/xui/da/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="Objekt indhold"> - <text type="string" length="1" name="object_name"> + <text name="object_name"> [DESC]: </text> <button label="Kopiér til beholdning" label_selected="Kopiér til beholdning" diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml index cca4240934..f39cfa4871 100644 --- a/indra/newview/skins/default/xui/da/floater_pay.xml +++ b/indra/newview/skins/default/xui/da/floater_pay.xml @@ -6,16 +6,16 @@ <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="Betal" label_selected="Betal" name="pay btn" /> <button label="Annullér" label_selected="Annullér" name="cancel btn" /> - <text type="string" length="1" name="payee_label" left="5" width="81"> + <text name="payee_label" left="5" width="81"> Betal beboer: </text> - <text type="string" length="1" name="payee_name"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text type="string" length="1" name="fastpay text"> + <text name="fastpay text"> Hurtig betal: </text> - <text type="string" length="1" name="amount text" left="4" > + <text name="amount text" left="4" > Beløb: </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml index 465f7e8e3e..09e2e3f5d0 100644 --- a/indra/newview/skins/default/xui/da/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/da/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <text type="string" length="1" name="payee_group"> + <text name="payee_group"> Betal gruppe: </text> - <text type="string" length="1" name="payee_resident"> + <text name="payee_resident"> Betal beboer: </text> - <text type="string" length="1" name="payee_name"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text type="string" length="1" name="object_name_label"> + <text name="object_name_label"> Via objekt: </text> - <text type="string" length="1" name="object_name_text"> + <text name="object_name_text"> ... </text> - <text type="string" length="1" name="fastpay text"> + <text name="fastpay text"> Hurtig betal: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> Beløb: </text> <button label="L$1" label_selected="L$1" name="fastpay 1" /> diff --git a/indra/newview/skins/default/xui/da/floater_preview_animation.xml b/indra/newview/skins/default/xui/da/floater_preview_animation.xml index 14cf13e317..1494bf36d0 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_anim"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beskrivelse: </text> <button label="Afspil i verden" label_selected="Stop" name="Anim play btn" diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml index 169172222f..68d04d6f9b 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview notecard" title="Note:"> <button label="Gem" label_selected="Gem" name="Save"/> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Beskrivelse: </text> - <text_editor length="1" name="Notecard Editor" type="string"> + <text_editor name="Notecard Editor"> Indlæser... </text_editor> <string name="no_object"> diff --git a/indra/newview/skins/default/xui/da/floater_preview_sound.xml b/indra/newview/skins/default/xui/da/floater_preview_sound.xml index 95a068ae65..9fbfba88b5 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_sound"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beskrivelse: </text> <button label="Afspil lokalt" label_selected="Afspil lokalt" name="Sound audition btn" diff --git a/indra/newview/skins/default/xui/da/floater_preview_texture.xml b/indra/newview/skins/default/xui/da/floater_preview_texture.xml index 593e32e4bf..250659f249 100644 --- a/indra/newview/skins/default/xui/da/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/da/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beskrivelse: </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> Størrelse: [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml index 804051e62c..01f152c43a 100644 --- a/indra/newview/skins/default/xui/da/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/da/floater_report_abuse.xml @@ -40,9 +40,7 @@ <combo_box.item name="Select_category" label="Vælg kategori"/> <combo_box.item name="Age__Age_play" label="Alder > Falsk alder"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Alder > Voksen beboer på Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Alder > Mindreårig beboer udenfor Teen Second Life - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Alder > Mindreårig beboer udenfor Teen Second Life"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Overfald > Kamp sandkasse / Usikkert område"/> <combo_box.item name="Assault__Safe_area" label="Overfald > Sikkert område"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Overfald > Sandkasse til våbentest"/> @@ -67,12 +65,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Chikane > Verbalt chikane"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Uanstændighed > Meget stødende indhold eller adfærd"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Uanstændighed > Upassende avatar navn"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Usømmelighed > Upassende inhold eller opførsel i en 'PG' region - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Usømmelighed > Upassende inhold eller opførsel i en 'Mature' region - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Usømmelighed > Upassende inhold eller opførsel i en 'PG' region"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Usømmelighed > Upassende inhold eller opførsel i en 'Mature' region"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Krænkelse af intellektuelle ejendomsrettigheder > Indholds fjernelse"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Krænkelse af intellektuelle ejendomsrettigheder > CopyBot eller omgåelse af rettighedsbeskyttelse"/> <combo_box.item name="Intolerance" label="Intolerance"/> diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml index 26371d864f..6990e8db0e 100644 --- a/indra/newview/skins/default/xui/da/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/da/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="Script: Rotation Script"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beskrivelse: </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml index 9f51d3bbfd..d4dae8951f 100644 --- a/indra/newview/skins/default/xui/da/floater_script_search.xml +++ b/indra/newview/skins/default/xui/da/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="Søg" label_selected="Søg" name="search_btn" /> <button label="Erstat" label_selected="Erstat" name="replace_btn" /> <button label="Erstat alle" label_selected="Erstat alle" name="replace_all_btn" /> - <text type="string" length="1" name="txt"> + <text name="txt"> Søg </text> - <text type="string" length="1" name="txt2"> + <text name="txt2"> Erstat </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_select_key.xml b/indra/newview/skins/default/xui/da/floater_select_key.xml index 53bb7dd525..7fa868a3a9 100644 --- a/indra/newview/skins/default/xui/da/floater_select_key.xml +++ b/indra/newview/skins/default/xui/da/floater_select_key.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=""> <button label="Annullér" label_selected="Annullér" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> Tryk på en taste for at vælge </text> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml index ed715bdb39..d7a5179890 100644 --- a/indra/newview/skins/default/xui/da/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml @@ -15,12 +15,8 @@ <button label="Send" name="send_btn"/> <button label="Gem (L$[AMOUNT])" name="upload_btn"/> <flyout_button label="Gem" name="save_btn" tool_tip="Gem billede i på din computer"> - <flyout_button_item name="save_item"> - Gem - </flyout_button_item> - <flyout_button_item name="saveas_item"> - Gem som... - </flyout_button_item> + <flyout_button_item name="save_item" label="Gem"/> + <flyout_button_item name="saveas_item" label="Gem som..."/> </flyout_button> <button label="Annullér" name="discard_btn"/> <button label="Mere >>" name="more_btn" tool_tip="Avancerede valg"/> diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml index 513a629bfa..c35e3aec4c 100644 --- a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Klik for at vælge et billede </string> - <text type="string" length="1" name="Multiple"> + <text name="Multiple"> Flere </text> - <text type="string" length="1" name="unknown"> + <text name="unknown"> Størrelse: [DIMENSIONS] </text> <button label="Standard" label_selected="Standard" name="Default" /> diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml index ccb8c67b68..a509d5f046 100644 --- a/indra/newview/skins/default/xui/da/floater_tools.xml +++ b/indra/newview/skins/default/xui/da/floater_tools.xml @@ -5,16 +5,22 @@ <button label="" label_selected="" name="button edit" tool_tip="Redigér"/> <button label="" label_selected="" name="button create" tool_tip="Opret"/> <button label="" label_selected="" name="button land" tool_tip="Land"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Kredsløb (Ctrl)" name="radio orbit"/> - <check_box label="Panorér (Ctrl-Shift)" name="radio pan"/> - <check_box label="Flyt" name="radio move"/> - <check_box label="Løft (Ctrl)" name="radio lift"/> - <check_box label="Spin (Ctrl-Shift)" name="radio spin"/> - <check_box label="Position" name="radio position"/> - <check_box label="Rotér (Ctrl)" name="radio rotate"/> - <check_box label="Stræk (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Vælg tekstur" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Kredsløb (Ctrl)" name="radio orbit"/> + <radio_item label="Panorér (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Flyt" name="radio move"/> + <radio_item label="Løft (Ctrl)" name="radio lift"/> + <radio_item label="Spin (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Position" name="radio position"/> + <radio_item label="Rotér (Ctrl)" name="radio rotate"/> + <radio_item label="Stræk (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Vælg tekstur" name="radio select face"/> + </radio_group> <check_box label="Redigér sammenlænkede dele" name="checkbox edit linked parts"/> <text name="text ruler mode"> Lineal: @@ -50,25 +56,27 @@ <check_box label="Kopiér valgte" name="checkbox copy selection" /> <check_box label="Centreret kopi" name="checkbox copy centers" /> <check_box label="Rotér" name="checkbox copy rotates" /> - <check_box label="Vælg" name="radio select land" /> - <check_box label="Udflad" name="radio flatten" /> - <check_box label="Hæv" name="radio raise" /> - <check_box label="Sænk" name="radio lower" /> - <check_box label="Udjævn" name="radio smooth" /> - <check_box label="Gør ujævnt" name="radio noise" /> - <check_box label="Tilbagefør" name="radio revert" /> + <radio_group name="land_radio_group"> + <radio_item label="Vælg" name="radio select land" /> + <radio_item label="Udflad" name="radio flatten" /> + <radio_item label="Hæv" name="radio raise" /> + <radio_item label="Sænk" name="radio lower" /> + <radio_item label="Udjævn" name="radio smooth" /> + <radio_item label="Gør ujævnt" name="radio noise" /> + <radio_item label="Tilbagefør" name="radio revert" /> + </radio_group> <combo_box name="combobox brush size"> <combo_box.item name="Small" label="Lille"/> - <combo_box.item name ="Medium" label="Mellem"/> + <combo_box.item name="Medium" label="Mellem"/> <combo_box.item name="Large" label="Stor"/> </combo_box> - <text type="string" length="1" name="Strength:"> + <text name="Strength:"> Styrke: </text> <text name="Dozer Size:"> Størrelse </text> - <text length="1" name="Strength:" type="string"> + <text name="Strength:"> Styrke </text> <text name="obj_count"> @@ -109,9 +117,7 @@ <text name="Permissions:"> Tilladelser: </text> - <text name="perm_modify"> - Du kan redigére dette objekt. - </text> + <check_box label="Del med gruppe" name="checkbox share with group" tool_tip="Tillad gruppemedlemmer at flytte, ændre, kopiere og slette."/> <string name="text deed continued"> Deed... @@ -127,17 +133,12 @@ <text name="Cost"> Pris: L$ </text> - <radio_group name="sale type"> - <radio_item name="Original" label="Original" /> - <radio_item name="Copy" label="Kopi" /> - <radio_item name="Contents" label="Indhold" /> - </radio_group> - <text name="Next owner can:"> - Næste ejer kan: - </text> - <check_box label="Redigére" name="checkbox next owner can modify"/> - <check_box label="Kopiére" name="checkbox next owner can copy" left_delta="80"/> - <check_box label="Sælge/Give væk" name="checkbox next owner can transfer" left_delta="67"/> + <combo_box name="sale type"> + <combo_box.item label="Kopi" name="Copy"/> + <combo_box.item label="Indhold" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <text name="label click action"> Når der venstreklikkes: </text> @@ -150,6 +151,10 @@ <combo_box.item name="Play" label="Afspil medie på parcel"/> <combo_box.item name="Opemmedia" label="Åben media på parcel"/> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Du kan redigére dette objekt. + </text> <text name="B:"> B: </text> @@ -168,6 +173,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Næste ejer kan: + </text> + <check_box label="Redigére" name="checkbox next owner can modify"/> + <check_box label="Kopiére" name="checkbox next owner can copy" left_delta="80"/> + <check_box name="checkbox next owner can transfer" left_delta="67"/> + </panel> <string name="text modify info 1"> Du kan redigere dette objekt </string> @@ -320,7 +332,7 @@ Sting type </text> <combo_box name="sculpt type control"> - <combo_box.item name="None" label="ingen)"/> + <combo_box.item name="None" label="(ingen)"/> <combo_box.item name="Sphere" label="Sfære"/> <combo_box.item name="Torus" label="Kuglering"/> <combo_box.item name="Plane" label="Plan"/> @@ -465,43 +477,43 @@ <button label="Køb land..." label_selected="Køb land..." name="button buy land"/> <button label="Flyt fra land..." label_selected="Flyt fra land..." name="button abandon land"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Træk i de farvede bånd for at rotere objekt - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Klik og træk for at strække valgte side - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Træk for at flytte, hold shift nede for at kopiere - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Klik og hold for at redigere land - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Klik og træk for at ændre synsvinkel - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Træk for at flytte objekter, Ctrl for at løfte, Ctrl-Shift for at rotere - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Klik et sted i verden for at bygge - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Klik og træk for at vælge land - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Skærm - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Lokalt - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Verden - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Reference - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Vedhæng - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml index aa04fd805a..33a10579ab 100644 --- a/indra/newview/skins/default/xui/da/floater_water.xml +++ b/indra/newview/skins/default/xui/da/floater_water.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Water Floater" title="Avanceret opsætning af vand"> - <text type="string" length="1" name="KeyFramePresetsText"> + <text name="KeyFramePresetsText"> Vand opsætninger: </text> <button label="Ny" label_selected="Ny" name="WaterNewPreset" /> @@ -8,89 +8,89 @@ <button label="Slet" label_selected="Slet" name="WaterDeletePreset" /> <tab_container name="Water Tabs"> <panel label="Opsætning" name="Settings"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Vandtåge farve </text> <button label="?" name="WaterFogColorHelp" /> <color_swatch label="" name="WaterFogColor" tool_tip="Click to open Color Picker" /> - <text type="string" length="1" name="WaterFogDensText"> + <text name="WaterFogDensText"> Tåge tæthedskarakteristik </text> <button label="?" name="WaterFogDensityHelp" /> <slider label="" name="WaterFogDensity" /> - <text type="string" length="1" name="WaterUnderWaterFogModText"> + <text name="WaterUnderWaterFogModText"> Tilretning undervandståge </text> <button label="?" name="WaterUnderWaterFogModHelp" /> <slider label="" name="WaterUnderWaterFogMod" /> - <text type="string" length="1" name="BDensText"> + <text name="BDensText"> Lille bølge reflektionsskala </text> <button label="?" name="WaterNormalScaleHelp" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> 1 </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> 2 </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> 3 </text> <slider label="" name="WaterNormalScaleX" /> <slider label="" name="WaterNormalScaleY" /> <slider label="" name="WaterNormalScaleZ" /> - <text type="string" length="1" name="HDText"> + <text name="HDText"> Spredningsskala </text> <button label="?" name="WaterFresnelScaleHelp" /> <slider label="" name="WaterFresnelScale" /> - <text type="string" length="1" name="FresnelOffsetText"> + <text name="FresnelOffsetText"> Spredning offset </text> <button label="?" name="WaterFresnelOffsetHelp" /> <slider label="" name="WaterFresnelOffset" /> - <text type="string" length="1" name="DensMultText"> + <text name="DensMultText"> Lysbrydning fra oven </text> <button label="?" name="WaterScaleAboveHelp" /> <slider label="" name="WaterScaleAbove" /> - <text type="string" length="1" name="WaterScaleBelowText"> + <text name="WaterScaleBelowText"> Lysbrydning fra neden </text> <button label="?" name="WaterScaleBelowHelp" /> <slider label="" name="WaterScaleBelow" /> - <text type="string" length="1" name="MaxAltText"> + <text name="MaxAltText"> Udviskning </text> <button label="?" name="WaterBlurMultiplierHelp" /> <slider label="" name="WaterBlurMult" /> </panel> <panel label="Billede" name="Waves"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Retning for store bølger </text> <button label="?" name="WaterWave1Help" /> - <text type="string" length="1" name="WaterWave1DirXText"> + <text name="WaterWave1DirXText"> X </text> - <text type="string" length="1" name="WaterWave1DirYText"> + <text name="WaterWave1DirYText"> Y </text> <slider label="" name="WaterWave1DirX" /> <slider label="" name="WaterWave1DirY" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> Retning for små bølger </text> <button label="?" name="WaterWave2Help" /> - <text type="string" length="1" name="WaterWave2DirXText"> + <text name="WaterWave2DirXText"> X </text> - <text type="string" length="1" name="WaterWave2DirYText"> + <text name="WaterWave2DirYText"> Y </text> <slider label="" name="WaterWave2DirX" /> <slider label="" name="WaterWave2DirY" /> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> Tekstur map </text> <button label="?" name="WaterNormalMapHelp" /> diff --git a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml index 145768a7e3..a70db6a6f1 100644 --- a/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/da/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=""> <button label="Gem" label_selected="Gem" name="Save" /> <button label="Annullér" label_selected="Annullér" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> Gem ting som:: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml index ecb8b77c52..9754b1f074 100644 --- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/da/floater_windlight_options.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="WindLight floater" title="Avanceret opsætning for himmel"> - <text type="string" length="1" name="KeyFramePresetsText"> + <text name="KeyFramePresetsText"> Faste indstillinger: </text> <button label="Ny" label_selected="Ny" name="WLNewPreset" /> @@ -9,210 +9,210 @@ <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton" /> <tab_container name="WindLight Tabs"> <panel label="Atmosfære" name="Atmosphere"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Blå - horisont </text> <button label="?" name="WLBlueHorizonHelp" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> R </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> G </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> B </text> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> I </text> <slider label="" name="WLBlueHorizonR" /> <slider label="" name="WLBlueHorizonG" /> <slider label="" name="WLBlueHorizonB" /> <slider label="" name="WLBlueHorizonI" /> - <text type="string" length="1" name="BDensText"> + <text name="BDensText"> Dis - horisont </text> <button label="?" name="WLHazeHorizonHelp" /> <slider label="" name="WLHazeHorizon" /> - <text type="string" length="1" name="BDensText2"> + <text name="BDensText2"> Blå - tæthed </text> <button label="?" name="WLBlueDensityHelp" /> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> R </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> G </text> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> B </text> - <text type="string" length="1" name="BHText9"> + <text name="BHText9"> I </text> <slider label="" name="WLBlueDensityR" /> <slider label="" name="WLBlueDensityG" /> <slider label="" name="WLBlueDensityB" /> <slider label="" name="WLBlueDensityI" /> - <text type="string" length="1" name="HDText"> + <text name="HDText"> Dis - intensitet </text> <button label="?" name="WLHazeDensityHelp" /> <slider label="" name="WLHazeDensity" /> - <text type="string" length="1" name="DensMultText"> + <text name="DensMultText"> Densitet faktor </text> <button label="?" name="WLDensityMultHelp" /> <slider label="" name="WLDensityMult" /> - <text type="string" length="1" name="WLDistanceMultText"> + <text name="WLDistanceMultText"> Distance faktor </text> <button label="?" name="WLDistanceMultHelp" /> <slider label="" name="WLDistanceMult" /> - <text type="string" length="1" name="MaxAltText"> + <text name="MaxAltText"> Maximum højde </text> <button label="?" name="WLMaxAltitudeHelp" /> <slider label="" name="WLMaxAltitude" /> </panel> <panel label="Lys" name="Lighting"> - <text type="string" length="1" name="SLCText"> + <text name="SLCText"> Sol/Måne farve </text> <button label="?" name="WLSunlightColorHelp" /> - <text type="string" length="1" name="BHText"> + <text name="BHText"> R </text> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> G </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> B </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> I </text> <slider label="" name="WLSunlightR" /> <slider label="" name="WLSunlightG" /> <slider label="" name="WLSunlightB" /> <slider label="" name="WLSunlightI" /> - <text type="string" length="1" name="TODText"> + <text name="TODText"> Sol/Måne position </text> <button label="?" name="WLTimeOfDayHelp" /> <slider label="" name="WLSunAngle" /> - <text type="string" length="1" name="WLAmbientText"> + <text name="WLAmbientText"> Omgivende </text> <button label="?" name="WLAmbientHelp" /> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> R </text> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> G </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> B </text> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> I </text> <slider label="" name="WLAmbientR" /> <slider label="" name="WLAmbientG" /> <slider label="" name="WLAmbientB" /> <slider label="" name="WLAmbientI" /> - <text type="string" length="1" name="WLEastAngleText"> + <text name="WLEastAngleText"> Øst vinkel </text> <button label="?" name="WLEastAngleHelp" /> <slider label="" name="WLEastAngle" /> - <text type="string" length="1" name="SunGlowText"> + <text name="SunGlowText"> Sol glød </text> <button label="?" name="WLSunGlowHelp" /> <slider label="Fokus " name="WLGlowB" /> <slider label="Størr. " name="WLGlowR" /> - <text type="string" length="1" name="SceneGammaText"> + <text name="SceneGammaText"> Lysintensitet (gamma) </text> <button label="?" name="WLSceneGammaHelp" /> <slider label="" name="WLGamma" /> - <text type="string" length="1" name="WLStarText"> + <text name="WLStarText"> Stjerne intensitet </text> <button label="?" name="WLStarBrightnessHelp" /> <slider label="" name="WLStarAlpha" /> </panel> <panel label="Skyer" name="Clouds"> - <text type="string" length="1" name="WLCloudColorText"> + <text name="WLCloudColorText"> Farve på skyer </text> <button label="?" name="WLCloudColorHelp" /> - <text type="string" length="1" name="BHText"> + <text name="BHText"> R </text> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> G </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> B </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> I </text> <slider label="" name="WLCloudColorR" /> <slider label="" name="WLCloudColorG" /> <slider label="" name="WLCloudColorB" /> <slider label="" name="WLCloudColorI" /> - <text type="string" length="1" name="WLCloudColorText2"> + <text name="WLCloudColorText2"> Skyer XY/Tæthed </text> <button label="?" name="WLCloudDensityHelp" /> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> X </text> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> Y </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> T </text> <slider label="" name="WLCloudX" /> <slider label="" name="WLCloudY" /> <slider label="" name="WLCloudDensity" /> - <text type="string" length="1" name="WLCloudCoverageText"> + <text name="WLCloudCoverageText"> Skydække </text> <button label="?" name="WLCloudCoverageHelp" /> <slider label="" name="WLCloudCoverage" /> - <text type="string" length="1" name="WLCloudScaleText"> + <text name="WLCloudScaleText"> Skystørrelse </text> <button label="?" name="WLCloudScaleHelp" /> <slider label="" name="WLCloudScale" /> - <text type="string" length="1" name="WLCloudDetailText"> + <text name="WLCloudDetailText"> Sky detaljer(XY/tæthed) </text> <button label="?" name="WLCloudDetailHelp" /> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> X </text> - <text type="string" length="1" name="BHText9"> + <text name="BHText9"> Y </text> - <text type="string" length="1" name="BHText10"> + <text name="BHText10"> T </text> <slider label="" name="WLCloudDetailX" /> <slider label="" name="WLCloudDetailY" /> <slider label="" name="WLCloudDetailDensity" /> - <text type="string" length="1" name="WLCloudScrollXText"> + <text name="WLCloudScrollXText"> Sky drift X </text> <button label="?" name="WLCloudScrollXHelp" /> <check_box label="Lås" name="WLCloudLockX" /> <slider label="" name="WLCloudScrollX" /> - <text type="string" length="1" name="WLCloudScrollYText"> + <text name="WLCloudScrollYText"> Sky drift Y </text> <button label="?" name="WLCloudScrollYHelp" /> diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml index 53c53dd707..d4b58f6232 100644 --- a/indra/newview/skins/default/xui/da/floater_world_map.xml +++ b/indra/newview/skins/default/xui/da/floater_world_map.xml @@ -28,10 +28,10 @@ <check_box label="Mature" name="event_mature_chk"/> <check_box label="Adult" name="event_adult_chk"/> <combo_box label="Venner online" name="friend combo" tool_tip="Ven der skal vises på kortet"> - <combo_box.item name="none_selected" label="Venner online" /> + <combo_box.item name="item1" label="Venner online" /> </combo_box> <combo_box label="Landemærker" name="landmark combo" tool_tip="Landemærke der skal vises på kortet"> - <combo_box.item name="none_selected" label="Landemærker" /> + <combo_box.item name="item1" label="Landemærker" /> </combo_box> <line_editor label="Søg på region navn" name="location" tool_tip="Skriv navnet på en region"/> <button label="Søg" name="DoSearch" tool_tip="Søg efter en region"/> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index d3e2ab83f2..5ab8e4eb30 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -347,7 +347,7 @@ på Verdenskortet eller modtage status opdateringer. Tilbyd venskab til [NAME]? <form name="form"> - <input name="message" type="text"> + <input name="message"> Vil du være min ven? </input> <button name="Offer" text="OK"/> @@ -365,7 +365,7 @@ Tilbyd venskab til [NAME]? </notification> <notification name="OfferTeleport"> <form name="form"> - <input name="message" type="text"> + <input name="message"> Mød mig i [REGION] </input> <button name="OK" text="OK"/> @@ -533,7 +533,7 @@ Linden Lab </notification> <notification name="NewSkyPreset"> <form name="form"> - <input name="message" type="text"> + <input name="message"> Ny forudindstilling </input> <button name="OK" text="OK"/> @@ -542,7 +542,7 @@ Linden Lab </notification> <notification name="NewWaterPreset"> <form name="form"> - <input name="message" type="text"> + <input name="message"> Ny forudindstilling </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/da/panel_audio_device.xml b/indra/newview/skins/default/xui/da/panel_audio_device.xml index 6e6bfe39ff..f6d817540e 100644 --- a/indra/newview/skins/default/xui/da/panel_audio_device.xml +++ b/indra/newview/skins/default/xui/da/panel_audio_device.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="device_settings"> - <text type="string" length="1" name="Audio Devices"> + <text name="Audio Devices"> Lydenheder </text> - <text type="string" length="1" name="Input device (microphone):"> + <text name="Input device (microphone):"> Input enhed (mikrofon): </text> - <text type="string" length="1" name="Output device (speakers):"> + <text name="Output device (speakers):"> Output enhed (højtalere): </text> - <text type="string" length="1" name="Input level:"> + <text name="Input level:"> Input niveau </text> - <text_editor type="string" length="1" name="voice_intro_text1"> + <text_editor name="voice_intro_text1"> Med denne skyder kan du regulere hvor højt du lyder i forhold til andre beboere. for at test input niveau kan du blot tale i mikrofon. </text_editor> <volume_slider name="mic_volume_slider" tool_tip="Ændre lydstyrke med denne skyder" /> diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml index 4281ec6792..edce758e7c 100644 --- a/indra/newview/skins/default/xui/da/panel_group_general.xml +++ b/indra/newview/skins/default/xui/da/panel_group_general.xml @@ -37,9 +37,9 @@ Bevæg din mus over mulighederne for mere hjælp. (Ejere er vist med fed skrift) </text> <name_list name="visible_members"> - <column label="Medlemsnavn" name="name"/> - <column label="Titel" name="title"/> - <column label="Senest på d." name="online"/> + <name_list.columns label="Medlemsnavn" name="name"/> + <name_list.columns label="Titel" name="title"/> + <name_list.columns label="Senest på d." name="online"/> </name_list> <text name="text_group_preferences"> Gruppeindstillinger @@ -50,21 +50,15 @@ Bevæg din mus over mulighederne for mere hjælp. <check_box label="Tilmeldingsgebyr: L$" name="check_enrollment_fee" tool_tip="Angiver om der kræves et gebyr, for at tilmelde sig gruppen."/> <spinner name="spin_enrollment_fee" tool_tip="Nye medlemmer skal betale dette gebyr for at tilmelde sig gruppen, når Tilmeldingsgebyr er valgt." width="60" left_delta="130"/> <combo_box name="group_mature_check" tool_tip="Angiver om din gruppes information anses som 'mature'." width="150"> - <combo_item name="select_mature"> - - Vælg indholdsrating - - </combo_item> - <combo_item name="mature"> - Mature indhold - </combo_item> - <combo_item name="pg"> - PG indhold - </combo_item> + <combo_box.item name="select_mature" label="- Vælg indholdsrating -"/> + <combo_box.item name="mature" label="Mature indhold"/> + <combo_box.item name="pg" label="PG indhold"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> Min aktive titel </text> - <combo_box length="150" name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv."/> + <combo_box name="active_title" tool_tip="Angiver den titel der vises i din avatars navnefelt, når denne gruppe er aktiv."/> </panel> <check_box label="Modtag gruppeinformationer" name="receive_notices" tool_tip="Angiver om du vil modtage informationer fra denne gruppe. Fjern markeringen i boksen hvis gruppen spammer dig."/> <check_box label="Vis gruppen i min profil" name="list_groups_in_profile" tool_tip="Angiver om du vil vise denne gruppe i dine profilinformationer"/> diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml index 103404e47b..9e6aa9eb7c 100644 --- a/indra/newview/skins/default/xui/da/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/da/panel_group_notices.xml @@ -16,8 +16,7 @@ Generel-fanebladet. Arkiv med gruppebeskeder </text> <text name="lbl2"> - Beskeder er gemt i 14 dage. Klik på den besked herunder, du ønsker at se. -Klik på 'Genopfrisk'-knappen for at se, om nye beskeder er modtaget. + Beskeder er gemt i 14 dage. Listen er begrænset til 200 beskeder pr. gruppe hver dag. </text> <scroll_list name="notice_list"> @@ -36,10 +35,7 @@ Listen er begrænset til 200 beskeder pr. gruppe hver dag. Lav en besked </text> <text name="lbl2"> - Du skal skrive et emne for at sende beskeden. Du kan tilføje et -bilag til beskeden ved at trække den fra beholdningen til -dette felt. Vedhæftede objekter skal være sat til at kunne -kopieres og overføres, og du kan ikke sende en mappe. + Du kan tilføje et bilag til beskeden ved at trække den fra beholdningen til dette felt. Vedhæftede objekter skal være sat til at kunne kopieres og overføres, og du kan ikke sende en mappe. </text> <text name="lbl3"> Emne: diff --git a/indra/newview/skins/default/xui/da/panel_groups.xml b/indra/newview/skins/default/xui/da/panel_groups.xml index 4c7b924bcc..5877226e57 100644 --- a/indra/newview/skins/default/xui/da/panel_groups.xml +++ b/indra/newview/skins/default/xui/da/panel_groups.xml @@ -3,10 +3,10 @@ <scroll_list name="group list"> <column label="" name="name" /> </scroll_list> - <text type="string" length="1" name="groupdesc" width="300"> + <text name="groupdesc" width="300"> Din nuværende aktive gruppe er fremhævet i listen. </text> - <text type="string" length="1" name="groupcount" width="300"> + <text name="groupcount" width="300"> Du er medlem i [COUNT] grupper (ud af maksimalt [MAX]). </text> <button label="IM/Opkald" name="IM" tool_tip="Åbner IM session" /> diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml index 6f02778264..1c5b013104 100644 --- a/indra/newview/skins/default/xui/da/panel_login.xml +++ b/indra/newview/skins/default/xui/da/panel_login.xml @@ -21,7 +21,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Hjem" /> <combo_box.item name="MyLastLocation" label="Min sidste lokation" /> - <combo_box.item name="Typeregionname" label="lt;Skriv navn på region>" /> + <combo_box.item name="Typeregionname" label="<Skriv navn på region>" /> </combo_box> <check_box label="Husk password" name="remember_check" /> <button label="Log ind" label_selected="Log ind" name="connect_btn" /> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml new file mode 100644 index 0000000000..61f27d5543 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="bredde / højde">
+ Format:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="bredde/ højde">
+ <combo_box.item label="4:3 (Standard CRT)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (Widescreen)" name="item3"/>
+ <combo_box.item label="16:9 (Widescreen)" name="item4"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml index e57b151511..dee42b4de5 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml @@ -1,55 +1,61 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="Tekst chat" name="chat"> - <text type="string" length="1" name="text_box"> + <text name="text_box"> Chat skriftstørrelse: </text> <radio_group name="chat_font_size"> - <radio_item type="string" length="1" name="radio" label="Lille" /> - <radio_item type="string" length="1" name="radio2" label="Mellem" /> - <radio_item type="string" length="1" name="radio3" label="Stor" /> + <radio_item name="radio" label="Lille" /> + <radio_item name="radio2" label="Mellem" /> + <radio_item name="radio3" label="Stor" /> </radio_group> - <text type="string" length="1" name="text_box2"> - Chat farve: - </text> - <color_swatch label="Dig" name="user" /> - <color_swatch label="Andre" name="agent" /> - <color_swatch label="IM" name="im" /> - <color_swatch label="System" name="system" /> - <color_swatch label="Fejl" name="script_error" /> - <color_swatch label="Objekter" name="objects" /> - <color_swatch label="Ejer" name="owner" /> - <color_swatch label="Bobler" name="background" /> - <color_swatch label="URL'er" name="links" /> - <text type="string" length="1" name="text_box8"> - Script fejl: + <color_swatch label="Dig" name="user"/> + <text name="text_box1"> + Dig + </text> + <color_swatch label="Andre" name="agent"/> + <text name="text_box2"> + Andre + </text> + <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM + </text> + <color_swatch label="System" name="system"/> + <text name="text_box4"> + System + </text> + <color_swatch label="Fejl" name="script_error"/> + <text name="text_box5"> + Fejl + </text> + <color_swatch label="Objekter" name="objects"/> + <text name="text_box6"> + Objekter + </text> + <color_swatch label="Ejer" name="owner"/> + <text name="text_box7"> + Ejer + </text> + <color_swatch label="Bobler" name="background"/> + <text name="text_box8"> + Bobler + </text> + <color_swatch label="URL'er" name="links"/> + <text name="text_box9"> + URL'er </text> <check_box label="Vis script fejl og advarsler i almindelig chat" name="script_errors_as_chat" /> - <text type="string" length="1" name="text_box3"> - Chat vindue: - </text> <spinner label="Udfas chat efter" name="fade_chat_time" label_width="90" width="140" /> - <text type="string" length="1" name="text_box4" left="292" > - (sekunder) - </text> <spinner left="350" name="max_chat_count"/> - <text type="string" length="1" name="text_box5" left="415"> - (linier) - </text> <slider label="Gennemsigtighed" name="console_opacity" /> <check_box label="Brug fuldskærms bredde (Kræver genstart)" name="chat_full_width_check" /> - <text type="string" length="1" name="text_box6"> - Chat indstillinger: - </text> <check_box label="Luk chat efter tryk på enter" name="close_chat_on_return_check" /> <check_box label="Piletaster flytter altid figur under chat" name="arrow_keys_move_avatar_check" /> <check_box label="Vis klokkeslæt i lokal chat" name="show_timestamps_check" /> <check_box label="Afspil skrive animation ved chat" name="play_typing_animation" /> - <text type="string" length="1" name="text_box7"> - Chat talebobler: - </text> <check_box label="Vis chat bobler" name="bubble_text_chat" /> <slider label="Gennemsigtighed" name="bubble_chat_opacity" /> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml index df27d05643..9490f94a42 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_general.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Generelt" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Log ind til min hjemme lokation som standard." label="Mit hjem" /> - <radio_item name="MyLastLocation" tool_tip="Log ind til min sidste lokation som standard." label="Min sidste lokation" /> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Log ind til min hjemme lokation som standard." label="Mit hjem" /> + <combo_box.item name="MyLastLocation" tool_tip="Log ind til min sidste lokation som standard." label="Min sidste lokation" /> + </combo_box> <check_box label="Vis start lokation på login billedet" name="show_location_checkbox"/> <combo_box name="fade_out_combobox"> <combo_box.item name="Never" label="Aldrig"/> @@ -12,13 +12,13 @@ </combo_box> <check_box label="Små avatar navne" name="small_avatar_names_checkbox"/> <check_box label="Skjul mit navn på min skærm" name="show_my_name_checkbox"/> - <text length="1" name="group_titles_textbox" type="string"> + <text name="group_titles_textbox"> Gruppe titler: </text> <check_box label="Skjul alle gruppe titler" name="show_all_title_checkbox"/> <check_box label="Gem min gruppe titel" name="show_my_title_checkbox"/> <color_swatch label="" name="effect_color_swatch" tool_tip="Klik for at åbne farvevælger"/> - <text length="1" name="UI Size:" type="string"> + <text name="UI Size:"> UI Størrelse: </text> <check_box label="Brug opløsnings uafhængig skalering" name="ui_auto_scale"/> @@ -30,62 +30,56 @@ <text name="maturity_desired_prompt"> Jeg ønsker adgang til inhold med rating: </text> - <combo_box name="maturity_desired_combobox" left="360" width="135"> - <combo_item name="Desired_Adult"> - PG, Mature og Adult - </combo_item> - <combo_item name="Desired_Mature"> - PG and Mature - </combo_item> - <combo_item name="Desired_PG"> - PG only - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="PG, Mature og Adult"/> + <combo_box.item name="Desired_Mature" label="PG and Mature"/> + <combo_box.item name="Desired_PG" label="PG only"/> </combo_box> - <text name="maturity_desired_textbox" left="360"> + <text name="maturity_desired_textbox"> PG only </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> Start lokation: </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> Vis navne: </text> - <text length="1" name="effects_color_textbox" type="string"> + <text name="effects_color_textbox"> Farve til mine effekter: </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> sekunder </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> Nedbrudsrapporter: </text> - <text length="1" name="language_textbox" type="string"> + <text name="language_textbox"> Sprog: </text> - <text length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (Kræver genstart for at virke optimalt) </text> <string name="region_name_prompt"> <Skriv regions navn> </string> <combo_box name="crash_behavior_combobox"> - <combo_box.item type="string" length="1" name="Askbeforesending" label="Bed om bekræftigelse"/> - <combo_box.item type="string" length="1" name="Alwayssend" label="Send altid"/> - <combo_box.item type="string" length="1" name="Neversend" label="Send aldrig"/> + <combo_box.item name="Askbeforesending" label="Bed om bekræftigelse"/> + <combo_box.item name="Alwayssend" label="Send altid"/> + <combo_box.item name="Neversend" label="Send aldrig"/> </combo_box> <combo_box name="language_combobox"> - <combo_box.item type="string" length="1" name="System Default Language" label="System standard"/> - <combo_box.item type="string" length="1" name="English" label="English (Engelsk)"/> - <combo_box.item type="string" length="1" name="Danish" label="Dansk - Beta"/> - <combo_box.item type="string" length="1" name="Deutsch(German)" label="Deutsch (Tysk) - Beta"/> - <combo_box.item type="string" length="1" name="Spanish" label="Español (Spansk) - Beta"/> - <combo_box.item type="string" length="1" name="French" label="Français (Fransk) - Beta"/> - <combo_box.item type="string" length="1" name="Hungarian" label="Magyar (Ungarsk) - Beta"/> - <combo_box.item type="string" length="1" name="Polish" label="Polski (Polsk) - Beta"/> - <combo_box.item type="string" length="1" name="Portugese" label="Portugués (Portugisisk) - Beta"/> - <combo_box.item type="string" length="1" name="Chinese" label="中文 (简体) (Kinesisk) - Beta"/> - <combo_box.item type="string" length="1" name="(Japanese)" label="日本語 (Japansk) - Beta"/> - <combo_box.item type="string" length="1" name="(Korean)" label="한국어 (Koreansk) - Beta"/> + <combo_box.item name="System Default Language" label="System standard"/> + <combo_box.item name="English" label="English (Engelsk)"/> + <combo_box.item name="Danish" label="Dansk - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Tysk) - Beta"/> + <combo_box.item name="Spanish" label="Español (Spansk) - Beta"/> + <combo_box.item name="French" label="Français (Fransk) - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Ungarsk) - Beta"/> + <combo_box.item name="Polish" label="Polski (Polsk) - Beta"/> + <combo_box.item name="Portugese" label="Portugués (Portugisisk) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Kinesisk) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japansk) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Koreansk) - Beta"/> </combo_box> <check_box label="Del sprog med objekter" name="language_is_public" tool_tip="Dette lader objekter i verden vide hvad dit foretrukne sprog er."/> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml index 86c506a0fd..4dac7be413 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml @@ -2,62 +2,63 @@ <panel label="Grafik" name="Display panel"> <button label="?" name="GraphicsPreferencesHelpButton" /> <check_box label="Kør Second Life i et vindue" name="windowed mode" /> - <text_editor type="string" length="1" name="FullScreenInfo"> + <text_editor name="FullScreenInfo"> Hvis dette ikke er valgt kører Second Life i Fuld skærm. </text_editor> - <text type="string" length="1" name="WindowSizeLabel"> + <text name="WindowSizeLabel"> Opløsning: </text> <combo_box name="windowsize combo"> - <combo_box.item type="string" length="1" name="640x480" label="640x480" /> - <combo_box.item type="string" length="1" name="800x600" label="800x600" /> - <combo_box.item type="string" length="1" name="720x480" label="720x480 (NTSC)" /> - <combo_box.item type="string" length="1" name="768x576" label="768x576 (PAL)" /> - <combo_box.item type="string" length="1" name="1024x768" label="1024x768" /> + <combo_box.item name="640x480" label="640x480" /> + <combo_box.item name="800x600" label="800x600" /> + <combo_box.item name="720x480" label="720x480 (NTSC)" /> + <combo_box.item name="768x576" label="768x576 (PAL)" /> + <combo_box.item name="1024x768" label="1024x768" /> </combo_box> - <text type="string" length="1" name="DisplayResLabel"> + <text name="DisplayResLabel"> Skærm opløsning: </text> - <text type="string" length="1" name="AspectRatioLabel1" tool_tip="bredde / højde"> + <text name="AspectRatioLabel1" tool_tip="bredde / højde"> Format: </text> <combo_box name="aspect_ratio" tool_tip="bredde/ højde"> - <combo_box.item type="string" length="1" name="4:3(StandardCRT)" label="4:3 (Standard CRT)" /> - <combo_box.item type="string" length="1" name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> - <combo_box.item type="string" length="1" name="8:5(Widescreen)" label="8:5 (Widescreen)" /> - <combo_box.item type="string" length="1" name="16:9(Widescreen)" label="16:9 (Widescreen)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> + <combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" /> </combo_box> <check_box label="Auto-detect format" name="aspect_auto_detect" /> - <text type="string" length="1" name="HigherText"> + <text name="HigherText"> Kvalitet og </text> - <text type="string" length="1" name="QualityText"> + <text name="QualityText"> Ydelse: </text> - <text type="string" length="1" name="FasterText"> + <text name="FasterText"> Hurtigere </text> - <text type="string" length="1" name="ShadersPrefText"> + <text name="ShadersPrefText"> Lav </text> - <text type="string" length="1" name="ShadersPrefText2"> + <text name="ShadersPrefText2"> Middel </text> - <text type="string" length="1" name="ShadersPrefText3"> + <text name="ShadersPrefText3"> Høj </text> - <text type="string" length="1" name="ShadersPrefText4"> + <text name="ShadersPrefText4"> Ultra </text> - <text type="string" length="1" name="HigherText2"> + <text name="HigherText2"> Højere </text> - <text type="string" length="1" name="QualityText2"> + <text name="QualityText2"> Kvalitet </text> <slider label="" name="QualityPerformanceSelection" /> <check_box label="Manuelt" name="CustomSettings" /> - <text type="string" length="1" name="ShadersText"> + <panel name="CustomGraphics Panel"> + <text name="ShadersText"> Overflader: </text> <check_box label="Glatte flader og skin" name="BumpShiny" /> @@ -65,31 +66,31 @@ tool_tip="Ved at slå dette valg fra, kan det forhindres at visse grafikkort drivere crasher." /> <check_box label="Atmosfæriske flader" name="WindLightUseAtmosShaders" /> <check_box label="Reflektioner i vand" name="Reflections" /> - <text type="string" length="1" name="ReflectionDetailText"> + <text name="ReflectionDetailText"> Spejlnings detaljer: </text> <radio_group name="ReflectionDetailRadio"> - <radio_item type="string" length="1" name="0" label="Terræn og træer" /> - <radio_item type="string" length="1" name="1" label="Alle statiske objekter" /> - <radio_item type="string" length="1" name="2" label="Alle avatarer og objekter" /> - <radio_item type="string" length="1" name="3" label="Alt" /> + <radio_item name="0" label="Terræn og træer" /> + <radio_item name="1" label="Alle statiske objekter" /> + <radio_item name="2" label="Alle avatarer og objekter" /> + <radio_item name="3" label="Alt" /> </radio_group> - <text type="string" length="1" name="AvatarRenderingText"> + <text name="AvatarRenderingText"> Avatar gengivelse </text> <check_box label="Mini-figurer på lang afstand" name="AvatarImpostors" /> <check_box label="Hardware Skinning" name="AvatarVertexProgram" /> <check_box label="Avatar tøj" name="AvatarCloth" /> - <text type="string" length="1" name="DrawDistanceMeterText1"> + <text name="DrawDistanceMeterText1"> m </text> - <text type="string" length="1" name="DrawDistanceMeterText2"> + <text name="DrawDistanceMeterText2"> m </text> <slider label="Maks. visnings-afstand:" name="DrawDistance" /> <slider label="Maks. antal partikler:" name="MaxParticleCount" /> <slider label="Efterbehandlingskvalitet:" name="RenderPostProcess" /> - <text type="string" length="1" name="MeshDetailText"> + <text name="MeshDetailText"> Netmaske detaljer: </text> <slider label=" Objekter:" name="ObjectMeshDetail" /> @@ -98,48 +99,49 @@ <slider label=" Avatarer:" name="AvatarMeshDetail" /> <slider label=" Terræn:" name="TerrainMeshDetail" /> <slider label=" Himmel:" name="SkyMeshDetail" /> - <text type="string" length="1" name="PostProcessText"> + <text name="PostProcessText"> Lav </text> - <text type="string" length="1" name="ObjectMeshDetailText"> + <text name="ObjectMeshDetailText"> Lav </text> - <text type="string" length="1" name="FlexibleMeshDetailText"> + <text name="FlexibleMeshDetailText"> Lav </text> - <text type="string" length="1" name="TreeMeshDetailText"> + <text name="TreeMeshDetailText"> Lav </text> - <text type="string" length="1" name="AvatarMeshDetailText"> + <text name="AvatarMeshDetailText"> Lav </text> - <text type="string" length="1" name="TerrainMeshDetailText"> + <text name="TerrainMeshDetailText"> Lav </text> - <text type="string" length="1" name="SkyMeshDetailText"> + <text name="SkyMeshDetailText"> Lav </text> - <text type="string" length="1" name="LightingDetailText"> + <text name="LightingDetailText"> Lys detaljer: </text> <radio_group name="LightingDetailRadio"> - <radio_item type="string" length="1" name="SunMoon" label="Kun sol og måne" /> - <radio_item type="string" length="1" name="LocalLights" label="Lys i nærheden" /> + <radio_item name="SunMoon" label="Kun sol og måne" /> + <radio_item name="LocalLights" label="Lys i nærheden" /> </radio_group> - <text type="string" length="1" name="TerrainDetailText"> + <text name="TerrainDetailText"> Terræn detaljer: </text> <radio_group name="TerrainDetailRadio"> - <radio_item type="string" length="1" name="0" label="Lav" /> - <radio_item type="string" length="1" name="2" label="Høj" /> + <radio_item name="0" label="Lav" /> + <radio_item name="2" label="Høj" /> </radio_group> + </panel> <button label="Anbefalede indstillinger" name="Defaults" /> <button label="Hardware valg" label_selected="Hardware Options" name="GraphicsHardwareButton" /> - <string name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </string> - <string name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </string> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml index 0a439f8c62..7039f8fd6c 100644 --- a/indra/newview/skins/default/xui/da/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/da/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Estate" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Estate" name="Estate"> <text name="estate_help_text"> Ændringer i dette afsnit vil påvirke alle regioner i dette estate. @@ -23,7 +25,7 @@ regioner i dette estate. <slider label="Fase" name="sun_hour_slider" /> <check_box label="Tillad offentlig adgang" name="externally_visible_check" /> <button label="?" name="externally_visible_help" /> - <text type="string" length="1" name="Only Allow"> + <text name="Only Allow"> Begræns adgang til: </text> <check_box label="Beboere med betalingsoplysninger" name="limit_payment" @@ -68,4 +70,6 @@ regioner i dette estate. <button label="?" name="ban_resident_help" /> <button label="Fjern..." name="remove_banned_avatar_btn" /> <button label="Tilføj..." name="add_banned_avatar_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml index e4b722c20d..6ffe1f34f3 100644 --- a/indra/newview/skins/default/xui/da/panel_region_general.xml +++ b/indra/newview/skins/default/xui/da/panel_region_general.xml @@ -40,15 +40,9 @@ Rating: </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Gem" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml index 65c4743da0..a7477d3a65 100644 --- a/indra/newview/skins/default/xui/da/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/da/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Terræn textures" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Terræn textures" name="Textures"> <text name="region_text_lbl"> Region: </text> @@ -54,4 +56,6 @@ og HØJ værdien er MIMIMUM højde for texture nummer 4. </text> <button label="Gem" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/da/panel_scrolling_param.xml b/indra/newview/skins/default/xui/da/panel_scrolling_param.xml index 5309ca589f..99f61b938b 100644 --- a/indra/newview/skins/default/xui/da/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/da/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> - <text type="string" length="1" name="Loading..."> + <text name="Loading..."> Henter... </text> - <text type="string" length="1" name="Loading...2"> + <text name="Loading...2"> Henter... </text> <button label="" label_selected="" name="less" /> diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml index c286960334..20e72827f2 100644 --- a/indra/newview/skins/default/xui/da/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="status"> - <text type="string" length="1" name="ParcelNameText" + <text name="ParcelNameText" tool_tip="Navn på det land/parcel som du står på. Klik på teksten for yderligere info."> parcel name goes here </text> - <text type="string" length="1" name="BalanceText" tool_tip="Konto balance"> + <text name="BalanceText" tool_tip="Konto balance"> Henter... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Køb valuta" /> - <text type="string" length="12" name="TimeText" tool_tip="Nuværende [SECOND_LIFE] tid"> + <text name="TimeText" tool_tip="Nuværende [SECOND_LIFE] tid"> 12:00 </text> <string name="StatBarDaysOfWeek"> @@ -19,7 +19,7 @@ </string> <button label="" label_selected="" name="scriptout" tool_tip="Script advarsler og fejl" /> <button label="" label_selected="" name="health" tool_tip="Helbred" /> - <text type="string" length="1" name="HealthText" tool_tip="Helbred"> + <text name="HealthText" tool_tip="Helbred"> 100% </text> <button label="" label_selected="" name="no_fly" tool_tip="Flyvning ikke tilladt" /> diff --git a/indra/newview/skins/default/xui/da/panel_world_map.xml b/indra/newview/skins/default/xui/da/panel_world_map.xml new file mode 100644 index 0000000000..b835180a88 --- /dev/null +++ b/indra/newview/skins/default/xui/da/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ Ø
+ </panel.string>
+ <panel.string name="world_map_west">
+ V
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SØ
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NØ
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SV
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NV
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="Ø" name="floater_map_east" text="Ø">
+ Ø
+ </text>
+ <text label="V" name="floater_map_west" text="V">
+ V
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SØ" name="floater_map_southeast" text="SØ">
+ SØ
+ </text>
+ <text label="NØ" name="floater_map_northeast" text="NØ">
+ NØ
+ </text>
+ <text label="SV" name="floater_map_southwest" text="SV">
+ SV
+ </text>
+ <text label="NV" name="floater_map_northwest" text="NV">
+ NV
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index c039e2e1c5..dda5e9bd1a 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -483,4 +483,34 @@ <string name="choose_the_directory"> Vælg bibliotek </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + Lav + </string> + <string name="GraphicsQualityMid"> + Middel + </string> + <string name="GraphicsQualityHigh"> + Høj + </string> </strings> diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 93e7297fd2..853302d15c 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -79,46 +79,46 @@ <button label="Land aufgeben..." label_selected="Land aufgeben..." name="Abandon Land..."/> <button label="Land in Besitz nehmen..." label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/> <button label="Linden-Verkauf..." label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/> - <string name="new users only"> + <panel.string name="new users only"> Nur neue Benutzer - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Jeder - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Gebiet: - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] qm. - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Auktions-ID: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Bestätigen Sie den Kauf, um dieses Land zu bearbeiten. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (In Gruppenbesitz) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Info... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (öffentlich) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (keiner) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Wird verkauft) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Keine Parzelle ausgewählt. Öffnen Sie „Welt“ > „Land-Info“ oder wählen Sie eine andere Parzelle aus, um Informationen darüber anzuzeigen. - </string> + </panel.string> </panel> <panel label="Vertrag" name="land_covenant_panel"> <text name="estate_section_lbl"> @@ -176,20 +176,20 @@ Land in dieser Region kann nicht zusammengelegt/geteilt werden. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Gekauftes Land in dieser Region kann wiederverkauft werden. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Gekauftes Land in dieser Region kann nicht wiederverkauft werden. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Gekauftes Land in dieser Region kann zusammengelegt und geteilt werden. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Gekauftes Land in dieser Region kann nicht zusammengelegt und geteilt werden. - </string> + </panel.string> </panel> <panel label="Objekte" name="land_objects_panel"> <text name="parcel_object_bonus"> @@ -201,12 +201,12 @@ und geteilt werden. <text name="objects_available"> [COUNT] von [MAX] ([AVAILABLE] verfügbar) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] von [MAX] ([AVAILABLE] verfügbar) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] von [MAX] ([DELETED] werden gelöscht) - </string> + </panel.string> <text name="Primitives parcel supports:" width="200"> Von Parzelle unterstützte Primitiva: </text> @@ -293,109 +293,84 @@ und geteilt werden. <check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Falls nicht aktiviert, sind Kampfschäden aktiviert."/> <check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Skripte am Stoßen. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/> <check_box label="Ort in Suche anzeigen (30 L$/Woche) unter" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Diese Parzelle in Suchergebnissen anzeigen. - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Diese Option ist nicht aktiviert, da diese Parzelle nicht größer als 128 qm ist. Nur große Parzellen können in der Suche aufgeführt werden. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Diese Option ist nicht aktiviert, da Sie die Parzellenoptionen nicht verändern können. - </string> + </panel.string> <combo_box name="land category with adult"> - <combo_item name="AnyCategory"> - Alle Kategorien - </combo_item> - <combo_item name="LindenLocation"> - Lindenort - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Kunst & Kultur - </combo_item> - <combo_item name="Business"> - Business - </combo_item> - <combo_item name="Educational"> - Bildung - </combo_item> - <combo_item name="Gaming"> - Spielen - </combo_item> - <combo_item name="Hangout"> - Treffpunkt - </combo_item> - <combo_item name="NewcomerFriendly"> - Anfängergerecht - </combo_item> - <combo_item name="Parks&Nature"> - Parks und Natur - </combo_item> - <combo_item name="Residential"> - Wohngebiet - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Sonstige - </combo_item> + <combo_box.item name="item0" label="Alle Kategorien" + /> + <combo_box.item name="item1" label="Lindenort" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Kunst & Kultur" + /> + <combo_box.item name="item4" label="Business" + /> + <combo_box.item name="item5" label="Bildung" + /> + <combo_box.item name="item6" label="Spielen" + /> + <combo_box.item name="item7" label="Treffpunkt" + /> + <combo_box.item name="item8" label="Anfängergerecht" + /> + <combo_box.item name="item9" label="Parks und Natur" + /> + <combo_box.item name="item10" label="Wohngebiet" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Sonstige" + /> </combo_box> <combo_box left="266" name="land category" width="130"> - <combo_item name="AnyCategory"> - Alle Kategorien - </combo_item> - <combo_item name="LindenLocation"> - Lindenort - </combo_item> - <combo_item name="Arts&Culture"> - Kunst und Kultur - </combo_item> - <combo_item name="Business"> - Business - </combo_item> - <combo_item name="Educational"> - Bildung - </combo_item> - <combo_item name="Gaming"> - Spielen - </combo_item> - <combo_item name="Hangout"> - Treffpunkt - </combo_item> - <combo_item name="NewcomerFriendly"> - Anfängergerecht - </combo_item> - <combo_item name="Parks&Nature"> - Parks und Natur - </combo_item> - <combo_item name="Residential"> - Wohngebiet - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Sonstige - </combo_item> + <combo_box.item name="item0" label="Alle Kategorien" + /> + <combo_box.item name="item1" label="Lindenort" + /> + <combo_box.item name="item3" label="Kunst und Kultur" + /> + <combo_box.item name="item4" label="Business" + /> + <combo_box.item name="item5" label="Bildung" + /> + <combo_box.item name="item6" label="Spielen" + /> + <combo_box.item name="item7" label="Treffpunkt" + /> + <combo_box.item name="item8" label="Anfängergerecht" + /> + <combo_box.item name="item9" label="Parks und Natur" + /> + <combo_box.item name="item10" label="Wohngebiet" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Sonstige" + /> </combo_box> <button label="?" label_selected="?" name="?"/> <check_box label="Mature-Inhalt" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Mature-Inhalt - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Adult-Inhalt - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Die Informationen oder Inhalte Ihrer Parzelle sind „Mature“. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Die Informationen oder Inhalte Ihrer Parzelle sind „Adult“. - </string> + </panel.string> <text name="Snapshot:"> Foto: </text> @@ -403,31 +378,28 @@ Nur große Parzellen können in der Suche aufgeführt werden. <text name="landing_point"> Landepunkt: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (keiner) - </string> + </panel.string> <button label="Festlegen" label_selected="Festlegen" left="234" name="Set" tool_tip="Legt den Landepunkt fest, an dem Besucher ankommen. Legt die Position Ihres Avatars innerhalb dieser Parzelle fest." width="70"/> <button label="Löschen" label_selected="Löschen" left="312" name="Clear" tool_tip="Landepunkt löschen." width="70"/> <text name="Teleport Routing: "> Teleport-Route: </text> <combo_box name="landing type" tool_tip="Teleport-Route -- festlegen, wie Teleports auf Ihrem Land gehandhabt werden sollen."> - <combo_item name="Blocked"> - Blockiert - </combo_item> - <combo_item name="LandingPoint"> - Landepunkt - </combo_item> - <combo_item name="Anywhere"> - Überall - </combo_item> + <combo_box.item name="Blocked" label="Blockiert" + /> + <combo_box.item name="LandingPoint" label="Landepunkt" + /> + <combo_box.item name="Anywhere" label="Überall" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Kein Stoßen - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Kein Stoßen (regional) - </string> + </panel.string> </panel> <panel label="Medien" name="land_media_panel"> <text name="with media:"> @@ -492,18 +464,16 @@ Optionen: </text> <check_box label="Einwohner, die keine Zahlungsinformationen bei Linden Lab hinterlegt haben" name="limit_payment" tool_tip="Nicht identifizierte Einwohner verbannen."/> <check_box label="Einwohner, die keine altersgeprüften Erwachsenen sind" name="limit_age_verified" tool_tip="Einwohner ohne Altersprüfung verbannen. Weitere Informationen finden Sie auf support.secondlife.com."/> - <string name="estate_override"> + <panel.string name="estate_override"> Eine oder mehrere dieser Optionen gelten auf Grundstücksebene - </string> + </panel.string> <check_box label="Gruppenzugang erlauben: [GROUP]" name="GroupCheck" tool_tip="Gruppe im Register „Allgemein“ festlegen."/> <check_box label="Pässe verkaufen an:" name="PassCheck" tool_tip="Ermöglicht befristeten Zugang zu dieser Parzelle"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Jeden - </combo_item> - <combo_item name="Group"> - Gruppe - </combo_item> + <combo_box.item name="Anyone" label="Jeden" + /> + <combo_box.item name="Group" label="Gruppe" + /> </combo_box> <spinner label="Preis in L$:" name="PriceSpin"/> <spinner label="Online-Zeit:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/de/floater_customize.xml b/indra/newview/skins/default/xui/de/floater_customize.xml index b27e5d22b4..06b53dd8b4 100644 --- a/indra/newview/skins/default/xui/de/floater_customize.xml +++ b/indra/newview/skins/default/xui/de/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Aussehen"> <tab_container name="customize tab container"> - <panel label="Körperteile" name="body_parts_placeholder"/> + <placeholder label="Körperteile" name="body_parts_placeholder"/> <panel label="Form" name="Shape"> <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> <button label="Körper" label_selected="Körper" name="Body"/> @@ -14,34 +14,30 @@ <button label="Oberkörper" label_selected="Oberkörper" name="Torso"/> <button label="Beine" label_selected="Beine" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string"> - Weiblich - </radio_item> - <radio_item length="1" name="radio2" type="string"> - Männlich - </radio_item> + <radio_item name="radio" label="Weiblich"/> + <radio_item name="radio2" label="Männlich"/> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie eine Körperform aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch eine neue Körperform erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -56,27 +52,27 @@ und diese anziehen. <button label="Gesichtsdetails" label_selected="Gesichtsdetails" left="2" name="Face Detail" width="92"/> <button label="Make-Uup" label_selected="Make-Uup" left="2" name="Makeup" width="92"/> <button label="Körperdetails" label_selected="Körperdetails" left="2" name="Body Detail" width="92"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie eine Haut aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch eine neue Haut erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -95,27 +91,27 @@ und diese anziehen. <button label="Stil" label_selected="Stil" name="Style"/> <button label="Augenbrauen" label_selected="Augenbrauen" name="Eyebrows"/> <button label="Gesichtshaar" label_selected="Gesichtshaar" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie Haare aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch neue Haare erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -128,27 +124,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Augen" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie Augen aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch neue Augen erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -169,27 +165,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." left="194" name="Save As" width="105"/> <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie ein Hemd aus dem Inventar auf Ihren Avatar, um es zu tragen. Sie können auch ein neues Hemd erstellen und dieses anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -204,27 +200,27 @@ und dieses anziehen. <button font="SansSerifSmall" label="Speichern" label_selected="Speichern" left="107" name="Save"/> <button font="SansSerifSmall" label="Speichern unter..." label_selected="Speichern unter..." left="194" name="Save As" width="105"/> <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie eine Hose aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch eine neue Hose erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -232,27 +228,27 @@ und diese anziehen. </text> </panel> <panel label="Schuhe" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie Schuhe aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch neue Schuhe erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -267,27 +263,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Socken" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie Socken aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch neue Socken erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -302,27 +298,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Jacke" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie eine Jacke aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch eine neue Jacke erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -338,27 +334,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Handschuhe" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie Handschuhe aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch neue Handschuhe erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -373,27 +369,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Unterhemd" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie ein Unterhemd aus dem Inventar auf Ihren Avatar, um es zu tragen. Sie können auch ein neues Unterhemd erstellen und dieses anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -408,27 +404,27 @@ und dieses anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Unterhose" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie eine Unterhose aus dem Inventar auf Ihren Avatar, um sie zu tragen. Sie können auch eine neue Unterhose erstellen und diese anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> @@ -443,27 +439,27 @@ und diese anziehen. <button font="SansSerifSmall" label="Zurücksetzen" label_selected="Zurücksetzen" name="Revert"/> </panel> <panel label="Rock" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: bearbeiten nicht möglich </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: wird geladen... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: nicht getragen </text> - <text length="1" name="path" type="string"> + <text name="path"> In [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ziehen Sie einen Rock aus dem Inventar auf Ihren Avatar, um ihn zu tragen. Sie können auch einen neuen Rock erstellen und diesen anziehen. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Sie sind nicht berechtigt, diese Kleidung zu bearbeiten. </text> <text name="Item Action Label" right="100"> diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml index aa24231e33..2f2eb5aa8d 100644 --- a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Keine" label_selected="Keine" name="None" /> <check_box label="Ordner immer anzeigen" name="check_show_empty" /> <check_box label="Seit Abmeldung" name="check_since_logoff" /> - <text type="string" length="1" name="- OR -"> + <text name="- OR -"> - ODER - </text> <spinner label="Stunden zuvor" label_width="80" name="spin_hours_ago" /> diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml index 407556bf2c..ccf6f14ead 100644 --- a/indra/newview/skins/default/xui/de/floater_joystick.xml +++ b/indra/newview/skins/default/xui/de/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Joystick-Konfiguration"> - <check_box name="enable_joystick" width="80"> - Joystick aktivieren: - </check_box> + <check_box name="enable_joystick" width="80" label="Joystick aktivieren:"/> <text left="140" name="joystick_type" width="360"/> <spinner label="X-Achse" name="JoystickAxis1"/> <spinner label="Y-Achse" name="JoystickAxis2"/> @@ -17,15 +15,9 @@ <text name="Control Modes:"> Steuermodi: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled"> - Bauen - </check_box> - <check_box name="JoystickFlycamEnabled"> - Flycam - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" label="Bauen"/> + <check_box name="JoystickFlycamEnabled" label="Flycam"/> <text name="XScale"> X-Skala </text> @@ -74,12 +66,14 @@ <button label="SpaceNavigator-Standards" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Abbrechen" label_selected="Abbrechen" name="cancel_btn"/> - <string name="JoystickMonitor"> - Joystick-Monitor - </string> - <string name="Axis"> - Achse [NUM] - </string> + <stat_view label="Joystick-Monitor" name="axis_view"> + <stat_bar label="Achse 0" name="axis0"/> + <stat_bar label="Achse 1" name="axis1"/> + <stat_bar label="Achse 2" name="axis2"/> + <stat_bar label="Achse 3" name="axis3"/> + <stat_bar label="Achse 4" name="axis4"/> + <stat_bar label="Achse 5" name="axis5"/> + </stat_view> <string name="NoDevice"> Kein Gerät erkannt </string> diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml new file mode 100644 index 0000000000..a875d4aa90 --- /dev/null +++ b/indra/newview/skins/default/xui/de/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ O
+ </floater.string>
+ <floater.string name="mini_map_west">
+ W
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NO
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SW
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NW
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SO" name="floater_map_southeast" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml index 01431ee51a..4ea2048e62 100644 --- a/indra/newview/skins/default/xui/de/floater_moveview.xml +++ b/indra/newview/skins/default/xui/de/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Nach links" /> <button label="" label_selected="" name="turn right btn" tool_tip="Nach rechts" /> <button label="" label_selected="" name="move up btn" @@ -11,4 +12,5 @@ <joystick_slide name="slide right btn" tool_tip="Nach rechts" /> <joystick_turn name="forward btn" tool_tip="Nach vorn" /> <joystick_turn name="backward btn" tool_tip="Nach hinten" /> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml index 0b5a36578e..fa465c08c7 100644 --- a/indra/newview/skins/default/xui/de/floater_openobject.xml +++ b/indra/newview/skins/default/xui/de/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="Objektinhalte"> - <text type="string" length="1" name="object_name"> + <text name="object_name"> [DESC]: </text> <button label="In Inventar kopieren" label_selected="In Inventar kopieren" diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml index 5d0dbffc22..a2e40fa078 100644 --- a/indra/newview/skins/default/xui/de/floater_pay.xml +++ b/indra/newview/skins/default/xui/de/floater_pay.xml @@ -6,16 +6,16 @@ <button label="20 L$" label_selected="20 L$" name="fastpay 20" /> <button label="Zahlen" label_selected="Zahlen" name="pay btn" /> <button label="Abbrechen" label_selected="Abbrechen" name="cancel btn" /> - <text type="string" length="1" name="payee_label" width="130"> + <text name="payee_label" width="130"> Einwohner bezahlen: </text> - <text type="string" length="1" name="payee_name" left="130"> + <text name="payee_name" left="130"> [FIRST] [LAST] </text> - <text type="string" length="1" name="fastpay text"> + <text name="fastpay text"> Schnellzahlung: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> Betrag: </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml index eaf95a9e9e..49bf0c8957 100644 --- a/indra/newview/skins/default/xui/de/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/de/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <text type="string" length="1" name="payee_group" width="105"> + <text name="payee_group" width="105"> Gruppe bezahlen: </text> - <text type="string" length="1" name="payee_resident" width="118"> + <text name="payee_resident" width="118"> Einwohner bezahlen: </text> - <text type="string" length="1" name="payee_name" left="128" width="168"> + <text name="payee_name" left="128" width="168"> [FIRST] [LAST] </text> - <text type="string" length="1" name="object_name_label" halign="left"> + <text name="object_name_label" halign="left"> Über Objekt: </text> - <text type="string" length="1" name="object_name_text" left="105"> + <text name="object_name_text" left="105"> ... </text> - <text type="string" length="1" name="fastpay text" width="95" halign="left"> + <text name="fastpay text" width="95" halign="left"> Schnellzahlung: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> Betrag: </text> <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" /> diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml index c807556a9b..630127f310 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_anim"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beschreibung: </text> <line_editor left="98" name="desc" width="189" /> diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml index 370f242ddb..da90d66e4d 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview notecard" title="Hinweis:"> <button label="Speichern" label_selected="Speichern" name="Save" /> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beschreibung: </text> - <text_editor type="string" length="1" name="Notecard Editor"> + <text_editor name="Notecard Editor"> Wird geladen... </text_editor> <text name="no_object"> diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml index fd0a824c03..3f2e39c0d6 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_sound"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beschreibung: </text> <button label="In Welt abspielen" label_selected="In Welt abspielen" diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml index 6828da99eb..0c53eb7ca3 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beschreibung: </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> Maße: [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml index af7145003a..a8df587cfa 100644 --- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml @@ -41,9 +41,7 @@ dann auf das Objekt: <combo_box.item name="Select_category" label="Kategorie auswählen"/> <combo_box.item name="Age__Age_play" label="Alter> Age-Play"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Alter> Erwachsener Einwohner in Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Alter > Minderjähriger Einwohner außerhalb Teen Second Life - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Alter > Minderjähriger Einwohner außerhalb Teen Second Life"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Angriff> Kampf-Sandbox / unsichere Region"/> <combo_box.item name="Assault__Safe_area" label="Angriff> Sichere Region"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Angriff > Sandbox für Waffentest"/> @@ -68,12 +66,8 @@ dann auf das Objekt: <combo_box.item name="Harassment__Verbal_abuse" label="Belästigung > Beschimpfung"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Unanständigkeit > Anstößige Inhalte oder Handlungen in der Öffentlichkeit"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Unanständigkeit > Anstößiger Avatarname"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in PG-Region"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Unanständigkeit > Unangemessener Inhalt oder unangemessenes Verhalten in Mature-Region"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Urheberrechtsverletzung > Entfernen von Inhalten"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Urheberrechtsverletzung > CopyBot oder Berechtigungs-Exploit"/> <combo_box.item name="Intolerance" label="Intoleranz"/> diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml index b5312e370a..3ab5732055 100644 --- a/indra/newview/skins/default/xui/de/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="Skript: Rotationsskript"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Beschreibung: </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml index 54045ed83a..bd93427456 100644 --- a/indra/newview/skins/default/xui/de/floater_script_search.xml +++ b/indra/newview/skins/default/xui/de/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="Suchen" label_selected="Suchen" name="search_btn" /> <button label="Ersetzen" label_selected="Ersetzen" name="replace_btn" /> <button label="Alle ersetzen" label_selected="Alle ersetzen" name="replace_all_btn" /> - <text type="string" length="1" name="txt"> + <text name="txt"> Suchen </text> - <text type="string" length="1" name="txt2"> + <text name="txt2"> Ersetzen </text> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index 401aa74084..bc8a1f42f1 100644 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -4,15 +4,9 @@ Zweck des Fotos </text> <radio_group label="Fototyp" name="snapshot_type_radio"> - <radio_item name="postcard"> - Per E-Mail senden - </radio_item> - <radio_item name="texture"> - Im Inventar speichern ([AMOUNT] L$) - </radio_item> - <radio_item name="local"> - Auf Festplatte speichern - </radio_item> + <radio_item name="postcard" label="Per E-Mail senden"/> + <radio_item name="texture" label="Im Inventar speichern ([AMOUNT] L$)"/> + <radio_item name="local" label="Auf Festplatte speichern"/> </radio_group> <text name="file_size_label"> Dateigröße: [SIZE] KB @@ -21,12 +15,8 @@ <button label="Senden" name="send_btn"/> <button label="Speichern ([AMOUNT] L$)" name="upload_btn"/> <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern"> - <flyout_button_item name="save_item"> - Speichern - </flyout_button_item> - <flyout_button_item name="saveas_item"> - Speichern unter... - </flyout_button_item> + <flyout_button_item name="save_item" label="Speichern"/> + <flyout_button_item name="saveas_item" label="Speichern unter..."/> </flyout_button> <button label="Abbrechen" name="discard_btn"/> <button label="Mehr >>" name="more_btn" tool_tip="Erweiterte Optionen"/> @@ -38,75 +28,54 @@ Format </text> <combo_box label="Auflösung" name="postcard_size_combo"> - <combo_item name="CurrentWindow"> - Aktuelles Fenster - </combo_item> - <combo_item name="640x480"> - 640x480 - </combo_item> - <combo_item name="800x600"> - 800x600 - </combo_item> - <combo_item name="1024x768"> - 1024x768 - </combo_item> - <combo_item name="Custom"> - Benutzerdefiniert - </combo_item> + <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" + /> + <combo_box.item name="640x480" label="640x480" + /> + <combo_box.item name="800x600" label="800x600" + /> + <combo_box.item name="1024x768" label="1024x768" + /> + <combo_box.item name="Custom" label="Benutzerdefiniert" + /> </combo_box> <combo_box label="Auflösung" name="texture_size_combo"> - <combo_item name="CurrentWindow"> - Aktuelles Fenster - </combo_item> - <combo_item name="Small(128x128)"> - Klein (128x128) - </combo_item> - <combo_item name="Medium(256x256)"> - Mittel (256x256) - </combo_item> - <combo_item name="Large(512x512)"> - Groß (512x512) - </combo_item> - <combo_item name="Custom"> - Benutzerdefiniert - </combo_item> + <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" + /> + <combo_box.item name="Small(128x128)" label="Klein (128x128)" + /> + <combo_box.item name="Medium(256x256)" label="Mittel (256x256)" + /> + <combo_box.item name="Large(512x512)" label="Groß (512x512)" + /> + <combo_box.item name="Custom" label="Benutzerdefiniert" + /> </combo_box> <combo_box label="Auflösung" name="local_size_combo"> - <combo_item name="CurrentWindow"> - Aktuelles Fenster - </combo_item> - <combo_item name="320x240"> - 320x240 - </combo_item> - <combo_item name="640x480"> - 640x480 - </combo_item> - <combo_item name="800x600"> - 800x600 - </combo_item> - <combo_item name="1024x768"> - 1024x768 - </combo_item> - <combo_item name="1280x1024"> - 1280x1024 - </combo_item> - <combo_item name="1600x1200"> - 1600x1200 - </combo_item> - <combo_item name="Custom"> - Benutzerdefiniert - </combo_item> + <combo_box.item name="CurrentWindow" label="Aktuelles Fenster" + /> + <combo_box.item name="320x240" label="320x240" + /> + <combo_box.item name="640x480" label="640x480" + /> + <combo_box.item name="800x600" label="800x600" + /> + <combo_box.item name="1024x768" label="1024x768" + /> + <combo_box.item name="1280x1024" label="1280x1024" + /> + <combo_box.item name="1600x1200" label="1600x1200" + /> + <combo_box.item name="Custom" label="Benutzerdefiniert" + /> </combo_box> <combo_box label="Format" name="local_format_combo"> - <combo_item name="PNG"> - PNG - </combo_item> - <combo_item name="JPEG"> - JPEG - </combo_item> - <combo_item name="BMP"> - BMP - </combo_item> + <combo_box.item name="PNG" label="PNG" + /> + <combo_box.item name="JPEG" label="JPEG" + /> + <combo_box.item name="BMP" label="BMP" + /> </combo_box> <spinner label="Breite" name="snapshot_width"/> <spinner label="Höhe" name="snapshot_height"/> @@ -116,15 +85,12 @@ Aufnehmen: </text> <combo_box label="Bildlayer" name="layer_types" width="132" left="73"> - <combo_item name="Colors"> - Farben - </combo_item> - <combo_item name="Depth"> - Tiefe - </combo_item> - <combo_item name="ObjectMattes"> - Objektmasken - </combo_item> + <combo_box.item name="Colors" label="Farben" + /> + <combo_box.item name="Depth" label="Tiefe" + /> + <combo_box.item name="ObjectMattes" label="Objektmasken" + /> </combo_box> <check_box label="Interface auf Foto anzeigen" name="ui_check"/> <check_box label="HUD-Objekte auf Foto anzeigen" name="hud_check"/> diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml index 4aa7db4d33..fff6ab5c74 100644 --- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Zum Auswählen eines Bildes hier klicken </string> - <text type="string" length="1" name="Multiple"> + <text name="Multiple"> Mehrfach </text> - <text type="string" length="1" name="unknown"> + <text name="unknown"> Maße: [DIMENSIONS] </text> <button label="Standard" label_selected="Standard" name="Default" /> diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml index 8084d2427e..2875f5d04c 100644 --- a/indra/newview/skins/default/xui/de/floater_tools.xml +++ b/indra/newview/skins/default/xui/de/floater_tools.xml @@ -5,30 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/> <button label="" label_selected="" name="button create" tool_tip="Erstellen"/> <button label="" label_selected="" name="button land" tool_tip="Land"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Orbit (Strg)" name="radio orbit"/> - <check_box label="Schwenken (Strg-Umschalt)" name="radio pan"/> - <check_box label="Verschieben" name="radio move"/> - <check_box label="Heben (Strg)" name="radio lift"/> - <check_box label="Rotieren (Strg-Umschalt)" name="radio spin"/> - <check_box label="Position" name="radio position"/> - <check_box label="Drehen (Strg)" name="radio rotate"/> - <check_box label="Dehnen (Strg-Umschalt)" name="radio stretch"/> - <check_box label="Textur auswählen" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Orbit (Strg)" name="radio orbit"/> + <radio_item label="Schwenken (Strg-Umschalt)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Verschieben" name="radio move"/> + <radio_item label="Heben (Strg)" name="radio lift"/> + <radio_item label="Rotieren (Strg-Umschalt)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Position" name="radio position"/> + <radio_item label="Drehen (Strg)" name="radio rotate"/> + <radio_item label="Dehnen (Strg-Umschalt)" name="radio stretch"/> + <radio_item label="Textur auswählen" name="radio select face"/> + </radio_group> <check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/> <text name="text ruler mode"> Lineal: </text> <combo_box name="combobox grid mode"> - <combo_item name="World"> - Welt - </combo_item> - <combo_item name="Local"> - Lokal - </combo_item> - <combo_item name="Reference"> - Referenz - </combo_item> + <combo_box.item name="World" label="Welt" + /> + <combo_box.item name="Local" label="Lokal" + /> + <combo_box.item name="Reference" label="Referenz" + /> </combo_box> <check_box label="Beide Seiten dehnen" name="checkbox uniform"/> <check_box label="Texturen dehnen" name="checkbox stretch textures"/> @@ -56,13 +59,15 @@ <check_box label="Auswahl kopieren" name="checkbox copy selection"/> <check_box label="Zentrieren" name="checkbox copy centers"/> <check_box label="Drehen" name="checkbox copy rotates"/> - <check_box label="Land auswählen" name="radio select land"/> - <check_box label="Einebnen" name="radio flatten"/> - <check_box label="Anheben" name="radio raise"/> - <check_box label="Absenken" name="radio lower"/> - <check_box label="Glätten" name="radio smooth"/> - <check_box label="Aufrauen" name="radio noise"/> - <check_box label="Zurücksetzen" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Land auswählen" name="radio select land"/> + <radio_item label="Einebnen" name="radio flatten"/> + <radio_item label="Anheben" name="radio raise"/> + <radio_item label="Absenken" name="radio lower"/> + <radio_item label="Glätten" name="radio smooth"/> + <radio_item label="Aufrauen" name="radio noise"/> + <radio_item label="Zurücksetzen" name="radio revert"/> + </radio_group> <button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/> <text name="Bulldozer:"> Planierraupe: @@ -111,9 +116,7 @@ <text name="Permissions:"> Berechtigungen: </text> - <text name="perm_modify"> - Sie können dieses Objekt ändern. - </text> + <check_box label="Mit Gruppe teilen" name="checkbox share with group" tool_tip="Allen Mitgliedern der zugeordneten Gruppe die Erlaubnis erteilen, Ihre Berechtigungen für dieses Objekt zu teilen und zu verwenden. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/> <string name="text deed continued"> Übertragung... @@ -129,54 +132,40 @@ <text name="Cost"> Preis:L$ </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Original - </radio_item> - <radio_item name="Copy"> - Kopieren - </radio_item> - <radio_item name="Contents"> - Inhalt - </radio_item> - </radio_group> - <text name="Next owner can:"> - Nächster Eigentümer kann: - </text> - <check_box label="Ändern" name="checkbox next owner can modify"/> - <check_box label="Kopieren" name="checkbox next owner can copy"/> - <check_box label="Wiederverkaufen" name="checkbox next owner can transfer"/> + <combo_box name="sale type"> + <combo_box.item label="Kopieren" name="Copy"/> + <combo_box.item label="Inhalt" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <text name="label click action"> Bei Linksklicken: </text> <combo_box name="clickaction"> - <combo_item name="Touch/grab(default)"> - Berühren/Greifen (Standard) - </combo_item> - <combo_item name="Sitonobject"> - Auf Objekt sitzen - </combo_item> - <combo_item name="Buyobject"> - Objekt kaufen - </combo_item> - <combo_item name="Payobject"> - Objekt bezahlen - </combo_item> - <combo_item name="Open"> - Öffnen - </combo_item> - <combo_item name="Play"> - Parzellenmedien wiedergeben - </combo_item> - <combo_item name="Opemmedia"> - Parzellenmedien öffnen - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Berühren/Greifen (Standard)" + /> + <combo_box.item name="Sitonobject" label="Auf Objekt sitzen" + /> + <combo_box.item name="Buyobject" label="Objekt kaufen" + /> + <combo_box.item name="Payobject" label="Objekt bezahlen" + /> + <combo_box.item name="Open" label="Öffnen" + /> + <combo_box.item name="Play" label="Parzellenmedien wiedergeben" + /> + <combo_box.item name="Opemmedia" label="Parzellenmedien öffnen" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Sie können dieses Objekt ändern. + </text> <text name="B:"> B: </text> <text name="O:"> - O; + O: </text> <text name="G:"> G: @@ -190,6 +179,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Nächster Eigentümer kann: + </text> + <check_box label="Ändern" name="checkbox next owner can modify"/> + <check_box label="Kopieren" name="checkbox next owner can copy"/> + <check_box name="checkbox next owner can transfer"/> + </panel> <string name="text modify info 1"> Sie können dieses Objekt ändern. </string> @@ -254,56 +250,41 @@ Material </text> <combo_box name="material"> - <combo_item name="Stone"> - Stein - </combo_item> - <combo_item name="Metal"> - Metall - </combo_item> - <combo_item name="Glass"> - Glas - </combo_item> - <combo_item name="Wood"> - Holz - </combo_item> - <combo_item name="Flesh"> - Fleisch - </combo_item> - <combo_item name="Plastic"> - Kunststoff - </combo_item> - <combo_item name="Rubber"> - Gummi - </combo_item> + <combo_box.item name="Stone" label="Stein" + /> + <combo_box.item name="Metal" label="Metall" + /> + <combo_box.item name="Glass" label="Glas" + /> + <combo_box.item name="Wood" label="Holz" + /> + <combo_box.item name="Flesh" label="Fleisch" + /> + <combo_box.item name="Plastic" label="Kunststoff" + /> + <combo_box.item name="Rubber" label="Gummi" + /> </combo_box> <text name="label basetype"> Bausteintyp </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Quader - </combo_item> - <combo_item name="Cylinder"> - Zylinder - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Kugel - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Tube"> - Rohr - </combo_item> - <combo_item name="Ring"> - Ring - </combo_item> - <combo_item name="Sculpted"> - Geformt - </combo_item> + <combo_box.item name="Box" label="Quader" + /> + <combo_box.item name="Cylinder" label="Zylinder" + /> + <combo_box.item name="Prism" label="Prisma" + /> + <combo_box.item name="Sphere" label="Kugel" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Tube" label="Rohr" + /> + <combo_box.item name="Ring" label="Ring" + /> + <combo_box.item name="Sculpted" label="Geformt" + /> </combo_box> <text name="text cut"> Pfadschnitt Beginn und Ende @@ -322,18 +303,14 @@ Hohlform </text> <combo_box name="hole"> - <combo_item name="Default"> - Standard - </combo_item> - <combo_item name="Circle"> - Kreis - </combo_item> - <combo_item name="Square"> - Quadrat - </combo_item> - <combo_item name="Triangle"> - Dreieck - </combo_item> + <combo_box.item name="Default" label="Standard" + /> + <combo_box.item name="Circle" label="Kreis" + /> + <combo_box.item name="Square" label="Quadrat" + /> + <combo_box.item name="Triangle" label="Dreieck" + /> </combo_box> <text name="text twist"> Torsion @@ -384,21 +361,16 @@ Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild Naht </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (keiner) - </combo_item> - <combo_item name="Sphere"> - Kugel - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Plane"> - Fläche - </combo_item> - <combo_item name="Cylinder"> - Zylinder - </combo_item> + <combo_box.item name="None" label="(keiner)" + /> + <combo_box.item name="Sphere" label="Kugel" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Plane" label="Fläche" + /> + <combo_box.item name="Cylinder" label="Zylinder" + /> </combo_box> </panel> <panel label="Eigenschaften" name="Features"> @@ -440,88 +412,64 @@ Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild Zuordnung </text> <combo_box name="combobox texgen"> - <combo_item name="Default"> - Standard - </combo_item> - <combo_item name="Planar"> - Eben - </combo_item> + <combo_box.item name="Default" label="Standard" + /> + <combo_box.item name="Planar" label="Eben" + /> </combo_box> <text name="label shininess"> Glanz </text> <combo_box name="combobox shininess"> - <combo_item name="None"> - Kein - </combo_item> - <combo_item name="Low"> - Niedrig - </combo_item> - <combo_item name="Medium"> - Mittel - </combo_item> - <combo_item name="High"> - Hoch - </combo_item> + <combo_box.item name="None" label="Kein" + /> + <combo_box.item name="Low" label="Niedrig" + /> + <combo_box.item name="Medium" label="Mittel" + /> + <combo_box.item name="High" label="Hoch" + /> </combo_box> <text name="label bumpiness"> Holprigkeit </text> <combo_box name="combobox bumpiness"> - <combo_item name="None"> - Keine - </combo_item> - <combo_item name="Brightness"> - Helligkeit - </combo_item> - <combo_item name="Darkness"> - Dunkelheit - </combo_item> - <combo_item name="woodgrain"> - Holzmaserung - </combo_item> - <combo_item name="bark"> - Rinde - </combo_item> - <combo_item name="bricks"> - Ziegel - </combo_item> - <combo_item name="checker"> - Karo - </combo_item> - <combo_item name="concrete"> - Beton - </combo_item> - <combo_item name="crustytile"> - verkrustete Fliesen - </combo_item> - <combo_item name="cutstone"> - Steinplatten - </combo_item> - <combo_item name="discs"> - Scheiben - </combo_item> - <combo_item name="gravel"> - Kies - </combo_item> - <combo_item name="petridish"> - Petrischale - </combo_item> - <combo_item name="siding"> - Verkleidung - </combo_item> - <combo_item name="stonetile"> - Steinfliesen - </combo_item> - <combo_item name="stucco"> - Stuck - </combo_item> - <combo_item name="suction"> - Saugen - </combo_item> - <combo_item name="weave"> - gewoben - </combo_item> + <combo_box.item name="None" label="Keine" + /> + <combo_box.item name="Brightness" label="Helligkeit" + /> + <combo_box.item name="Darkness" label="Dunkelheit" + /> + <combo_box.item name="woodgrain" label="Holzmaserung" + /> + <combo_box.item name="bark" label="Rinde" + /> + <combo_box.item name="bricks" label="Ziegel" + /> + <combo_box.item name="checker" label="Karo" + /> + <combo_box.item name="concrete" label="Beton" + /> + <combo_box.item name="crustytile" label="verkrustete Fliesen" + /> + <combo_box.item name="cutstone" label="Steinplatten" + /> + <combo_box.item name="discs" label="Scheiben" + /> + <combo_box.item name="gravel" label="Kies" + /> + <combo_box.item name="petridish" label="Petrischale" + /> + <combo_box.item name="siding" label="Verkleidung" + /> + <combo_box.item name="stonetile" label="Steinfliesen" + /> + <combo_box.item name="stucco" label="Stuck" + /> + <combo_box.item name="suction" label="Saugen" + /> + <combo_box.item name="weave" label="gewoben" + /> </combo_box> <text name="tex scale"> Wiederholungen @@ -583,673 +531,43 @@ Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild <button label="Land kaufen..." label_selected="Land kaufen..." name="button buy land"/> <button label="Land aufgeben..." label_selected="Land aufgeben..." name="button abandon land"/> </panel> - <string name="status_rotate"> - An den farbigen Bändern ziehen, um das Objekt zu drehen - </string> - <string name="status_scale"> - Klicken und ziehen, um die ausgewählte Seite zu dehnen - </string> - <string name="status_move"> - Maus verschiebt, Umschalt-Taste und Maus kopiert - </string> - <string name="status_modifyland"> - Klicken und halten, um das Land zu bearbeiten - </string> - <string name="status_camera"> - Klicken und ziehen, um die Ansicht zu ändern - </string> - <string name="status_grab"> - Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen - </string> - <string name="status_place"> - Inworld klicken, um zu bauen. - </string> - <string name="status_selectland"> - Klicken und ziehen, um Land auszuwählen - </string> - <string name="grid_screen_text"> - Bildschirm - </string> - <string name="grid_local_text"> - Lokal - </string> - <string name="grid_world_text"> - Welt - </string> - <string name="grid_reference_text"> - Referenz - </string> - <string name="grid_attachment_text"> - Anhang - </string> -</floater> - -<!-- original file - -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="toolbox floater" title="" short_title="Bauen"> - <button label="" label_selected="" name="button focus" tool_tip="Fokus"/> - <button label="" label_selected="" name="button move" tool_tip="Verschieben"/> - <button label="" label_selected="" name="button edit" tool_tip="Bearbeiten"/> - <button label="" label_selected="" name="button create" tool_tip="Erstellen"/> - <button label="" label_selected="" name="button land" tool_tip="Land"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Orbit (Strg)" name="radio orbit"/> - <check_box label="Schwenken (Strg-Umschalt)" name="radio pan"/> - <check_box label="Verschieben" name="radio move"/> - <check_box label="Heben (Strg)" name="radio lift"/> - <check_box label="Rotieren (Strg-Umschalt)" name="radio spin"/> - <check_box label="Position" name="radio position"/> - <check_box label="Drehen (Strg)" name="radio rotate"/> - <check_box label="Dehnen (Strg-Umschalt)" name="radio stretch"/> - <check_box label="Textur auswählen" name="radio select face"/> - <check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/> - <text name="text ruler mode"> - Lineal: - </text> - <combo_box name="combobox grid mode"> - <combo_item name="World"> - Welt - </combo_item> - <combo_item name="Local"> - Lokal - </combo_item> - <combo_item name="Reference"> - Referenz - </combo_item> - </combo_box> - <check_box label="Beide Seiten dehnen" name="checkbox uniform"/> - <check_box label="Texturen dehnen" name="checkbox stretch textures"/> - <check_box label="Raster verwenden" name="checkbox snap to grid"/> - <button label="Optionen..." label_selected="Optionen..." name="Options..."/> - <text name="text status"> - Zum Verschieben ziehen, zum Kopieren Umschalttaste-Ziehen - </text> - <button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/> - <button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/> - <button label="" label_selected="" name="ToolPyramid" tool_tip="Pyramide"/> - <button label="" label_selected="" name="ToolTetrahedron" tool_tip="Tetraeder"/> - <button label="" label_selected="" name="ToolCylinder" tool_tip="Zylinder"/> - <button label="" label_selected="" name="ToolHemiCylinder" tool_tip="Halbzylinder"/> - <button label="" label_selected="" name="ToolCone" tool_tip="Kegel"/> - <button label="" label_selected="" name="ToolHemiCone" tool_tip="Halbkegel"/> - <button label="" label_selected="" name="ToolSphere" tool_tip="Kugel"/> - <button label="" label_selected="" name="ToolHemiSphere" tool_tip="Halbkugel"/> - <button label="" label_selected="" name="ToolTorus" tool_tip="Torus"/> - <button label="" label_selected="" name="ToolTube" tool_tip="Rohr"/> - <button label="" label_selected="" name="ToolRing" tool_tip="Ring"/> - <button label="" label_selected="" name="ToolTree" tool_tip="Baum"/> - <button label="" label_selected="" name="ToolGrass" tool_tip="Gras"/> - <check_box label="Auswahl behalten" name="checkbox sticky"/> - <check_box label="Auswahl kopieren" name="checkbox copy selection"/> - <check_box label="Zentrieren" name="checkbox copy centers"/> - <check_box label="Drehen" name="checkbox copy rotates"/> - <check_box label="Land auswählen" name="radio select land"/> - <check_box label="Einebnen" name="radio flatten"/> - <check_box label="Anheben" name="radio raise"/> - <check_box label="Absenken" name="radio lower"/> - <check_box label="Glätten" name="radio smooth"/> - <check_box label="Aufrauen" name="radio noise"/> - <check_box label="Zurücksetzen" name="radio revert"/> - <button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land ändern"/> - <text name="Bulldozer:"> - Planierraupe: - </text> - <text name="Dozer Size:"> - Größe - </text> - <text name="Strength:"> - Stärke - </text> - <text name="obj_count"> - Ausgewählte Objekte: [COUNT] - </text> - <text name="prim_count"> - Primitive: [COUNT] - </text> - <tab_container name="Object Info Tabs" tab_max_width="150" tab_min_width="30"> - <panel label="Allgemein" name="General"> - <text name="Name:"> - Name: - </text> - <text name="Description:"> - Beschreibung: - </text> - <text name="Creator:"> - Ersteller: - </text> - <text name="Creator Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button creator profile"/> - <text name="Owner:"> - Eigentümer: - </text> - <text name="Owner Name"> - Thrax Linden - </text> - <button label="Profil..." label_selected="Profil..." name="button owner profile"/> - <text name="Group:"> - Gruppe: - </text> - <text name="Group Name Proxy"> - Die Lindens - </text> - <button label="Festlegen..." label_selected="Festlegen..." name="button set group"/> - <text name="Permissions:"> - Berechtigungen: - </text> - <text name="perm_modify"> - Sie können dieses Objekt ändern. - </text> - <check_box label="Mit Gruppe teilen" left="6" name="checkbox share with group" tool_tip="Allen Mitgliedern der zugeordneten Gruppe die Erlaubnis erteilen, Ihre Berechtigungen für dieses Objekt zu teilen und zu verwenden. Sie müssen Übereignen, um Rollenbeschränkungen zu aktivieren."/> - <string name="text deed continued"> - Übertragung... - </string> - <string name="text deed"> - Übertragung - </string> - <button label="Übertragung..." label_selected="Übertragung..." name="button deed" tool_tip="In der Gruppe gemeinsam verwendete Objekte können von einem Gruppenfunktionär übertragen werden."/> - <check_box label="Verschieben durch beliebige Personen zulassen" left="6" name="checkbox allow everyone move"/> - <check_box label="Kopieren durch beliebige Personen zulassen" left="6" name="checkbox allow everyone copy"/> - <check_box label="In Suche anzeigen" left="6" name="search_check" tool_tip="Dieses Objekt in Suchergebnissen anzeigen"/> - <check_box label="Zu verkaufen" left="6" name="checkbox for sale"/> - <text name="Cost"> - Preis:L$ - </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Original - </radio_item> - <radio_item name="Copy"> - Kopieren - </radio_item> - <radio_item name="Contents"> - Inhalt - </radio_item> - </radio_group> - <text name="Next owner can:"> - Nächster Eigentümer kann: - </text> - <check_box label="Ändern" name="checkbox next owner can modify"/> - <check_box label="Kopieren" name="checkbox next owner can copy"/> - <check_box label="Wiederverkaufen" left_delta="75" name="checkbox next owner can transfer"/> - <text name="label click action"> - Bei Linksklicken: - </text> - <combo_box name="clickaction" width="178"> - <combo_item name="Touch/grab(default)"> - Berühren/Greifen (Standard) - </combo_item> - <combo_item name="Sitonobject"> - Auf Objekt sitzen - </combo_item> - <combo_item name="Buyobject"> - Objekt kaufen - </combo_item> - <combo_item name="Payobject"> - Objekt bezahlen - </combo_item> - <combo_item name="Open"> - Öffnen - </combo_item> - <combo_item name="Play"> - Parzellenmedien wiedergeben - </combo_item> - <combo_item name="Opemmedia"> - Parzellenmedien öffnen - </combo_item> - </combo_box> - <text name="B:"> - B: - </text> - <text name="O:"> - O; - </text> - <text name="G:"> - G: - </text> - <text name="E:"> - E: - </text> - <text name="N:"> - N: - </text> - <text name="F:"> - F: - </text> - <string name="text modify info 1"> - Sie können dieses Objekt ändern. - </string> - <string name="text modify info 2"> - Sie können diese Objekte ändern. - </string> - <string name="text modify info 3"> - Sie können dieses Objekt nicht ändern. - </string> - <string name="text modify info 4"> - Sie können diese Objekte nicht ändern. - </string> - <string name="text modify warning"> - Gesamtes Objekt muss gewählt werden, um Berechtigungen festzulegen. - </string> - <string name="Cost Default"> - Preis:L$ - </string> - <string name="Cost Total"> - Summe:L$ - </string> - <string name="Cost Per Unit"> - Stückpreis:L$ - </string> - <string name="Cost Mixed"> - Mischpreis - </string> - <string name="Sale Mixed"> - Mischverkauf - </string> - </panel> - <panel label="Objekt" name="Object"> - <text name="select_single"> - Wählen Sie nur ein Primitivum aus, um Parameter zu bearbeiten. - </text> - <text name="edit_object"> - Objektparameter bearbeiten: - </text> - <check_box label="Gesperrt" name="checkbox locked" tool_tip="Verhindert, dass Objekt verschoben oder gelöscht wird. Oft beim Bauen nützlich, um unbeabsichtigte Bearbeitungen zu vermeiden."/> - <check_box label="Physisch" name="Physical Checkbox Ctrl" tool_tip="Gestattet, das Objekt geschoben und von Schwerkraft beeinflusst wird"/> - <check_box label="Temporär" name="Temporary Checkbox Ctrl" tool_tip="Verursacht, dass Objekt 1 Minute nach Erstellung gelöscht wird."/> - <check_box label="Phantom" name="Phantom Checkbox Ctrl" tool_tip="Verursacht, dass Objekt nicht mit anderen Objekten oder Avataren kollidiert"/> - <text name="label position"> - Position (Meter) - </text> - <spinner label="X" name="Pos X"/> - <spinner label="Y" name="Pos Y"/> - <spinner label="Z" name="Pos Z"/> - <text name="label size"> - Größe (Meter) - </text> - <spinner label="X" name="Scale X"/> - <spinner label="Y" name="Scale Y"/> - <spinner label="Z" name="Scale Z"/> - <text name="label rotation"> - Rotation (Grad) - </text> - <spinner label="X" name="Rot X"/> - <spinner label="Y" name="Rot Y"/> - <spinner label="Z" name="Rot Z"/> - <text name="label material"> - Material - </text> - <combo_box name="material"> - <combo_item name="Stone"> - Stein - </combo_item> - <combo_item name="Metal"> - Metall - </combo_item> - <combo_item name="Glass"> - Glas - </combo_item> - <combo_item name="Wood"> - Holz - </combo_item> - <combo_item name="Flesh"> - Fleisch - </combo_item> - <combo_item name="Plastic"> - Kunststoff - </combo_item> - <combo_item name="Rubber"> - Gummi - </combo_item> - </combo_box> - <text left="115" name="label basetype"> - Bausteintyp - </text> - <combo_box left="115" name="comboBaseType"> - <combo_item name="Box"> - Quader - </combo_item> - <combo_item name="Cylinder"> - Zylinder - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Kugel - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Tube"> - Rohr - </combo_item> - <combo_item name="Ring"> - Ring - </combo_item> - <combo_item name="Sculpted"> - Geformt - </combo_item> - </combo_box> - <text left="115" name="text cut" width="146"> - Pfadschnitt Beginn und Ende - </text> - <spinner label="B" left="115" name="cut begin"/> - <spinner label="E" left="115" name="cut end"/> - <text left="115" name="text hollow"> - Hohl - </text> - <text left="115" name="text skew"> - Versatz - </text> - <spinner left="115" name="Scale 1"/> - <spinner left="115" name="Skew"/> - <text left="115" name="Hollow Shape"> - Hohlform - </text> - <combo_box left="115" name="hole"> - <combo_item name="Default"> - Standard - </combo_item> - <combo_item name="Circle"> - Kreis - </combo_item> - <combo_item name="Square"> - Quadrat - </combo_item> - <combo_item name="Triangle"> - Dreieck - </combo_item> - </combo_box> - <text left="115" name="text twist"> - Torsion - </text> - <spinner label="B" left="115" name="Twist Begin"/> - <spinner label="E" left="115" name="Twist End"/> - <text left="115" name="scale_taper"> - Verjüngung - </text> - <text left="115" name="scale_hole"> - Lochgröße - </text> - <spinner label="X" left="115" name="Taper Scale X"/> - <spinner label="Y" left="115" name="Taper Scale Y"/> - <text left="115" name="text topshear"> - Verscherung - </text> - <spinner label="X" left="115" name="Shear X"/> - <spinner label="Y" left="115" name="Shear Y"/> - <text left="115" name="advanced_cut" width="153"> - Profilschnitt-Beginn und Ende - </text> - <text left="115" name="advanced_dimple"> - Vertiefung-Beginn und Ende - </text> - <text name="advanced_slice"> - Anfang/Ende abschneiden - </text> - <spinner label="B" left="115" name="Path Limit Begin"/> - <spinner label="E" name="Path Limit End"/> - <text left="115" name="text taper2"> - Verjüngung - </text> - <spinner label="X" left="115" name="Taper X"/> - <spinner label="Y" name="Taper Y"/> - <text left="115" name="text radius delta"> - Radius - </text> - <text name="text revolutions" width="74"> - Umdrehungen - </text> - <spinner left="115" name="Radius Offset"/> - <texture_picker label="Textur für gestaltetes -Primitiv" name="sculpt texture control" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/> - <check_box bottom_delta="-34" label="Spiegeln" name="sculpt mirror control" tool_tip="Geformtes Primitiv entlang der X-Achse spiegeln."/> - <check_box label="Wenden" name="sculpt invert control" tool_tip="Dreht die Normalen des geformten Primitivs von innen nach außen."/> - <text name="label sculpt type"> - Naht - </text> - <combo_box name="sculpt type control"> - <combo_item name="None"> - (keiner) - </combo_item> - <combo_item name="Sphere"> - Kugel - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Plane"> - Fläche - </combo_item> - <combo_item name="Cylinder"> - Zylinder - </combo_item> - </combo_box> - </panel> - <panel label="Eigenschaften" name="Features"> - <text name="select_single"> - Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten. - </text> - <text name="edit_object"> - Objekteigenschaften bearbeiten: - </text> - <check_box label="Flexibler Weg" name="Flexible1D Checkbox Ctrl" tool_tip="Gestattet, dass Objekt um die Z-Achse gebogen wird. (nur Client-Seite)"/> - <spinner label="Weichheit" name="FlexNumSections"/> - <spinner label="Schwerkraft" name="FlexGravity"/> - <spinner label="Ziehen" name="FlexFriction"/> - <spinner label="Wind" name="FlexWind"/> - <spinner label="Spannung" name="FlexTension"/> - <spinner label="Erzwingen X" name="FlexForceX"/> - <spinner label="Erzwingen Y" name="FlexForceY"/> - <spinner label="Erzwingen Z" name="FlexForceZ"/> - <check_box label="Licht" name="Light Checkbox Ctrl" tool_tip="Verursacht, dass Objekt Licht emittiert"/> - <text name="label color"> - Farbe - </text> - <color_swatch label="" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/> - <spinner label="Intensität" name="Light Intensity"/> - <spinner label="Radius" name="Light Radius"/> - <spinner label="Abnehmend" name="Light Falloff"/> - </panel> - <panel label="Textur" name="Texture"> - <texture_picker label="Textur" name="texture control" tool_tip="Klicken, um ein Bild zu wählen"/> - <color_swatch label="Farbe" name="colorswatch" tool_tip="Klicken, um Farbauswahl zu öffnen"/> - <text name="color trans"> - Transparenz % - </text> - <text name="glow label"> - Leuchten - </text> - <check_box label="Ganz hell" name="checkbox fullbright"/> - <text name="tex gen"> - Zuordnung - </text> - <combo_box name="combobox texgen"> - <combo_item name="Default"> - Standard - </combo_item> - <combo_item name="Planar"> - Eben - </combo_item> - </combo_box> - <text name="label shininess"> - Glanz - </text> - <combo_box name="combobox shininess"> - <combo_item name="None"> - Kein - </combo_item> - <combo_item name="Low"> - Niedrig - </combo_item> - <combo_item name="Medium"> - Mittel - </combo_item> - <combo_item name="High"> - Hoch - </combo_item> - </combo_box> - <text name="label bumpiness"> - Holprigkeit - </text> - <combo_box name="combobox bumpiness"> - <combo_item name="None"> - Keine - </combo_item> - <combo_item name="Brightness"> - Helligkeit - </combo_item> - <combo_item name="Darkness"> - Dunkelheit - </combo_item> - <combo_item name="woodgrain"> - Holzmaserung - </combo_item> - <combo_item name="bark"> - Rinde - </combo_item> - <combo_item name="bricks"> - Ziegel - </combo_item> - <combo_item name="checker"> - Karo - </combo_item> - <combo_item name="concrete"> - Beton - </combo_item> - <combo_item name="crustytile"> - verkrustete Fliesen - </combo_item> - <combo_item name="cutstone"> - Steinplatten - </combo_item> - <combo_item name="discs"> - Scheiben - </combo_item> - <combo_item name="gravel"> - Kies - </combo_item> - <combo_item name="petridish"> - Petrischale - </combo_item> - <combo_item name="siding"> - Verkleidung - </combo_item> - <combo_item name="stonetile"> - Steinfliesen - </combo_item> - <combo_item name="stucco"> - Stuck - </combo_item> - <combo_item name="suction"> - Saugen - </combo_item> - <combo_item name="weave"> - gewoben - </combo_item> - </combo_box> - <text name="tex scale"> - Wiederholungen - </text> - <spinner label="Horizontal (U)" name="TexScaleU"/> - <check_box label="Umkehren" name="checkbox flip s"/> - <spinner label="Vertikal (V)" name="TexScaleV"/> - <check_box label="Umkehren" name="checkbox flip t"/> - <text name="tex rotate"> - Rotation (Grad) - </text> - <string name="string repeats per meter"> - Kacheln pro Meter - </string> - <string name="string repeats per face"> - Wiederholungen pro Fläche - </string> - <text name="rpt"> - Kacheln pro Meter - </text> - <button label="Übernehmen" label_selected="Übernehmen" name="button apply"/> - <text name="tex offset"> - Versatz - </text> - <spinner label="Horizontal (U)" name="TexOffsetU"/> - <spinner label="Vertikal (V)" name="TexOffsetV"/> - <text name="textbox autofix"> - Medientextur ausrichten -(zuerst laden) - </text> - <button label="Ausrichten" label_selected="Ausrichten" name="button align"/> - </panel> - <panel label="Inhalt" name="Contents"> - <button label="Neues Skript" label_selected="Neues Skript..." name="button new script"/> - <button label="Berechtigungen..." name="button permissions" width="118"/> - </panel> - </tab_container> - <panel name="land info panel"> - <text name="label_parcel_info"> - Parzelleninformation - </text> - <text name="label_area_price"> - Preis: L$ [PRICE] für [AREA] m2. - </text> - <text name="label_area"> - Fläche: [AREA] m2 - </text> - <button label="Info zu Land..." label_selected="Info zu Land..." name="button about land" width="110"/> - <check_box label="Eigentümer anzeigen" name="checkbox show owners" tool_tip="Parzellen nach Eigentümer farbig kennzeichnen"/> - <button label="?" label_selected="?" name="button show owners help" left_delta="130"/> - <text name="label_parcel_modify"> - Parzelle ändern - </text> - <button label="Unterteilen..." label_selected="Unterteilen..." name="button subdivide land" width="110"/> - <button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land" width="110"/> - <text name="label_parcel_trans"> - Land-Transaktionen - </text> - <button label="Land kaufen..." label_selected="Land kaufen..." name="button buy land" width="110"/> - <button label="Land aufgeben..." label_selected="Land aufgeben..." name="button abandon land" width="110"/> - </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> An den farbigen Bändern ziehen, um das Objekt zu drehen - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Klicken und ziehen, um die ausgewählte Seite zu dehnen - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Maus verschiebt, Umschalt-Taste und Maus kopiert - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Klicken und halten, um das Land zu bearbeiten - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Klicken und ziehen, um die Ansicht zu ändern - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Ziehen, um Objekte zu verschieben, Strg zum Heben, Strg-Umschalt zum Drehen - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Inworld klicken, um zu bauen. - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Klicken und ziehen, um Land auszuwählen - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Bildschirm - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Lokal - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Welt - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Referenz - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Anhang - </string> + </floater.string> </floater> - ---> diff --git a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml index 89e351e493..dad1b62975 100644 --- a/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/de/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=" "> <button label="Speichern" label_selected="Speichern" name="Save" /> <button label="Abbrechen" label_selected="Abbrechen" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> Objekt speichern als: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml index fecaf3eaff..d3366e5871 100644 --- a/indra/newview/skins/default/xui/de/floater_world_map.xml +++ b/indra/newview/skins/default/xui/de/floater_world_map.xml @@ -14,7 +14,7 @@ Auktion </text> <text font="SansSerifSmall" name="land_for_sale_label"> - Land erhaeltlich + Land zum Verkauf </text> <button label="Nach Hause" label_selected="Nach Hause" name="Go Home" tool_tip="Nach Hause teleportieren"/> <check_box label="Einwohner" name="people_chk"/> @@ -28,10 +28,10 @@ <check_box label="Mature" name="event_mature_chk"/> <check_box label="Adult" name="event_adult_chk"/> <combo_box label="Online-Freunde" name="friend combo" tool_tip="Freund, der auf Karte angezeigt werden soll"> - <combo_box.item name="none_selected" label="Online-Freunde" /> + <combo_box.item name="item1" label="Online-Freunde" /> </combo_box> <combo_box label="Landmarken" name="landmark combo" tool_tip="Landmarke, die auf Karte angezeigt werden soll"> - <combo_box.item name="none_selected" label="Landmarken" /> + <combo_box.item name="item1" label="Landmarken" /> </combo_box> <line_editor label="Nach Regionsname suchen" name="location" tool_tip="Geben Sie den Namen einer Region ein"/> <button label="Suchen" name="DoSearch" tool_tip="Nach einer Region suchen"/> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index a746d2c08f..b5741438ae 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -973,7 +973,7 @@ Sie sind nicht berechtigt, Land für die aktive Gruppe zu kaufen. [NAME] Freundschaft anbieten? <form name="form"> - <input name="message" type="text"> + <input name="message"> Wollen wir Freunde sein? </input> <button name="Offer" text="OK"/> @@ -1375,7 +1375,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="KickUser"> Beim Hinauswerfen dieses Benutzers welche Meldung anzeigen? <form name="form"> - <input name="message" type="text"> + <input name="message"> Sie wurden von einem Administrator abgemeldet. </input> <button name="OK" text="OK"/> @@ -1385,7 +1385,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="KickAllUsers"> Beim Hinauswerfen aller Personen vom Grid welche Meldung anzeigen? <form name="form"> - <input name="message" type="text"> + <input name="message"> Sie wurden von einem Administrator abgemeldet. </input> <button name="OK" text="OK"/> @@ -1395,7 +1395,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="FreezeUser"> Beim Einfrieren dieses Benutzers welche Meldung anzeigen? <form name="form"> - <input name="message" type="text"> + <input name="message"> Sie wurden eingefroren. Bewegen oder Chatten ist nicht mehr möglich. Ein Administrator wird sich über IM an Sie wenden </input> <button name="OK" text="OK"/> @@ -1405,7 +1405,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="UnFreezeUser"> Beim Auftauen dieses Benutzers welche Meldung anzeigen? <form name="form"> - <input name="message" type="text"> + <input name="message"> Sie sind nicht mehr eingefroren. </input> <button name="OK" text="OK"/> @@ -1415,7 +1415,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="OfferTeleport"> Teleport an Ihre Position mit der folgenden Meldung anbieten? <form name="form"> - <input name="message" type="text"> + <input name="message"> Triff mich in [REGION] </input> <button name="OK" text="OK"/> @@ -1425,7 +1425,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification name="OfferTeleportFromGod"> Benutzer an Ihrem Standort herbeirufen? <form name="form"> - <input name="message" type="text"> + <input name="message"> Triff mich in [REGION] </input> <button name="OK" text="OK"/> @@ -1439,7 +1439,7 @@ Die Option zum Austritt aus einer Gruppe finden Sie unter „Bearbeiten“ > <notification label="Nachricht an alle auf diesem Grundstück" name="MessageEstate"> Geben Sie eine kurze Nachricht ein, die an jede Person auf Ihrem Grundstück gesendet wird. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Abbrechen"/> </form> @@ -1625,7 +1625,7 @@ Anzeige für [AMOUNT] L$ veröffentlichen? <notification label="Nachricht an alle in dieser Region" name="MessageRegion"> Geben Sie eine kurze Nachricht ein, die an jede Person in dieser Region gesendet wird. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Abbrechen"/> </form> @@ -1904,14 +1904,14 @@ Die Inhalte werden in Ihr Inventar kopiert. Möchten Sie diesen Kauf fortsetzen? <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Transaktion: [ACTION] Möchten Sie diesen Kauf fortsetzen? Geben Sie Ihr Kennwort erneut ein und klicken Sie auf OK. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="Abbrechen"/> </form> @@ -2268,7 +2268,7 @@ Entspricht dem Azimut. <notification name="NewSkyPreset"> Wählen Sie einen Namen für den neuen Himmel. <form name="form"> - <input name="message" type="text"> + <input name="message"> Neue Voreinstellung </input> <button name="OK" text="OK"/> @@ -2281,7 +2281,7 @@ Entspricht dem Azimut. <notification name="NewWaterPreset"> Wählen Sie einen Namen für die neue Wasservoreinstellung. <form name="form"> - <input name="message" type="text"> + <input name="message"> Neue Voreinstellung </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml index 2ce40e5787..e214b19ffd 100644 --- a/indra/newview/skins/default/xui/de/panel_group_general.xml +++ b/indra/newview/skins/default/xui/de/panel_group_general.xml @@ -37,9 +37,9 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen. (Eigentümer werden fettgedruckt angezeigt) </text> <name_list name="visible_members"> - <column label="Mitgliedsname" name="name" relwidth="0.40"/> - <column label="Titel" name="title" relwidth="0.25"/> - <column label="Letzte Anmeldung" name="online" relwidth="0.35"/> + <name_list.columns label="Mitgliedsname" name="name" relwidth="0.40"/> + <name_list.columns label="Titel" name="title" relwidth="0.25"/> + <name_list.columns label="Letzte Anmeldung" name="online" relwidth="0.35"/> </name_list> <text name="text_group_preferences"> Gruppeneinstellungen @@ -50,15 +50,9 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen. <check_box label="Beitrittsgebühr: L$" name="check_enrollment_fee" tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen."/> <spinner name="spin_enrollment_fee" tool_tip="Wenn „Beitrittsgebühr“ aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen."/> <combo_box name="group_mature_check" tool_tip="Festlegen, ob die Informationen Ihrer Gruppe „Mature“ sind."> - <combo_item name="select_mature"> - - Mature wählen - - </combo_item> - <combo_item name="mature"> - Mature-Inhalt - </combo_item> - <combo_item name="pg"> - PG-Inhalt - </combo_item> + <combo_box.item name="select_mature" label="- Mature wählen -"/> + <combo_box.item name="mature" label="Mature-Inhalt"/> + <combo_box.item name="pg" label="PG-Inhalt"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> @@ -120,9 +114,9 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen. (Eigentümer werden fettgedruckt angezeigt) </text> <name_list name="visible_members"> - <column label="Mitgliedsname" name="name" relwidth="0.40"/> - <column label="Titel" name="title" relwidth="0.25"/> - <column label="Letzte Anmeldung" name="online" relwidth="0.35"/> + <name_list.columns label="Mitgliedsname" name="name" relwidth="0.40"/> + <name_list.columns label="Titel" name="title" relwidth="0.25"/> + <name_list.columns label="Letzte Anmeldung" name="online" relwidth="0.35"/> </name_list> <text name="text_group_preferences"> Gruppeneinstellungen @@ -133,13 +127,13 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen. <check_box label="Beitrittsgebühr: L$" name="check_enrollment_fee" tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen." width="125"/> <spinner name="spin_enrollment_fee" tool_tip="Wenn „Beitrittsgebühr“ aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen."/> <combo_box name="group_mature_check" tool_tip="Festlegen, ob die Informationen Ihrer Gruppe „Mature“ sind."> - <combo_item name="select_mature"> + <combo_box.item name="select_mature"> - Mature wählen - </combo_item> - <combo_item name="mature"> + <combo_box.item name="mature"> Mature-Inhalt </combo_item> - <combo_item name="pg"> + <combo_box.item name="pg"> PG-Inhalt </combo_item> </combo_box> diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml index 8d4afd356e..ff6f957a73 100644 --- a/indra/newview/skins/default/xui/de/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml @@ -16,7 +16,7 @@ gesendet. Mitteilungen können unter Gruppenmitteilungsarchiv </text> <text name="lbl2"> - Mitteilungen werden 14 Tage lang aufbewahrt. Klicken Sie auf eine Mitteilung, um sie anzuzeigen. Klicken Sie „Aktualisieren“, um neue Mitteilungen zu suchen. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich. + Mitteilungen werden 14 Tage lang aufbewahrt. Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich. </text> <scroll_list name="notice_list"> <column label="" name="icon" /> @@ -36,7 +36,7 @@ gesendet. Mitteilungen können unter Mitteilung schreiben </text> <text name="lbl2"> - Geben Sie einen Betreff für die Mitteilung ein. Sie können der Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar in dieses Feld ziehen. Angehängte Objekte müssen kopier-und transferierbar sein. Ordner können nicht gesendet werden. + Sie können der Mitteilung ein Objekt anfügen, indem Sie es aus dem Inventar in dieses Feld ziehen. Angehängte Objekte müssen kopier-und transferierbar sein. Ordner können nicht gesendet werden. </text> <text name="lbl3"> Betreff: @@ -49,7 +49,7 @@ gesendet. Mitteilungen können unter </text> <button label="Anhang entfernen" label_selected="Anhang entfernen" name="remove_attachment" /> - <button label="Mitteilung senden" label_selected="Mitteilung senden" name="send_notice" /> + <button label="Senden" label_selected="Senden" name="send_notice" /> <panel name="drop_target" tool_tip="Drag an inventory item onto the message box to send it with the notice. You must have permission to copy and transfer the object to send it with the notice." /> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index 3f459050b1..93f2d6c257 100644 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -15,7 +15,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Mein Heimatort" /> <combo_box.item name="MyLastLocation" label="Mein letzter Standort" /> - <combo_box.item name="Typeregionname" label="lt;Region eingeben>" /> + <combo_box.item name="Typeregionname" label="<Region eingeben>" /> </combo_box> <check_box label="Kennwort merken" name="remember_check"/> <text name="full_screen_text"> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml new file mode 100644 index 0000000000..f84aa06b32 --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="Breite/Höhe">
+ Aspektverhältnis:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="Breite/Höhe">
+ <combo_box.item label="4:3 (Standard-CRT)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (Widescreen)" name="item3"/>
+ <combo_box.item label="16:9 (Widescreen)" name="item4"/>
+ </combo_box>
+</panel>
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 9de8922954..c99ba9a118 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -1,53 +1,58 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="Text-Chat" name="chat"> - <text length="1" name="text_box" type="string"> + <text name="text_box"> Chat-Schriftgröße: </text> <radio_group name="chat_font_size"> - <radio_item length="1" name="radio" type="string" label="Klein" /> - <radio_item length="1" name="radio2" type="string" label="Mittel" /> - <radio_item length="1" name="radio3" type="string" label="Groß" /> + <radio_item name="radio" label="Klein" /> + <radio_item name="radio2" label="Mittel" /> + <radio_item name="radio3" label="Groß" /> </radio_group> - <text length="1" name="text_box2" type="string"> - Chat-Farbe: - </text> <color_swatch label="Sie" name="user"/> + <text name="text_box1"> + Sie + </text> <color_swatch label="Andere" name="agent"/> + <text name="text_box2"> + Andere + </text> <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM + </text> <color_swatch label="System" name="system"/> - <color_swatch label="Chat" name="users"/> + <text name="text_box4"> + System + </text> + <color_swatch label="Skriptfehler" name="script_error"/> + <text name="text_box5"> + Skriptfehler + </text> <color_swatch label="Objekte" name="objects"/> - <color_swatch label="Eigentümer" name="owner" width="58"/> - <color_swatch label="Blase" left_delta="62" name="background"/> + <text name="text_box6"> + Objekte + </text> + <color_swatch label="Eigentümer" name="owner"/> + <text name="text_box7"> + Eigentümer + </text> + <color_swatch label="Blase" name="background"/> + <text name="text_box8"> + Blase + </text> <color_swatch label="URLs" name="links"/> - <text length="1" name="text_box3" type="string"> - Chat-Konsole: + <text name="text_box9"> + URLs </text> <spinner label="Chat ausblenden nach" label_width="115" left="148" name="fade_chat_time" width="160"/> - <text left="310" length="1" name="text_box4" type="string"> - (Sekunden) - </text> <spinne left="370" name="max_chat_count"/> - <text left="435" length="1" name="text_box5" type="string"> - (# Zeilen) - </text> <slider label="Deckkraft" name="console_opacity"/> - <text length="1" name="text_box6" type="string"> - Chat-Optionen: - </text> <check_box label="Chat verwendet volle Bildbreite (Neustart erforderlich)" name="chat_full_width_check"/> <check_box label="Chatleiste nach Drücken der Eingabetaste schließen" name="close_chat_on_return_check"/> <check_box label="Pfeiltasten bewegen immer den Avatar beim Chatten" name="arrow_keys_move_avatar_check"/> <check_box label="Zeitstempel im lokalen Chat anzeigen" name="show_timestamps_check"/> <check_box label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/> - <text length="1" name="text_box7" type="string"> - Blasen-Chat: - </text> <check_box label="Chat-Blasen anzeigen" name="bubble_text_chat"/> <slider label="Deckkraft" name="bubble_chat_opacity"/> - <text length="1" name="text_box8" type="string"> - Skriptfehler: - </text> <check_box label="Skriptfehler und Warnungen als normalen Chat anzeigen" name="script_errors_as_chat"/> - <color_swatch label="Fehler" name="script_error"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml index 40b4909e84..bfd4148895 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Allgemein" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden."> - Mein Heimatort - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden."> - Mein letzter Standort - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Als Standardeinstellung in Zuhauseposition anmelden." label="Mein Heimatort"/> + <combo_box.item name="MyLastLocation" tool_tip="Als Standardeinstellung in letztem Standort anmelden." label="Mein letzter Standort"/> + </combo_box> <check_box label="Startposition auf Anmeldebildschirm anzeigen" name="show_location_checkbox"/> <combo_box name="fade_out_combobox"> - <combo_item name="Never"> - Nie - </combo_item> - <combo_item name="Show Temporarily"> - Temporär anzeigen - </combo_item> - <combo_item name="Always"> - Immer - </combo_item> + <combo_box.item name="Never" label="Nie"/> + <combo_box.item name="Show Temporarily" label="Temporär anzeigen"/> + <combo_box.item name="Always" label="Immer"/> </combo_box> <check_box label="Kleine Avatarnamen" name="small_avatar_names_checkbox"/> <check_box label="Meinen Namen auf meinem Bildschirm ausblenden" name="show_my_name_checkbox"/> @@ -34,25 +24,18 @@ <check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale"/> <spinner label="Timeout für Abwesenheit:" name="afk_timeout_spinner"/> <check_box label="L$ Eingänge und Ausgaben melden" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label" bottom="-312"> + <text name="maturity_desired_label"> Einstufung: </text> - <text name="maturity_desired_prompt" bottom="-312"> - Ich möchte auf Inhalt mit folgender -Alterseinstufung zugreifen: + <text name="maturity_desired_prompt"> + Ich möchte auf Inhalt mit folgender Alterseinstufung zugreifen: </text> - <combo_box name="maturity_desired_combobox" bottom="-330" left="336"> - <combo_item name="Desired_Adult"> - PG, Mature und Adult - </combo_item> - <combo_item name="Desired_Mature"> - PG und Mature - </combo_item> - <combo_item name="Desired_PG"> - Nur PG - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="PG, Mature und Adult"/> + <combo_box.item name="Desired_Mature" label="PG und Mature"/> + <combo_box.item name="Desired_PG" label="Nur PG"/> </combo_box> - <text name="maturity_desired_textbox" bottom="-324" left="336"> + <text name="maturity_desired_textbox"> Nur PG </text> <text name="start_location_textbox"> @@ -73,75 +56,35 @@ Alterseinstufung zugreifen: <text name="language_textbox"> Sprache: </text> - <text left_delta="313" name="language_textbox2"> + <text name="language_textbox2"> (Erfordert Neustart) </text> <string name="region_name_prompt"> <Region eingeben> </string> - <combo_box name="crash_behavior_combobox" width="166"> - <combo_item name="Askbeforesending"> - Vor dem Senden fragen - </combo_item> - <combo_item name="Alwayssend"> - Immer senden - </combo_item> - <combo_item name="Neversend"> - Nie senden - </combo_item> + <combo_box name="crash_behavior_combobox"> + <combo_box.item name="Askbeforesending" label="Vor dem Senden fragen"/> + <combo_box.item name="Alwayssend" label="Immer senden"/> + <combo_box.item name="Neversend" label="Nie senden"/> </combo_box> - <combo_box name="language_combobox" width="166"> - <combo_item name="System Default Language"> - Betriebssystem-Einstellung - </combo_item> - <combo_item name="English"> - English (Englisch) - </combo_item> - <combo_item name="Danish"> - Danks (Dänisch) - Beta - </combo_item> - <combo_item name="Deutsch(German)"> - Deutsch - Beta - </combo_item> - <combo_item name="Spanish"> - Español (Spanisch) - Beta - </combo_item> - <combo_item name="French"> - Français (Französisch) - Beta - </combo_item> - <combo_item name="Italian"> - Italiano (Italienisch) - Beta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Ungarisch) - Beta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Niederländisch) - Beta - </combo_item> - <combo_item name="Polish"> - Polski (Polnisch) - Beta - </combo_item> - <combo_item name="Portugese"> - Português (Portugiesisch) - Beta - </combo_item> - <combo_item name="Russian"> - Русский (Russian) - Beta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Türkisch) - Beta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ukrainisch) - Beta - </combo_item> - <combo_item name="Chinese"> - 中文 (简体) (Chinesisch) - Beta - </combo_item> - <combo_item name="(Japanese)"> - 日本語 (Japanisch) - Beta - </combo_item> - <combo_item name="(Korean)"> - 한국어 (Koreanisch) - Beta - </combo_item> + <combo_box name="language_combobox"> + <combo_box.item name="System Default Language" label="Betriebssystem-Einstellung"/> + <combo_box.item name="English" label="English (Englisch)"/> + <combo_box.item name="Danish" label="Danks (Dänisch) - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch - Beta"/> + <combo_box.item name="Spanish" label="Español (Spanisch) - Beta"/> + <combo_box.item name="French" label="Français (Französisch) - Beta"/> + <combo_box.item name="Italian" label="Italiano (Italienisch) - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Ungarisch) - Beta"/> + <combo_box.item name="Dutch" label="Nederlands (Niederländisch) - Beta"/> + <combo_box.item name="Polish" label="Polski (Polnisch) - Beta"/> + <combo_box.item name="Portugese" label="Português (Portugiesisch) - Beta"/> + <combo_box.item name="Russian" label="Русский (Russian) - Beta"/> + <combo_box.item name="Turkish" label="Türkçe (Türkisch) - Beta"/> + <combo_box.item name="Ukrainian" label="Українська (Ukrainisch) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Chinesisch) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japanisch) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Koreanisch) - Beta"/> </combo_box> <check_box label="Objekten Sprache mitteilen" name="language_is_public" tool_tip="In-Welt-Objekten wird Ihre bevorzugte Spracheinstellung mitgeteilt."/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml index dd77d57f87..fe07406908 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="Grafik" name="Display panel"> - <text type="string" length="1" name="text"> + <text name="text"> Anzeigeauflösung: </text> <button label=" ?" name="GraphicsPreferencesHelpButton" /> @@ -8,10 +8,10 @@ <text_editor name="voice_chat_description"> Wenn deaktiviert Anzeige bei Anmeldung in Vollbild. </text_editor> - <text type="string" length="1" name="Fullscreen Aspect Ratio:"> + <text name="Fullscreen Aspect Ratio:"> Vollbild-Aspektverhältnis: </text> - <text type="string" length="1" name="(width / height)"> + <text name="(width / height)"> (Breite/Höhe) </text> <text_editor name="FullScreenInfo" width="480"> @@ -35,19 +35,19 @@ Aspektverhältnis: </text> <combo_box left="115" name="aspect_ratio" tool_tip="Breite/Höhe"> - <combo_box.item type="string" length="1" name="4:3(StandardCRT)" label="4:3 (Standard-CRT)" /> - <combo_box.item type="string" length="1" name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard-CRT)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> <combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)" /> - <combo_box.item type="string" length="1" name="16:9(Widescreen)" label="16:9 (Widescreen)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)" /> </combo_box> <check_box label="Verhältnis automatisch erkennen" left="275" name="aspect_auto_detect" /> - <text type="string" length="1" name="UI Size:"> + <text name="UI Size:"> UI-Größe: </text> - <text type="string" length="1" name="(meters, lower is faster)"> + <text name="(meters, lower is faster)"> (Meter, niedriger ist schneller) </text> - <text type="string" length="1" name="text2"> + <text name="text2"> Anzeigeoptionen: </text> <check_box label="Auflösungsunabhängigen Maßstab verwenden" name="ui_auto_scale" /> @@ -81,6 +81,7 @@ Qualität </text> <check_box label="Benutzerdefiniert" name="CustomSettings" /> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> Shader: </text> @@ -157,13 +158,14 @@ <radio_item name="0" label="Niedrig" /> <radio_item name="2" label="Hoch" /> </radio_group> + </panel> <button label="Empfohlene Einstellungen" name="Defaults" /> <button label="Hardware-Optionen" label_selected="Hardware-Optionen" name="GraphicsHardwareButton" /> - <text name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </text> - <text name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </text> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml index ddc5941da6..790555296d 100644 --- a/indra/newview/skins/default/xui/de/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Grundstück" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Grundstück" name="Estate"> <text name="estate_help_text"> Änderungen auf dieser Registerkarte wirken sich auf alle Regionen auf dem Grundstück aus. @@ -74,4 +76,6 @@ auf alle Regionen auf dem Grundstück aus. <button label="Entfernen..." name="remove_banned_avatar_btn" /> <button label="Nachricht an Grundstück senden..." name="message_estate_btn" /> <button label="Benutzer von Grundstück werfen..." name="kick_user_from_estate_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml index 9980393ab0..13df2bfb3b 100644 --- a/indra/newview/skins/default/xui/de/panel_region_general.xml +++ b/indra/newview/skins/default/xui/de/panel_region_general.xml @@ -40,15 +40,9 @@ Einstufung: </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Übernehmen" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/de/panel_region_texture.xml b/indra/newview/skins/default/xui/de/panel_region_texture.xml index df936ff643..456feb0371 100644 --- a/indra/newview/skins/default/xui/de/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/de/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Bodentexturen" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Bodentexturen" name="Textures"> <text name="region_text_lbl"> Region: </text> @@ -54,4 +56,6 @@ und der OBERE WERT die MINIMALE Höhe von Textur 4. </text> <button label="Übernehmen" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param.xml index d51fda0b5e..50590b8d73 100644 --- a/indra/newview/skins/default/xui/de/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/de/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> - <text type="string" length="1" name="Loading..."> + <text name="Loading..."> Wird geladen... </text> - <text type="string" length="1" name="Loading...2"> + <text name="Loading...2"> Wird geladen... </text> <button label="" label_selected="" name="less" /> diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml index bfc77876d6..01091e38fb 100644 --- a/indra/newview/skins/default/xui/de/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/de/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text length="1" name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen." type="string"> + <text name="ParcelNameText" tool_tip="Der Name der Parzelle, auf der Sie sich befinden. Klicken Sie für Land-Informationen."> Parzellenname hier </text> - <text length="1" name="BalanceText" tool_tip="Kontostand" type="string"> + <text name="BalanceText" tool_tip="Kontostand"> Wird geladen... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Geld kaufen"/> - <text length="12" name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)" type="string"> + <text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)"> 12:00 </text> <text name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </text> <button label="" label_selected="" name="scriptout" tool_tip="Skriptwarnungen und -fehler"/> <button label="" label_selected="" name="health" tool_tip="Gesundheit"/> - <text length="1" name="HealthText" tool_tip="Gesundheit" type="string"> + <text name="HealthText" tool_tip="Gesundheit"> 100% </text> <button label="" label_selected="" name="fly" tool_tip="Fliegen aus"/> diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml new file mode 100644 index 0000000000..eaea377c0d --- /dev/null +++ b/indra/newview/skins/default/xui/de/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ O
+ </panel.string>
+ <panel.string name="world_map_west">
+ W
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NO
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SW
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NW
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SO" name="floater_map_southeast" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 3436cfac1e..380046f72d 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -487,4 +487,34 @@ <string name="choose_the_directory"> Verzeichnis auswählen </string> + <string name="accel-mac-control"> + Strg- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Umschalt- + </string> + <string name="accel-win-control"> + Strg+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Umschalt+ + </string> + <string name="GraphicsQualityLow"> + Niedrig + </string> + <string name="GraphicsQualityMid"> + Mittel + </string> + <string name="GraphicsQualityHigh"> + Hoch + </string> </strings> diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml index bf8988ca45..6d64d13db7 100644 --- a/indra/newview/skins/default/xui/en/floater_aaa.xml +++ b/indra/newview/skins/default/xui/en/floater_aaa.xml @@ -3,6 +3,7 @@ height="440" layout="topleft" name="floater_aaa" + help_topic="floater_aaa" save_rect="true" can_resize="true" title="About [APP_NAME]" diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 73d789ce89..97afe6d324 100644 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -66,56 +66,107 @@ name="PacketsLost"> Packets Lost: [LOST]/[IN] ([PCT]%) </floater.string> - <text_editor - type="string" - length="1" - follows="left|top|right|bottom" - height="168" - layout="topleft" - left="6" - max_length="65536" - name="credits_editor" - top="266" - width="458" - word_wrap="true"> - Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. + <tab_container + follows="all" + top="25" + left="10" + height="405" + width="450" + name="about_tab" + tab_position="top"> + <panel + border="true" + label="Support" + name="support_panel"> + <text_editor + follows="top|left" + font="SansSerif" + height="350" + bg_readonly_color="Transparent" + left="5" + max_length="65536" + name="support_editor" + top="5" + width="435" + word_wrap="true" /> + <button + follows="left|top" + label="Copy to Clipboard" + name="copy_btn" + left="10" + top_pad="5" + height="25" + width="160" /> + </panel> + <panel + border="true" + label="Credits" + name="credits_panel"> + <text_editor + enabled="false" + follows="left|top" + height="375" + bg_readonly_color="Transparent" + left="5" + text_color="LtGray" + max_length="65536" + name="credits_editor" + top="5" + width="435" + word_wrap="true"> +Second Life is brought to you by Philip, Tessa, Andrew, Cory, James, Ben, Char, Charlie, Colin, Dan, Daniel, Doug, Eric, Hamlet, Haney, Eve, Hunter, Ian, Jeff, Jennifer, Jim, John, Lee, Mark, Peter, Phoenix, Richard, Robin, Xenon, Steve, Tanya, Eddie, Avi, Frank, Bruce, Aaron, Alice, Bob, Debra, Eileen, Helen, Janet, Louie, Leviathania, Stefan, Ray, Kevin, Tom, Mikeb, MikeT, Burgess, Elena, Tracy, Bill, Todd, Ryan, Zach, Sarah, Nova, Tim, Stephanie, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Magellan, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Ventrella, Jack, Vektor, Iris, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Altruima, Jesse, Teeny, Monroe, Icculus, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Satoko, Yuko, Makiko, Thomas, Harry, Seth, Alexei, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, beez, Milo, Hermia, Red, Thrax, Joe, Sally, Magenta, Mogura, Paul, Jose, Rejean, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Jean, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, dustin, George, Del, Matthew, Cat, Jacqui, Lightfoot, Adrian, Viola, Alfred, Noel, Irfan, Sunil, Yool, Rika, Jane, Xtreme, Frontier, a2, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Gulliver, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Anthony, Jeremy, JP, Jake, Maurice, Madhavi, Leopard, Kyle, Joon, Kari, Bert, Belinda, Jon, Kristi, Bridie, Pramod, KJ, Socrates, Maria, Ivan, Aric, Yamasaki, Adreanne, Jay, MitchK, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Rohn, Colossus, Zen, BigPapi, Brad, Pastrami, Kurz, Mani, Neuro, Jaime, MJ, Rowan, Sgt, Elvis, Gecko, Samuel, Sardonyx, Leo, Bryan, Niko, Soft, Poppy, Rachel, Aki, Angelo, Banzai, Alexa, Sue, CeeLo, Bender, CG, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Heidy, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Winnie, Stella, Milton, Rothman, Niall, Marin, Allison, Katie, Dawn, Katt, Dusty, Kalpana, Judy, Andrea, Ambroff, Infinity, Gail, Rico, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Vidtuts, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Austin, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Yang, T, Simone, Maestro, Scott, Charlene, Quixote, Amanda, Susan, Zed, Anne, Enkidu, Esbee, Joroan, Katelin, Roxie, Tay, Scarlet, Kevin, Johnny, Wolfgang, Andren, Bob, Howard, Merov, Rand, Ray, Michon, Newell, Galen, Dessie, Les and many others. - Thank you to the following residents for helping to ensure that this is the best version yet: (in progress) +Thank you to the following residents for helping to ensure that this is the best version yet: (in progress) - 3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion - APR Copyright (C) 2000-2004 The Apache Software Foundation - cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) - DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. - expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. - FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). - GL Copyright (C) 1999-2004 Brian Paul. - Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. - jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) - jpeglib Copyright (C) 1991-1998, Thomas G. Lane. - ogg/vorbis Copyright (C) 2001, Xiphophorus - OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. - SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga - SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - xmlrpc-epi Copyright (C) 2000 Epinions, Inc. - zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. - google-perftools Copyright (c) 2005, Google Inc. - All rights reserved. See licenses.txt for details. - Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) - Oh, Parabuild, why hast thou forsaken me? - </text_editor> - <text_editor - follows="left|top|right|bottom" - font="SansSerif" - height="238" - layout="topleft" - left_delta="0" - max_length="65536" - name="support_editor" - top_delta="-244" - width="458" - word_wrap="true" /> + + + +It is a rare mind indeed that can render the hitherto non-existent blindingly obvious. The cry 'I could have thought of that' is a very popular and misleading one, for the fact is that they didn't, and a very significant and revealing fact it is too. +-- Douglas Adams + </text_editor> + </panel> + <panel + border="true" + label="Licenses" + name="licenses_panel"> + <text_editor + enabled="false" + follows="left|top" + height="375" + bg_readonly_color="Transparent" + left="5" + text_color="LtGray" + max_length="65536" + name="credits_editor" + top="5" + width="435" + word_wrap="true"> +3Dconnexion SDK Copyright (C) 1992-2007 3Dconnexion +APR Copyright (C) 2000-2004 The Apache Software Foundation +cURL Copyright (C) 1996-2002, Daniel Stenberg, (daniel@haxx.se) +DBus/dbus-glib Copyright (C) 2002, 2003 CodeFactory AB / Copyright (C) 2003, 2004 Red Hat, Inc. +expat Copyright (C) 1998, 1999, 2000 Thai Open Source Software Center Ltd. +FreeType Copyright (C) 1996-2002, The FreeType Project (www.freetype.org). +GL Copyright (C) 1999-2004 Brian Paul. +Havok.com(TM) Copyright (C) 1999-2001, Telekinesys Research Limited. +jpeg2000 Copyright (C) 2001, David Taubman, The University of New South Wales (UNSW) +jpeglib Copyright (C) 1991-1998, Thomas G. Lane. +ogg/vorbis Copyright (C) 2001, Xiphophorus +OpenSSL Copyright (C) 1998-2002 The OpenSSL Project. +SDL Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga +SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +xmlrpc-epi Copyright (C) 2000 Epinions, Inc. +zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. +google-perftools Copyright (c) 2005, Google Inc. + +All rights reserved. See licenses.txt for details. + +Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) + </text_editor> + </panel> + </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 63abb63bdf..f11391c5e0 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -4,6 +4,7 @@ height="420" layout="topleft" name="floaterland" + help_topic="floaterland" save_rect="true" title="About Land" width="460"> diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml index 0af4e1db54..f81250e7b9 100644 --- a/indra/newview/skins/default/xui/en/floater_activeim.xml +++ b/indra/newview/skins/default/xui/en/floater_activeim.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floater_activeim" + help_topic="floater_activeim" title="ACTIVE IM" top="26" left="0" diff --git a/indra/newview/skins/default/xui/en/floater_animation_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_preview.xml index 846dda802d..3a2337bfff 100644 --- a/indra/newview/skins/default/xui/en/floater_animation_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_animation_preview.xml @@ -4,6 +4,7 @@ height="556" layout="topleft" name="Animation Preview" + help_topic="animation_preview" width="280"> <floater.string name="failed_to_initialize"> @@ -150,16 +151,16 @@ Maximum animation length is [MAX_LENGTH] seconds. length="1" bottom="42" follows="top|left" - height="15" + height="23" layout="topleft" left="10" name="name_label"> Name: </text> <line_editor - bottom_delta="2" + bottom_delta="0" follows="top|left|right" - height="19" + height="23" layout="topleft" left="85" name="name_form" @@ -167,18 +168,18 @@ Maximum animation length is [MAX_LENGTH] seconds. <text type="string" length="1" - bottom_delta="22" + top_pad="5" follows="top|left" - height="15" + height="23" layout="topleft" left="10" name="description_label"> Description: </text> <line_editor - bottom_delta="2" + bottom_delta="0" follows="top|left|right" - height="19" + height="23" layout="topleft" left="85" name="description_form" @@ -186,70 +187,73 @@ Maximum animation length is [MAX_LENGTH] seconds. <spinner decimal_digits="0" follows="left|top" - height="18" + height="23" increment="1" initial_value="0" label="Priority" - label_width="50" + label_width="90" layout="topleft" left="10" max_val="4" name="priority" tool_tip="Controls which other animations can be overridden by this animation." - width="90" /> + width="160" /> <check_box - bottom_delta="23" - height="18" + top_pad="0" + height="14" label="Loop" layout="topleft" left="10" + width="100" name="loop_check" tool_tip="Makes this animation loop." /> <spinner follows="left|top" - height="18" + height="23" increment="1" initial_value="0" label="In(%)" - label_width="30" + label_width="35" layout="topleft" - left_delta="70" + top_pad="5" + left="30" max_val="100" name="loop_in_point" tool_tip="Sets point in animation that looping returns to." - top_delta="2" - width="90" /> + width="110" /> <spinner bottom_delta="0" follows="left|top" - height="18" + height="23" increment="1" initial_value="0" label="Out(%)" layout="topleft" - left="185" + left_pad="10" max_val="100" name="loop_out_point" - tool_tip="Sets point in animation that ends a loop." /> + tool_tip="Sets point in animation that ends a loop." + label_width="45" + width="120" /> <text type="string" length="1" - bottom_delta="20" + top_pad="0" follows="top|left" - height="15" + height="23" + width="110" layout="topleft" left="10" name="hand_label"> Hand Pose </text> <combo_box - height="18" + height="23" layout="topleft" - left_delta="76" + left_pad="0" name="hand_pose_combo" tool_tip="Controls what hands do during animation." - top_delta="-1" - width="104"> + width="150"> <combo_box.item label="Spread" name="Spread" @@ -306,22 +310,22 @@ Maximum animation length is [MAX_LENGTH] seconds. <text type="string" length="1" - bottom_delta="22" + top_pad="5" follows="top|left" - height="15" + height="23" + width="110" layout="topleft" left="10" name="emote_label"> Expression </text> <combo_box - height="18" + height="23" + width="150" layout="topleft" - left_delta="76" + left_pad="0" name="emote_combo" - tool_tip="Controls what face does during animation." - top_delta="-1" - width="104"> + tool_tip="Controls what face does during animation."> <combo_box.item label="(None)" name="[None]" /> @@ -386,23 +390,22 @@ Maximum animation length is [MAX_LENGTH] seconds. <text type="string" length="1" + top_pad="5" follows="top|left" - height="15" + height="23" + width="110" layout="topleft" left="10" - name="preview_label" - top="167" - width="70"> + name="preview_label"> Preview while </text> <combo_box - height="18" + height="23" + width="150" layout="topleft" - left_pad="6" + left_pad="0" name="preview_base_anim" - tool_tip="Use this to test your animation behavior while your avatar performs common actions." - top_delta="-1" - width="104"> + tool_tip="Use this to test your animation behavior while your avatar performs common actions."> <combo_box.item label="Standing" name="Standing" /> @@ -418,32 +421,31 @@ Maximum animation length is [MAX_LENGTH] seconds. </combo_box> <spinner follows="left|top" - height="18" + height="23" increment="0.01" initial_value="0" label="Ease In (sec)" - label_width="75" + label_width="110" layout="topleft" left="10" max_val="10" name="ease_in_time" tool_tip="Amount of time (in seconds) over which animations blends in." - top="191" - width="125" /> + top_pad="10" + width="200" /> <spinner follows="left|top" - height="18" + height="23" increment="0.01" initial_value="0" label="Ease Out (sec)" - label_width="80" + label_width="110" layout="topleft" - left_pad="10" + top_pad="0" max_val="10" name="ease_out_time" tool_tip="Amount of time (in seconds) over which animations blends out." - top_delta="0" - width="130" /> + width="200" /> <button follows="top|right" height="28" @@ -454,7 +456,7 @@ Maximum animation length is [MAX_LENGTH] seconds. name="play_btn" picture_style="true" tool_tip="Play/pause your animation." - top="223" + top_pad="0" width="28" /> <button follows="top|right" @@ -469,23 +471,23 @@ Maximum animation length is [MAX_LENGTH] seconds. top_delta="0" width="28" /> <slider - bottom_delta="0" + left_pad="0" follows="top|right" - height="20" + height="23" + width="200" increment="0.0001" initial_value="0" layout="topleft" - left="80" name="playback_slider" - right="275" show_text="false" /> <text type="string" length="1" - bottom="306" + top_pad="5" + text_color="EmphasisColor" follows="top|left" layout="topleft" - left="10" + left="70" name="bad_animation_text"> Unable to read animation file. @@ -494,7 +496,7 @@ We recommend BVH files exported from Poser 4. <button bottom="546" follows="bottom|right" - height="20" + height="23" label="Cancel" layout="topleft" name="cancel_btn" @@ -502,7 +504,7 @@ We recommend BVH files exported from Poser 4. width="123" /> <button follows="bottom|left" - height="20" + height="23" label="Upload (L$[AMOUNT])" layout="topleft" left_delta="-129" diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml index 32d3f4fd7e..29f8b49794 100644 --- a/indra/newview/skins/default/xui/en/floater_auction.xml +++ b/indra/newview/skins/default/xui/en/floater_auction.xml @@ -6,6 +6,7 @@ min_height="368" min_width="420" name="floater_auction" + help_topic="floater_auction" title="Start Linden Land Sale" width="420"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml index b0472eb7e2..3ab5c18300 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml @@ -6,6 +6,7 @@ min_height="200" min_width="265" name="avatarpicker" + help_topic="avatarpicker" title="Choose Resident" width="265"> <floater.string @@ -25,24 +26,23 @@ Searching... </floater.string> <tab_container - follows="left|right|top|bottom" + follows="all" height="300" layout="topleft" - left="4" + left="0" name="ResidentChooserTabs" tab_position="top" - tab_width="65" top="20" - width="255"> + width="265"> <panel - border="true" + border="none" height="150" label="Search" layout="topleft" left="6" name="SearchPanel" top="150" - width="134"> + width="132"> <text type="string" length="1" @@ -53,36 +53,37 @@ name="InstructSearchResidentName" top="8" width="220"> - Type part of the resident's name: + Type part of a person's name: </text> - <line_editor - border_style="line" - border_thickness="1" + <text_editor + bevel_style="none" + border_style="line" + border.border_thickness="0" + commit_on_focus_lost="false" follows="left|top|right" - height="16" + height="23" layout="topleft" left_delta="0" name="Edit" - top_pad="4" - width="50" /> + top_pad="0" + width="65" /> <button follows="top|right" - height="20" - label="Find" - label_selected="Find" + height="23" + label="Go" + label_selected="Go" layout="topleft" left_pad="5" name="Find" - top_delta="-1" - width="62" /> + width="45" /> <scroll_list - follows="left|top|right|bottom" - height="90" + follows="all" + height="98" layout="topleft" - left="10" + left="0" name="SearchResults" top="52" - width="115" /> + width="132" /> </panel> <panel border="true" @@ -117,14 +118,14 @@ width="115" /> </panel> <panel - border="true" - height="240" + border="none" + height="150" label="Near Me" layout="topleft" left="6" name="NearMePanel" - top="60" - width="135"> + top="150" + width="132"> <text type="string" length="1" @@ -135,23 +136,13 @@ name="InstructSelectResident" top="8" width="220"> - Select nearby resident: + Select a person nearby: </text> - <button - follows="top|right" - height="20" - label="Refresh List" - label_selected="Refresh List" - layout="topleft" - left_delta="25" - name="Refresh" - top_delta="-1" - width="90" /> <slider control_name="NearMeRange" decimal_digits="0" follows="left|top" - height="15" + height="18" increment="1" initial_value="20" label="Range" @@ -160,49 +151,55 @@ max_val="130" min_val="5" name="near_me_range" - top="32" - width="175" /> + top_pad="0" + width="160" /> <text type="string" length="1" follows="left|top" - height="15" + height="18" layout="topleft" - left_delta="175" + left_pad="0" name="meters" - top_delta="0" - width="40"> + width="60"> Meters </text> + <button + follows="top|left" + layout="topleft" + left_pad="0" + height="28" + width="28" + name="Refresh" + picture_style="true" + image_overlay="Refresh_Off" /> <scroll_list - follows="left|top|right|bottom" - height="175" + follows="all" + height="100" + border="false" layout="topleft" - left="10" + left="0" name="NearMe" sort_column="0" - top="57" - width="115" /> + top="50" + width="132" /> </panel> </tab_container> <button - follows="left|bottom" - height="20" - label="Select" - label_selected="Select" - layout="topleft" - left="10" + follows="right|bottom" + height="23" + label="Ok" + label_selected="Ok" name="Select" - top="324" - width="95" /> + top_pad="3" + left="46" + width="100" /> <button follows="right|bottom" - height="20" + height="23" label="Cancel" label_selected="Cancel" - layout="topleft" - right="-10" name="Cancel" - top_delta="0" - width="95" /> + width="100" + left_pad="5" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml index 9e2c8a44d1..f6b965f139 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml @@ -3,6 +3,7 @@ height="950" layout="topleft" name="avatar_texture_debug" + help_topic="avatar_texture_debug" title="Avatar Textures" width="960"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml index ea41289769..09b1735e04 100644 --- a/indra/newview/skins/default/xui/en/floater_beacons.xml +++ b/indra/newview/skins/default/xui/en/floater_beacons.xml @@ -3,106 +3,134 @@ height="225" layout="topleft" name="beacons" + help_topic="beacons" save_rect="true" save_visibility="true" single_instance="true" title="Beacons" - width="250"> + width="240"> <panel follows="left|top|right|bottom" height="200" layout="topleft" left="10" name="beacons_panel" - top="15" + top="20" width="230"> + <text + follows="all" + height="16" + font="SansSerif" + name="label_show" + text_color="White" + type="string"> + Show: + </text> <check_box - bottom_delta="33" - control_name="scripttouchbeacon" - label="Scripted Objects with Touch Only" + control_name="renderbeacons" + height="16" + width="100" + label="Beacons" layout="topleft" - name="touch_only" > + name="beacons" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> - <check_box - bottom_delta="20" - control_name="scriptsbeacon" - label="Scripted Objects" + <check_box + control_name="renderhighlights" + height="16" + left_pad="10" + label="Highlights" layout="topleft" - name="scripted"> + name="highlights" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> - <check_box - bottom_delta="20" + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="20" + tool_tip="Beacon Width" + name="beacon_width_label" + top_pad="3" + width="128"> + Width: + </text> + <slider + control_name="DebugBeaconLineWidth" + decimal_digits="0" + height="16" + increment="1" + initial_value="1" + layout="topleft" + max_val="16" + min_val="1" + name="beacon_width" + top_pad="0" + width="180" /> + <text + follows="all" + height="16" + font="SansSerif" + left="0" + top_pad="5" + name="label_objects" + text_color="White" + type="string"> + For these objects: + </text> + <check_box control_name="physicalbeacon" - label="Physical Objects" + height="16" + left="0" + label="Physical" layout="topleft" name="physical" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> <check_box - bottom_delta="20" - control_name="soundsbeacon" - label="Sound Sources" + control_name="scriptsbeacon" + height="16" + left="0" + label="Scripted" layout="topleft" - name="sounds" > + name="scripted"> <check_box.commit_callback function="Beacons.UICheck" /> </check_box> - <check_box - bottom_delta="20" - control_name="particlesbeacon" - label="Particle Sources" + <check_box + control_name="scripttouchbeacon" + height="16" + top_pad="4" + left="20" + label="Touch only" layout="topleft" - name="particles" > + name="touch_only" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> <check_box - bottom_delta="20" - control_name="renderhighlights" - label="Render Highlights" + control_name="soundsbeacon" + height="16" + label="Sound sources" layout="topleft" - name="highlights" > + name="sounds" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> <check_box - bottom_delta="20" - control_name="renderbeacons" - label="Render Beacons" + control_name="particlesbeacon" + height="16" + label="Particle sources" layout="topleft" - name="beacons" > + name="particles" > <check_box.commit_callback function="Beacons.UICheck" /> </check_box> - <text - type="string" - length="1" - follows="left|top" - height="12" - layout="topleft" - left="5" - name="beacon_width_label" - top="171" - width="128"> - Beacon Width: - </text> - <slider - control_name="DebugBeaconLineWidth" - decimal_digits="0" - height="16" - increment="1" - initial_value="1" - layout="topleft" - left="30" - max_val="16" - min_val="1" - name="beacon_width" - top="187" - width="185" /> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml index af5c006779..42a063928c 100644 --- a/indra/newview/skins/default/xui/en/floater_build_options.xml +++ b/indra/newview/skins/default/xui/en/floater_build_options.xml @@ -1,71 +1,81 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater follows="right" - height="151" + height="170" layout="topleft" name="build options floater" + help_topic="build_options_floater" save_rect="true" title="Grid Options" - width="272"> + width="264"> <spinner control_name="GridResolution" follows="left|top" - height="16" + height="23" initial_value="1" - label="Grid Unit (meters)" - label_width="110" + label="Grid Units (meters)" + label_width="130" layout="topleft" - left="14" + left="10" max_val="5" min_val="0.01" name="GridResolution" - top="37" - width="170" /> + top="25" + width="200" /> <spinner control_name="GridDrawSize" decimal_digits="1" follows="left|top" - height="16" + height="23" increment="0.5" initial_value="5" label="Grid Extents (meters)" - label_width="110" + label_width="130" layout="topleft" left_delta="0" max_val="50" min_val="1" name="GridDrawSize" - top_pad="5" - width="170" /> + top_pad="0" + width="200" /> <check_box control_name="GridSubUnit" height="16" - label="Enable Sub-Unit Snapping" + label="Snap to sub-units" layout="topleft" - left_delta="0" name="GridSubUnit" - top_pad="5" + top_pad="0" width="200" /> <check_box control_name="GridCrossSections" height="16" - label="Show Cross Sections" + label="View cross-sections" layout="topleft" - left_delta="0" name="GridCrossSection" top_pad="5" width="200" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + left="10" + tool_tip="Grid Opacity" + name="grid_opacity_label" + top_pad="5" + width="128"> + Opacity: + </text> <slider control_name="GridOpacity" follows="left" - height="16" + height="18" increment="0.05" initial_value="0.7" - label="Grid Opacity" layout="topleft" - left_delta="0" name="GridOpacity" show_text="false" - top_pad="5" - width="200" /> + top_pad="0" + width="210" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml index 0414ab5fa6..897e5da4e8 100644 --- a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml +++ b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_tear_off="false" - height="360" + height="310" layout="topleft" name="floaterbulkperms" - title="Bulk change content permissions" - width="280"> + help_topic="floaterbulkperms" + title="Edit Content Permissions" + width="270"> <floater.string name="nothing_to_modify_text"> Selection contains no editable contents. @@ -22,311 +23,285 @@ name="done_text"> Finished permission change requests. </floater.string> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - height="10" - layout="topleft" - left="10" - name="applyto" - top="30" - width="206"> - Content Types - </text> - <icon - height="16" - image_name="inv_item_animation.tga" - layout="topleft" - left_delta="2" - mouse_opaque="true" - name="icon_animation" - top_pad="14" - width="16" /> + <check_box control_name="BulkChangeIncludeAnimations" height="16" - label="Animation" - layout="topleft" - left_pad="2" name="check_animation" - top_delta="0" - width="126" /> + top="24" + left="10" + width="16" /> <icon height="16" - image_name="inv_folder_bodypart.tga" - layout="topleft" - left="12" + image_name="Inv_Animation" mouse_opaque="true" - name="icon_bodypart" - top="74" - width="16" /> + name="icon_animation" + tool_tip="Animation" + left_pad="5" /> <check_box control_name="BulkChangeIncludeBodyParts" height="16" - label="Body Parts" - layout="topleft" - left_pad="2" name="check_bodypart" - top_delta="0" - width="126" /> + left="10" + width="16" + top_pad="2" /> <icon height="16" - image_name="inv_item_shirt.tga" - layout="topleft" - left="12" + image_name="Inv_Eye" + tool_tip="Body Parts" mouse_opaque="true" - name="icon_clothing" - top="94" - width="16" /> + name="icon_bodypart" + left_pad="2" /> <check_box control_name="BulkChangeIncludeClothing" height="16" - label="Clothing" - layout="topleft" - left_pad="2" name="check_clothing" - top_delta="0" - width="126" /> + left="10" + width="16" + top_pad="5" /> <icon height="16" - image_name="inv_item_gesture.tga" - layout="topleft" - left="12" + image_name="Inv_Shirt" mouse_opaque="true" - name="icon_gesture" - top="114" - width="16" /> - <check_box + name="icon_clothing" + tool_tip="Clothing" + left_pad="2" /> + <check_box control_name="BulkChangeIncludeGestures" height="16" - label="Gestures" - layout="topleft" - left_pad="2" name="check_gesture" - top_delta="0" - width="126" /> + left="65" + width="16" + top="25" /> <icon height="16" - image_name="inv_item_notecard.tga" + image_name="Inv_Gesture" layout="topleft" - left="12" mouse_opaque="true" - name="icon_notecard" - top="134" - width="16" /> + name="icon_gesture" + tool_tip="Gestures" + left_pad="2" /> <check_box control_name="BulkChangeIncludeNotecards" height="16" - label="Notecards" layout="topleft" - left_pad="2" name="check_notecard" - top_delta="0" - width="126" /> + left="65" + width="16" + top_pad="5" /> <icon height="16" - image_name="inv_item_object.tga" + image_name="Inv_Notecard" layout="topleft" - left="12" mouse_opaque="true" - name="icon_object" - top="154" - width="16" /> - <check_box + name="icon_notecard" + tool_tip="Notecards" + left_pad="4" /> + <check_box control_name="BulkChangeIncludeObjects" height="16" - label="Objects" - layout="topleft" - left_pad="2" name="check_object" - top_delta="0" - width="126" /> - <icon + left="65" + top_pad="5" + width="16" /> + <icon height="16" - image_name="inv_item_script.tga" - layout="topleft" - left="12" + image_name="Inv_Object" mouse_opaque="true" - name="icon_script" - top="174" - width="16" /> + name="icon_object" + tool_tip="Objects" + left_pad="2" /> <check_box control_name="BulkChangeIncludeScripts" height="16" - label="Scripts" - layout="topleft" - left_pad="2" name="check_script" - top_delta="0" - width="126" /> + top="25" + left="120" + width="16" + /> <icon height="16" - image_name="inv_item_sound.tga" + image_name="Inv_Script" layout="topleft" - left="12" mouse_opaque="true" - name="icon_sound" - top="194" - width="16" /> + name="icon_script" + tool_tip="Scripts" + left_pad="4" /> <check_box control_name="BulkChangeIncludeSounds" height="16" - label="Sounds" - layout="topleft" - left_pad="2" name="check_sound" - top_delta="0" - width="126" /> + top_pad="5" + left="120" + width="16" /> <icon height="16" - image_name="inv_item_texture.tga" - layout="topleft" - left="12" + image_name="Inv_Sound" mouse_opaque="true" - name="icon_texture" - top="214" - width="16" /> + name="icon_sound" + tool_tip="Sounds" + left_pad="4" /> <check_box control_name="BulkChangeIncludeTextures" height="16" - label="Textures" - layout="topleft" - left_pad="2" name="check_texture" - top_delta="0" - width="126" /> + top_pad="5" + left="120" + width="16" /> + <icon + height="16" + image_name="Inv_Texture" + mouse_opaque="true" + name="icon_texture" + tool_top="Textures" + left_pad="2" /> + <button - follows="left|top" - height="20" - label="Check All" - label_selected="All" - layout="topleft" - left="8" - name="check_all" - top="257" - width="100"> + height="23" + layout="topleft" + name="check_all" + label="√ All" + left="180" + top="26" + width="70"> <button.commit_callback function="BulkPermission.CheckAll" /> </button> <button follows="left|top" - height="20" - label="Uncheck All" + height="23" + label="Clear" label_selected="None" layout="topleft" - left_delta="0" + top_pad="8" name="check_none" - top_pad="4" - width="100" > + width="70" > <button.commit_callback function="BulkPermission.UncheckAll"/> </button> + <text type="string" length="1" follows="left|top" - font="SansSerif" - height="10" + font="SansSerifLarge" + height="16" layout="topleft" - left="140" + left="10" name="newperms" - top="30" - width="206"> - New Permissions + top="90" + width="250"> + New Content Permissions + </text> + <text + type="string" + length="1" + follows="left|top" + layout="topleft" + height="16" + left="10" + name="Group:" + width="88"> + Group: </text> <check_box control_name="BulkChangeShareWithGroup" height="16" - label="Share with group" + label="Share" layout="topleft" - left="140" + top_pad="0" name="share_with_group" - top="54" - width="106" /> + width="88" /> + <text + type="string" + length="1" + follows="left|top" + height="16" + layout="topleft" + name="NextOwnerLabel" + left="100" + top="110" + width="88"> + Anyone: + </text> <check_box control_name="BulkChangeEveryoneCopy" height="16" - label="Allow anyone to copy" + label="Copy" layout="topleft" - left_delta="0" + top_pad="0" name="everyone_copy" - top_pad="16" - width="130" /> + width="88" /> <text type="string" length="1" follows="left|top" - height="10" + height="16" layout="topleft" - left_delta="0" name="NextOwnerLabel" - top_pad="16" + top="110" + left="185" width="88"> - Next owner can: + Next owner: </text> <check_box control_name="BulkChangeNextOwnerModify" height="16" label="Modify" layout="topleft" - left_delta="0" name="next_owner_modify" - top_pad="14" - width="78" /> + top_pad="0" + width="83" /> <check_box control_name="BulkChangeNextOwnerCopy" height="16" label="Copy" layout="topleft" - left_delta="78" + top_pad="0" name="next_owner_copy" - top_delta="0" width="88"> <check_box.commit_callback function="BulkPermission.CommitCopy"/> </check_box> <check_box control_name="BulkChangeNextOwnerTransfer" - enabled_control="BulkChangeNextOwnerCopy" + enabled_control="BulkChangeNextOwnerCopy" height="16" + top_pad="0" initial_value="true" - label="Resell/Give away" + label="Transfer" layout="topleft" - left="145" name="next_owner_transfer" - top_delta="20" + tool_tip="Next owner can give away or resell this object" width="106" /> <scroll_list enabled="false" - follows="left|top|right|bottom" - height="130" + follows="all" + height="95" layout="topleft" - left="120" + left="10" name="queue output" - top="185" - width="150" /> + top="175" + width="250" /> <button follows="left|top" - height="20" - label="Apply" + height="23" + label="Ok" layout="topleft" left="65" name="apply" top_pad="10" - width="100"> + width="90"> <button.commit_callback function="BulkPermission.Apply"/> </button> <button follows="left|top" - height="20" - label="Close" + height="23" + label="Cancel" layout="topleft" left_pad="5" name="close" - top_delta="0" width="100" > <button.commit_callback function="BulkPermission.Close"/> diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml index 4fb2fe24cc..d1f6706875 100644 --- a/indra/newview/skins/default/xui/en/floater_bumps.xml +++ b/indra/newview/skins/default/xui/en/floater_bumps.xml @@ -3,6 +3,7 @@ height="180" layout="topleft" name="floater_bumps" + help_topic="floater_bumps" save_rect="true" title="Bumps, Pushes & Hits" width="400"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml index 0930043659..718f83c9a2 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_resize="true" - height="300" + height="290" layout="topleft" min_height="150" min_width="200" name="floater_buy_contents" + help_topic="floater_buy_contents" save_rect="true" title="Buy Contents" width="280"> @@ -21,27 +22,29 @@ name="no_transfer_text"> (no transfer) </floater.string> - <text + <text type="string" length="1" follows="left|top|right" font="SansSerif" height="16" + top="22" + left="10" layout="topleft" - left="15" name="contains_text" - top="24" - width="281"> + width="276"> [NAME] contains: </text> <scroll_list - follows="left|top|right|bottom" - height="148" + background_visible="true" + draw_border="false" + follows="all" + height="163" layout="topleft" - left_delta="0" + left="10" name="item_list" top_pad="4" - width="250"> + width="260"> <scroll_list.columns name="icon" width="16" /> @@ -52,43 +55,42 @@ <text type="string" length="1" - follows="left|right|bottom" + follows="left|top" font="SansSerif" - height="24" + height="16" layout="topleft" - left_delta="0" + left="10" name="buy_text" - top_pad="4" - width="281"> + text_color="white" + top="220" + width="260"> Buy for L$[AMOUNT] from [NAME]? </text> <check_box - follows="left|bottom" - height="20" + follows="left|top" + height="16" label="Wear clothing now" layout="topleft" - left_delta="0" + left="10" name="wear_check" - top="224" - width="135" /> + width="250" /> <button follows="right|bottom" - height="20" + height="23" label="Buy" label_selected="Buy" layout="topleft" - left_delta="0" + left="65" name="buy_btn" - top_pad="10" - width="125" /> + top_pad="5" + width="100" /> <button follows="right|bottom" - height="20" + height="23" label="Cancel" label_selected="Cancel" layout="topleft" left_pad="5" name="cancel_btn" - top_delta="0" - width="125" /> + width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index e2bdc756a9..52c7944ba9 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -4,6 +4,7 @@ height="270" layout="topleft" name="buy currency" + help_topic="buy_currency" single_instance="true" title="Buy Currency" width="350"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml index 5e0e423128..bd0dac5ca1 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_land.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml @@ -4,6 +4,7 @@ height="484" layout="topleft" name="buy land" + help_topic="buy_land" single_instance="true" title="Buy Land" width="740"> diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml index 505411b964..7930622e54 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_object.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_object.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_resize="true" - height="250" + height="290" layout="topleft" - min_height="175" - min_width="154" + min_height="150" + min_width="200" name="contents" + help_topic="contents" save_rect="true" single_instance="true" title="Buy Copy of Object" @@ -31,13 +32,15 @@ (no transfer) </floater.string> <scroll_list + background_visible="true" + draw_border="false" follows="left|top|right" - height="36" + height="35" layout="topleft" - left="15" name="object_list" - top="24" - width="250"> + top="20" + left="10" + width="260"> <scroll_list.columns name="icon" width="16" /> @@ -48,24 +51,26 @@ <text type="string" length="1" - follows="left|top|right" + follows="all" font="SansSerif" height="16" layout="topleft" - left_delta="0" + left="10" name="contents_text" - top_pad="4" - width="250"> - and its contents: + top_pad="5" + width="260"> + Contains: </text> <scroll_list - follows="left|top|right|bottom" - height="108" + background_visible="true" + draw_border="false" + follows="all" + height="145" layout="topleft" left_delta="0" name="item_list" top_pad="4" - width="250"> + width="260"> <scroll_list.columns name="icon" width="16" /> @@ -78,32 +83,33 @@ length="1" follows="left|right|bottom" font="SansSerif" - height="24" + height="16" layout="topleft" left_delta="0" name="buy_text" - top_pad="4" - width="281"> + text_color="white" + top_pad="5" + width="276"> Buy for L$[AMOUNT] from [NAME]? </text> <button follows="right|bottom" - height="20" + height="23" label="Buy" label_selected="Buy" layout="topleft" - left="10" + left="65" name="buy_btn" - top_pad="5" - width="125" /> + top_pad="10" + width="100" /> <button follows="right|bottom" - height="20" + height="23" label="Cancel" label_selected="Cancel" layout="topleft" left_pad="5" name="cancel_btn" top_delta="0" - width="125" /> + width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 1501f39b67..1592ed4aa4 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -7,6 +7,7 @@ height="95" layout="topleft" name="camera_floater" + help_topic="camera_floater" save_rect="true" save_visibility="true" width="105"> @@ -80,20 +81,20 @@ </panel> <panel border="true" - height="30" + height="25" layout="topleft" left="0" top_pad="1" name="buttons" width="105"> <button - height="25" + height="23" label="" layout="topleft" - left="0" + left="2" is_toggle="true" - image_selected="btn_orbit_selected.png" - image_unselected="btn_orbit_unselected.png" + image_overlay="Cam_Orbit_Off" + image_selected="PushButton_Selected_Press" name="orbit_btn" tab_stop="false" tool_tip="Orbit Camera" @@ -101,42 +102,43 @@ width="25"> </button> <button - height="25" + height="23" label="" layout="topleft" - left_pad="1" + left_pad="0" is_toggle="true" - image_selected="btn_pan_selected.png" - image_unselected="btn_pan_unselected.png" + image_overlay="Cam_Pan_Off" + image_selected="PushButton_Selected_Press" name="pan_btn" tab_stop="false" tool_tip="Pan Camera" width="25"> </button> <button - height="25" + height="23" label="" layout="topleft" - left_pad="1" - is_toggle="true" - image_selected="btn_freecamera_selected.png" - image_unselected="btn_freecamera_unselected.png" - name="freecamera_btn" + left_pad="0" + image_overlay="Cam_Avatar_Off" + image_selected="PushButton_Selected_Press" + name="avatarview_btn" tab_stop="false" - tool_tip="View Object" + tool_tip="See as Avatar" width="25"> </button> <button - height="25" + height="23" label="" layout="topleft" - left_pad="2" - image_selected="btn_firstperson_selected.png" - image_unselected="btn_firstperson_unselected.png" - name="avatarview_btn" + left_pad="0" + is_toggle="true" + image_overlay="Cam_FreeCam_Off" + image_selected="PushButton_Selected_Press" + name="freecamera_btn" tab_stop="false" - tool_tip="See as Avatar" + tool_tip="View Object" width="25"> </button> + </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml index 428afcff52..371e239fdb 100644 --- a/indra/newview/skins/default/xui/en/floater_choose_group.xml +++ b/indra/newview/skins/default/xui/en/floater_choose_group.xml @@ -3,6 +3,7 @@ height="258" layout="topleft" name="groups" + help_topic="groups" title="Groups" width="280"> <text diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml index cda2020fca..f2146339a7 100644 --- a/indra/newview/skins/default/xui/en/floater_color_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_color_picker.xml @@ -5,6 +5,7 @@ height="380" layout="topleft" name="ColorPicker" + help_topic="colorpicker" title="Color Picker" width="440"> <text diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml index 5475a1cf6a..7d1a1113b0 100644 --- a/indra/newview/skins/default/xui/en/floater_critical.xml +++ b/indra/newview/skins/default/xui/en/floater_critical.xml @@ -5,6 +5,7 @@ height="500" layout="topleft" name="modal container" + help_topic="modal_container" width="600"> <button height="20" diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml index 4463d44049..3b6d5452e3 100644 --- a/indra/newview/skins/default/xui/en/floater_customize.xml +++ b/indra/newview/skins/default/xui/en/floater_customize.xml @@ -6,6 +6,7 @@ layout="topleft" left_delta="-3" name="floater customize" + help_topic="floater_customize" save_rect="true" title="Appearance" top_delta="-185" diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml index 9ca7172f81..b044cd41e6 100644 --- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml @@ -3,6 +3,7 @@ height="275" layout="topleft" name="Day Cycle Floater" + help_topic="day_cycle_floater" save_rect="true" title="Day Cycle Editor" width="646"> diff --git a/indra/newview/skins/default/xui/en/floater_device_settings.xml b/indra/newview/skins/default/xui/en/floater_device_settings.xml index fa0cce3795..8901608374 100644 --- a/indra/newview/skins/default/xui/en/floater_device_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_device_settings.xml @@ -3,6 +3,7 @@ height="260" layout="topleft" name="floater_device_settings" + help_topic="floater_device_settings" title="Voice Chat Device Settings" width="405"> <panel diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml index 5aa7809208..5e87e065a4 100644 --- a/indra/newview/skins/default/xui/en/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_env_settings.xml @@ -3,6 +3,7 @@ height="150" layout="topleft" name="Environment Editor Floater" + help_topic="environment_editor_floater" save_rect="true" title="Environment Editor" width="600"> diff --git a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml index c16373ba3c..4975111111 100644 --- a/indra/newview/skins/default/xui/en/floater_first_time_tip.xml +++ b/indra/newview/skins/default/xui/en/floater_first_time_tip.xml @@ -5,6 +5,7 @@ height="250" layout="topleft" name="set_name_in_the_cladd" + help_topic="set_name_in_the_cladd" save_rect="true" width="300"> <check_box diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml index 744d434982..6f9038df62 100644 --- a/indra/newview/skins/default/xui/en/floater_font_test.xml +++ b/indra/newview/skins/default/xui/en/floater_font_test.xml @@ -6,6 +6,7 @@ min_height="175" min_width="154" name="contents" + help_topic="contents" title="Font Test" width="500"> <text diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml index f042385fb4..052398bcd3 100644 --- a/indra/newview/skins/default/xui/en/floater_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_gesture.xml @@ -6,6 +6,7 @@ min_height="200" min_width="280" name="gestures" + help_topic="gestures" title="Active Gestures" width="280"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml index e3bea2e2d6..615c35e6c3 100644 --- a/indra/newview/skins/default/xui/en/floater_god_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_god_tools.xml @@ -3,6 +3,7 @@ height="384" layout="topleft" name="godtools floater" + help_topic="godtools_floater" title="God Tools" width="400"> <tab_container diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml index b7733c6388..70f296b606 100644 --- a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml @@ -3,6 +3,7 @@ height="224" layout="topleft" name="Hardware Settings Floater" + help_topic="hardware_settings_floater" title="Hardware Settings" width="500"> <text diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml new file mode 100644 index 0000000000..a1265d49f9 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + can_resize="true" + height="440" + layout="topleft" + min_height="140" + min_width="467" + name="floater_help_browser" + help_topic="floater_help_browser" + save_rect="true" + single_instance="true" + title="Holy Bananas, it's the Help Browser" + width="820"> + <floater.string + name="home_page_url"> + http://www.secondlife.com + </floater.string> + <floater.string + name="support_page_url"> + http://support.secondlife.com + </floater.string> + <layout_stack + bottom="440" + follows="left|right|top|bottom" + layout="topleft" + left="10" + name="stack1" + top="20" + width="800"> + <layout_panel + auto_resize="false" + height="20" + layout="topleft" + left="0" + name="nav_controls" + top="400" + user_resize="false" + width="800"> + <button + follows="left|top" + height="20" + label="Back" + layout="topleft" + left="0" + name="back" + top="0" + width="55" /> + <button + follows="left|top" + height="20" + label="Forward" + layout="topleft" + left_pad="3" + name="forward" + top_delta="0" + width="68" /> + <button + enabled="false" + follows="left|top" + height="20" + label="Reload" + layout="topleft" + left_pad="2" + name="reload" + top_delta="0" + width="70"/> + <combo_box + allow_text_entry="true" + follows="left|top|right" + height="20" + layout="topleft" + left_pad="5" + max_chars="255" + name="address" + top_delta="0" + width="540" /> + <button + enabled="false" + follows="right|top" + height="20" + label="Go" + layout="topleft" + left_pad="5" + name="go" + top_delta="0" + width="55" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="20" + layout="topleft" + left_delta="0" + name="time_controls" + top_delta="0" + user_resize="false" + width="800"> + <button + follows="left|top" + height="20" + label="rewind" + layout="topleft" + left="0" + name="rewind" + top="0" + width="55" /> + <button + follows="left|top" + height="20" + image_selected="button_anim_play_selected.tga" + image_unselected="button_anim_play.tga" + layout="topleft" + left_delta="55" + name="play" + picture_style="true" + top_delta="0" + width="55" /> + <button + follows="left|top" + height="20" + image_selected="button_anim_pause_selected.tga" + image_unselected="button_anim_pause.tga" + layout="topleft" + left_delta="0" + name="pause" + picture_style="true" + top_delta="0" + width="55" /> + <button + follows="left|top" + height="20" + label="stop" + layout="topleft" + left_pad="10" + name="stop" + top_delta="0" + width="55" /> + <button + follows="left|top" + height="20" + label="forward" + layout="topleft" + left_pad="20" + name="seek" + top_delta="0" + width="55" /> + </layout_panel> + <layout_panel + auto_resize="false" + height="20" + layout="topleft" + left_delta="0" + name="parcel_owner_controls" + top_delta="0" + user_resize="false" + width="540"> + <button + enabled="false" + follows="left|top" + height="20" + label="Send Current URL to Parcel" + layout="topleft" + left="0" + name="assign" + top="0" + width="200" /> + </layout_panel> + <layout_panel + height="20" + layout="topleft" + left_delta="0" + name="external_controls" + top_delta="0" + user_resize="false" + width="540"> + <web_browser + bottom="-10" + follows="left|right|top|bottom" + layout="topleft" + left="0" + name="browser" + top="0" + width="540" /> + <button + follows="bottom|left" + height="20" + label="Open in My Web Browser" + layout="topleft" + left_delta="0" + name="open_browser" + top_pad="5" + width="185" /> + <check_box + control_name="UseExternalBrowser" + follows="bottom|left" + height="20" + label="Always open in my web browser" + layout="topleft" + left_pad="5" + name="open_always" + top_delta="0" + width="200" /> + <button + follows="bottom|right" + height="20" + label="Close" + layout="topleft" + left_pad="80" + name="close" + top_delta="0" + width="70" /> + </layout_panel> + </layout_stack> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml index 73804f90a5..23e0ef50fd 100644 --- a/indra/newview/skins/default/xui/en/floater_hud.xml +++ b/indra/newview/skins/default/xui/en/floater_hud.xml @@ -4,6 +4,7 @@ height="292" layout="topleft" name="floater_hud" + help_topic="floater_hud" save_rect="true" save_visibility="true" title="Tutorial" diff --git a/indra/newview/skins/default/xui/en/floater_im.xml b/indra/newview/skins/default/xui/en/floater_im.xml index e8b8fee678..b6cf05aefc 100644 --- a/indra/newview/skins/default/xui/en/floater_im.xml +++ b/indra/newview/skins/default/xui/en/floater_im.xml @@ -7,6 +7,7 @@ min_height="130" min_width="350" name="im_floater" + help_topic="im_floater" save_rect="true" title="Instant Message" width="419"> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index ae9e658688..a5d76821a8 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -6,6 +6,7 @@ layout="topleft" left="0" name="panel_im" + help_topic="panel_im" top="0" can_dock="true" can_minimize="false" diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml index 6fface12a3..4e4fe97e62 100644 --- a/indra/newview/skins/default/xui/en/floater_image_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_image_preview.xml @@ -4,6 +4,7 @@ height="440" layout="topleft" name="Image Preview" + help_topic="image_preview" width="300"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml index 2e7f5e6c42..8b271eb41e 100644 --- a/indra/newview/skins/default/xui/en/floater_incoming_call.xml +++ b/indra/newview/skins/default/xui/en/floater_incoming_call.xml @@ -6,6 +6,7 @@ height="200" layout="topleft" name="incoming call" + help_topic="incoming_call" title="Unknown Person is calling" width="240"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml index b43cdca0d1..00b9f850ad 100644 --- a/indra/newview/skins/default/xui/en/floater_inspect.xml +++ b/indra/newview/skins/default/xui/en/floater_inspect.xml @@ -6,6 +6,7 @@ min_height="300" min_width="400" name="inspect" + help_topic="inspect" save_rect="true" title="Inspect Objects" width="400"> diff --git a/indra/newview/skins/default/xui/en/floater_inventory.xml b/indra/newview/skins/default/xui/en/floater_inventory.xml index e94ca1b30b..0f06558dd1 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory.xml @@ -7,6 +7,7 @@ min_height="150" min_width="240" name="Inventory" + help_topic="inventory" save_rect="true" save_visibility="true" single_instance="true" @@ -17,8 +18,12 @@ Inventory </floater.string> <floater.string - name="Items"> - Items... + name="TitleFetching"> + Inventory (Fetching [ITEM_COUNT] Items...) [FILTER] + </floater.string> + <floater.string + name="TitleCompleted"> + Inventory ([ITEM_COUNT] Items) [FILTER] </floater.string> <floater.string name="Fetched"> diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index 10bcee7c85..2882f233c2 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -4,6 +4,7 @@ height="340" layout="topleft" name="item properties" + help_topic="item_properties" save_rect="true" title="Inventory Item Properties" width="350"> diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml index f07a146471..6556a14730 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml @@ -4,11 +4,12 @@ height="408" layout="topleft" name="Inventory Finder" + help_topic="inventory_finder" title="inventory_recent_items" width="280"> <icon height="16" - image_name="inv_item_animation.tga" + image_name="Inv_Animation" layout="topleft" left="8" mouse_opaque="true" @@ -25,7 +26,7 @@ width="126" /> <icon height="16" - image_name="inv_item_callingcard_online.tga" + image_name="Inv_CallingCard" layout="topleft" left="8" mouse_opaque="true" @@ -42,7 +43,7 @@ width="126" /> <icon height="16" - image_name="inv_item_shirt.tga" + image_name="Inv_Shirt" layout="topleft" left="8" mouse_opaque="true" @@ -59,7 +60,7 @@ width="126" /> <icon height="16" - image_name="inv_item_gesture.tga" + image_name="Inv_Gesture" layout="topleft" left="8" mouse_opaque="true" @@ -76,7 +77,7 @@ width="126" /> <icon height="16" - image_name="inv_item_landmark_visited.tga" + image_name="Inv_Landmark" layout="topleft" left="8" mouse_opaque="true" @@ -93,7 +94,7 @@ width="126" /> <icon height="16" - image_name="inv_item_notecard.tga" + image_name="Inv_Notecard" layout="topleft" left="8" mouse_opaque="true" @@ -110,7 +111,7 @@ width="126" /> <icon height="16" - image_name="inv_item_object.tga" + image_name="Inv_Object" layout="topleft" left="8" mouse_opaque="true" @@ -127,7 +128,7 @@ width="126" /> <icon height="16" - image_name="inv_item_script.tga" + image_name="Inv_Script" layout="topleft" left="8" mouse_opaque="true" @@ -144,7 +145,7 @@ width="126" /> <icon height="16" - image_name="inv_item_sound.tga" + image_name="Inv_Sound" layout="topleft" left="8" mouse_opaque="true" @@ -161,7 +162,7 @@ width="126" /> <icon height="16" - image_name="inv_item_texture.tga" + image_name="Inv_Texture" layout="topleft" left="8" mouse_opaque="true" @@ -178,7 +179,7 @@ width="126" /> <icon height="16" - image_name="inv_item_snapshot.tga" + image_name="Inv_Snapshot" layout="topleft" left="8" mouse_opaque="true" diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index b9c1b08c68..c0bcfd2271 100644 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -3,6 +3,7 @@ height="500" layout="topleft" name="Joystick" + help_topic="joystick" title="Joystick Configuration" width="550"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml index a326cd006f..3f5127561a 100644 --- a/indra/newview/skins/default/xui/en/floater_lagmeter.xml +++ b/indra/newview/skins/default/xui/en/floater_lagmeter.xml @@ -3,6 +3,7 @@ height="150" layout="topleft" name="floater_lagmeter" + help_topic="floater_lagmeter" save_rect="true" title="Lag Meter" width="350"> @@ -325,7 +326,6 @@ bottom="145" follows="left|top" height="18" - help_url="https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4851" label="?" layout="topleft" name="server_help" diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml index 60677ca0df..f887b48ed0 100644 --- a/indra/newview/skins/default/xui/en/floater_land_holdings.xml +++ b/indra/newview/skins/default/xui/en/floater_land_holdings.xml @@ -3,6 +3,7 @@ height="400" layout="topleft" name="land holdings floater" + help_topic="land_holdings_floater" title="My Land" width="280"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml index 6d6c6c6644..dc6c8302a0 100644 --- a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml +++ b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml @@ -4,11 +4,12 @@ border_style="line" can_resize="true" follows="left|top" - height="550" + height="570" layout="topleft" min_height="271" min_width="290" name="script ed float" + help_topic="script_ed_float" save_rect="true" title="Script: New Script" width="500"> @@ -30,9 +31,9 @@ label="Reset" label_selected="Reset" layout="topleft" - left="362" + left="358" name="Reset" - top="525" + top="545" width="128" /> <check_box enabled="false" diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml index ce6b0efd03..fd2ee6ce5c 100644 --- a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml +++ b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml @@ -7,6 +7,7 @@ min_height="271" min_width="350" name="script ed float" + help_topic="script_ed_float" save_rect="true" title="LSL Wiki" width="370"> diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml index ed3b00250b..70f9c19658 100644 --- a/indra/newview/skins/default/xui/en/floater_map.xml +++ b/indra/newview/skins/default/xui/en/floater_map.xml @@ -7,6 +7,7 @@ min_height="60" min_width="174" name="Map" + help_topic="map" save_rect="true" save_visibility="true" single_instance="true" diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml index 28b8139bfd..ad2c50c6d9 100644 --- a/indra/newview/skins/default/xui/en/floater_media_browser.xml +++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml @@ -6,6 +6,7 @@ min_height="140" min_width="467" name="floater_about" + help_topic="floater_about" save_rect="true" single_instance="true" title="Media Browser" diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml index da698f276b..bd83da02aa 100644 --- a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml +++ b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml @@ -5,7 +5,8 @@ height="175" layout="topleft" name="MemLeak" - title="Memory Leaking Simulation" + help_topic="memleak" + title="Simulate a Memory Leak" width="350"> <spinner decimal_digits="0" diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 17d12c89b7..dc0ff7ac4c 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -7,6 +7,7 @@ height="95" layout="topleft" name="move_floater" + help_topic="move_floater" save_rect="true" save_visibility="true" width="115"> @@ -46,10 +47,10 @@ <button follows="left|bottom" height="25" - image_selected="move_turn_left_in.tga" - image_unselected="move_turn_left_out.tga" + image_selected="Movement_TurnLeft_On" + image_unselected="Movement_TurnLeft_Off" layout="topleft" - left="10" + left="17" name="turn left btn" picture_style="true" scale_image="false" @@ -59,10 +60,10 @@ <button follows="left|bottom" height="25" - image_selected="move_turn_right_in.tga" - image_unselected="move_turn_right_out.tga" + image_selected="Movement_TurnRight_On" + image_unselected="Movement_TurnRight_Off" layout="topleft" - left_pad="45" + left_pad="34" name="turn right btn" picture_style="true" scale_image="false" @@ -72,8 +73,8 @@ <button follows="left|bottom" height="25" - image_selected="move_up_in.tga" - image_unselected="move_up_out.tga" + image_selected="Movement_Up_On" + image_unselected="Movement_Up_Off" layout="topleft" left="10" name="move up btn" @@ -85,8 +86,8 @@ <button follows="left|bottom" height="25" - image_selected="move_down_in.tga" - image_unselected="move_down_out.tga" + image_selected="Movement_Down_On" + image_unselected="Movement_Down_Off" layout="topleft" left_pad="45" name="move down btn" @@ -98,10 +99,10 @@ <joystick_turn follows="left|bottom" height="25" - image_selected="move_forward_in.tga" - image_unselected="move_forward_out.tga" + image_selected="Movement_Forward_On" + image_unselected="Movement_Forward_Off" layout="topleft" - left="47" + left="46" name="forward btn" picture_style="true" quadrant="up" @@ -112,8 +113,8 @@ <joystick_turn follows="left|bottom" height="25" - image_selected="move_backward_in.tga" - image_unselected="move_backward_out.tga" + image_selected="Movement_Backward_On" + image_unselected="Movement_Backward_Off" layout="topleft" left_delta="0" name="backward btn" @@ -131,24 +132,28 @@ layout="topleft" left="0" name="panel_modes" - top_pad="1" + top_pad="0" width="115"> <button follows="left|bottom" - height="20" - label="Walk" + height="23" + image_overlay="Move_Walk_Off" + image_selected="PushButton_Selected_Press" + label="" layout="topleft" name="mode_walk_btn" - pad_left="0" + left="10" pad_right="0" tool_tip="Walking Mode" top="2" - width="43" /> + width="31" /> <button follows="left|bottom" font="SansSerifSmall" - height="20" - label="Run" + height="23" + image_overlay="Move_Run_Off" + image_selected="PushButton_Selected_Press" + label="" layout="topleft" left_pad="0" name="mode_run_btn" @@ -156,11 +161,13 @@ pad_right="0" tool_tip="Running Mode" top="2" - width="37" /> + width="31" /> <button follows="left|bottom" - height="20" - label="Fly" + height="23" + image_overlay="Move_Fly_Off" + image_selected="PushButton_Selected_Press" + label="" layout="topleft" left_pad="0" name="mode_fly_btn" @@ -168,7 +175,7 @@ pad_right="0" tool_tip="Flying Mode" top="2" - width="35" /> + width="31" /> <button visible="false" follows="left|bottom" diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml index 6b6b2c80ba..412df1d262 100644 --- a/indra/newview/skins/default/xui/en/floater_mute_object.xml +++ b/indra/newview/skins/default/xui/en/floater_mute_object.xml @@ -4,6 +4,7 @@ height="140" layout="topleft" name="mute by name" + help_topic="mute_by_name" title="Block object by name" width="375"> <text diff --git a/indra/newview/skins/default/xui/en/floater_my_friends.xml b/indra/newview/skins/default/xui/en/floater_my_friends.xml index 65665c7036..a9a18f44c4 100644 --- a/indra/newview/skins/default/xui/en/floater_my_friends.xml +++ b/indra/newview/skins/default/xui/en/floater_my_friends.xml @@ -7,6 +7,7 @@ min_height="240" min_width="365" name="floater_my_friends" + help_topic="floater_my_friends" save_rect="true" single_instance="true" title="Contacts" diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index 674bfa42da..78f795b0e2 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -7,6 +7,7 @@ height="300" layout="topleft" name="nearby_chat" + help_topic="nearby_chat" save_rect="true" title="Nearby Chat" single_instance="true" diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml index 34bda53ef1..3783417cdb 100644 --- a/indra/newview/skins/default/xui/en/floater_notifications_console.xml +++ b/indra/newview/skins/default/xui/en/floater_notifications_console.xml @@ -5,6 +5,7 @@ layout="topleft" min_height="50" name="notifications_console" + help_topic="notifications_console" single_instance="true" title="Notifications Console" width="500"> diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml index e0ac2c1d51..17f7e9bf67 100644 --- a/indra/newview/skins/default/xui/en/floater_openobject.xml +++ b/indra/newview/skins/default/xui/en/floater_openobject.xml @@ -7,41 +7,45 @@ min_height="160" min_width="270" name="objectcontents" + help_topic="objectcontents" save_rect="true" title="Object Contents" width="300"> - <panel_inventory - follows="left|top|right|bottom" - height="276" - layout="topleft" - left="8" - name="object_contents" - top="44" - width="284" /> - <text + <text type="string" length="1" follows="left|top|right" font="SansSerif" + text_color="White" height="16" layout="topleft" - left_delta="0" + left="10" name="object_name" - top_delta="-20" + top="20" width="284"> [DESC]: </text> + <panel_inventory + background_visible="false" + draw_border="false" + follows="all" + height="276" + layout="topleft" + left="10" + name="object_contents" + top_pad="0" + width="284" /> <button follows="bottom|left" font="SansSerifSmall" - height="20" + height="23" label="Copy To Inventory" label_selected="Copy To Inventory" layout="topleft" - left_delta="2" + left="20" name="copy_to_inventory_button" tab_group="1" - top_pad="285" + top_pad="5" width="120"> <button.commit_callback function="OpenObject.MoveToInventory" /> @@ -49,13 +53,12 @@ <button follows="bottom|left" font="SansSerifSmall" - height="20" + height="23" label="Copy And Wear" label_selected="Copy And Wear" layout="topleft" left_pad="10" name="copy_and_wear_button" - top_delta="0" width="120"> <button.commit_callback function="OpenObject.MoveAndWear" /> diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml index 96195c9ba1..5f70f09a34 100644 --- a/indra/newview/skins/default/xui/en/floater_pay.xml +++ b/indra/newview/skins/default/xui/en/floater_pay.xml @@ -1,129 +1,119 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_minimize="false" - height="140" + height="185" layout="topleft" name="Give Money" + help_topic="give_money" save_rect="true" - width="300"> + width="225"> + <text + type="string" + length="1" + follows="left|top" + font="SansSerifBold" + height="18" + layout="topleft" + left="12" + name="payee_label" + top="7" + width="75"> + Pay: + </text> + <icon + height="16" + width="16" + image_name="Generic_Person" + mouse_opaque="true" + name="icon_person" + tool_tip="Person" + top_pad="0" + left="10" + /> + <text + type="string" + length="1" + follows="left|top" + font="SansSerif" + height="16" + layout="topleft" + left_pad="7" + name="payee_name" + width="210"> + [FIRST] [LAST] + </text> <button - height="20" + height="23" label="L$1" label_selected="L$1" layout="topleft" - left="108" + left="25" name="fastpay 1" - top="54" + top_pad="8" width="80" /> <button - height="20" + height="23" label="L$5" label_selected="L$5" layout="topleft" left_pad="15" name="fastpay 5" - top_delta="0" width="80" /> <button - height="20" + height="23" label="L$10" label_selected="L$10" layout="topleft" - left="108" + left="25" name="fastpay 10" - top="78" + top_pad="8" width="80" /> <button - height="20" + height="23" label="L$20" label_selected="L$20" layout="topleft" left_pad="15" name="fastpay 20" - top_delta="0" - width="80" /> - <button - enabled="false" - height="20" - label="Pay" - label_selected="Pay" - layout="topleft" - left="120" - name="pay btn" - top="112" - width="80" /> - <button - height="20" - label="Cancel" - label_selected="Cancel" - layout="topleft" - left_pad="3" - name="cancel btn" - top_delta="0" width="80" /> <text type="string" length="1" follows="left|top" - font="SansSerif" height="18" layout="topleft" - left="12" - name="payee_label" - top="7" - width="75"> - Pay resident: - </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - height="18" - layout="topleft" - left_delta="73" - name="payee_name" - top_delta="0" - width="210"> - [FIRST] [LAST] - </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - halign="right" - height="18" - layout="topleft" - left="5" - name="fastpay text" - top="54" - width="95"> - Fast Pay: - </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - height="18" - layout="topleft" - left="12" + left="25" name="amount text" - top="112" - width="75"> - Amount: + top_pad="8" + width="180"> + Or, choose amount: </text> <line_editor border_style="line" - border_thickness="1" follows="left|top|right" - font="SansSerif" - height="18" + height="19" + top_pad="0" layout="topleft" - left_delta="46" + left="120" max_length="9" name="amount" - top_delta="0" - width="57" /> + width="80" /> + <button + enabled="false" + height="23" + label="Pay" + label_selected="Pay" + layout="topleft" + left="10" + name="pay btn" + top_pad="5" + width="100" /> + <button + height="23" + label="Cancel" + label_selected="Cancel" + layout="topleft" + left_pad="5" + name="cancel btn" + width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml index bb91f709a3..acff55386b 100644 --- a/indra/newview/skins/default/xui/en/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml @@ -1,20 +1,20 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_minimize="false" - height="140" + height="220" layout="topleft" name="Give Money" + help_topic="give_money" save_rect="true" - width="300"> - <text + width="225"> + <text type="string" length="1" follows="left|top" - font="SansSerif" - halign="right" + font="SansSerifBold" height="18" layout="topleft" - left="5" + left="12" name="payee_group" top="7" width="75"> @@ -24,26 +24,34 @@ type="string" length="1" follows="left|top" - font="SansSerif" - halign="right" + font="SansSerifBold" height="18" layout="topleft" - left_delta="0" + left="12" name="payee_resident" - top_delta="0" + top="7" width="75"> Pay resident: </text> + <icon + height="16" + width="16" + image_name="Generic_Person" + mouse_opaque="true" + name="icon_person" + tool_tip="Person" + top_pad="0" + left="10" + /> <text type="string" length="1" follows="left|top" font="SansSerif" - height="18" + height="16" layout="topleft" - left_pad="5" + left_pad="7" name="payee_name" - top_delta="0" width="210"> [FIRST] [LAST] </text> @@ -51,16 +59,25 @@ type="string" length="1" follows="left|top" - font="SansSerif" - halign="right" - height="18" + halign="left" + height="16" layout="topleft" - left="5" + left="30" name="object_name_label" - top="32" - width="75"> + top_pad="0" + width="150"> Via object: </text> + <icon + height="16" + width="16" + image_name="Inv_Object" + mouse_opaque="true" + name="icon_object" + tool_tip="Objects" + top_pad="0" + left="30" + /> <text type="string" length="1" @@ -74,101 +91,78 @@ width="210"> ... </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - halign="right" - height="18" - layout="topleft" - left="5" - name="fastpay text" - top="54" - width="75"> - Fast Pay: - </text> - <text - type="string" - length="1" - follows="left|top" - font="SansSerif" - halign="right" - height="18" - layout="topleft" - left_delta="0" - name="amount text" - top_pad="40" - width="75"> - Amount: - </text> - <button - height="20" + <button + height="23" label="L$1" label_selected="L$1" layout="topleft" - left="85" + left="25" name="fastpay 1" - top="54" + top_pad="8" width="80" /> <button - height="20" + height="23" label="L$5" label_selected="L$5" layout="topleft" - left_pad="5" + left_pad="15" name="fastpay 5" - top_delta="0" width="80" /> <button - height="20" + height="23" label="L$10" label_selected="L$10" layout="topleft" - left="85" + left="25" name="fastpay 10" - top="78" + top_pad="8" width="80" /> <button - height="20" + height="23" label="L$20" label_selected="L$20" layout="topleft" - left_pad="5" + left_pad="15" name="fastpay 20" - top_delta="0" + width="80" /> + <text + type="string" + length="1" + follows="left|top" + height="18" + layout="topleft" + left="25" + name="amount text" + top_pad="8" + width="180"> + Or, choose amount: + </text> + <line_editor + border_style="line" + follows="left|top|right" + height="19" + top_pad="0" + layout="topleft" + left="120" + max_length="9" + name="amount" width="80" /> <button enabled="false" - follows="right|bottom" - height="20" + height="23" label="Pay" label_selected="Pay" layout="topleft" - left="140" + left="10" name="pay btn" - top="112" - width="70" /> + top_pad="5" + width="100" /> <button - follows="right|bottom" - height="20" + height="23" label="Cancel" label_selected="Cancel" layout="topleft" left_pad="5" name="cancel btn" - top_delta="0" - width="70" /> - <line_editor - border_style="line" - border_thickness="1" - follows="left|top|right" - font="SansSerif" - height="18" - layout="topleft" - left_delta="-130" - max_length="9" - name="amount" - top_delta="0" - width="50" /> + width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml index e4cb97035c..f65bb6f32f 100644 --- a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml @@ -3,6 +3,7 @@ height="180" layout="topleft" name="perm prefs" + help_topic="perm_prefs" save_rect="true" title="Default Upload Permissions" width="315"> diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml index 5a36ed5fd6..aaf7aecd6b 100644 --- a/indra/newview/skins/default/xui/en/floater_post_process.xml +++ b/indra/newview/skins/default/xui/en/floater_post_process.xml @@ -3,6 +3,7 @@ height="400" layout="topleft" name="Post-Process Floater" + help_topic="post_process_floater" title="Post-Process Settings" width="400"> <tab_container diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml index 8657663057..d93cad6dbd 100644 --- a/indra/newview/skins/default/xui/en/floater_postcard.xml +++ b/indra/newview/skins/default/xui/en/floater_postcard.xml @@ -8,6 +8,7 @@ min_height="380" min_width="450" name="Postcard" + help_topic="postcard" title="Email Snapshot" width="450"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index bacec627e1..d655c268b2 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -6,6 +6,7 @@ height="460" layout="topleft" name="Preferences" + help_topic="preferences" single_instance="true" title="Preferences" width="620"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml index e9342b772f..5756f9590e 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_animation.xml @@ -4,6 +4,7 @@ height="85" layout="topleft" name="preview_anim" + help_topic="preview_anim" width="280"> <floater.string name="Title"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_classified.xml b/indra/newview/skins/default/xui/en/floater_preview_classified.xml index 6fac2823e8..07167c3ae4 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_classified.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_classified.xml @@ -4,6 +4,7 @@ height="510" layout="topleft" name="classified_preview" + help_topic="classified_preview" save_rect="true" title="Classified Information" width="440"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_event.xml b/indra/newview/skins/default/xui/en/floater_preview_event.xml index 58dd43075d..77fbe7c060 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_event.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_event.xml @@ -4,6 +4,7 @@ height="510" layout="topleft" name="event_preview" + help_topic="event_preview" save_rect="true" title="Event Information" width="440"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml index 0f6504c875..a523f40bb8 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater auto_tile="true" - height="700" + height="800" layout="topleft" name="gesture_preview" + help_topic="gesture_preview" width="280"> <floater.string name="step_anim"> @@ -89,14 +90,14 @@ follows="all" name="group_accordion"> <accordion_tab - min_height="75" + min_height="90" title="Shortcuts" name="snapshot_destination_tab" an_resize="false"> <panel - class="floater_snapshot_destination" + class="floater_preview_shortcut" filename="floater_preview_gesture_shortcut.xml" - name="snapshot_destination_tab"/> + name="floater_preview_shortcut"/> </accordion_tab> <accordion_tab min_height="400" @@ -104,21 +105,21 @@ name="snapshot_file_settings_tab" can_resize="false"> <panel - class="floater_snapshot_file_settings" + class="floater_preview_steps" filename="floater_preview_gesture_steps.xml" - name="snapshot_file_settings_tab"/> + name="floater_preview_steps"/> </accordion_tab> <accordion_tab - min_height="100" + min_height="155" title="Info" name="snapshot_capture_tab" can_resize="false"> <panel - class="floater_snapshot_capture" - filename="floater_snapshot_Info.xml" - name="snapshot_capture_panel"/> + class="floater_preview_info" + filename="floater_preview_gesture_info.xml" + name="floater_preview_info"/> </accordion_tab> - <accordion_tab + <!--accordion_tab min_height="100" title="Permissions" name="snapshot_capture_tab2" @@ -127,7 +128,7 @@ class="floater_snapshot_capture" filename="floater_snapshot_Permissions.xml" name="snapshot_capture_panel2"/> - </accordion_tab> + </accordion_tab--> </accordion> <!--check_box follows="top|left" @@ -147,7 +148,7 @@ layout="topleft" left="20" name="preview_btn" - top_pad="-80" + top_pad="30" width="80" /> <button follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml index b4a7e8fefd..43e4f8a348 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_info.xml @@ -5,6 +5,7 @@ height="155" layout="topleft" name="Gesture" + help_topic="gesture" save_rect="true" title="Gesture Shortcut" width="260"> @@ -13,27 +14,9 @@ height="110" layout="topleft" left="10" - name="step_list" - top_pad="10" - width="260" /> - <button - follows="top|left" - height="20" - font="SansSerifSmall" - label="Add" - layout="topleft" - left_pad="-100" - name="add_btn" - top_pad="5" - width="100" /> - <scroll_list - follows="top|left" - height="110" - layout="topleft" - left="10" name="library_list" - top_pad="10" - width="260"> + top="10" + width="240"> <scroll_list.rows value="Animation" /> <scroll_list.rows @@ -43,7 +26,7 @@ <scroll_list.rows value="Wait" /> </scroll_list> - <button + <!--button follows="top|left" height="20" label="Preview" @@ -69,105 +52,5 @@ left_pad="5" name="save_btn" top_delta="0" - width="80" /> - <text - type="string" - length="1" - follows="top|left" - font="SansSerifSmall" - height="60" - layout="topleft" - left="10" - name="help_label" - top_pad="10" - width="200"> - All steps happen simultaneously, -unless you add wait steps. - </text> - <text - follows="top|left" - height="60" - layout="topleft" - left="10" - name="options_text" - top_pad="10" - width="205" /> - <combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="10" - name="animation_list" - top_pad="10" - width="100" /> - <combo_box - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - name="sound_list" - top_delta="0" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_delta="0" - max_length="127" - name="chat_editor" - top_delta="0" - width="100" /> - <radio_group - draw_border="false" - follows="top|left" - height="40" - layout="topleft" - left_pad="8" - name="animation_trigger_type" - top="445" - width="80"> - <radio_item - height="16" - label="Start" - layout="topleft" - left="3" - name="start" - top="-11" - width="80" /> - <radio_item - height="16" - label="Stop" - layout="topleft" - left_delta="0" - name="stop" - top_pad="10" - width="80" /> - </radio_group> - <check_box - follows="top|left" - height="20" - label="until animations are done" - layout="topleft" - left="16" - name="wait_anim_check" - top="430" - width="100" /> - <check_box - follows="top|left" - height="20" - label="time in seconds" - layout="topleft" - left_delta="0" - name="wait_time_check" - top_delta="20" - width="100" /> - <line_editor - follows="top|left" - height="20" - layout="topleft" - left_pad="5" - max_length="15" - name="wait_time_editor" - top_delta="0" - width="50" /> + width="80" /--> </floater>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml index 75fb24d640..606ae1a82a 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_shortcut.xml @@ -2,9 +2,10 @@ <floater can_minimize="false" follows="left|top" - height="80" + height="90" layout="topleft" name="Gesture" + help_topic="gesture" save_rect="true" title="Gesture Shortcut" width="260"> @@ -47,7 +48,7 @@ height="20" label="None" layout="topleft" - left_pad="5" + left_pad="13" name="modifier_combo" top_delta="-4" width="50" /> diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml index f0e88b9dd4..4b4f611b59 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_gesture_steps.xml @@ -5,6 +5,7 @@ height="155" layout="topleft" name="Gesture" + help_topic="gesture" save_rect="true" title="Gesture Shortcut" width="260"> @@ -15,18 +16,110 @@ left="10" name="step_list" top_pad="10" - width="260" /> - <button + width="240" /> + <!--text + type="string" + length="1" follows="top|left" - height="20" font="SansSerifSmall" - label="Add" + height="60" + layout="topleft" + left="10" + name="help_label" + top_pad="10" + width="200"> + All steps happen simultaneously, +unless you add wait steps. + </text--> + <!--text + follows="top|left" + height="60" + layout="topleft" + left="10" + name="options_text" + top_pad="10" + width="205" /--> + <!--combo_box + follows="top|left" + height="20" + layout="topleft" + left_delta="10" + name="animation_list" + top_pad="10" + width="100" /> + <combo_box + follows="top|left" + height="20" layout="topleft" - left_pad="-100" - name="add_btn" - top_pad="5" + left_delta="0" + name="sound_list" + top_delta="10" width="100" /> - + <line_editor + follows="top|left" + height="20" + layout="topleft" + left_delta="0" + max_length="127" + name="chat_editor" + top_pad="10" + width="100" /> + <radio_group + draw_border="false" + follows="top|left" + height="40" + layout="topleft" + left_pad="8" + name="animation_trigger_type" + top_pad="10" + width="80"> + <radio_item + height="16" + label="Start" + layout="topleft" + left="3" + name="start" + top="-11" + width="80" /> + <radio_item + height="16" + label="Stop" + layout="topleft" + left_delta="0" + name="stop" + top_pad="10" + width="80" /> + </radio_group> + <check_box + follows="top|left" + height="20" + label="until animations are done" + layout="topleft" + left="16" + name="wait_anim_check" + top_pad="10" + width="100" /> + <check_box + follows="top|left" + height="20" + label="time in seconds" + layout="topleft" + left_delta="0" + name="wait_time_check" + top_pad="10" + width="100" /> + <line_editor + follows="top|left" + height="20" + layout="topleft" + left_pad="5" + max_length="15" + name="wait_time_editor" + top_pad="10" + width="50" /--> + + + <!--For pop out floater--> <!--scroll_list follows="top|left" diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml index 3e2045e1f7..1d7b7adca2 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml @@ -9,6 +9,7 @@ min_height="243" min_width="234" name="preview notecard" + help_topic="preview_notecard" title="Note:" width="400"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml index e341dd7b97..4220655a6f 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_sound.xml @@ -4,6 +4,7 @@ height="85" layout="topleft" name="preview_sound" + help_topic="preview_sound" width="280"> <floater.string name="Title"> diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml index 7bac6fdb32..a243cb399e 100644 --- a/indra/newview/skins/default/xui/en/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/en/floater_preview_texture.xml @@ -8,6 +8,7 @@ min_height="120" min_width="300" name="preview_texture" + help_topic="preview_texture" width="300"> <floater.string name="Title"> diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml index a890de3e28..e045b811f2 100644 --- a/indra/newview/skins/default/xui/en/floater_region_info.xml +++ b/indra/newview/skins/default/xui/en/floater_region_info.xml @@ -3,6 +3,7 @@ height="512" layout="topleft" name="regioninfo" + help_topic="regioninfo" save_rect="true" title="Region/Estate" width="280"> diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index 0da1e42986..c7f5a1170f 100644 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater - height="600" + height="580" layout="topleft" name="floater_report_abuse" + help_topic="floater_report_abuse" title="Report Abuse" - width="305"> + width="333"> <floater.string name="Screenshot"> Screenshot @@ -13,19 +14,19 @@ allow_no_texture="true" default_image_name="None" follows="left|top" - height="114" + height="125" layout="topleft" left="10" name="screenshot" - top="25" - width="134" /> + top="23" + width="160" /> <check_box - height="16" - label="Include screenshot" + height="15" + label="Use this screenshot" layout="topleft" - left_pad="10" + left_pad="5" name="screen_check" - top="110" + top="120" width="116" /> <text type="string" @@ -36,8 +37,8 @@ layout="topleft" left="10" name="reporter_title" - top_pad="12" - width="50"> + top="140" + width="60"> Reporter: </text> <text @@ -46,7 +47,7 @@ follows="left|top" height="16" layout="topleft" - left_pad="12" + left_pad="10" name="reporter_field" top_delta="0" width="193"> @@ -111,8 +112,8 @@ left="10" name="select_object_label" top_pad="5" - width="220"> - Click the button then the object: + width="310"> + Click the button, then the abusive object: </text> <button height="32" @@ -120,6 +121,7 @@ left_delta="0" name="pick_btn" picture_style="true" + image_overlay="Inv_Object" tool_tip="Object Picker - Identify an object as the subject of this report" top_pad="0" width="32" /> @@ -134,7 +136,7 @@ name="object_name_label" top_delta="0" width="60"> - Name: + Object: </text> <text type="string" @@ -157,7 +159,7 @@ layout="topleft" left="48" name="owner_name_label" - top_pad="5" + top_pad="0" width="60"> Owner: </text> @@ -172,15 +174,15 @@ top_delta="0" width="157"> Hendrerit Vulputate - </text> + </text> <combo_box - height="20" + height="23" layout="topleft" left="10" name="category_combo" tool_tip="Category -- select the category that best describes this report" - top_pad="10" - width="265"> + top_pad="5" + width="313"> <combo_box.item label="Select category" name="Select_category" @@ -347,23 +349,23 @@ layout="topleft" left_delta="0" name="abuser_name_title" - top_pad="12" - width="265"> + top_pad="6" + width="313"> Abuser name: </text> <line_editor border_style="line" border_thickness="1" follows="left|top" - height="20" + height="23" layout="topleft" left_delta="0" max_length="32" name="abuser_name_edit" top_pad="2" - width="170" /> + width="195" /> <button - height="20" + height="23" font="SansSerifSmall" label="Choose" layout="topleft" @@ -371,9 +373,9 @@ name="select_abuser" tool_tip="Select the name of the abuser from a list" top_delta="0" - width="90" /> - <check_box - height="20" + width="100" /> +<!-- <check_box + height="23" label="Don't know abuser's name" layout="topleft" left="10" @@ -381,7 +383,7 @@ tool_tip="Check this if you are unable to provide the abuser's name" top_pad="2" visible="false" - width="250" /> + width="250" />--> <text type="string" length="1" @@ -389,23 +391,23 @@ height="16" font.style="BOLD" layout="topleft" - left_delta="3" + left="10" name="abuser_name_title2" - top_pad="10" - width="265"> + top_pad="5" + width="313"> Location of Abuse: </text> <line_editor border_style="line" border_thickness="1" follows="left|top" - height="20" + height="23" layout="topleft" left="10" max_length="256" name="abuse_location_edit" top_pad="2" - width="265" /> + width="313" /> <text type="string" length="1" @@ -415,21 +417,21 @@ layout="topleft" left_delta="0" name="sum_title" - top_pad="10" - width="265"> + top_pad="5" + width="313"> Summary: </text> <line_editor border_style="line" border_thickness="1" follows="left|top" - height="20" + height="23" layout="topleft" left_delta="0" max_length="64" name="summary_edit" top_pad="2" - width="265" /> + width="313" /> <text type="string" length="1" @@ -439,7 +441,7 @@ layout="topleft" left_delta="0" name="dscr_title" - top_pad="10" + top_pad="5" width="50"> Details: </text> @@ -449,22 +451,20 @@ follows="left|top" height="16" layout="topleft" - left_pad="5" name="bug_aviso" - top_delta="0" + left_pad="0" width="200"> Please be as specific as possible. </text> <text_editor follows="left|top" - height="50" + height="75" layout="topleft" left="10" max_length="800" mouse_opaque="false" name="details_edit" - top_pad="2" - width="265" + width="313" word_wrap="true" /> <text type="string" @@ -472,32 +472,31 @@ follows="left|top" height="50" layout="topleft" - left_delta="0" + left="10" font.style="BOLD" name="incomplete_title" - top_pad="8" + top_pad="5" word_wrap="true" - width="265"> - Note: Incomplete reports will not be investigated. + width="313"> + Note: Incomplete reports won't be investigated. </text> - <button - bottom="590" - follows="right|bottom" - height="20" - label="Cancel" - label_selected="Cancel" - layout="topleft" - name="cancel_btn" - right="275" - width="130" /> - <button - bottom="590" - follows="right|bottom" - height="20" + <button + left="80" + follows="left|top" + height="23" + top="550" label="Report Abuse" label_selected="Report Abuse" layout="topleft" name="send_btn" - right="140" - width="130" /> + width="140" /> + <button + follows="left|top" + height="23" + label="Cancel" + label_selected="Cancel" + layout="topleft" + name="cancel_btn" + left_pad="5" + width="100" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_script_debug.xml b/indra/newview/skins/default/xui/en/floater_script_debug.xml index 2ae0afa168..53d4925214 100644 --- a/indra/newview/skins/default/xui/en/floater_script_debug.xml +++ b/indra/newview/skins/default/xui/en/floater_script_debug.xml @@ -4,6 +4,7 @@ height="233" layout="topleft" name="script debug floater" + help_topic="script_debug_floater" save_rect="true" title="Script Warning/Error" width="450"> diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml index 2dd7a1e777..c8b8c34f85 100644 --- a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml +++ b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml @@ -5,6 +5,7 @@ height="200" layout="topleft" name="script" + help_topic="script" short_title="[All scripts]" title="[All scripts]" width="440"> diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml index ef68478460..54ab30124a 100644 --- a/indra/newview/skins/default/xui/en/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_script_preview.xml @@ -8,6 +8,7 @@ min_height="271" min_width="290" name="preview lsl text" + help_topic="preview_lsl_text" save_rect="true" title="Script: Rotation Script" top_delta="0" diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml index ad91e8156b..467dcfae20 100644 --- a/indra/newview/skins/default/xui/en/floater_script_queue.xml +++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml @@ -5,6 +5,7 @@ height="400" layout="topleft" name="queue" + help_topic="queue" save_rect="true" title="Reset Progress" width="300"> diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml index bb0c60e75b..545abc39a2 100644 --- a/indra/newview/skins/default/xui/en/floater_script_search.xml +++ b/indra/newview/skins/default/xui/en/floater_script_search.xml @@ -4,6 +4,7 @@ height="120" layout="topleft" name="script search" + help_topic="script_search" title="Script Search" width="300"> <check_box diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml index b89af0ef3e..8e1317440e 100644 --- a/indra/newview/skins/default/xui/en/floater_select_key.xml +++ b/indra/newview/skins/default/xui/en/floater_select_key.xml @@ -6,6 +6,7 @@ height="100" layout="topleft" name="modal container" + help_topic="modal_container" width="240"> <button height="20" diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml index cf26b7ab47..f07b9d3767 100644 --- a/indra/newview/skins/default/xui/en/floater_sell_land.xml +++ b/indra/newview/skins/default/xui/en/floater_sell_land.xml @@ -1,26 +1,45 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_minimize="false" - height="600" + height="450" layout="topleft" name="sell land" + help_topic="sell_land" single_instance="true" title="Sell Land" - width="280"> + width="313"> + <scroll_container + color="DkGray2" + follows="left|top|right|bottom" + height="435" + min_height="300" + layout="topleft" + name="profile_scroll" + reserve_scroll_corner="true" + opaque="true" + top="15" + width="313"> + <panel + name="scroll_content_panel" + follows="left|top|right" + layout="topleft" + top="0" + left="0" + width="293" + height="615"> <texture_picker enabled="false" follows="top|left" height="135" layout="topleft" - left="50" + left="60" name="info_image" - right="230" top="20" width="180" /> <text type="string" length="1" - top="145" + top="150" follows="top|left" layout="topleft" left="16" @@ -31,9 +50,8 @@ <text type="string" length="1" - bottom_delta="5" + top_delta="0" follows="top|left" - font="SansSerif" height="16" layout="topleft" left="56" @@ -54,9 +72,8 @@ <text type="string" length="1" - bottom_delta="21" follows="top|left" - font="SansSerif" + top_delta="0" height="32" layout="topleft" left="56" @@ -74,7 +91,7 @@ left="16" name="info_action" text_color="white" - top="190" + top="195" width="200"> To sell this parcel: </text> @@ -85,7 +102,7 @@ layout="topleft" left="0" name="step_price" - top="211" + top="206" width="64" /> <text type="string" @@ -125,7 +142,7 @@ type="string" length="1" follows="top|left" - height="16" + height="18" layout="topleft" left_delta="20" name="price" @@ -169,17 +186,17 @@ type="string" length="1" follows="top|left" - height="16" + height="25" layout="topleft" left="72" + word_wrap="true" name="sell_to_text" right="-20"> - Choose whether to sell to anyone -or a particular buyer. + Choose whether to sell to anyone or a particular buyer. </text> <combo_box follows="top|right" - height="16" + height="18" layout="topleft" left_delta="0" name="sell_to" @@ -202,14 +219,14 @@ or a particular buyer. <line_editor enabled="false" follows="top|right" - height="16" + height="18" layout="topleft" left_delta="0" name="sell_to_agent" top_pad="4" width="130" /> <button - height="16" + height="20" font="SansSerifSmall" label="Select" layout="topleft" @@ -242,17 +259,16 @@ or a particular buyer. type="string" length="1" font="SansSerifSmall" - bottom_delta="20" follows="top|left" - height="16" + height="25" layout="topleft" + word_wrap="true" left="72" name="sell_objects_text"> - Land owner's transferable objects -on parcel will change ownership. + Land owner's transferable objects on parcel will change ownership. </text> <radio_group - top_pad="15" + top_pad="5" follows="top|right" height="40" layout="topleft" @@ -282,7 +298,7 @@ on parcel will change ownership. name="yes" /> </radio_group> <button - height="16" + height="20" font="SansSerifSmall" label="Show Objects" layout="topleft" @@ -323,4 +339,6 @@ on parcel will change ownership. name="cancel_btn" top_delta="0" width="90" /> + </panel> + </scroll_container> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml index 4d4dc084bf..e2f4a73ec8 100644 --- a/indra/newview/skins/default/xui/en/floater_settings_debug.xml +++ b/indra/newview/skins/default/xui/en/floater_settings_debug.xml @@ -4,6 +4,7 @@ height="215" layout="topleft" name="settings_debug" + help_topic="settings_debug" title="Debug Settings" width="350"> <combo_box diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 1d2978adb8..bd1484c0fe 100644 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -5,6 +5,7 @@ height="526" layout="topleft" name="Snapshot" + help_topic="snapshot" save_rect="true" title="Snapshot Preview" width="215"> diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml index 78540c0b98..3b1eae9293 100644 --- a/indra/newview/skins/default/xui/en/floater_sound_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_sound_preview.xml @@ -3,6 +3,7 @@ height="190" layout="topleft" name="Sound Preview" + help_topic="sound_preview" title="sound.wav" width="300"> <text diff --git a/indra/newview/skins/default/xui/en/floater_statistics.xml b/indra/newview/skins/default/xui/en/floater_statistics.xml index 1661fbffb0..653bc942e5 100644 --- a/indra/newview/skins/default/xui/en/floater_statistics.xml +++ b/indra/newview/skins/default/xui/en/floater_statistics.xml @@ -6,5 +6,6 @@ layout="topleft" mouse_opaque="false" name="stats floater" + help_topic="stats_floater" title="Statistics" width="250" /> diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml index 4d7da97f79..205e6efe70 100644 --- a/indra/newview/skins/default/xui/en/floater_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_stats.xml @@ -5,6 +5,7 @@ height="400" layout="topleft" name="Statistics" + help_topic="statistics" save_rect="true" save_visibility="true" title="Statistics" diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml index 76b2e5c811..3f31641cac 100644 --- a/indra/newview/skins/default/xui/en/floater_sys_well.xml +++ b/indra/newview/skins/default/xui/en/floater_sys_well.xml @@ -6,6 +6,7 @@ follows="right|bottom" layout="topleft" name="notification_chiclet" + help_topic="notification_chiclet" save_rect="true" title="NOTIFICATIONS" width="320" diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml index ef9aef7f6f..b703b49b8b 100644 --- a/indra/newview/skins/default/xui/en/floater_telehub.xml +++ b/indra/newview/skins/default/xui/en/floater_telehub.xml @@ -3,6 +3,7 @@ height="250" layout="topleft" name="telehub" + help_topic="telehub" title="Telehub" width="280"> <text diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml index 0681eedbab..ce17873a67 100644 --- a/indra/newview/skins/default/xui/en/floater_test_button.xml +++ b/indra/newview/skins/default/xui/en/floater_test_button.xml @@ -4,9 +4,10 @@ height="500" layout="topleft" name="floater_test_button" + help_topic="floater_test_button" width="500"> <button - height="20" + height="23" label="Generic Button" layout="topleft" left="10" @@ -15,27 +16,27 @@ width="150" /> <button bottom_delta="30" - height="20" + height="23" label="Bottom delta" layout="topleft" name="bottom_delta_button" /> <button bottom_delta="30" font="SansSerifSmall" - height="20" + height="23" label="SansSerifSmall" layout="topleft" name="sans_serif_small_button" /> <button auto_resize="true" bottom_delta="30" - height="20" + height="23" label="Auto Resize" layout="topleft" name="auto_resize_button" /> <button bottom_delta="30" - height="20" + height="23" is_toggle="true" label="Click Change Label" label_selected="New Label" @@ -43,69 +44,69 @@ name="label_selected_button" /> <button bottom_delta="30" - height="20" + height="23" label="No Label Shadow" label_shadow="false" layout="topleft" name="label_shadow_button" /> <button bottom_delta="30" - height="20" - label="Red Label" - label_color="red" + height="23" + label="EmphasisColor Label" + label_color="EmphasisColor" layout="topleft" name="label_color_button" /> <button bottom_delta="30" - height="20" + height="23" is_toggle="true" - label="Red Label Selected" - label_color_selected="red" - label_selected="Red Label Selected" + label="Toggle" + label_color_selected="EmphasisColor" + label_selected="Toggle on" layout="topleft" name="label_color_selected_button" /> <button bottom_delta="30" enabled="false" - height="20" - label="Red Label Disabled" - label_color_disabled="red" - label_selected="Red Label Selected" + height="23" + label="Disabled" + label_color_disabled="EmphasisColor" + label_selected="Selected" layout="topleft" name="label_color_disabled_button" /> <button bottom_delta="30" - height="20" - highlight_color="red" - label="Red Highlight" + height="23" + highlight_color="EmphasisColor" + label="Highlight" layout="topleft" name="highlight_color_button" /> <button bottom_delta="30" - height="20" + height="23" hover_glow_amount="0" label="No Hover Glow" layout="topleft" name="hover_glow_amount_button" /> <button - height="30" - image_selected="object_cube_active.tga" - image_unselected="object_cube.tga" + height="16" + image_selected="Move_Run_Off" + image_unselected="Move_Run_Off" layout="topleft" left="200" name="image_button" picture_style="true" top="20" - width="30" /> + width="16" /> <button - height="30" - image_color="red" - image_selected="object_cube_active.tga" - image_unselected="object_cube.tga" + height="16" + image_color="EmphasisColor" + image_selected="Move_Run_Off" + image_unselected="Move_Run_Off" layout="topleft" left_delta="0" name="image_color_button" picture_style="true" top_pad="10" - width="30" /> + width="16" /> </floater> diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml index 021474d7ab..66a5b9267d 100644 --- a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml @@ -4,19 +4,20 @@ height="400" layout="topleft" name="floater_test_checkbox" + help_topic="floater_test_checkbox" width="400"> <check_box control_name="ShowStartLocation" - height="16" + height="15" initial_value="true" - label="Show Start Location on Login Screen" + label="Oh look it's a checkbox!" layout="topleft" left="10" name="show_location_checkbox" top="28" width="256" /> <check_box - height="16" + height="15" label="Minimal Checkbox" layout="topleft" left_delta="0" @@ -25,7 +26,7 @@ width="150" /> <check_box enabled="false" - height="16" + height="15" label="Disabled Checkbox" layout="topleft" left_delta="0" @@ -33,26 +34,26 @@ top_pad="14" width="150" /> <check_box - height="16" - label="Text Enabled Red" + height="15" + label="Text Enabled Color" layout="topleft" left_delta="0" name="text_enabled_color_checkbox" - text_enabled_color="red" + text_enabled_color="EmphasisColor" top_pad="14" width="150" /> <check_box enabled="false" - height="16" - label="Text Disabled Red" + height="15" + label="Text Disabled Color" layout="topleft" left_delta="0" name="text_disabled_color_checkbox" - text_disabled_color="red" + text_disabled_color="EmphasisColor_35" top_pad="14" width="150" /> <check_box - height="16" + height="15" initial_value="true" label="Initial Value Checked" layout="topleft" @@ -62,7 +63,7 @@ width="150" /> <check_box font="Monospace" - height="16" + height="15" label="Font Monospace" layout="topleft" left_delta="0" diff --git a/indra/newview/skins/default/xui/en/floater_test_combobox.xml b/indra/newview/skins/default/xui/en/floater_test_combobox.xml index 06422d6a26..956d5669b8 100644 --- a/indra/newview/skins/default/xui/en/floater_test_combobox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_combobox.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_combobox" + help_topic="floater_test_combobox" width="400"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml index b23bf49435..a1a271d0eb 100644 --- a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml +++ b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_inspectors" + help_topic="floater_test_inspectors" title="Test Inspectors" width="400"> <text diff --git a/indra/newview/skins/default/xui/en/floater_test_layout.xml b/indra/newview/skins/default/xui/en/floater_test_layout.xml index 344ad8447e..209859bb29 100644 --- a/indra/newview/skins/default/xui/en/floater_test_layout.xml +++ b/indra/newview/skins/default/xui/en/floater_test_layout.xml @@ -4,6 +4,7 @@ height="500" layout="topleft" name="floater_test_layout" + help_topic="floater_test_layout" width="500"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml index a17e3ea949..251ca4c9bf 100644 --- a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml +++ b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_line_editor" + help_topic="floater_test_line_editor" width="400"> <line_editor height="20" diff --git a/indra/newview/skins/default/xui/en/floater_test_list_view.xml b/indra/newview/skins/default/xui/en/floater_test_list_view.xml index b637699228..98d6d5bda7 100644 --- a/indra/newview/skins/default/xui/en/floater_test_list_view.xml +++ b/indra/newview/skins/default/xui/en/floater_test_list_view.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_list_view" + help_topic="floater_test_list_view" width="400"> <list_view height="300" diff --git a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml index 21956c2eac..dd551b6d51 100644 --- a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml @@ -4,6 +4,7 @@ height="200" layout="topleft" name="floater_test_navigation_bar" + help_topic="floater_test_navigation_bar" width="900"> <panel name="navigation_bar" diff --git a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml index ef3e1f598d..35190c0e1a 100644 --- a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml +++ b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_radiogroup" + help_topic="floater_test_radiogroup" width="400"> <radio_group height="54" diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml index b1d468e265..3545f88df7 100644 --- a/indra/newview/skins/default/xui/en/floater_test_slider.xml +++ b/indra/newview/skins/default/xui/en/floater_test_slider.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_slider" + help_topic="floater_test_slider" width="450"> <slider height="20" diff --git a/indra/newview/skins/default/xui/en/floater_test_spinner.xml b/indra/newview/skins/default/xui/en/floater_test_spinner.xml index da88d825e4..c4e5bc9e99 100644 --- a/indra/newview/skins/default/xui/en/floater_test_spinner.xml +++ b/indra/newview/skins/default/xui/en/floater_test_spinner.xml @@ -4,19 +4,21 @@ height="400" layout="topleft" name="floater_test_spinner" + help_topic="floater_test_spinner" width="450"> <spinner - height="20" + height="32" label="Generic Spinner" layout="topleft" left="10" + label_width="100" name="generic_spinner" top="40" width="350" /> <spinner height="20" label="Callback Spinner" - label_width="80" + label_width="100" layout="topleft" left_delta="0" name="callback_spinner" diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml index b4f3fc1e78..88c001b714 100644 --- a/indra/newview/skins/default/xui/en/floater_test_textbox.xml +++ b/indra/newview/skins/default/xui/en/floater_test_textbox.xml @@ -4,6 +4,7 @@ height="400" layout="topleft" name="floater_test_textbox" + help_topic="floater_test_textbox" width="400"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml index d773e1f2b8..6ddaa63c1d 100644 --- a/indra/newview/skins/default/xui/en/floater_test_widgets.xml +++ b/indra/newview/skins/default/xui/en/floater_test_widgets.xml @@ -21,6 +21,7 @@ height="500" layout="topleft" name="floater_test_widgets" + help_topic="floater_test_widgets" width="850"> <!-- Strings are used by C++ code for localization. They are not visible diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index dc048eb352..f2b701b88d 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -7,6 +7,7 @@ min_height="290" min_width="410" name="texture picker" + help_topic="texture_picker" title="Pick: Texture" width="410"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index e373da300c..edbd28cd2d 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -4,6 +4,7 @@ height="570" layout="topleft" name="toolbox floater" + help_topic="toolbox_floater" save_rect="true" short_title="Build Tools" single_instance="true" @@ -63,69 +64,69 @@ </floater.string> <button follows="left|top" - height="32" - image_disabled="tool_zoom.tga" + height="20" + image_disabled="Tool_Zoom" image_disabled_selected="tool_zoom_active.tga" image_selected="tool_zoom_active.tga" - image_unselected="tool_zoom.tga" + image_unselected="Tool_Zoom" layout="topleft" left="10" name="button focus" picture_style="true" tool_tip="Focus" - width="32" /> + width="20" /> <button follows="left|top" - height="32" - image_disabled="tool_grab.tga" + height="20" + image_disabled="Tool_Grab" image_disabled_selected="tool_grab_active.tga" image_selected="tool_grab_active.tga" - image_unselected="tool_grab.tga" + image_unselected="Tool_Grab" layout="topleft" left_pad="8" name="button move" picture_style="true" tool_tip="Move" - width="32" /> + width="20" /> <button follows="left|top" - height="32" - image_disabled="tool_face.tga" + height="20" + image_disabled="Tool_Face" image_disabled_selected="tool_face_active.tga" image_selected="tool_face_active.tga" - image_unselected="tool_face.tga" + image_unselected="Tool_Face" layout="topleft" left_pad="8" name="button edit" picture_style="true" tool_tip="Edit" - width="32" /> + width="20" /> <button follows="left|top" - height="32" - image_disabled="tool_create.tga" + height="20" + image_disabled="Tool_Create" image_disabled_selected="tool_create_active.tga" image_selected="tool_create_active.tga" - image_unselected="tool_create.tga" + image_unselected="Tool_Create" layout="topleft" left_pad="8" name="button create" picture_style="true" tool_tip="Create" - width="32" /> + width="20" /> <button follows="left|top" - height="32" - image_disabled="tool_dozer.tga" + height="20" + image_disabled="Tool_Dozer" image_disabled_selected="tool_dozer_active.tga" image_selected="tool_dozer_active.tga" - image_unselected="tool_dozer.tga" + image_unselected="Tool_Dozer" layout="topleft" left_pad="8" name="button land" picture_style="true" tool_tip="Land" - width="32" /> + width="20" /> <text type="string" text_color="LabelSelectedDisabledColor" @@ -288,214 +289,214 @@ height="22" /> <button follows="left|top" - height="24" - image_disabled="object_cube.tga" + height="20" + image_disabled="Object_Cube" image_disabled_selected="object_cube_active.tga" image_selected="object_cube_active.tga" - image_unselected="object_cube.tga" + image_unselected="Object_Cube" layout="topleft" left="4" name="ToolCube" picture_style="true" tool_tip="Cube" top="51" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_prism.tga" + height="20" + image_disabled="Object_Prism" image_disabled_selected="object_prism_active.tga" image_selected="object_prism_active.tga" - image_unselected="object_prism.tga" + image_unselected="Object_Prism" layout="topleft" - left_delta="23" + left_delta="26" name="ToolPrism" picture_style="true" tool_tip="Prism" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_pyramid.tga" + height="20" + image_disabled="Object_Pyramid" image_disabled_selected="object_pyramid_active.tga" image_selected="object_pyramid_active.tga" - image_unselected="object_pyramid.tga" + image_unselected="Object_Pyramid" layout="topleft" - left_delta="23" + left_delta="26" name="ToolPyramid" picture_style="true" tool_tip="Pyramid" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_tetrahedron.tga" + height="20" + image_disabled="Object_Tetrahedron" image_disabled_selected="object_tetrahedron_active.tga" image_selected="object_tetrahedron_active.tga" - image_unselected="object_tetrahedron.tga" + image_unselected="Object_Tetrahedron" layout="topleft" - left_delta="23" + left_delta="26" name="ToolTetrahedron" picture_style="true" tool_tip="Tetrahedron" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_cylinder.tga" + height="20" + image_disabled="Object_Cylinder" image_disabled_selected="object_cylinder_active.tga" image_selected="object_cylinder_active.tga" - image_unselected="object_cylinder.tga" + image_unselected="Object_Cylinder" layout="topleft" - left_delta="23" + left_delta="26" name="ToolCylinder" picture_style="true" tool_tip="Cylinder" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_hemi_cylinder.tga" + height="20" + image_disabled="Object_Hemi_Cylinder" image_disabled_selected="object_hemi_cylinder_active.tga" image_selected="object_hemi_cylinder_active.tga" - image_unselected="object_hemi_cylinder.tga" + image_unselected="Object_Hemi_Cylinder" layout="topleft" - left_delta="23" + left_delta="26" name="ToolHemiCylinder" picture_style="true" tool_tip="Hemicylinder" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_cone.tga" + height="20" + image_disabled="Object_Cone" image_disabled_selected="object_cone_active.tga" image_selected="object_cone_active.tga" - image_unselected="object_cone.tga" + image_unselected="Object_Cone" layout="topleft" - left_delta="23" + left_delta="26" name="ToolCone" picture_style="true" tool_tip="Cone" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_hemi_cone.tga" + height="20" + image_disabled="Object_Hemi_Cone" image_disabled_selected="object_hemi_cone_active.tga" image_selected="object_hemi_cone_active.tga" - image_unselected="object_hemi_cone.tga" + image_unselected="Object_Hemi_Cone" layout="topleft" - left_delta="23" + left_delta="26" name="ToolHemiCone" picture_style="true" tool_tip="Hemicone" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_sphere.tga" + height="20" + image_disabled="Object_Sphere" image_disabled_selected="object_sphere_active.tga" image_selected="object_sphere_active.tga" - image_unselected="object_sphere.tga" + image_unselected="Object_Sphere" layout="topleft" - left_delta="23" + left_delta="26" name="ToolSphere" picture_style="true" tool_tip="Sphere" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_hemi_sphere.tga" + height="20" + image_disabled="Object_Hemi_Sphere" image_disabled_selected="object_hemi_sphere_active.tga" image_selected="object_hemi_sphere_active.tga" - image_unselected="object_hemi_sphere.tga" + image_unselected="Object_Hemi_Sphere" layout="topleft" - left_delta="23" + left_delta="26" name="ToolHemiSphere" picture_style="true" tool_tip="Hemisphere" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_torus.tga" + height="20" + image_disabled="Object_Torus" image_disabled_selected="object_torus_active.tga" image_selected="object_torus_active.tga" - image_unselected="object_torus.tga" + image_unselected="Object_Torus" layout="topleft" left="4" name="ToolTorus" picture_style="true" tool_tip="Torus" - top="74" - width="24" /> + top="77" + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_tube.tga" + height="20" + image_disabled="Object_Tube" image_disabled_selected="object_tube_active.tga" image_selected="object_tube_active.tga" - image_unselected="object_tube.tga" + image_unselected="Object_Tube" layout="topleft" - left_delta="23" + left_delta="26" name="ToolTube" picture_style="true" tool_tip="Tube" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_ring.tga" + height="20" + image_disabled="Object_Ring" image_disabled_selected="object_ring_active.tga" image_selected="object_ring_active.tga" - image_unselected="object_ring.tga" + image_unselected="Object_Ring" layout="topleft" - left_delta="23" + left_delta="26" name="ToolRing" picture_style="true" tool_tip="Ring" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_tree.tga" + height="20" + image_disabled="Object_Tree" image_disabled_selected="object_tree_active.tga" image_selected="object_tree_active.tga" - image_unselected="object_tree.tga" + image_unselected="Object_Tree" layout="topleft" - left_delta="23" + left_delta="26" name="ToolTree" picture_style="true" tool_tip="Tree" top_delta="0" - width="24" /> + width="20" /> <button follows="left|top" - height="24" - image_disabled="object_grass.tga" + height="20" + image_disabled="Object_Grass" image_disabled_selected="object_grass_active.tga" image_selected="object_grass_active.tga" - image_unselected="object_grass.tga" + image_unselected="Object_Grass" layout="topleft" - left_delta="23" + left_delta="26" name="ToolGrass" picture_style="true" tool_tip="Grass" top_delta="0" - width="24" /> + width="20" /> <check_box control_name="CreateToolKeepSelected" height="19" @@ -2123,29 +2124,50 @@ name="colorswatch" tool_tip="Click to open Color Picker" width="40" /> - <spinner + <texture_picker + allow_no_texture="true" + top_delta="0" + can_apply_immediately="true" + default_image_name="Default" + follows="left|top" + height="48" + label="" + left_delta="57" + mouse_opaque="true" + name="light texture control" + tool_tip="Click to choose a projection image (only has effect with deferred rendering enabled)" + width="32" /> + <spinner follows="left|top" height="19" initial_value="0.5" label="Intensity" label_width="70" layout="topleft" - left_pad="15" + left="10" name="Light Intensity" - top_pad="-50" + top_pad="3" width="128" /> - <spinner + <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" + increment="0.1" initial_val="0.5" label="FOV" label_width="55" + left="144" max_val="3" min_val="0" mouse_opaque="true" + name="Light FOV" width="120" /> + <spinner follows="left|top" height="19" initial_value="5" label="Radius" label_width="70" layout="topleft" - left_delta="0" + left="10" max_val="20" name="Light Radius" top_pad="3" width="128" /> + <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" + increment="0.5" initial_val="0.5" label="Focus" label_width="55" + left="144" max_val="20" min_val="-20" mouse_opaque="true" + name="Light Focus" width="120" /> <spinner follows="left|top" height="19" @@ -2154,13 +2176,17 @@ label="Falloff" label_width="70" layout="topleft" - left_delta="0" + left="10" max_val="2" name="Light Falloff" top_pad="3" width="128" /> + <spinner bottom_delta="0" decimal_digits="3" follows="left|top" height="16" + increment="0.05" initial_val="1" label="Ambiance" label_width="55" + left="144" max_val="1" min_val="0" mouse_opaque="true" + name="Light Ambiance" width="120" /> </panel> - <panel + <panel border="false" follows="left|top|right|bottom" height="367" diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index ecd64d08e6..07ffc204f9 100644 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -6,6 +6,7 @@ min_height="300" min_width="450" name="top_objects" + help_topic="top_objects" title="loading..." width="550"> <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index 54facbb659..b290a9c87d 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -5,6 +5,7 @@ height="500" layout="topleft" name="modal container" + help_topic="modal_container" width="600"> <floater.string name="real_url"> diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml index bbb17dfb8f..2c14b3d87a 100644 --- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml @@ -6,6 +6,7 @@ min_height="230" min_width="650" name="gui_preview_tool" + help_topic="gui_preview_tool" single_instance="true" title="XUI Preview Tool" width="750"> diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml index cf59d44d01..6c1fb65bdd 100644 --- a/indra/newview/skins/default/xui/en/floater_url_entry.xml +++ b/indra/newview/skins/default/xui/en/floater_url_entry.xml @@ -4,6 +4,7 @@ height="87" layout="topleft" name="url_entry" + help_topic="url_entry" width="280"> <text type="string" diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml index 07ebf734ea..febfd1929e 100644 --- a/indra/newview/skins/default/xui/en/floater_water.xml +++ b/indra/newview/skins/default/xui/en/floater_water.xml @@ -3,6 +3,7 @@ height="240" layout="topleft" name="Water Floater" + help_topic="water_floater" save_rect="true" title="Advanced Water Editor" width="700"> diff --git a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml index ee67989d33..e698dfe2dc 100644 --- a/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/en/floater_wearable_save_as.xml @@ -6,6 +6,7 @@ height="100" layout="topleft" name="modal container" + help_topic="modal_container" width="240"> <button height="20" diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml index 5257cc687e..872bd704d5 100644 --- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/en/floater_windlight_options.xml @@ -3,6 +3,7 @@ height="220" layout="topleft" name="WindLight floater" + help_topic="windlight_floater" save_rect="true" title="Advanced Sky Editor" width="700"> diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml index e46588dd71..bd76b10312 100644 --- a/indra/newview/skins/default/xui/en/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en/floater_world_map.xml @@ -8,6 +8,7 @@ min_height="520" min_width="520" name="worldmap" + help_topic="worldmap" save_rect="true" save_visibility="true" single_instance="true" diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml index f908e9d610..2042ffedbc 100644 --- a/indra/newview/skins/default/xui/en/inspect_avatar.xml +++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml @@ -13,6 +13,7 @@ can_close="false" can_minimize="false" name="inspect_avatar" + help_topic="inspect_avatar" single_instance="true" sound_flags="0" title="" @@ -94,7 +95,7 @@ Profile: [SL_PROFILE] bottom="10" left="230" width="60" height="20" follows="top|left" name="gear_btn" label="" - image_overlay="gear.tga" + image_overlay="Icon_Gear_Foreground" image_overlay_alignment="center" scale_image="true" /> diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 7762a7f667..72cbd3bcd5 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -457,6 +457,14 @@ function="Inventory.DoToSelected" parameter="replaceoutfit" /> </menu_item_call> + <menu_item_call + label="Wear As Ensemble" + layout="topleft" + name="Wear As Ensemble"> + <menu_item_call.on_click + function="Inventory.DoToSelected" + parameter="wearasensemble" /> + </menu_item_call> <menu_item_separator layout="topleft" /> <menu_item_call diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index 8a2955654e..7a0a78bb50 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -9,11 +9,22 @@ width="802"> <menu create_jump_keys="true" - label="File" + label="Me" layout="topleft" name="File"> <menu_item_call - label="Quit" + label="Preferences" + layout="topleft" + name="Preferences..." + shortcut="control|P"> + <menu_item_call.on_click + function="ShowFloater" + parameter="preferences" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Quit [APP_NAME]" layout="topleft" name="Quit" shortcut="control|Q"> @@ -21,22 +32,15 @@ function="File.Quit" /> </menu_item_call> </menu> +<!-- Edit menu merged into the Me menu above <menu create_jump_keys="true" label="Edit" layout="topleft" name="Edit" width="153"> - <menu_item_call - label="Preferences..." - layout="topleft" - name="Preferences..." - shortcut="control|P"> - <menu_item_call.on_click - function="ShowFloater" - parameter="preferences" /> - </menu_item_call> </menu> +--> <menu create_jump_keys="true" label="Help" @@ -51,6 +55,8 @@ function="ShowFloater" parameter="help f1" /> </menu_item_call> + <menu_item_separator + layout="topleft" /> <menu_item_call label="About [APP_NAME]" layout="topleft" @@ -64,9 +70,115 @@ create_jump_keys="true" label="Debug" layout="topleft" - name="Debug"> + name="Debug" + tear_off="true"> + <!-- Need a copy of the edit menu here so keyboard shortcuts like + control-C work to copy text at login screen and About dialog (for QA) + --> + <menu + create_jump_keys="true" + label="Edit" + layout="topleft" + name="Edit" + tear_off="true"> + <menu_item_call + label="Undo" + layout="topleft" + name="Undo" + shortcut="control|Z"> + <menu_item_call.on_click + function="Edit.Undo" /> + <menu_item_call.on_enable + function="Edit.EnableUndo" /> + </menu_item_call> + <menu_item_call + label="Redo" + layout="topleft" + name="Redo" + shortcut="control|Y"> + <menu_item_call.on_click + function="Edit.Redo" /> + <menu_item_call.on_enable + function="Edit.EnableRedo" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> <menu_item_call - label="Debug Settings" + label="Cut" + layout="topleft" + name="Cut" + shortcut="control|X"> + <menu_item_call.on_click + function="Edit.Cut" /> + <menu_item_call.on_enable + function="Edit.EnableCut" /> + </menu_item_call> + <menu_item_call + label="Copy" + layout="topleft" + name="Copy" + shortcut="control|C"> + <menu_item_call.on_click + function="Edit.Copy" /> + <menu_item_call.on_enable + function="Edit.EnableCopy" /> + </menu_item_call> + <menu_item_call + label="Paste" + layout="topleft" + name="Paste" + shortcut="control|V"> + <menu_item_call.on_click + function="Edit.Paste" /> + <menu_item_call.on_enable + function="Edit.EnablePaste" /> + </menu_item_call> + <menu_item_call + label="Delete" + layout="topleft" + name="Delete" + shortcut="Del"> + <menu_item_call.on_click + function="Edit.Delete" /> + <menu_item_call.on_enable + function="Edit.EnableDelete" /> + </menu_item_call> + <menu_item_call + label="Duplicate" + layout="topleft" + name="Duplicate" + shortcut="control|D"> + <menu_item_call.on_click + function="Edit.Duplicate" /> + <menu_item_call.on_enable + function="Edit.EnableDuplicate" /> + </menu_item_call> + <menu_item_separator + layout="topleft" /> + <menu_item_call + label="Select All" + layout="topleft" + name="Select All" + shortcut="control|A"> + <menu_item_call.on_click + function="Edit.SelectAll" /> + <menu_item_call.on_enable + function="Edit.EnableSelectAll" /> + </menu_item_call> + <menu_item_call + label="Deselect" + layout="topleft" + name="Deselect" + shortcut="control|E"> + <menu_item_call.on_click + function="Edit.Deselect" /> + <menu_item_call.on_enable + function="Edit.EnableDeselect" /> + </menu_item_call> + </menu> + <menu_item_separator /> + <menu_item_call + label="Debug Settings editor" layout="topleft" name="Debug Settings"> <menu_item_call.on_click @@ -83,7 +195,7 @@ </menu_item_call> <menu_item_separator /> <menu_item_call - label="UI Preview Tool" + label="XUI Preview Tool" layout="topleft" name="UI Preview Tool" shortcut="control|T"> diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml index 463a9fccb6..885ebbcd52 100644 --- a/indra/newview/skins/default/xui/en/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/en/menu_url_agent.xml @@ -19,7 +19,7 @@ function="Url.CopyLabel" /> </menu_item_call> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_group.xml b/indra/newview/skins/default/xui/en/menu_url_group.xml index cec0aa421e..68da7a0ced 100644 --- a/indra/newview/skins/default/xui/en/menu_url_group.xml +++ b/indra/newview/skins/default/xui/en/menu_url_group.xml @@ -19,7 +19,7 @@ function="Url.CopyLabel" /> </menu_item_call> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml index 7d09403b15..d7106da177 100644 --- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml @@ -28,7 +28,7 @@ function="Url.CopyLabel" /> </menu_item_call> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml index bbd63c6d8c..cbeb1f8e51 100644 --- a/indra/newview/skins/default/xui/en/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/en/menu_url_parcel.xml @@ -12,7 +12,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_slapp.xml b/indra/newview/skins/default/xui/en/menu_url_slapp.xml index 19df721b2b..3eeef0f47e 100644 --- a/indra/newview/skins/default/xui/en/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/en/menu_url_slapp.xml @@ -12,7 +12,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml index 0e9525fa4b..933f8a4484 100644 --- a/indra/newview/skins/default/xui/en/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/en/menu_url_slurl.xml @@ -21,7 +21,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml index 22cc035e49..62c7a2f5a9 100644 --- a/indra/newview/skins/default/xui/en/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/en/menu_url_teleport.xml @@ -12,7 +12,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Copy SLURL To Clipboard" + label="Copy SLurl To Clipboard" layout="topleft" name="url_copy"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 9306f83dde..b430de2b7b 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1848,28 +1848,7 @@ <menu_item_call.on_click function="Advanced.ClearGroupCache" parameter="ClearGroupCache" /> - </menu_item_call> - <menu_item_check - label="Enable Lip Sync(Beta)" - layout="topleft" - name="Enable Lip Sync(Beta)"> - <menu_item_check.on_check - function="CheckControl" - parameter="LipSyncEnabled" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="LipSyncEnabled" /> - </menu_item_check> - <menu_item_check - label="Tap-Tap-Hold to Run" - layout="topleft" - name="Tap-Tap-Hold to Run"> - <menu_item_check.on_check - function="Advanced.CheckAllowTapTapHoldRun" - parameter="TapTapHoldRun" /> - <menu_item_check.on_click - function="Advanced.ToggleAllowTapTapHoldRun" /> - </menu_item_check> + </menu_item_call> <menu_item_check label="Mouse Smoothing" layout="topleft" @@ -1884,7 +1863,7 @@ <menu_item_separator layout="topleft" /> <menu_item_call - label="Debug Settings" + label="Debug Settings editor" layout="topleft" name="Debug Settings"> <menu_item_call.on_click @@ -1892,7 +1871,7 @@ parameter="all" /> </menu_item_call> <menu_item_check - label="Debug (QA) Mode" + label="Activate Debug Mode (QA)" layout="topleft" name="Debug Mode" shortcut="control|alt|Q"> @@ -2006,7 +1985,73 @@ </menu> <menu create_jump_keys="true" - label="Debugging" + label="Show Info" + layout="topleft" + name="Display Info" + tear_off="true"> + <menu_item_check + label="Show Time" + layout="topleft" + name="Show Time"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugShowTime" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugShowTime" /> + </menu_item_check> + <menu_item_check + label="Show Render Info" + layout="topleft" + name="Show Render Info"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugShowRenderInfo" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugShowRenderInfo" /> + </menu_item_check> + <menu_item_check + label="Show Matrices" + layout="topleft" + name="Show Matrices"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugShowRenderMatrices" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugShowRenderMatrices" /> + </menu_item_check> + <menu_item_check + label="Show Color Under Cursor" + layout="topleft" + name="Show Color Under Cursor"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugShowColor" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugShowColor" /> + </menu_item_check> + <menu_item_separator + layout="topleft" /> + <menu_item_check + label="Show Updates to objects" + layout="topleft" + name="Show Updates" + shortcut="control|alt|shift|U"> + <menu_item_check.on_check + function="Advanced.CheckShowObjectUpdates" + parameter="ObjectUpdates" /> + <menu_item_check.on_click + function="Advanced.ToggleShowObjectUpdates" /> + </menu_item_check> + </menu> + <menu_item_separator + layout="topleft" /> + <menu + create_jump_keys="true" + label="Force an Error" layout="topleft" name="Force Errors" tear_off="true"> @@ -2060,38 +2105,15 @@ <menu_item_call.on_click function="Advanced.ForceErrorDisconnectViewer" /> </menu_item_call> - </menu> - <menu_item_separator - layout="topleft" /> - <menu_item_check - label="Output Debug Minidump" - layout="topleft" - name="Output Debug Minidump"> - <menu_item_check.on_check - function="CheckControl" - parameter="SaveMinidump" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="SaveMinidump" /> - </menu_item_check> - <menu_item_call - label="Memory Leaking Simulation" - layout="topleft" - name="Memory Leaking Simulation"> - <menu_item_call.on_click - function="Floater.Show" - parameter="mem_leaking" /> - </menu_item_call> - <menu_item_call - label="Bumps, Pushes & Hits..." + <menu_item_call + label="Simulate a Memory Leak..." layout="topleft" - name="Bumps, Pushes &amp; Hits"> - <menu_item_call.on_click - function="Floater.Show" - parameter="bumps" /> - </menu_item_call> - <menu_item_separator - layout="topleft" /> + name="Memory Leaking Simulation"> + <menu_item_call.on_click + function="Floater.Show" + parameter="mem_leaking" /> + </menu_item_call> + </menu> <menu create_jump_keys="true" label="Render Tests" @@ -2141,59 +2163,145 @@ function="Advanced.ToggleFrameTest" /> </menu_item_check> </menu> - <menu_item_separator - layout="topleft" /> - <menu - create_jump_keys="true" - label="Display Info" - layout="topleft" - name="Display Info" - tear_off="true"> - <menu_item_check - label="Show Time" - layout="topleft" - name="Show Time"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugShowTime" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugShowTime" /> - </menu_item_check> - <menu_item_check - label="Show Render Info" - layout="topleft" - name="Show Render Info"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugShowRenderInfo" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugShowRenderInfo" /> - </menu_item_check> - <menu_item_check - label="Show Matrices" - layout="topleft" - name="Show Matrices"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugShowRenderMatrices" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugShowRenderMatrices" /> - </menu_item_check> - <menu_item_check - label="Show Color Under Cursor" - layout="topleft" - name="Show Color Under Cursor"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugShowColor" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugShowColor" /> - </menu_item_check> - </menu> + <menu + create_jump_keys="true" + label="Render Metadata" + layout="topleft" + name="Render Metadata" + tear_off="true"> + <menu_item_check + label="Bounding Boxes" + layout="topleft" + name="Bounding Boxes"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="bboxes" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="bboxes" /> + </menu_item_check> + <menu_item_check + label="Octree" + layout="topleft" + name="Octree"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="octree" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="octree" /> + </menu_item_check> + <menu_item_check + label="Shadow Frusta" + layout="topleft" + name="Shadow Frusta"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="shadow frusta" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="shadow frusta" /> + </menu_item_check> + <menu_item_check + label="Occlusion" + layout="topleft" + name="Occlusion"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="occlusion" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="occlusion" /> + </menu_item_check> + <menu_item_check + label="Render Batches" + layout="topleft" + name="Render Batches"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="render batches" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="render batches" /> + </menu_item_check> + <menu_item_check + label="Texture Anim" + layout="topleft" + name="Texture Anim"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="texture anim" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="texture anim" /> + </menu_item_check> + <menu_item_check + label="Texture Priority" + layout="topleft" + name="Texture Priority"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="texture priority" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="texture priority" /> + </menu_item_check> + <menu_item_check + label="Texture Area" + layout="topleft" + name="Texture Area"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="texture area" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="texture area" /> + </menu_item_check> + <menu_item_check + label="Face Area" + layout="topleft" + name="Face Area"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="face area" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="face area" /> + </menu_item_check> + <menu_item_check + label="Lights" + layout="topleft" + name="Lights"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="lights" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="lights" /> + </menu_item_check> + <menu_item_check + label="Collision Skeleton" + layout="topleft" + name="Collision Skeleton"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="collision skeleton" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="collision skeleton" /> + </menu_item_check> + <menu_item_check + label="Raycast" + layout="topleft" + name="Raycast"> + <menu_item_check.on_check + function="Advanced.CheckInfoDisplay" + parameter="raycast" /> + <menu_item_check.on_click + function="Advanced.ToggleInfoDisplay" + parameter="raycast" /> + </menu_item_check> + </menu> <menu_item_separator layout="topleft" /> <menu @@ -2213,6 +2321,8 @@ function="ToggleControl" parameter="AgentPause" /> </menu_item_check> + <menu_item_separator + layout="topleft" /> <menu_item_call label="Enable Message Log" layout="topleft" @@ -2227,6 +2337,8 @@ <menu_item_call.on_click function="Advanced.DisableMessageLog" /> </menu_item_call> + <menu_item_separator + layout="topleft" /> <menu_item_check label="Velocity Interpolate Objects" layout="topleft" @@ -2249,6 +2361,8 @@ function="ToggleControl" parameter="PingInterpolate" /> </menu_item_check> + <menu_item_separator + layout="topleft" /> <menu_item_call label="Drop a Packet" layout="topleft" @@ -2257,20 +2371,41 @@ <menu_item_call.on_click function="Advanced.DropPacket" /> </menu_item_call> - <menu_item_check - label="Show Updates" - layout="topleft" - name="Show Updates" - shortcut="control|alt|shift|U"> - <menu_item_check.on_check - function="Advanced.CheckShowObjectUpdates" - parameter="ObjectUpdates" /> - <menu_item_check.on_click - function="Advanced.ToggleShowObjectUpdates" /> - </menu_item_check> </menu> <menu_item_separator layout="topleft" /> + <menu_item_call + label="Bumps, Pushes & Hits..." + layout="topleft" + name="Bumps, Pushes &amp; Hits"> + <menu_item_call.on_click + function="Floater.Show" + parameter="bumps" /> + </menu_item_call> + <menu_item_check + label="Output Debug Minidump" + layout="topleft" + name="Output Debug Minidump"> + <menu_item_check.on_check + function="CheckControl" + parameter="SaveMinidump" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="SaveMinidump" /> + </menu_item_check> + <menu_item_check + label="Debug Permissions in Build Tool" + layout="topleft" + name="DebugPermissions"> + <menu_item_check.on_check + function="CheckControl" + parameter="DebugPermissions" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="DebugPermissions" /> + </menu_item_check> + <menu_item_separator + layout="topleft" /> <menu_item_check label="View Admin Options" layout="topleft" @@ -2290,7 +2425,7 @@ function="Advanced.RequestAdminStatus" /> </menu_item_call> <menu_item_call - label="Leave Admin Status" + label="Deactivate Admin Status" layout="topleft" name="Leave Admin Options" shortcut="control|alt|shift|G"> @@ -2406,7 +2541,47 @@ <menu_item_check.on_enable function="Advanced.EnableObjectObjectOcclusion" /> </menu_item_check> - <menu_item_check + <menu_item_check + label="Framebuffer Objects" + layout="topleft" + name="Framebuffer Objects"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderUseFBO" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderUseFBO" /> + <menu_item_check.on_enable + function="Advanced.EnableRenderFBO" /> + </menu_item_check> + <menu_item_check + label="Deferred Rendering" + layout="topleft" + name="Deferred Rendering"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderDeferred" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderDeferred" /> + <menu_item_check.on_enable + function="Advanced.EnableRenderDeferred" /> + </menu_item_check> + <menu_item_check + label="Global Illumintation" + layout="topleft" + name="Global Illumination"> + <menu_item_check.on_check + function="CheckControl" + parameter="RenderDeferredGI" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="RenderDeferredGI" /> + <menu_item_check.on_enable + function="Advanced.EnableRenderDeferredGI" /> + </menu_item_check> + + <menu_item_check label="Debug GL" layout="topleft" name="Debug GL"> @@ -2461,6 +2636,16 @@ function="Advanced.ToggleDisableTextures" /> </menu_item_check> <menu_item_check + label="Texture Atlas" + layout="topleft" + name="Texture Atlas"> + <menu_item_check.on_check + function="Advanced.CheckTextureAtlas" + parameter="TextureAtlas" /> + <menu_item_check.on_click + function="Advanced.ToggleTextureAtlas" /> + </menu_item_check> + <menu_item_check label="Render Attached Lights" layout="topleft" name="Render Attached Lights"> @@ -2555,14 +2740,6 @@ function="Advanced.WebBrowserTest" /> </menu_item_call> <menu_item_call - label="Simple Web Browser Test" - layout="topleft" - name="Simple Web Browser Test"> - <menu_item_call.on_click - function="Floater.Show" - parameter="html_simple.http://www.secondlife.com" /> - </menu_item_call> - <menu_item_call label="UI/Color Settings" layout="topleft" name="UI/Color Settings"> @@ -3039,17 +3216,6 @@ </menu> <menu_item_separator layout="topleft" /> - <menu_item_check - label="Debug Permissions" - layout="topleft" - name="DebugPermissions"> - <menu_item_check.on_check - function="CheckControl" - parameter="DebugPermissions" /> - <menu_item_check.on_click - function="ToggleControl" - parameter="DebugPermissions" /> - </menu_item_check> <menu_item_call label="Compress Images" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7ede45a080..80d501b63e 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4244,6 +4244,7 @@ http://secondlife.com/corporate/cs.php All reported abuses of the Terms of Service and Community Standards are investigated and resolved. You can view the incident resolution on the Incident Report at: http://secondlife.com/support/incidentreport.php + <unique/> </notification> <notification @@ -4258,6 +4259,7 @@ The region owner will resolve reports based on the local rules of this region as (View covenants by going to the World menu and selecting About Land.) The resolution of this report applies only to this Region. Residents' access to other areas of [SECOND_LIFE] will not be affected by the outcome of this report. Only Linden Lab can restrict access to the entirety of [SECOND_LIFE]. + <unique/> </notification> <notification @@ -6527,6 +6529,13 @@ Click Accept to join the chat or Decline to decline the invitation. Click Block Attachment has been saved. </notification> + <notification + icon="alertmodal.tga" + name="UnableToFindHelpTopic" + type="alertmodal"> +Unable to find the help topic for this element. + </notification> + <global name="UnsupportedCPU"> - Your CPU speed does not meet the minimum requirements. </global> diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 80dca8c0c1..13ceab7604 100644 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -2,7 +2,7 @@ <panel background_opaque="true" background_visible="true" - bg_opaque_color="0.25 0.25 0.25 1" + bg_opaque_color="MouseGray" follows="left|top|right" height="60" layout="topleft" @@ -14,7 +14,7 @@ height="60" layout="topleft" name="navigation_panel" - width="600"> + width="600"> <button follows="left|top" font="SansSerifSmall" @@ -32,7 +32,7 @@ tool_tip="Go back to previous location" top="3" width="31" /> - + <button follows="left|top" font="SansSerifSmall" @@ -90,7 +90,7 @@ width="20" /> --> </location_input> - + <!-- <button --> <!-- follows="right|top" --> <!-- height="20" --> @@ -128,7 +128,7 @@ label="Search" /> </search_combo_box> </panel> - + <favorites_bar follows="left|right|top" height="25" diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml index 8b19f9a515..683a54b366 100644 --- a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml @@ -7,7 +7,7 @@ left="0" name="chat_bar" top="24" - width="500"> + width="510"> <line_editor border_style="line" border_thickness="1" @@ -27,20 +27,21 @@ top="3" layout="topleft" left_pad="5" - label="Log" + label="Log" height="20"> <button.commit_callback function="Floater.Toggle" parameter="nearby_chat"/> </button> <chiclet_talk follows="right" height="20" + speak_button.font="SansSerifMedium" layout="topleft" left_pad="5" name="talk" top="3" width="100" /> <gesture_combo_box - follows="right" + follows="right" height="20" label="Gestures" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_notes.xml b/indra/newview/skins/default/xui/en/panel_notes.xml index 12badfccf0..58ebac2a84 100644 --- a/indra/newview/skins/default/xui/en/panel_notes.xml +++ b/indra/newview/skins/default/xui/en/panel_notes.xml @@ -8,7 +8,7 @@ left="0" name="panel_notes" top="0" - width="285"> + width="313"> <layout_stack name="layout" orientation="vertical" @@ -17,7 +17,7 @@ left="0" top="0" height="420" - width="285" + width="313" border_size="0"> <panel name="notes_stack" @@ -26,7 +26,7 @@ top="0" left="0" height="390" - width="285"> + width="313"> <scroll_container color="DkGray2" follows="left|top|right|bottom" @@ -36,14 +36,14 @@ name="profile_scroll" opaque="true" top="0" - width="285"> + width="313"> <panel height="350" layout="topleft" name="profile_scroll_panel" top="0" left="0" - width="240"> + width="293"> <text follows="left|top" font="SansSerifBold" @@ -52,9 +52,9 @@ left="10" name="status_message" text_color="white" - top="0" + top="5" value="My private notes:" - width="230" /> + width="293" /> <text_editor follows="left|top" height="200" @@ -65,7 +65,7 @@ name="notes_edit" text_color="black" top_pad="10" - width="235" + width="280" word_wrap="true" /> <text follows="left|top" @@ -77,7 +77,7 @@ text_color="white" top_pad="10" value="Let this person:" - width="225" /> + width="293" /> <check_box enabled="false" height="20" @@ -86,7 +86,7 @@ left="20" name="status_check" top_pad="0" - width="230" /> + width="293" /> <check_box enabled="false" height="20" @@ -95,7 +95,7 @@ left="20" name="map_check" top_pad="0" - width="230" /> + width="293" /> <check_box enabled="false" height="20" @@ -104,7 +104,7 @@ left="20" name="objects_check" top_pad="0" - width="230" /> + width="293" /> </panel> </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 310e3908ca..132a2d1dc5 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -117,11 +117,12 @@ color="DkGray" layout="topleft" left="0" name="friends_accordion" - top="2" + top="0" width="313"> <accordion_tab can_resize="false" layout="topleft" + height="230" min_height="150" name="tab_online" title="Online"> @@ -162,7 +163,7 @@ color="DkGray" layout="topleft" left="0" name="bottom_panel" - width="285"> + width="313"> <button follows="bottom|left" font="SansSerifBigBold" @@ -199,7 +200,7 @@ color="DkGray" image_unselected="TrashItem_Off" image_disabled="TrashItem_Disabled" layout="topleft" - left_pad="180" + left_pad="230" name="del_btn" picture_style="true" tool_tip="Remove selected person from your Friends list" @@ -216,7 +217,7 @@ color="DkGray" top="0" layout="topleft" name="groups_panel" - width="285"> + width="313"> <group_list draw_heading="false" follows="left|top|right|bottom" @@ -226,7 +227,7 @@ color="DkGray" left="0" name="group_list" top="2" - width="285" /> + width="313" /> <panel background_visible="true" bevel_style="none" @@ -237,7 +238,7 @@ color="DkGray" layout="topleft" left="0" name="bottom_panel" - width="285"> + width="313"> <button enabled="false" follows="bottom|left" @@ -288,7 +289,7 @@ color="DkGray" image_selected="TrashItem_Press" image_unselected="TrashItem_Off" layout="topleft" - left_pad="146" + left_pad="196" name="minus_btn" picture_style="true" tool_tip="Leave selected group" @@ -305,7 +306,7 @@ color="DkGray" label="Recent" layout="topleft" name="recent_panel" - width="285"> + width="313"> <avatar_list_tmp color="DkGray2" follows="left|top|right|bottom" @@ -314,7 +315,7 @@ color="DkGray" left="0" name="avatar_list" top="2" - width="285" /> + width="313" /> <panel background_visible="true" bevel_style="none" @@ -325,7 +326,7 @@ color="DkGray" layout="topleft" left="0" name="bottom_panel" - width="285"> + width="313"> <button follows="bottom|left" font="SansSerifBigBold" diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index b379ad2276..8b9fe2cf77 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -8,7 +8,7 @@ min_height="350" min_width="240" name="places panel" - width="305"> + width="333"> <string name="landmarks_tab_title" value="Landmarks" /> @@ -24,7 +24,7 @@ left="15" name="Filter" top="3" - width="256" /> + width="300" /> <tab_container follows="all" height="326" @@ -33,7 +33,7 @@ name="Places Tabs" tab_position="top" top="30" - width="285" /> + width="313" /> <panel class="panel_place_info" filename="panel_place_info.xml" @@ -50,7 +50,7 @@ left="0" name="button_panel" top_pad="10" - width="305"> + width="313"> <button follows="bottom|left" font="SansSerifSmallBold" @@ -60,7 +60,7 @@ left="5" name="teleport_btn" top="0" - width="80" /> + width="90" /> <button follows="bottom|left" font="SansSerifSmallBold" @@ -104,7 +104,7 @@ left="5" name="create_landmark_btn" top="0" - width="60" /> + width="70" /> <button follows="bottom|left" font="SansSerifSmallBold" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml index 88bf3d3b22..b492ee1dc3 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml @@ -214,4 +214,43 @@ My Avatar: left="30" name="arrow_keys_move_avatar_check" width="237" /> + <check_box + control_name="TapTapHoldtoRun" + height="20" + label="Tap-tap-hold to run" + layout="topleft" + left="30" + name="tap_tap_hold_to_run" + width="237" /> + <!--menu_item_check + label="Tap-Tap-Hold to Run" + layout="topleft" + name="Tap-Tap-Hold to Run"> + <menu_item_check.on_check + function="Advanced.CheckAllowTapTapHoldRun" + parameter="TapTapHoldRun" /> + <menu_item_check.on_click + function="Advanced.ToggleAllowTapTapHoldRun" /> + </menu_item_check--> + <check_box + control_name="EnableLipSync" + height="20" + label="Move my avatar's lips when speaking" + layout="topleft" + left="30" + name="enable_lip_sync" + width="237" /> + <!--menu_item_check + label="Enable Lip Sync(Beta)" + layout="topleft" + name="Enable Lip Sync(Beta)"> + <menu_item_check.on_check + function="CheckControl" + parameter="LipSyncEnabled" /> + <menu_item_check.on_click + function="ToggleControl" + parameter="LipSyncEnabled" /> + </menu_item_check--> + + </panel>
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index 70292a38aa..a94cfbeec4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -146,14 +146,25 @@ width="400"> I want to access content rated: </text> + <text + type="string" + length="1" + follows="left|top" + height="10" + layout="topleft" + left="90" + name="maturity_desired_textbox" + top_pad="10" + width="400"> + </text> <combo_box control_name="PreferredMaturity" follows="left|bottom" height="18" layout="topleft" - left_delta="50" + left_delta="-10" name="maturity_desired_combobox" - top_pad="10" + top_pad="-10" width="170"> <combo_box.item label="PG, Mature and Adult" @@ -264,6 +275,7 @@ top_pad="5" width="300" /> <check_box + enabled_control="AvatarNameTagMode" control_name="SmallAvatarNames" height="16" initial_value="true" diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 2a800f809b..7f72c7b0e9 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -317,8 +317,7 @@ width="313"> <button follows="bottom|left" - font="SansSerifSmallBold" - height="25" + height="23" label="Edit Profile" layout="topleft" left="0" @@ -327,8 +326,7 @@ width="130" /> <button follows="bottom|left" - font="SansSerifSmallBold" - height="25" + height="23" label="Edit Appearance" layout="topleft" left_pad="5" diff --git a/indra/newview/skins/default/xui/en/panel_profile_view.xml b/indra/newview/skins/default/xui/en/panel_profile_view.xml index 9aa2c304f2..cbe646f3cc 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_view.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_view.xml @@ -7,7 +7,7 @@ min_height="350" min_width="240" name="panel_target_profile" - width="305"> + width="333"> <string name="status_online"> Online diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml index 8445b933bf..01fbc81c32 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -26,8 +26,6 @@ Purchased land in this region may not be joined or subdivided. </panel.string> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -40,8 +38,6 @@ Estate </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -53,8 +49,6 @@ Name: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -66,8 +60,6 @@ mainland </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -79,8 +71,6 @@ Owner: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -93,8 +83,6 @@ </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -106,8 +94,6 @@ Covenant: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -130,8 +116,6 @@ width="18" /> <text_editor - type="string" - length="1" enabled="false" follows="left|top" height="100" @@ -157,8 +141,6 @@ width="90" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -170,8 +152,6 @@ on all parcels in the estate. </text> <text - type="string" - length="1" follows="left|top" height="16" layout="topleft" @@ -184,8 +164,6 @@ the Covenant for this Estate. </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -198,8 +176,6 @@ the Covenant for this Estate. Region </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -211,8 +187,6 @@ the Covenant for this Estate. Name: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -224,8 +198,6 @@ the Covenant for this Estate. leyla </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -237,8 +209,6 @@ the Covenant for this Estate. Type: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -250,8 +220,6 @@ the Covenant for this Estate. Mainland / Homestead </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -263,8 +231,6 @@ the Covenant for this Estate. Rating: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -276,8 +242,6 @@ the Covenant for this Estate. Adult </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -289,8 +253,6 @@ the Covenant for this Estate. Resale: </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -303,8 +265,6 @@ the Covenant for this Estate. resold. </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -316,8 +276,6 @@ resold. Subdivide: </text> <text - type="string" - length="1" follows="left|top" height="30" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index 6a43bf3c4b..54664bb6b9 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -10,8 +10,6 @@ top="320" width="280"> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -23,8 +21,6 @@ Region: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -104,8 +100,6 @@ top="100" width="80" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -116,8 +110,6 @@ Object Return </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -128,8 +120,6 @@ Resident: </text> <line_editor - type="string" - length="1" border_style="line" border_thickness="1" enabled="false" @@ -154,8 +144,6 @@ top_delta="0" width="70" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml index c905e0e42c..6e837bcfee 100644 --- a/indra/newview/skins/default/xui/en/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml @@ -1,25 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - border="true" + border="false" follows="top|left" height="512" + top="0" + left="0" name="EstateWrapper" label="Estate" layout="topleft" - width="280"> - <scroll_container - follows="top|left|right|bottom" - height="508" - name="container1" - layout="topleft" - width="280"> + width="313"> <panel follows="top|left" height="950" label="Estate" layout="topleft" name="Estate" - width="258"> + width="313"> <panel.string name="email_unsupported"> Feature unsupported @@ -30,10 +26,10 @@ follows="left|top" height="32" layout="topleft" - left="10" + left="0" name="estate_help_text" - top="14" - width="300"> + top="5" + width="313"> Changes to settings on this tab will affect all regions in the estate. </text> @@ -41,69 +37,51 @@ type="string" length="1" follows="left|top" - font="SansSerif" - height="20" + layout="topleft" - left_delta="0" name="estate_text" - top_pad="2" - width="80"> + top_pad="5" + width="313"> Estate: </text> <text type="string" length="1" follows="left|top" - font="SansSerif" - height="20" layout="topleft" - left_delta="0" name="estate_name" - top_delta="16" - width="150"> + top_pad="5" + width="313"> (unknown) </text> <text type="string" length="1" follows="left|top" - font="SansSerif" - height="20" layout="topleft" left_delta="0" name="owner_text" - top_pad="2" - width="80"> - Owner: + top_pad="5" + width="313"> + Estate Owner: </text> <text type="string" length="1" follows="left|top" - font="SansSerif" - height="20" layout="topleft" - left_delta="0" name="estate_owner" - top_delta="16" - width="150"> + top_pad="5" + width="313"> (unknown) </text> - <view_border - bevel_style="in" - follows="top|left" - height="290" - layout="topleft" - left_delta="-4" - top_pad="5" - width="250" /> <check_box - height="20" + height="23" label="Use Global Time" layout="topleft" left="12" name="use_global_time_check" - top="132" + top="102" width="200" /> <button follows="left|top" @@ -116,12 +94,12 @@ top_delta="2" width="18" /> <check_box - height="20" + height="23" label="Fixed Sun" layout="topleft" left="12" name="fixed_sun_check" - top="152" + top_pad="10" width="100" /> <button follows="left|top" @@ -134,16 +112,16 @@ top_delta="2" width="18" /> <icon - height="20" + height="23" image_name="icon_day_cycle.tga" layout="topleft" left="47" name="daycycle" - top="177" + top_pad="10" width="165" /> <slider follows="left|top" - height="20" + height="23" increment="0.001" label="Phase" layout="topleft" @@ -152,16 +130,15 @@ min_val="6" name="sun_hour_slider" show_text="false" - top="202" + top_pad="10" width="200" /> <check_box - height="20" + height="23" label="Allow Public Access" layout="topleft" left_delta="0" name="externally_visible_check" - top_pad="6" - width="200" /> + top_pad="10" /> <button follows="left|top" font="SansSerifSmall" @@ -180,7 +157,7 @@ layout="topleft" left="32" name="Only Allow" - top="250" + top_pad="5" width="278"> Restrict Access To: </text> @@ -205,12 +182,12 @@ top_pad="2" width="278" /> <check_box - height="20" + height="23" label="Allow Voice Chat" layout="topleft" left="12" name="voice_chat_check" - top="304" + top_pad="5" width="200" /> <button follows="left|top" @@ -223,12 +200,12 @@ top_delta="2" width="18" /> <check_box - height="20" + height="23" label="Allow Direct Teleport" layout="topleft" left="12" name="allow_direct_teleport" - top_pad="4" + top_pad="0" width="80" /> <button follows="left|top" @@ -244,12 +221,12 @@ type="string" length="1" follows="left|top" - height="20" + height="23" layout="topleft" left="10" name="abuse_email_text" top_pad="5" - width="180"> + width="313"> Abuse email address: </text> <line_editor @@ -258,8 +235,8 @@ layout="topleft" left="15" name="abuse_email_address" - top_pad="5" - width="205" /> + top_pad="0" + width="250" /> <button follows="left|top" font="SansSerifSmall" @@ -273,7 +250,7 @@ <button enabled="false" follows="left|top" - height="20" + height="23" label="Apply" layout="topleft" name="apply_btn" @@ -282,7 +259,7 @@ width="90" /> <button follows="left|top" - height="20" + height="23" label="Send Message To Estate..." layout="topleft" left="8" @@ -291,7 +268,7 @@ width="250" /> <button follows="left|top" - height="20" + height="23" label="Kick User from Estate..." layout="topleft" left="8" @@ -303,7 +280,7 @@ length="1" top="490" follows="left|top" - height="20" + height="23" layout="topleft" name="estate_manager_label" left="8" @@ -320,26 +297,18 @@ name="estate_manager_help" top_delta="-1" width="18" /> - <view_border - bevel_style="none" - follows="top|left" - height="60" - layout="topleft" - left="8" - top_pad="5" - width="250" /> <name_list follows="left|top" height="60" layout="topleft" - left_delta="0" + left="8" multi_select="true" name="estate_manager_name_list" - top_delta="0" - width="250" /> + top_pad="0" + width="300" /> <button follows="left|top" - height="20" + height="23" label="Add..." layout="topleft" left="8" @@ -348,7 +317,7 @@ width="90" /> <button follows="left|top" - height="20" + height="23" label="Remove..." layout="topleft" name="remove_estate_manager_btn" @@ -359,7 +328,7 @@ type="string" length="1" follows="left|top" - height="20" + height="23" layout="topleft" left="8" name="allow_resident_label" @@ -377,26 +346,18 @@ name="allow_resident_help" top_delta="-1" width="18" /> - <view_border - bevel_style="none" - follows="top|left" - height="60" - layout="topleft" - left="8" - top_pad="5" - width="250" /> <name_list follows="left|top" height="60" layout="topleft" - left_delta="0" + left="8" multi_select="true" name="allowed_avatar_name_list" - top_delta="0" - width="250" /> + top_pad="0" + width="300" /> <button follows="left|top" - height="20" + height="23" label="Add..." layout="topleft" left="8" @@ -405,7 +366,7 @@ width="90" /> <button follows="left|top" - height="20" + height="23" label="Remove..." layout="topleft" name="remove_allowed_avatar_btn" @@ -416,7 +377,7 @@ type="string" length="1" follows="left|top" - height="20" + height="23" layout="topleft" left="8" name="allow_group_label" @@ -434,26 +395,18 @@ name="allow_group_help" top_delta="-1" width="18" /> - <view_border - bevel_style="none" - follows="top|left" - height="60" - layout="topleft" - left="8" - top_pad="5" - width="250" /> <name_list follows="left|top" height="60" layout="topleft" - left_delta="0" + left="8" multi_select="true" name="allowed_group_name_list" - top_delta="0" - width="250" /> + top_pad="0" + width="300" /> <button follows="left|top" - height="20" + height="23" label="Add..." layout="topleft" left="8" @@ -462,7 +415,7 @@ width="90" /> <button follows="left|top" - height="20" + height="23" label="Remove..." layout="topleft" name="remove_allowed_group_btn" @@ -473,7 +426,7 @@ type="string" length="1" follows="left|top" - height="20" + height="23" layout="topleft" left="8" name="ban_resident_label" @@ -491,26 +444,18 @@ name="ban_resident_help" top_delta="-1" width="18" /> - <view_border - bevel_style="none" - follows="top|left" - height="60" - layout="topleft" - left="8" - top_pad="5" - width="250" /> <name_list follows="left|top" height="60" layout="topleft" - left_delta="0" + left="8" multi_select="true" name="banned_avatar_name_list" - top_delta="0" - width="250" /> + top_pad="0" + width="300" /> <button follows="left|top" - height="20" + height="23" label="Add..." layout="topleft" left="8" @@ -519,7 +464,7 @@ width="90" /> <button follows="left|top" - height="20" + height="23" label="Remove..." layout="topleft" name="remove_banned_avatar_btn" @@ -527,5 +472,4 @@ top_delta="0" width="90" /> </panel> - </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml index b7a32213cf..9b9c62dbf9 100644 --- a/indra/newview/skins/default/xui/en/panel_region_general.xml +++ b/indra/newview/skins/default/xui/en/panel_region_general.xml @@ -10,8 +10,6 @@ top="360" width="280"> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -23,8 +21,6 @@ Region: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -36,8 +32,6 @@ unknown </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -49,8 +43,6 @@ Version: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -62,8 +54,6 @@ unknown </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -75,8 +65,6 @@ Type: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -261,8 +249,6 @@ top_delta="2" width="18" /> <text - type="string" - length="1" follows="left|top" height="20" label="Maturity" diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml index bdf74c5621..a78a1ea98c 100644 --- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml @@ -10,8 +10,6 @@ top="320" width="280"> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -23,8 +21,6 @@ Region: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" diff --git a/indra/newview/skins/default/xui/en/panel_region_texture.xml b/indra/newview/skins/default/xui/en/panel_region_texture.xml index 5285a53c59..404e1b8907 100644 --- a/indra/newview/skins/default/xui/en/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_region_texture.xml @@ -21,8 +21,6 @@ name="Textures" width="258"> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -34,8 +32,6 @@ Region: </text> <text - type="string" - length="1" follows="left|top" font="SansSerif" height="20" @@ -47,8 +43,6 @@ unknown </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -92,8 +86,6 @@ top_delta="0" width="100" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -104,8 +96,6 @@ 1 (Low) </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -116,8 +106,6 @@ 2 </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -128,8 +116,6 @@ 3 </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -140,8 +126,6 @@ 4 (High) </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -152,8 +136,6 @@ Texture Elevation Ranges </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -164,8 +146,6 @@ Southwest </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -228,8 +208,6 @@ top_delta="0" width="100" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -240,8 +218,6 @@ Southeast </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -304,8 +280,6 @@ top_delta="0" width="100" /> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" @@ -317,8 +291,6 @@ for the textures above. </text> <text - type="string" - length="1" follows="left|top" height="20" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml index 200c67b321..418b88b7b5 100644 --- a/indra/newview/skins/default/xui/en/panel_side_tray.xml +++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml @@ -8,9 +8,10 @@ > <sidetray_tab name="sidebar_home" + help_topic="sidebar_home" tab_title="Home" description="Home." - image="BackArrow_Off" + image="TabIcon_Open_Off" mouse_opaque="false" background_opaque="false" background_visible="true" @@ -26,6 +27,7 @@ <sidetray_tab name="sidebar_people" + help_topic="sidebar_people" tab_title="People" description="Find your friends, contacts and people nearby." image="TabIcon_People_Off" @@ -35,6 +37,7 @@ > <panel_container name="panel_container" + width="333" > <panel class="panel_people" @@ -56,6 +59,7 @@ filename="panel_group_info_sidetray.xml" label="Group Info" border="true" + font="SansSerifBold" /> <panel class="panel_block_list_sidetray" @@ -63,12 +67,14 @@ filename="panel_block_list_sidetray.xml" label="Blocked Residents & Objects" border="true" + font="SansSerifBold" /> </panel_container> </sidetray_tab> <sidetray_tab name="sidebar_places" + help_topic="sidebar_places" tab_title="Places" label="Places" description="Find places to go and places you've been." @@ -82,11 +88,13 @@ filename="panel_places.xml" label="Places" border="true" + font="SansSerifBold" /> </sidetray_tab> <sidetray_tab name="sidebar_me" + help_topic="sidebar_me" tab_title="Me" description="Change your profile, your look and quick links to your outfits." image="TabIcon_Me_Off" @@ -105,6 +113,7 @@ <sidetray_tab name="sidebar_appearance" + help_topic="sidebar_appearance" tab_title="Appearance" description="Change your looks and appearance." image="TabIcon_Appearance_Off" @@ -117,6 +126,8 @@ name="panel_appearance" filename="panel_appearance.xml" border="true" + label="Edit Appearance" + font="SansSerifBold" /> </sidetray_tab> diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml index e87517e200..d379c60aed 100644 --- a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml +++ b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml @@ -7,7 +7,7 @@ label="home_tab" layout="topleft" name="home_tab" - width="300"> + width="333"> <panel background_visible="true" bg_alpha_color="DkGray2" @@ -17,7 +17,7 @@ layout="topleft" left="10" name="sidebar_people" - width="280"> + width="313"> <text follows="left|right|top" font="SansSerifBigBold" @@ -65,7 +65,7 @@ layout="topleft" left="10" name="sidebar_places" - width="280"> + width="313"> <text follows="left|right|top" font="SansSerifBigBold" @@ -113,7 +113,7 @@ layout="topleft" left="10" name="sidebar_me" - width="280"> + width="313"> <text follows="left|right|top" font="SansSerifBigBold" @@ -161,7 +161,7 @@ layout="topleft" left="10" name="sidebar_appearance" - width="280"> + width="313"> <text follows="left|right|top" font="SansSerifBigBold" diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index f597211ec9..c178554287 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -2,14 +2,14 @@ <panel background_opaque="true" background_visible="true" - bg_opaque_color="0.25 0.25 0.25 1" + bg_opaque_color="MouseGray" follows="top|left|right" - height="18" + height="19" layout="topleft" left="0" mouse_opaque="false" name="status" - top="18" + top="19" width="1000"> <panel.string name="StatBarDaysOfWeek"> @@ -41,164 +41,166 @@ </panel.string> <button auto_resize="true" + halign="left" follows="right|bottom" font="SansSerifSmall" - height="16" + image_color="White_05" + flash_color="EmphasisColor" + image_overlay="BuyArrow_Over" + height="18" layout="topleft" - left="-150" + left="-210" name="buycurrency" picture_style="true" - tool_tip="Account Balance / Buy currency" - top="1" - width="60" /> + tool_tip="My Balance / Buy currency" + top="0" + width="117" /> <text type="string" length="1" disabled_color="TimeTextColor" follows="right|bottom" halign="right" - height="20" + height="16" + top="3" layout="topleft" left_pad="5" name="TimeText" text_color="TimeTextColor" tool_tip="Current Time (Pacific)" - top_delta="-1" - v_pad="2" width="80"> 12:00 AM </text> <button follows="right|bottom" height="16" - image_selected="status_script_debug.tga" - image_unselected="status_script_debug.tga" layout="topleft" left_delta="-537" + image_selected="Inv_DangerousScript" + image_unselected="Inv_DangerousScript" name="scriptout" picture_style="true" scale_image="false" tool_tip="Script Warnings and Errors" - top_delta="2" + top="0" visible="false" width="16" /> <button follows="right|bottom" - height="18" - image_selected="status_health.tga" - image_unselected="status_health.tga" + height="16" + image_selected="Health" + image_unselected="Health" layout="topleft" - left_delta="16" + left_pad="7" name="health" picture_style="true" scale_image="false" tool_tip="Health" - top_delta="2" + top="0" visible="false" - width="24" /> + width="16" /> <text type="string" length="1" disabled_color="HealthTextColor" follows="rsight|bottom" font_shadow="hard" - height="18" + height="16" layout="topleft" - left_delta="24" + left_pad="18" name="HealthText" text_color="HealthTextColor" tool_tip="Health" - top_delta="-4" - v_pad="2" + top="0" visible="false" width="31"> 100% </text> <button follows="right|bottom" - height="18" - image_selected="status_no_fly.tga" - image_unselected="status_no_fly.tga" + height="16" + image_selected="Move_Fly_Disabled" + image_unselected="Move_Fly_Disabled" layout="topleft" - left_delta="31" + left_pad="7" name="no_fly" picture_style="true" scale_image="false" tool_tip="Flying not allowed" - top_delta="4" + top="3" visible="false" - width="24" /> + width="16" /> <button follows="right|bottom" - height="18" - image_selected="status_no_build.tga" - image_unselected="status_no_build.tga" + height="16" + image_selected="Tool_Create" + image_unselected="Tool_Create" layout="topleft" - left_delta="24" + left_pad="7" name="no_build" picture_style="true" scale_image="false" tool_tip="Building/Rezzing not allowed" - top_delta="0" + top="0" visible="false" - width="24" /> + width="16" /> <button follows="right|bottom" - height="18" - image_selected="status_no_scripts.tga" - image_unselected="status_no_scripts.tga" + height="16" + image_selected="Inv_Script" + image_unselected="Inv_Script" layout="topleft" - left_delta="24" + left_pad="7" name="no_scripts" picture_style="true" scale_image="false" tool_tip="Scripts not allowed" - top_delta="0" + top="0" visible="false" - width="24" /> + width="16" /> <button follows="right|bottom" - height="18" - image_selected="status_no_push.tga" - image_unselected="status_no_push.tga" + height="16" + image_selected="Inv_Gesture" + image_unselected="Inv_Gesture" layout="topleft" - left_delta="24" + left_pad="7" name="restrictpush" picture_style="true" scale_image="false" tool_tip="No Pushing" - top_delta="0" + top="0" visible="false" - width="24" /> + width="16" /> <button follows="right|bottom" height="18" - image_selected="status_no_voice.tga" - image_unselected="status_no_voice.tga" + image_selected="Microphone_Mute" + image_unselected="Microphone_Mute" layout="topleft" - left_delta="24" + left_pad="7" name="status_no_voice" picture_style="true" scale_image="false" tool_tip="Voice not available here" - top_delta="0" + top="1" visible="false" - width="24" /> + width="16" /> <button follows="right|bottom" height="16" - image_selected="status_buy_land_pressed.tga" - image_unselected="status_buy_land.tga" + image_selected="Icon_For_Sale" + image_unselected="Icon_For_Sale" layout="topleft" left_pad="7" name="buyland" picture_style="true" tool_tip="Buy this parcel" - top_delta="-3" + top="0" visible="false" width="16" /> <text - enabled="false" + enabled="true" follows="right|bottom" halign="center" height="12" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4206b87c2b..2eb9ba6d07 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -94,8 +94,9 @@ <string name="BUTTON_MINIMIZE">Minimize</string> <string name="BUTTON_TEAR_OFF">Tear Off</string> <string name="BUTTON_EDIT">Edit</string> - <string name="BUTTON_DOCK">Dock</string> - <string name="BUTTON_UNDOCK">Undock</string> + <string name="BUTTON_DOCK">Dock</string> + <string name="BUTTON_UNDOCK">Undock</string> + <string name="BUTTON_HELP">Show Help</string> <!-- searching - generic --> <string name="Searching">Searching...</string> @@ -1137,7 +1138,7 @@ Checks to see whether the border hit by dir from pos is the edge of the world (h <string name="LSLTipText_llGetAgentInfo"> integer llGetAgentInfo(key id) Gets information about agent ID. -Returns AGENT_FLYING, AGENT_ATTACHMENTS, AGENT_SCRIPTED, AGENT_SITTING, AGENT_ON_OBJECT, AGENT_MOUSELOOK, AGENT_AWAY, AGENT_BUSY, AGENT_TYPING, AGENT_CROUCHING, AGENT_ALWAYS_RUN, AGENT_WALKING and/or AGENT_IN_AIR. +Returns AGENT_FLYING, AGENT_ATTACHMENTS, AGENT_SCRIPTED, AGENT_SITTING, AGENT_ON_OBJECT, AGENT_MOUSELOOK, AGENT_AWAY, AGENT_BUSY, AGENT_TYPING, AGENT_CROUCHING, AGENT_ALWAYS_RUN, AGENT_WALKING, AGENT_IN_AIR and/or AGENT_AUTOPILOT. </string> <string name="LSLTipText_llAdjustSoundVolume"> llAdjustSoundVolume(float volume) diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml index bbb5e9b56a..726ae803fe 100644 --- a/indra/newview/skins/default/xui/en/widgets/check_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/check_box.xml @@ -15,5 +15,5 @@ image_disabled="Checkbox_Off_Disabled" image_disabled_selected="Checkbox_On_Disabled" image_pressed="Checkbox_Press" - image_pressed_selected="Checkbox_On_Press"/> + image_pressed_selected="Checkbox_On_Press" /> </check_box> diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml index 26af76d8a3..89e442baec 100644 --- a/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml +++ b/indra/newview/skins/default/xui/en/widgets/gesture_combo_box.xml @@ -16,7 +16,7 @@ <gesture_combo_box.drop_down_button name="Drop Down Button" label="" hover_glow_amount="0.15" - font="SansSerifSmall" + font="SansSerif" scale_image="true" pad_right="24" image_unselected="DropDown_Off" diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml new file mode 100644 index 0000000000..185ed6ee3e --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- Use "disabled color" to make it look like menu separators --> +<menu_item_tear_off enabled_color="MenuItemDisabledColor" + disabled_color="MenuItemDisabledColor" + highlight_bg_color="MenuItemHighlightBgColor" + highlight_fg_color="MenuItemHighlightFgColor"> +</menu_item_tear_off> diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml index 0e256bd8b8..bc775c1b1c 100644 --- a/indra/newview/skins/default/xui/es/floater_about_land.xml +++ b/indra/newview/skins/default/xui/es/floater_about_land.xml @@ -2,10 +2,10 @@ <floater name="floaterland" title="Acerca del terreno"> <tab_container name="landtab"> <panel label="General" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> Nombre: </text> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Descripción: </text> <text name="LandType"> @@ -20,56 +20,56 @@ <text name="ContentRatingText"> 'Adult' </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> Propietario: </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="Perfil..." label_selected="Perfil..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> Grupo: </text> <button label="Configurar..." label_selected="Configurar..." name="Set..."/> <check_box label="Permitir transferir al grupo" name="check deed" tool_tip="Un oficial del grupo puede transferir este terreno al grupo. El terreno será apoyado por el grupo en sus asignaciones de terreno."/> <button label="Transferir..." label_selected="Transferir..." name="Deed..." tool_tip="Sólo si es usted un oficial del grupo seleccionado puede transferir terreno."/> <check_box label="El propietario hace una contribución transfiriendo" name="check contrib" tool_tip="Cuando el terreno se transfiere al grupo, el antiguo propietario contribuye con una asignación suficiente de terreno."/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> En venta: </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> No está en venta. </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> Precio: [PRICE] L$ ([PRICE_PER_SQM] L$/m²). </text> <button label="Vender el terreno..." label_selected="Vender el terreno..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> En venta a: [BUYER] </text> - <text width="216" length="1" name="Sell with landowners objects in parcel." type="string"> + <text width="216" name="Sell with landowners objects in parcel."> Los objetos se incluyen en la venta. </text> - <text width="216" length="1" name="Selling with no objects in parcel." type="string"> + <text width="216" name="Selling with no objects in parcel."> Los objetos no se incluyen en la venta. </text> <button font="SansSerifSmall" bottom="-245" left="275" width="165" label="Cancelar la venta del terreno" label_selected="Cancelar la venta del terreno" name="Cancel Land Sale"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> Reclamada: </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> Mar 15 Ago 15 13:47:25 2006 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> Superficie: </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048 m² </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> Tráfico: </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 0 </text> <button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/> @@ -78,76 +78,76 @@ <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="Abandon Land..."/> <button label="Reclamar el terreno..." label_selected="Reclamar el terreno..." name="Reclaim Land..."/> <button label="Venta Linden..." label_selected="Venta Linden..." name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/> - <string name="new users only"> + <panel.string name="new users only"> Sólo usuarios nuevos - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Cualquiera - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Superficie - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> ID de la subasta: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Debe aprobar su compra para modificar este terreno. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Propiedad del grupo) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Perfil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Información... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (público) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (ninguno) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Venta pendiente) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> No se ha seleccionado una parcela. Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver sus características. - </string> + </panel.string> </panel> <panel label="Contrato" name="land_covenant_panel"> <text name="estate_section_lbl"> Estado: </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> Nombre: </text> - <text length="1" name="estate_name_text" type="string"> + <text name="estate_name_text"> mainland </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> Propietario: </text> - <text length="1" name="estate_owner_text" type="string"> + <text name="estate_owner_text"> (nadie) </text> - <text_editor length="1" name="covenant_editor" type="string"> + <text_editor name="covenant_editor"> No se ha aportado un contrato para este estado. </text_editor> - <text length="1" name="covenant_timestamp_text" type="string"> + <text name="covenant_timestamp_text"> Última modificación, Dic Miér 31 16:00:00 1969 </text> <text name="region_section_lbl"> Región: </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> Nombre: </text> - <text length="1" name="region_name_text" type="string"> + <text name="region_name_text"> leyla </text> <text name="region_landtype_lbl"> @@ -165,57 +165,57 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s <text name="resellable_lbl"> Revender: </text> - <text length="1" name="resellable_clause" type="string"> + <text name="resellable_clause"> El terreno de esta región no se podrá revender. </text> <text name="changeable_lbl"> Dividir: </text> - <text length="1" name="changeable_clause" type="string"> + <text name="changeable_clause"> El terreno de esta región no se podrá unir/dividir. </text> - <string name="can_resell"> + <panel.string name="can_resell"> El terreno comprado en esta región se podrá revender. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> El terreno comprado en esta región no se podrá revender. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> El terreno comprado en esta región se podrá unir o dividir. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> El terreno comprado en esta región no se podrá unir o dividir. - </string> + </panel.string> </panel> <panel label="Objetos" name="land_objects_panel"> <text name="parcel_object_bonus"> Plus de objetos en la región: [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string"> + <text name="Simulator primitive usage:"> Simulador de uso de prims: </text> <text name="objects_available" left="204" width="250" > [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] de un máximo de [MAX] ([AVAILABLE] disponibles) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] de un máximo de [MAX] ([DELETED] se borrarán) - </string> - <text length="1" name="Primitives parcel supports:" type="string" width="200"> + </panel.string> + <text name="Primitives parcel supports:" width="200"> Prims que admite la parcela: </text> <text name="object_contrib_text" left="204" width="152"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> Prims en la parcela: </text> <text name="total_objects_text" left="204" width="48"> [COUNT] </text> - <text length="1" name="Owned by parcel owner:" type="string" left="14" width="180" > + <text name="Owned by parcel owner:" left="14" width="180" > Del propietario de la parcela: </text> <text name="owner_objects_text" left="204" width="48"> @@ -223,7 +223,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> <button label="Devolver..." label_selected="Devolver..." name="ReturnOwner..." tool_tip="Devolver los objetos a sus propietarios." right="-10" width="119"/> - <text length="1" name="Set to group:" type="string" left="14" width="180"> + <text name="Set to group:" left="14" width="180"> Del grupo: </text> <text name="group_objects_text" left="204" width="48"> @@ -231,7 +231,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s </text> <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> <button label="Devolver..." label_selected="Devolver..." name="ReturnGroup..." tool_tip="Devolver los objetos a sus propietarios." right="-10" width="119"/> - <text length="1" name="Owned by others:" type="string" left="14" width="128"> + <text name="Owned by others:" left="14" width="128"> Propiedad de otros: </text> <text name="other_objects_text" left="204" width="48"> @@ -239,7 +239,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> <button label="Devolver..." label_selected="Devolver..." name="ReturnOther..." tool_tip="Devolver los objetos a sus propietarios." right="-10" width="119"/> - <text length="1" name="Selected / sat upon:" type="string" left="14" width="193" > + <text name="Selected / sat upon:" left="14" width="193" > Seleccionados / con gente sentada: </text> <text name="selected_objects_text" left="204" width="48"> @@ -249,7 +249,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s Autodevolución de objetos a otros residentes (minutos; 0 la desactiva): </text> <line_editor name="clean other time" right="-20" /> - <text length="1" name="Object Owners:" type="string" width="150"> + <text name="Object Owners:" width="150"> Propietarios de los objetos: </text> <button label="Actualizar la lista" label_selected="Actualizar la lista" name="Refresh List" left="158"/> @@ -262,168 +262,140 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s </name_list> </panel> <panel label="Opciones" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> Permitir a otros residentes: </text> <check_box label="Editar el terreno" name="edit land check" tool_tip="Si se marca, cualquiera podrá modificar su terreno. Mejor dejarlo desmarcado, pues usted siempre puede modificar su terreno."/> <check_box label="Crear hitos" name="check landmark"/> <check_box label="Volar" name="check fly" tool_tip="Si se marca, los residentes podrán volar en su terreno. Si no, sólo podrán volar al cruzarlo o hasta que aterricen en él."/> - <text length="1" name="allow_label2" type="string" left="162" > + <text name="allow_label2" left="162" > Crear objetos: </text> <check_box label="Todos los residentes" name="edit objects check" left="255" /> <check_box label="El grupo" name="edit group objects check" left="385" /> - <text length="1" name="allow_label3" type="string" left="162"> + <text name="allow_label3" left="162"> Dejar objetos: </text> <check_box label="Todos los residentes" name="all object entry check" left="255"/> <check_box label="El grupo" name="group object entry check" left="385"/> - <text length="1" name="allow_label4" type="string" left="162"> + <text name="allow_label4" left="162"> Ejecutar scripts: </text> <check_box label="Todos los residentes" name="check other scripts" left="255"/> <check_box label="El grupo" name="check group scripts" left="385"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> Opciones del terreno: </text> <check_box label="Seguro (sin daño)" name="check safe" tool_tip="Si se marca, convierte el terreno en 'seguro', desactivando el daño en combate. Si no, se activa el daño en combate."/> <check_box label="Sin 'empujones'" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opción prevendrá que en su terreno haya comportamientos destructivos."/> <check_box label="Mostrar la parcela en Buscar (30 L$/semana) en" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Permitir que aparezca esta parcela en los resultados de la búsqueda - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Esta opción está desactivada porque la parcela tiene 128 m² o menos. Sólo las parcelas más grandes pueden listarse en la búsqueda. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Esta opción no esta activada porque usted no puede modificar las opciones de la parcela. - </string> + </panel.string> <combo_box name="land category with adult" left="282" width="140"> - <combo_item name="AnyCategory"> - Cualquier categoría - </combo_item> - <combo_item name="LindenLocation"> - Localización Linden - </combo_item> - <combo_item name="Adult"> - 'Adult' - </combo_item> - <combo_item name="Arts&Culture"> - Arte y Cultura - </combo_item> - <combo_item name="Business"> - Negocios - </combo_item> - <combo_item name="Educational"> - Educativo - </combo_item> - <combo_item name="Gaming"> - Juegos de azar - </combo_item> - <combo_item name="Hangout"> - Entretenimiento - </combo_item> - <combo_item name="NewcomerFriendly"> - Para recién llegados - </combo_item> - <combo_item name="Parks&Nature"> - Parques y Naturaleza - </combo_item> - <combo_item name="Residential"> - Residencial - </combo_item> - <combo_item name="Shopping"> - Compras - </combo_item> - <combo_item name="Other"> - Otra - </combo_item> + <combo_box.item name="item0" label="Cualquier categoría" + /> + <combo_box.item name="item1" label="Localización Linden" + /> + <combo_box.item name="item2" label="'Adult'" + /> + <combo_box.item name="item3" label="Arte y Cultura" + /> + <combo_box.item name="item4" label="Negocios" + /> + <combo_box.item name="item5" label="Educativo" + /> + <combo_box.item name="item6" label="Juegos de azar" + /> + <combo_box.item name="item7" label="Entretenimiento" + /> + <combo_box.item name="item8" label="Para recién llegados" + /> + <combo_box.item name="item9" label="Parques y Naturaleza" + /> + <combo_box.item name="item10" label="Residencial" + /> + <combo_box.item name="item11" label="Compras" + /> + <combo_box.item name="item12" label="Otra" + /> </combo_box> <combo_box name="land category" left="282" width="140"> - <combo_item name="AnyCategory"> - Cualquier categoría - </combo_item> - <combo_item name="LindenLocation"> - Localización Linden - </combo_item> - <combo_item name="Arts&Culture"> - Arte y Cultura - </combo_item> - <combo_item name="Business"> - Negocios - </combo_item> - <combo_item name="Educational"> - Educativo - </combo_item> - <combo_item name="Gaming"> - Juegos de azar - </combo_item> - <combo_item name="Hangout"> - Entretenimiento - </combo_item> - <combo_item name="NewcomerFriendly"> - Para recién llegados - </combo_item> - <combo_item name="Parks&Nature"> - Parques y Naturaleza - </combo_item> - <combo_item name="Residential"> - Residencial - </combo_item> - <combo_item name="Shopping"> - Compras - </combo_item> - <combo_item name="Other"> - Otra - </combo_item> + <combo_box.item name="item0" label="Cualquier categoría" + /> + <combo_box.item name="item1" label="Localización Linden" + /> + <combo_box.item name="item3" label="Arte y Cultura" + /> + <combo_box.item name="item4" label="Negocios" + /> + <combo_box.item name="item5" label="Educativo" + /> + <combo_box.item name="item6" label="Juegos de azar" + /> + <combo_box.item name="item7" label="Entretenimiento" + /> + <combo_box.item name="item8" label="Para recién llegados" + /> + <combo_box.item name="item9" label="Parques y Naturaleza" + /> + <combo_box.item name="item10" label="Residencial" + /> + <combo_box.item name="item11" label="Compras" + /> + <combo_box.item name="item12" label="Otra" + /> </combo_box> <button label="?" label_selected="?" name="?" left="427"/> <check_box label="Contenido 'Mature'" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Contenido 'Mature' - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Contenido 'Adult' - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> La información o el contenido de su parcela se considera 'Mature'. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> La información o el contenido de su parcela se considera 'Adult'. - </string> - <text length="1" name="Snapshot:" type="string"> + </panel.string> + <text name="Snapshot:"> Foto: </text> <texture_picker label="" name="snapshot_ctrl" tool_tip="Pulse para elegir una imagen"/> <text name="landing_point"> Punto de llegada: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (ninguno) - </string> + </panel.string> <button label="Definir" label_selected="Definir" name="Set" tool_tip="Configura el punto de llegada donde aparecerán los visitantes. Configúrelo a la posición de su avatar dentro de esta parcela."/> <button label="Borrar" label_selected="Borrar" name="Clear" tool_tip="Borrar el punto de llegada."/> - <text length="1" name="Teleport Routing: " type="string"> + <text name="Teleport Routing: "> Punto de teleporte: </text> <combo_box name="landing type" tool_tip="Punto de teleporte: defina cómo manejar en su terreno los teleportes."> - <combo_item length="1" name="Blocked" type="string"> - Bloqueado - </combo_item> - <combo_item length="1" name="LandingPoint" type="string"> - Punto de llegada - </combo_item> - <combo_item length="1" name="Anywhere" type="string"> - Cualquiera - </combo_item> + <combo_box.item name="Blocked" label="Bloqueado" + /> + <combo_box.item name="LandingPoint" label="Punto de llegada" + /> + <combo_box.item name="Anywhere" label="Cualquiera" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Sin 'empujones' - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Sin 'empujones' (prevalece lo marcado en la región) - </string> + </panel.string> </panel> <panel label="Media" name="land_media_panel"> <text name="with media:" width="85"> @@ -439,7 +411,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda. Descripción: </text> <line_editor name="url_description" tool_tip="Texto a mostrar cerca del botón play/cargar" left="97" /> - <text length="1" name="Media texture:" type="string"> + <text name="Media texture:"> Cambiar la textura: </text> @@ -482,7 +454,7 @@ música: <check_box left="117" label="Limitar la voz a esta parcela" name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="Acceso" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> Acceso a esta parcela </text> <check_box label="Permitir el acceso público" name="public_access"/> @@ -491,18 +463,16 @@ música: </text> <check_box label="Residentes que no hayan dado a Linden Lab información de su forma de pago" name="limit_payment" tool_tip="Impedir el acceso a los residentes no identificados."/> <check_box label="Residentes de los que no se ha verificado si son adultos" name="limit_age_verified" tool_tip="Residentes que no hayan verificado su edad. Para más información, vea support.secondlife.com"/> - <string name="estate_override"> + <panel.string name="estate_override"> Una o más de esta opciones está configurada a nivel del estado - </string> + </panel.string> <check_box label="Acceso permitido al grupo: [GROUP]" name="GroupCheck" tool_tip="Elija el grupo en la pestaña General."/> <check_box label="Vender pases a:" name="PassCheck" tool_tip="Permitir acceso temporal a esta parcela"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Cualquiera - </combo_item> - <combo_item name="Group"> - Grupo - </combo_item> + <combo_box.item name="Anyone" label="Cualquiera" + /> + <combo_box.item name="Group" label="Grupo" + /> </combo_box> <spinner label="Precio en L$:" name="PriceSpin"/> <spinner label="Horas de acceso:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/es/floater_customize.xml b/indra/newview/skins/default/xui/es/floater_customize.xml index 5efc989eff..1322b9a5cf 100644 --- a/indra/newview/skins/default/xui/es/floater_customize.xml +++ b/indra/newview/skins/default/xui/es/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Apariencia" width="527"> <tab_container name="customize tab container" width="525"> - <panel label="Partes del cuerpo" name="body_parts_placeholder"/> + <placeholder label="Partes del cuerpo" name="body_parts_placeholder"/> <panel label="Forma" name="Shape" width="389"> <button label="Restablecer" label_selected="Restablecer" name="Revert"/> <button label="Cuerpo" label_selected="Cuerpo" name="Body"/> @@ -14,29 +14,29 @@ <button label="Torso" label_selected="Torso" name="Torso"/> <button label="Piernas" label_selected="Piernas" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string" label="Mujer" /> - <radio_item length="1" name="radio2" type="string" label="Varón" /> + <radio_item name="radio" label="Mujer" /> + <radio_item name="radio2" label="Varón" /> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase una forma nueva arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -51,26 +51,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button label="Detalles faciales" label_selected="Detalles faciales" name="Face Detail" width="115"/> <button label="Maquillaje" label_selected="Maquillaje" name="Makeup" width="115"/> <button label="Detalles del cuerpo" label_selected="Detalles del cuerpo" name="Body Detail" width="115"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra piel arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -89,26 +89,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button label="Peinado" label_selected="Peinado" name="Style"/> <button label="Cejas" label_selected="Cejas" name="Eyebrows"/> <button label="Facial" label_selected="Facial" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situado en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otro pelo arrastrando uno desde su inventario hasta su avatar. O parta de cero creando uno nueva y vistiéndolo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -121,26 +121,26 @@ avatar. O parta de cero creando uno nueva y vistiéndolo. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Ojos" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificables </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situados en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otros ojos arrastrando unos desde su inventario hasta su avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -161,26 +161,26 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos. <button left="113" label="Guardar" label_selected="Guardar" name="Save"/> <button left="199" width="102" label="Guardar como..." label_selected="Guardar como..." name="Save As"/> <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra camisa arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -195,26 +195,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button left="113" label="Guardar" label_selected="Guardar" name="Save"/> <button left="199" width="102" label="Guardar como..." label_selected="Guardar como..." name="Save As"/> <button label="Restablecer" label_selected="Restablecer" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificables </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situados en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otros pantalones arrastrando unos desde su inventario hasta su avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -222,26 +222,26 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> </panel> <panel label="Zapatos" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificables </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situados en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otros zapatos arrastrando unos desde su inventario hasta su avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -256,26 +256,26 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Calcetines" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificables </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situados en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otros calcetines arrastrando unos desde su inventario hasta su avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -290,26 +290,26 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Chaqueta" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra chaqueta arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -325,26 +325,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Guantes" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificables </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situados en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otros guantes arrastrando unos desde su inventario hasta su avatar. O parta de cero creando unos nuevos y vistiéndoselos. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -359,26 +359,26 @@ avatar. O parta de cero creando unos nuevos y vistiéndoselos. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Camiseta" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra camiseta arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -393,26 +393,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Ropa interior" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra ropa interior arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> @@ -427,26 +427,26 @@ avatar. O parta de cero creando una nueva y vistiéndola. <button label="Restablecer" label_selected="Restablecer" name="Revert"/> </panel> <panel label="Falda" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: no modificable </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: cargando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: no lleva </text> - <text length="1" name="path" type="string"> + <text name="path"> Situada en [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Póngase otra falda arrastrando una desde su inventario hasta su avatar. O parta de cero creando una nueva y vistiéndola. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> No tiene permiso para modificar este ítem. </text> <text name="Item Action Label" right="107"> diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml index d0283afa38..7cd787bfb5 100644 --- a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Nada" label_selected="Nada" name="None" width="70" bottom_delta="0" left="83"/> <check_box label="Mostrar siempre las carpetas" name="check_show_empty"/> <check_box label="Desde el fin de sesión" name="check_since_logoff" bottom_delta="-36"/> - <text length="1" name="- OR -" type="string"> + <text name="- OR -"> - O - </text> <spinner label="horas atrás" name="spin_hours_ago"/> diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml index da7753a7d7..2e0fb87744 100644 --- a/indra/newview/skins/default/xui/es/floater_joystick.xml +++ b/indra/newview/skins/default/xui/es/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Configuración del joystick"> - <check_box name="enable_joystick"> - Activar el joystick: - </check_box> + <check_box name="enable_joystick" label="Activar el joystick:"/> <text left="140" name="joystick_type" width="360"/> <spinner label="Mapping: eje X" name="JoystickAxis1" label_width="118" width="161"/> <spinner label="Mapping: eje Y" name="JoystickAxis2" label_width="105" width="148"/> @@ -17,15 +15,9 @@ <text name="Control Modes:"> Modos de control: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled" left="192"> - Construir - </check_box> - <check_box name="JoystickFlycamEnabled"> - Flycam - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" left="192" label="Construir"/> + <check_box name="JoystickFlycamEnabled" label="Flycam"/> <text name="XScale"> Escala: X </text> @@ -74,12 +66,14 @@ <button label="Predeterminados del SpaceNavigator" name="SpaceNavigatorDefaults" font="SansSerifSmall" left="330" width="210"/> <button label="OK" label_selected="OK" name="ok_btn" left="330"/> <button label="Cancelar" label_selected="Cancelar" name="cancel_btn" left_delta="120"/> - <string name="JoystickMonitor"> - Monitor del joystick - </string> - <string name="Axis"> - Eje [NUM] - </string> + <stat_view label="Monitor del joystick" name="axis_view"> + <stat_bar label="Eje 0" name="axis0"/> + <stat_bar label="Eje 1" name="axis1"/> + <stat_bar label="Eje 2" name="axis2"/> + <stat_bar label="Eje 3" name="axis3"/> + <stat_bar label="Eje 4" name="axis4"/> + <stat_bar label="Eje 5" name="axis5"/> + </stat_view> <string name="NoDevice"> no se ha detectado el dispositivo </string> diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml new file mode 100644 index 0000000000..c167221b73 --- /dev/null +++ b/indra/newview/skins/default/xui/es/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ E
+ </floater.string>
+ <floater.string name="mini_map_west">
+ O
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NO
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml index a5cd2f3097..a61cebbf80 100644 --- a/indra/newview/skins/default/xui/es/floater_moveview.xml +++ b/indra/newview/skins/default/xui/es/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Girar a la izquierda"/> <button label="" label_selected="" name="turn right btn" tool_tip="Girar a la derecha"/> <button label="" label_selected="" name="move up btn" tool_tip="Saltar o ascender"/> @@ -8,4 +9,5 @@ <joystick_slide name="slide right btn" tool_tip="Ir hacia la derecha"/> <joystick_turn name="forward btn" tool_tip="Ir hacia adelante"/> <joystick_turn name="backward btn" tool_tip="Ir hacia atrás"/> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml index c7846afa6a..60487b829c 100644 --- a/indra/newview/skins/default/xui/es/floater_openobject.xml +++ b/indra/newview/skins/default/xui/es/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="objectcontents" title="Contenido del objeto"> - <text length="1" name="object_name" type="string"> + <text name="object_name"> [DESC]: </text> <button label="Copiar al inventario" label_selected="Copiar al inventario" name="copy_to_inventory_button"/> diff --git a/indra/newview/skins/default/xui/es/floater_pay.xml b/indra/newview/skins/default/xui/es/floater_pay.xml index 136e6a6f01..64156d94e3 100644 --- a/indra/newview/skins/default/xui/es/floater_pay.xml +++ b/indra/newview/skins/default/xui/es/floater_pay.xml @@ -6,16 +6,16 @@ <button label="20 L$" label_selected="20 L$" name="fastpay 20"/> <button label="Pagar" label_selected="Pagar" name="pay btn"/> <button label="Cancelar" label_selected="Cancelar" name="cancel btn"/> - <text length="1" name="payee_label" type="string" left="5" width="105"> + <text name="payee_label" left="5" width="105"> Pagar al residente: </text> - <text length="1" name="payee_name" type="string" left="115"> + <text name="payee_name" left="115"> [FIRST] [LAST] </text> - <text length="1" name="fastpay text" type="string" width="100" halign="left"> + <text name="fastpay text" width="100" halign="left"> Pago rápido: </text> - <text length="1" name="amount text" type="string" left="4" > + <text name="amount text" left="4" > Cantidad: </text> <line_editor left="60" name="amount" width="55"/> diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml index 770ecc6ae5..b5eca53bfa 100644 --- a/indra/newview/skins/default/xui/es/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/es/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <text length="1" name="payee_group" type="string" left="5" width="110"> + <text name="payee_group" left="5" width="110"> Pagar al grupo: </text> - <text length="1" name="payee_resident" type="string" left="5" width="110"> + <text name="payee_resident" left="5" width="110"> Pagar al residente: </text> - <text length="1" name="payee_name" type="string" left="120" width="180"> + <text name="payee_name" left="120" width="180"> [FIRST] [LAST] </text> - <text length="1" name="object_name_label" type="string" left="5" width="110"> + <text name="object_name_label" left="5" width="110"> A través del objeto: </text> - <text length="1" name="object_name_text" type="string" left="120" width="180"> + <text name="object_name_text" left="120" width="180"> ... </text> - <text length="1" name="fastpay text" type="string"> + <text name="fastpay text"> Pago rápido: </text> - <text length="1" name="amount text" type="string"> + <text name="amount text"> Cantidad: </text> <button label="1 L$" label_selected="1 L$" name="fastpay 1"/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_animation.xml b/indra/newview/skins/default/xui/es/floater_preview_animation.xml index 0f2762022a..0d9cf8ec9f 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_anim"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descripción: </text> <button left="12" width="142" label="Ejecutarla en el mundo" label_selected="Parar" name="Anim play btn" tool_tip="Ejecutar esta animación de modo que puedan verla los demás."/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml index 2d13e41924..4d11520335 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview notecard" title="Nota:"> <button label="Guardar" label_selected="Guardar" name="Save"/> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descripción: </text> - <text_editor length="1" name="Notecard Editor" type="string"> + <text_editor name="Notecard Editor"> Cargando... </text_editor> <string name="no_object"> diff --git a/indra/newview/skins/default/xui/es/floater_preview_sound.xml b/indra/newview/skins/default/xui/es/floater_preview_sound.xml index 82c01e1d1b..060a033b08 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_sound"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descripción: </text> <button label="Tocar en el mundo" label_selected="Tocar en el mundo" name="Sound play btn" tool_tip="Tocar este sonido para que puedan oírlo los demás."/> diff --git a/indra/newview/skins/default/xui/es/floater_preview_texture.xml b/indra/newview/skins/default/xui/es/floater_preview_texture.xml index 2fb66f1fdc..280438fefd 100644 --- a/indra/newview/skins/default/xui/es/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/es/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_texture"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descripción: </text> - <text length="1" name="dimensions" type="string"> + <text name="dimensions"> Tamaño: [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml index caa0f2a748..8ae8c212e6 100644 --- a/indra/newview/skins/default/xui/es/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/es/floater_report_abuse.xml @@ -40,9 +40,7 @@ <combo_box.item name="Select_category" label="Elegir la categoría"/> <combo_box.item name="Age__Age_play" label="Edad > Jugar a ser niño"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Edad > Residente adulto en Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Edad > Residente menor de edad fuera de Teen Second Life - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Edad > Residente menor de edad fuera de Teen Second Life"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Ataque > Sandbox de combate / Zona no segura"/> <combo_box.item name="Assault__Safe_area" label="Ataque > Zona segura"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Ataque > Sandbox de prueba de armas"/> @@ -67,12 +65,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Acoso > Abuso verbal"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indecencia > En general, contenido o conducta ofensivos"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indecencia > Nombre inapropiado del avatar"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Indecencia > Contenido o conducta inapropiada en una región 'PG' - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Indecencia > Contenido o conducta inapropiada en una región 'Mature' - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indecencia > Contenido o conducta inapropiada en una región 'PG'"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indecencia > Contenido o conducta inapropiada en una región 'Mature'"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Infracción de la propiedad intelectual > Eliminación de contenidos"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Infracción de la propiedad intelectual > CopyBot o Exploit (programa malicioso) de permisos"/> <combo_box.item name="Intolerance" label="Intolerancia"/> diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml index f8d143af9d..0d8cd0b406 100644 --- a/indra/newview/skins/default/xui/es/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview lsl text" title="Script: script de rotación"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descripción: </text> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml index dc05370c2b..3c8dc2fe9c 100644 --- a/indra/newview/skins/default/xui/es/floater_script_search.xml +++ b/indra/newview/skins/default/xui/es/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/> <button label="Reemplazar" label_selected="Reemplazar" name="replace_btn" left="100" width="85"/> <button label="Reemplazar todos" label_selected="Reemplazar todos" name="replace_all_btn" left="190" width="122"/> - <text length="1" name="txt" type="string" width="65"> + <text name="txt" width="65"> Buscar </text> - <text length="1" name="txt2" type="string" width="65"> + <text name="txt2" width="65"> Reemplazar </text> <line_editor left="75" name="search_text" width="240" /> diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml index 477d546806..8b661a6041 100644 --- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Pulse para elegir una imagen </string> - <text length="1" name="Multiple" type="string"> + <text name="Multiple"> Múltiple </text> - <text length="1" name="unknown" type="string"> + <text name="unknown"> Dimensiones: [DIMENSIONS] </text> <button label="Por defecto" label_selected="Por defecto" name="Default" width="84"/> diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml index e6ff6b0fa5..c3c4c55027 100644 --- a/indra/newview/skins/default/xui/es/floater_tools.xml +++ b/indra/newview/skins/default/xui/es/floater_tools.xml @@ -5,30 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Editar"/> <button label="" label_selected="" name="button create" tool_tip="Crear"/> <button label="" label_selected="" name="button land" tool_tip="Terreno"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Órbita (Ctrl)" name="radio orbit"/> - <check_box label="Panorámica (Ctrl-Shift)" name="radio pan"/> - <check_box label="Mover" name="radio move"/> - <check_box label="Vertical (Ctrl)" name="radio lift"/> - <check_box label="Horizontal (Ctrl-Shift)" name="radio spin"/> - <check_box label="Posición" name="radio position"/> - <check_box label="Girar (Ctrl)" name="radio rotate"/> - <check_box label="Estirar (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Elegir la cara" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Órbita (Ctrl)" name="radio orbit"/> + <radio_item label="Panorámica (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Mover" name="radio move"/> + <radio_item label="Vertical (Ctrl)" name="radio lift"/> + <radio_item label="Horizontal (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Posición" name="radio position"/> + <radio_item label="Girar (Ctrl)" name="radio rotate"/> + <radio_item label="Estirar (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Elegir la cara" name="radio select face"/> + </radio_group> <check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/> <text name="text ruler mode"> Ajuste: </text> <combo_box name="combobox grid mode" width="82"> - <combo_item name="World"> - Mundo - </combo_item> - <combo_item name="Local"> - Local - </combo_item> - <combo_item name="Reference"> - Referencia - </combo_item> + <combo_box.item name="World" label="Mundo" + /> + <combo_box.item name="Local" label="Local" + /> + <combo_box.item name="Reference" label="Referencia" + /> </combo_box> <check_box label="Estirar ambos lados" name="checkbox uniform"/> <check_box label="Estirar las texturas" name="checkbox stretch textures"/> @@ -56,13 +59,15 @@ <check_box label="Copia seleccionada" name="checkbox copy selection"/> <check_box label="Centrada" name="checkbox copy centers"/> <check_box label="Girada" name="checkbox copy rotates"/> - <check_box label="Seleccionar el terreno" name="radio select land"/> - <check_box label="Nivelar" name="radio flatten"/> - <check_box label="Elevar" name="radio raise"/> - <check_box label="Bajar" name="radio lower"/> - <check_box label="Suavizar" name="radio smooth"/> - <check_box label="Escarpar" name="radio noise"/> - <check_box label="Restablecer" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Seleccionar el terreno" name="radio select land"/> + <radio_item label="Nivelar" name="radio flatten"/> + <radio_item label="Elevar" name="radio raise"/> + <radio_item label="Bajar" name="radio lower"/> + <radio_item label="Suavizar" name="radio smooth"/> + <radio_item label="Escarpar" name="radio noise"/> + <radio_item label="Restablecer" name="radio revert"/> + </radio_group> <button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar el terreno seleccionado" left="146"/> <text name="Bulldozer:"> Bulldozer: @@ -111,9 +116,7 @@ <text name="Permissions:"> Permisos: </text> - <text name="perm_modify"> - Puede modificar este objeto. - </text> + <check_box label="Compartir con el grupo" name="checkbox share with group" tool_tip="Permitir que todos los miembros del grupo compartan y utilicen sus permisos sobre este objeto. Debe transferirlo para activar las restricciones según los roles."/> <string name="text deed continued"> Transferir... @@ -129,49 +132,35 @@ <text name="Cost"> Precio: L$ </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Original - </radio_item> - <radio_item name="Copy"> - Copia - </radio_item> - <radio_item name="Contents"> - Contenidos - </radio_item> - </radio_group> - <text name="Next owner can:"> - El próximo propietario puede: - </text> - <check_box label="Modificarlo" name="checkbox next owner can modify"/> - <check_box label="Copiarlo" name="checkbox next owner can copy" left_delta="80"/> - <check_box label="Revenderlo/Darlo" name="checkbox next owner can transfer" left_delta="67"/> + <combo_box name="sale type"> + <combo_box.item label="Copia" name="Copy"/> + <combo_box.item label="Contenidos" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <text name="label click action" width="180"> Al pulsarlo con el botón izquierdo: </text> <combo_box name="clickaction" width="192"> - <combo_item name="Touch/grab(default)"> - Tocar/Agarrar (por defecto) - </combo_item> - <combo_item name="Sitonobject"> - Sentarse en el objeto - </combo_item> - <combo_item name="Buyobject"> - Comprar el objeto - </combo_item> - <combo_item name="Payobject"> - Pagar al objeto - </combo_item> - <combo_item name="Open"> - Abrirlo - </combo_item> - <combo_item name="Play"> - Ejecutar los media de la parcela - </combo_item> - <combo_item name="Opemmedia"> - Abrir los media de la parcela - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Tocar/Agarrar (por defecto)" + /> + <combo_box.item name="Sitonobject" label="Sentarse en el objeto" + /> + <combo_box.item name="Buyobject" label="Comprar el objeto" + /> + <combo_box.item name="Payobject" label="Pagar al objeto" + /> + <combo_box.item name="Open" label="Abrirlo" + /> + <combo_box.item name="Play" label="Ejecutar los media de la parcela" + /> + <combo_box.item name="Opemmedia" label="Abrir los media de la parcela" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Puede modificar este objeto. + </text> <text name="B:"> B: </text> @@ -190,6 +179,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + El próximo propietario puede: + </text> + <check_box label="Modificarlo" name="checkbox next owner can modify"/> + <check_box label="Copiarlo" name="checkbox next owner can copy" left_delta="80"/> + <check_box name="checkbox next owner can transfer" left_delta="67"/> + </panel> <string name="text modify info 1"> Puede modificar este objeto. </string> @@ -254,56 +250,41 @@ Material </text> <combo_box name="material"> - <combo_item name="Stone"> - Piedra - </combo_item> - <combo_item name="Metal"> - Metal - </combo_item> - <combo_item name="Glass"> - Vidrio - </combo_item> - <combo_item name="Wood"> - Madera - </combo_item> - <combo_item name="Flesh"> - Carne - </combo_item> - <combo_item name="Plastic"> - Plástico - </combo_item> - <combo_item name="Rubber"> - Goma - </combo_item> + <combo_box.item name="Stone" label="Piedra" + /> + <combo_box.item name="Metal" label="Metal" + /> + <combo_box.item name="Glass" label="Vidrio" + /> + <combo_box.item name="Wood" label="Madera" + /> + <combo_box.item name="Flesh" label="Carne" + /> + <combo_box.item name="Plastic" label="Plástico" + /> + <combo_box.item name="Rubber" label="Goma" + /> </combo_box> <text name="label basetype"> Tipo de objeto a construir </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Caja - </combo_item> - <combo_item name="Cylinder"> - Cilindro - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Esfera - </combo_item> - <combo_item name="Torus"> - Toroide - </combo_item> - <combo_item name="Tube"> - Tubo - </combo_item> - <combo_item name="Ring"> - Cono truncado - </combo_item> - <combo_item name="Sculpted"> - Sculpted - </combo_item> + <combo_box.item name="Box" label="Caja" + /> + <combo_box.item name="Cylinder" label="Cilindro" + /> + <combo_box.item name="Prism" label="Prisma" + /> + <combo_box.item name="Sphere" label="Esfera" + /> + <combo_box.item name="Torus" label="Toroide" + /> + <combo_box.item name="Tube" label="Tubo" + /> + <combo_box.item name="Ring" label="Cono truncado" + /> + <combo_box.item name="Sculpted" label="Sculpted" + /> </combo_box> <text name="text cut"> Corte: Inicio y Fin @@ -320,18 +301,14 @@ Forma del hueco </text> <combo_box name="hole"> - <combo_item name="Default"> - Por defecto - </combo_item> - <combo_item name="Circle"> - Círculo - </combo_item> - <combo_item name="Square"> - Cuadrado - </combo_item> - <combo_item name="Triangle"> - Triángulo - </combo_item> + <combo_box.item name="Default" label="Por defecto" + /> + <combo_box.item name="Circle" label="Círculo" + /> + <combo_box.item name="Square" label="Cuadrado" + /> + <combo_box.item name="Triangle" label="Triángulo" + /> </combo_box> <text name="text twist"> Torsión: Inicio y Fin @@ -380,21 +357,16 @@ Tipo de unión </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (ninguna) - </combo_item> - <combo_item name="Sphere"> - Esfera - </combo_item> - <combo_item name="Torus"> - Toroide - </combo_item> - <combo_item name="Plane"> - Plano - </combo_item> - <combo_item name="Cylinder"> - Cilindro - </combo_item> + <combo_box.item name="None" label="(ninguna)" + /> + <combo_box.item name="Sphere" label="Esfera" + /> + <combo_box.item name="Torus" label="Toroide" + /> + <combo_box.item name="Plane" label="Plano" + /> + <combo_box.item name="Cylinder" label="Cilindro" + /> </combo_box> </panel> <panel label="Caracter." name="Features"> @@ -436,88 +408,64 @@ Detallado </text> <combo_box name="combobox texgen" width="86"> - <combo_item name="Default"> - Por defecto - </combo_item> - <combo_item name="Planar"> - Plano - </combo_item> + <combo_box.item name="Default" label="Por defecto" + /> + <combo_box.item name="Planar" label="Plano" + /> </combo_box> <text name="label shininess"> Brillantez </text> <combo_box name="combobox shininess"> - <combo_item name="None"> - Ninguna - </combo_item> - <combo_item name="Low"> - Baja - </combo_item> - <combo_item name="Medium"> - Media - </combo_item> - <combo_item name="High"> - Alta - </combo_item> + <combo_box.item name="None" label="Ninguna" + /> + <combo_box.item name="Low" label="Baja" + /> + <combo_box.item name="Medium" label="Media" + /> + <combo_box.item name="High" label="Alta" + /> </combo_box> <text name="label bumpiness"> Relieve </text> <combo_box name="combobox bumpiness"> - <combo_item name="None"> - Ninguno - </combo_item> - <combo_item name="Brightness"> - Brillo - </combo_item> - <combo_item name="Darkness"> - Oscuro - </combo_item> - <combo_item name="woodgrain"> - grano de madera - </combo_item> - <combo_item name="bark"> - corteza - </combo_item> - <combo_item name="bricks"> - ladrillos - </combo_item> - <combo_item name="checker"> - cajero - </combo_item> - <combo_item name="concrete"> - cemento - </combo_item> - <combo_item name="crustytile"> - azulejería - </combo_item> - <combo_item name="cutstone"> - piedra cortada - </combo_item> - <combo_item name="discs"> - discos - </combo_item> - <combo_item name="gravel"> - grava - </combo_item> - <combo_item name="petridish"> - placa de Petri - </combo_item> - <combo_item name="siding"> - revestimiento - </combo_item> - <combo_item name="stonetile"> - baldosa de piedra - </combo_item> - <combo_item name="stucco"> - estuco - </combo_item> - <combo_item name="suction"> - succión - </combo_item> - <combo_item name="weave"> - tejido - </combo_item> + <combo_box.item name="None" label="Ninguno" + /> + <combo_box.item name="Brightness" label="Brillo" + /> + <combo_box.item name="Darkness" label="Oscuro" + /> + <combo_box.item name="woodgrain" label="grano de madera" + /> + <combo_box.item name="bark" label="corteza" + /> + <combo_box.item name="bricks" label="ladrillos" + /> + <combo_box.item name="checker" label="cajero" + /> + <combo_box.item name="concrete" label="cemento" + /> + <combo_box.item name="crustytile" label="azulejería" + /> + <combo_box.item name="cutstone" label="piedra cortada" + /> + <combo_box.item name="discs" label="discos" + /> + <combo_box.item name="gravel" label="grava" + /> + <combo_box.item name="petridish" label="placa de Petri" + /> + <combo_box.item name="siding" label="revestimiento" + /> + <combo_box.item name="stonetile" label="baldosa de piedra" + /> + <combo_box.item name="stucco" label="estuco" + /> + <combo_box.item name="suction" label="succión" + /> + <combo_box.item name="weave" label="tejido" + /> </combo_box> <text name="tex scale"> Repeticiones por cara @@ -581,43 +529,43 @@ <button label="Comprar terreno..." label_selected="Comprar terreno..." name="button buy land" width="140"/> <button label="Abandonar el terreno..." label_selected="Abandonar el terreno..." name="button abandon land" width="140"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Arrastre las bandas de color para girar el objeto - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Pulse y arrastre para estirar el lado seleccionado - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Arrastrar para mover, Mayús.+arrastrar para copiar - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Mantenga pulsado para modificar el terreno - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Pulse y arrastre para cambiar el punto de vista - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Arrastre para mover objetos: Ctrl, verticalmente; Ctrl-Mayús., para girarlos. - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Pulse en el mundo para construir - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Pulse y arrastre para seleccionar el terreno - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Pantalla - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Local - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Mundo - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Referencia - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Añadido - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml index 34e76abb42..1dfff90004 100644 --- a/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=" "> <button label="Guardar" label_selected="Guardar" name="Save"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text length="1" name="Save item as:" type="string"> + <text name="Save item as:"> Guardar el ítem como: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml index 3bfae282cb..6521e72d5a 100644 --- a/indra/newview/skins/default/xui/es/floater_world_map.xml +++ b/indra/newview/skins/default/xui/es/floater_world_map.xml @@ -28,10 +28,10 @@ <check_box label="'Mature'" name="event_mature_chk"/> <check_box label="'Adult'" name="event_adult_chk"/> <combo_box label="Amigos conectados" name="friend combo" tool_tip="Amigo a mostrar en el mapa"> - <combo_box.item name="none_selected" label="Amigos conectados" /> + <combo_box.item name="item1" label="Amigos conectados" /> </combo_box> <combo_box label="Hitos" name="landmark combo" tool_tip="Hito a mostrar en el mapa"> - <combo_box.item name="none_selected" label="Hitos" /> + <combo_box.item name="item1" label="Hitos" /> </combo_box> <line_editor label="Buscar por el nombre de la región" name="location" tool_tip="Escriba el nombre de una región"/> <button label="Buscar" name="DoSearch" tool_tip="Buscar una región"/> diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 5778e48fcf..0a722ccfd2 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -984,7 +984,7 @@ usted no tiene el permiso de comprar terreno para el grupo que tiene activado ac ¿Ofrecer a [NAME] que sea su amigo? <form name="form"> - <input name="message" type="text"> + <input name="message"> ¿Quieres formar parte de mis amigos? </input> <button name="Offer" text="OK"/> @@ -1130,6 +1130,14 @@ Si se vende una parcela transferida, el precio de venta se dividirá a partes ig Su localización [TYPE] no está disponible en estos momentos. [HELP] Ha sido llevado a una región cercana. </notification> + <notification name="AvatarMovedDesired"> + La localización que ha elegido no está disponible en estos momentos. +Ha sido llevado a una región cercana. + </notification> + <notification name="AvatarMovedLast"> + Su última posición no está disponible en estos momentos. +Ha sido llevado a una región cercana. + </notification> <notification name="ClothingLoading"> Aún está descargándose su ropa. Puede usar normalmente [SECOND_LIFE], los demás residentes le verán correctamente. @@ -1388,7 +1396,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="KickUser"> ¿Con qué mensaje se expulsará a este usuario? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un administrador le ha desconectado. </input> <button name="OK" text="OK"/> @@ -1398,7 +1406,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="KickAllUsers"> ¿Con qué mensaje se expulsará a cualquiera que esté actualmente en el grid? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un administrador le ha desconectado. </input> <button name="OK" text="OK"/> @@ -1408,7 +1416,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="FreezeUser"> ¿Con qué mensaje se congelará a este usuario? <form name="form"> - <input name="message" type="text"> + <input name="message"> Ha sido usted congelado. No puede moverse o escribir en el chat. Un administrador contactará con usted a través de un mensaje instantáneo (MI). </input> <button name="OK" text="OK"/> @@ -1418,7 +1426,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="UnFreezeUser"> ¿Con qué mensaje se descongelará a este usuario? <form name="form"> - <input name="message" type="text"> + <input name="message"> Ya no está usted congelado. </input> <button name="OK" text="OK"/> @@ -1428,7 +1436,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="OfferTeleport"> ¿Ofrecer teleporte a su posición con este mensaje? <form name="form"> - <input name="message" type="text"> + <input name="message"> Ven conmigo a [REGION] </input> <button name="OK" text="OK"/> @@ -1438,7 +1446,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification name="OfferTeleportFromGod"> ¿Convocar a este usuario a su posición? <form name="form"> - <input name="message" type="text"> + <input name="message"> Ven conmigo a [REGION] </input> <button name="OK" text="OK"/> @@ -1452,7 +1460,7 @@ Se ocultará el chat y los mensajes instantáneos. Los mensajes instantáneos re <notification label="Mensaje a todo el estado" name="MessageEstate"> Escriba un anuncio breve que se enviará a todo el que esté en su estado. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> @@ -1676,7 +1684,7 @@ Puede pulsar 'Cambiar preferencia' para aumentar su nivel de calificac <notification label="Mensaje a toda la región" name="MessageRegion"> Escriba un anuncio breve que se enviará a todo el que esté en esta región. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> @@ -1967,14 +1975,14 @@ Serán copiados a su inventario. ¿Está seguro de querer hacer esta compra? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Esta transacción hará que: [ACTION] ¿Está seguro de querer hacer esta compra? Por favor, vuelva a escribir su contraseña y pulse OK. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> @@ -2335,7 +2343,7 @@ Pero, vaya, diviértase si quiere. <notification name="NewSkyPreset"> Dame un nombre para el cielo nuevo. <form name="form"> - <input name="message" type="text"> + <input name="message"> Preselección nueva </input> <button name="OK" text="OK"/> @@ -2348,7 +2356,7 @@ Pero, vaya, diviértase si quiere. <notification name="NewWaterPreset"> Dame un nombre para la nueva preselección de agua. <form name="form"> - <input name="message" type="text"> + <input name="message"> Preselección nueva </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml index 68245ffb70..0c98889d32 100644 --- a/indra/newview/skins/default/xui/es/panel_group_general.xml +++ b/indra/newview/skins/default/xui/es/panel_group_general.xml @@ -37,9 +37,9 @@ Ponga su ratón sobre las opciones para más información. (los propietarios aparecen en negrilla) </text> <name_list name="visible_members"> - <column label="Nombre del miembro" name="name" relwidth="0.40"/> - <column label="Etiqueta" name="title" relwidth="0.25"/> - <column label="Última conexión" name="online" relwidth="0.35"/> + <name_list.columns label="Nombre del miembro" name="name" relwidth="0.40"/> + <name_list.columns label="Etiqueta" name="title" relwidth="0.25"/> + <name_list.columns label="Última conexión" name="online" relwidth="0.35"/> </name_list> <text name="text_group_preferences"> Preferencias del grupo @@ -50,15 +50,9 @@ Ponga su ratón sobre las opciones para más información. <check_box label="Cuota de inscripción en L$:" name="check_enrollment_fee" tool_tip="Define si se requiere una cuota para entrar al grupo."/> <spinner width="60" left_delta="130" name="spin_enrollment_fee" tool_tip="Cuando está marcado 'Cuota de inscripción', los miembros nuevos deben pagar esta cuota para entrar al grupo."/> <combo_box bottom_delta="-38" width="150" name="group_mature_check" tool_tip="Establece si la información de su grupo es 'mature'."> - <combo_item name="select_mature"> - - Elegir Calificación - - </combo_item> - <combo_item name="mature"> - Contenido 'Mature' - </combo_item> - <combo_item name="pg"> - Contenido 'PG' - </combo_item> + <combo_box.item name="select_mature" label="- Elegir Calificación -"/> + <combo_box.item name="mature" label="Contenido 'Mature'"/> + <combo_box.item name="pg" label="Contenido 'PG'"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml index 1ca673332b..c6788b3a65 100644 --- a/indra/newview/skins/default/xui/es/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/es/panel_group_notices.xml @@ -11,9 +11,7 @@ Archivo de avisos del grupo </text> <text name="lbl2"> - Los avisos se mantienen durante 14 días. Pulse en la lista de abajo el que -quiere ver. Pulse el botón 'Actualizar' para comprobar si se han recibido avisos -nuevos. Las listas de avisos tienen un límite de 200 avisos por día. + Los avisos se mantienen durante 14 días. Las listas de avisos tienen un límite de 200 avisos por día. </text> <scroll_list name="notice_list"> <column label="Asunto" name="subject"/> @@ -30,10 +28,7 @@ nuevos. Las listas de avisos tienen un límite de 200 avisos por día. Crear un aviso </text> <text name="lbl2"> - Para enviar un aviso, debe escribir un asunto. Puede añadir un -ítem al aviso arrastrándolo desde su inventario a este panel. -Los ítems anexados deben ser copiables y transferibles, -y no se puede enviar una carpeta. + Puede añadir un ítem al aviso arrastrándolo desde su inventario a este panel. Los ítems anexados deben ser copiables y transferibles, y no se puede enviar una carpeta. </text> <text name="lbl3"> Asunto: @@ -45,7 +40,7 @@ y no se puede enviar una carpeta. Anexar: </text> <button label="Remover lo anexado" label_selected="Remover lo anexado" name="remove_attachment"/> - <button label="Enviar el aviso" label_selected="Enviar el aviso" name="send_notice"/> + <button label="Enviar" label_selected="Enviar" name="send_notice"/> <panel name="drop_target" tool_tip="Para enviar un ítem con el aviso, arrástrelo desde su inventario hasta el cuadro del mensaje. Para poder enviar ese objeto con el aviso, usted debe tener permiso para copiarlo y transferirlo."/> </panel> <panel label="Ver avisos pasados" name="panel_view_past_notice"> diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml index 8c3d7ae575..6505424b35 100644 --- a/indra/newview/skins/default/xui/es/panel_login.xml +++ b/indra/newview/skins/default/xui/es/panel_login.xml @@ -21,7 +21,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Mi Base"/> <combo_box.item name="MyLastLocation" label="Mi última posición"/> - <combo_box.item name="Typeregionname" label="lt;Escriba el nombre de la Región>"/> + <combo_box.item name="Typeregionname" label="<Escriba el nombre de la Región>"/> </combo_box> <check_box label="Recordar la contraseña" name="remember_check"/> <button label="Iniciar sesión" label_selected="Iniciar sesión" name="connect_btn"/> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml new file mode 100644 index 0000000000..2718ead861 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="ancho / alto">
+ Proporción:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="ancho / alto">
+ <combo_box.item label="4:3 (Standard CRT)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (Widescreen)" name="item3"/>
+ <combo_box.item label="16:9 (Widescreen)" name="item4"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml index b8c9cc5b44..4e9dc6db6f 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Chat de texto" name="chat"> - <text length="1" name="text_box" type="string"> + <text name="text_box"> Tamaño de la fuente del chat: </text> @@ -9,44 +9,50 @@ del chat: <radio_item name="radio2" label="Medio" /> <radio_item name="radio3" label="Grande" /> </radio_group> - <text length="1" name="text_box2" type="string"> - Color del chat: - </text> <color_swatch label="Usted" name="user"/> - <color_swatch label="Otros" name="agent" width="60" left_delta="48"/> - <color_swatch label="MI" name="im" left_delta="64" width="50"/> + <text name="text_box1"> + Usted + </text> + <color_swatch label="Otros" name="agent"/> + <text name="text_box2"> + Otros + </text> + <color_swatch label="MI" name="im"/> + <text name="text_box3"> + MI + </text> <color_swatch label="Sistema" name="system"/> - <color_swatch label="Errores" name="script_error" left_delta="48"/> + <text name="text_box4"> + Sistema + </text> + <color_swatch label="Errores de script" name="script_error"/> + <text name="text_box5"> + Errores de script + </text> <color_swatch label="Objetos" name="objects"/> - <color_swatch label="Propietario" name="owner" width="60" left_delta="48"/> - <color_swatch label="Bocadillo" name="background" left_delta="64" width="50"/> - <color_swatch label="URL" name="links" /> - <text length="1" name="text_box8" type="string"> - Errores de script: + <text name="text_box6"> + Objetos </text> - <check_box label="Ver en el chat los avisos y errores de los scripts" name="script_errors_as_chat"/> - <text length="1" name="text_box3" type="string"> - Consola del chat: + <color_swatch label="Propietario" name="owner"/> + <text name="text_box7"> + Propietario </text> - <spinner label="Quitar el chat tras" name="fade_chat_time" label_width="95" width="145" /> - <text length="1" name="text_box4" type="string" left="297" > - (seg.) + <color_swatch label="Bocadillo" name="background"/> + <text name="text_box8"> + Bocadillo </text> - <text length="1" name="text_box5" type="string"> - (# líneas) + <color_swatch label="URL" name="links"/> + <text name="text_box9"> + URL </text> + <check_box label="Ver en el chat los avisos y errores de los scripts" name="script_errors_as_chat"/> + <spinner label="Quitar el chat tras" name="fade_chat_time" label_width="95" width="145" /> <slider label="Opacidad" name="console_opacity"/> <check_box label="Usar el ancho de la pantalla (tras reiniciar)" name="chat_full_width_check"/> - <text length="1" name="text_box6" type="string"> - Opciones del chat: - </text> <check_box label="Cerrar el chat al pulsar Intro" name="close_chat_on_return_check"/> <check_box label="En el chat, las teclas del cursor mueven el avatar" name="arrow_keys_move_avatar_check"/> <check_box label="Incluir la hora en el chat" name="show_timestamps_check"/> <check_box label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/> - <text length="1" name="text_box7" type="string"> - Bocadillos del chat: - </text> <check_box label="Mostrar el chat en bocadillos" name="bubble_text_chat"/> <slider label="Opacidad" name="bubble_chat_opacity"/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml index 9e5cd88603..2f2aab5448 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="General" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Por defecto, iniciar sesión en mi Base."> - Mi Base - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Por defecto, iniciar sesión en mi última posición."> - Mi última posición - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Por defecto, iniciar sesión en mi Base." label="Mi Base"/> + <combo_box.item name="MyLastLocation" tool_tip="Por defecto, iniciar sesión en mi última posición." label="Mi última posición"/> + </combo_box> <check_box label="Ver mi posición inicial en la pantalla de inicio de sesión" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox" width="166"> - <combo_item name="Never"> - Nunca - </combo_item> - <combo_item name="Show Temporarily"> - Mostrarlos temporalmente - </combo_item> - <combo_item name="Always"> - Siempre - </combo_item> + <combo_box name="fade_out_combobox"> + <combo_box.item name="Never" label="Nunca"/> + <combo_box.item name="Show Temporarily" label="Mostrarlos temporalmente"/> + <combo_box.item name="Always" label="Siempre"/> </combo_box> <check_box label="Nombres de avatar en pequeño" name="small_avatar_names_checkbox"/> <check_box label="No ver mi nombre en mi pantalla" name="show_my_name_checkbox"/> @@ -34,114 +24,67 @@ <check_box label="Resolución independiente del tamaño" name="ui_auto_scale"/> <spinner label="Ausente tras:" name="afk_timeout_spinner"/> <check_box label="Avisar cuando gasto o recibo dólares Linden (L$)" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label" bottom="-312"> + <text name="maturity_desired_label"> Calificación: </text> - <text name="maturity_desired_prompt" bottom="-312"> - Quiero acceder a -contenido calificado: + <text name="maturity_desired_prompt"> + Quiero acceder a contenido calificado: </text> - <combo_box name="maturity_desired_combobox" bottom="-330" left="274"> - <combo_item name="Desired_Adult"> - 'PG', 'Mature' y 'Adult' - </combo_item> - <combo_item name="Desired_Mature"> - 'PG' y 'Mature' - </combo_item> - <combo_item name="Desired_PG"> - sólo 'PG' - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="'PG', 'Mature' y 'Adult'"/> + <combo_box.item name="Desired_Mature" label="'PG' y 'Mature'"/> + <combo_box.item name="Desired_PG" label="sólo 'PG'"/> </combo_box> - <text name="maturity_desired_textbox" bottom="-324" left="274"> + <text name="maturity_desired_textbox"> sólo 'PG' </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> Posición inicial: </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> Mostrar los nombres: </text> - <text length="1" name="effects_color_textbox" type="string"> + <text name="effects_color_textbox"> Color de mis efectos: </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> segundos </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> Informes de caídas: </text> - <text length="1" name="language_textbox" type="string"> + <text name="language_textbox"> Idioma: </text> - <text left_delta="313" length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (Tendrá efecto tras reiniciar) </text> <string name="region_name_prompt"> <escriba el nombre de la región> </string> - <combo_box name="crash_behavior_combobox" width="166"> - <combo_item length="1" name="Askbeforesending" type="string"> - Preguntar antes de enviar - </combo_item> - <combo_item length="1" name="Alwayssend" type="string"> - Enviar siempre - </combo_item> - <combo_item length="1" name="Neversend" type="string"> - No enviar nunca - </combo_item> + <combo_box name="crash_behavior_combobox"> + <combo_box.item name="Askbeforesending" label="Preguntar antes de enviar"/> + <combo_box.item name="Alwayssend" label="Enviar siempre"/> + <combo_box.item name="Neversend" label="No enviar nunca"/> </combo_box> - <combo_box name="language_combobox" width="166"> - <combo_item name="System Default Language"> - Predeterminado del sistema - </combo_item> - <combo_item length="1" name="English" type="string"> - English (Inglés) - </combo_item> - <combo_item name="Danish"> - Dansk (Danés) - Beta - </combo_item> - <combo_item length="1" name="Deutsch(German)" type="string"> - Deutsch (Alemán) - Beta - </combo_item> - <combo_item name="Spanish" type="string"> - Español - Beta - </combo_item> - <combo_item length="1" name="French" type="string"> - Français (Francés) - Beta - </combo_item> - <combo_item name="Italian"> - Italiano - Beta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Húngaro) - Beta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Neerlandés) - Beta - </combo_item> - <combo_item name="Polish"> - Polski (Polaco) - Beta - </combo_item> - <combo_item name="Portugese"> - Portugués (Portugués) - Beta - </combo_item> - <combo_item name="Russian"> - Русский (Ruso) - Beta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Turco) - Beta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ucraniano) - Beta - </combo_item> - <combo_item length="1" name="Chinese" type="string"> - 中文 (简体) (Chino) - Beta - </combo_item> - <combo_item length="1" name="(Japanese)" type="string"> - 日本語 (Japonés) - Beta - </combo_item> - <combo_item length="1" name="(Korean)" type="string"> - 한국어 (Coreano) - Beta - </combo_item> + <combo_box name="language_combobox"> + <combo_box.item name="System Default Language" label="Predeterminado del sistema"/> + <combo_box.item name="English" label="English (Inglés)"/> + <combo_box.item name="Danish" label="Dansk (Danés) - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Alemán) - Beta"/> + <combo_box.item name="Spanish" label="Español - Beta"/> + <combo_box.item name="French" label="Français (Francés) - Beta"/> + <combo_box.item name="Italian" label="Italiano - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Húngaro) - Beta"/> + <combo_box.item name="Dutch" label="Nederlands (Neerlandés) - Beta"/> + <combo_box.item name="Polish" label="Polski (Polaco) - Beta"/> + <combo_box.item name="Portugese" label="Portugués (Portugués) - Beta"/> + <combo_box.item name="Russian" label="Русский (Ruso) - Beta"/> + <combo_box.item name="Turkish" label="Türkçe (Turco) - Beta"/> + <combo_box.item name="Ukrainian" label="Українська (Ucraniano) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Chino) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japonés) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Coreano) - Beta"/> </combo_box> <check_box label="Compartir el idioma con los objetos" name="language_is_public" tool_tip="Hace que los objetos con script del mundo sepan su idioma preferido."/> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml index 7e19c6dd6b..4038940256 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml @@ -23,10 +23,10 @@ Proporción: </text> <combo_box left="124" name="aspect_ratio" tool_tip="ancho / alto"> - <combo_box.item length="1" name="4:3(StandardCRT)" type="string" label="4:3 (Standard CRT)"/> - <combo_box.item length="1" name="5:4(1280x1024LCD)" type="string" label="5:4 (1280x1024 LCD)"/> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)"/> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)"/> <combo_box.item name="8:5(Widescreen)" label="8:5 (Widescreen)"/> - <combo_box.item length="1" name="16:9(Widescreen)" type="string" label="16:9 (Widescreen)"/> + <combo_box.item name="16:9(Widescreen)" label="16:9 (Widescreen)"/> </combo_box> <check_box label="Detectar automáticamente la proporción" name="aspect_auto_detect" left="295" /> <text name="HigherText"> @@ -57,6 +57,7 @@ calidad </text> <check_box label="Personalizar" name="CustomSettings"/> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> Shaders: </text> @@ -133,12 +134,13 @@ <radio_item name="0" label="Bajo" /> <radio_item name="2" label="Alto" /> </radio_group> + </panel> <button label="Configuraciones recomendadas" name="Defaults" width="195" left="110"/> <button label="Opciones del hardware" label_selected="Opciones del hardware" name="GraphicsHardwareButton" left="315"/> - <string name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </string> - <string name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </string> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml index f16ec89cb0..653dc32a24 100644 --- a/indra/newview/skins/default/xui/es/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/es/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Estado" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Estado" name="Estate"> <text name="estate_help_text"> Los cambios en las configuraciones de esta pestaña afectarán a todas las regiones del estado. @@ -66,4 +68,6 @@ pestaña afectarán a todas las regiones del estado. <button label="?" name="ban_resident_help" right="476"/> <button label="Quitar..." name="remove_banned_avatar_btn"/> <button label="Añadir..." name="add_banned_avatar_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml index 155161489e..ca8da6ccaf 100644 --- a/indra/newview/skins/default/xui/es/panel_region_general.xml +++ b/indra/newview/skins/default/xui/es/panel_region_general.xml @@ -40,15 +40,9 @@ Calificación: </text> <combo_box label="'Mature'" name="access_combo"> - <combo_item name="Adult"> - 'Adult' - </combo_item> - <combo_item name="Mature"> - 'Mature' - </combo_item> - <combo_item name="PG"> - 'PG' - </combo_item> + <combo_box.item label="'Adult'" name="Adult"/> + <combo_box.item label="'Mature'" name="Mature"/> + <combo_box.item label="'PG'" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Aplicar" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/es/panel_region_texture.xml b/indra/newview/skins/default/xui/es/panel_region_texture.xml index 5540358f97..879fb87be2 100644 --- a/indra/newview/skins/default/xui/es/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/es/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Texturas del terreno" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Texturas del terreno" name="Textures"> <text name="region_text_lbl"> Región: </text> @@ -54,4 +56,6 @@ y el valor ALTA es la altura MÍNIMA de la textura #4. </text> <button label="Aplicar" name="apply_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/es/panel_scrolling_param.xml b/indra/newview/skins/default/xui/es/panel_scrolling_param.xml index f6feab274f..bafd4e5e55 100644 --- a/indra/newview/skins/default/xui/es/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/es/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="LLScrollingPanelParam"> - <text length="1" name="Loading..." type="string"> + <text name="Loading..."> Cargando... </text> - <text length="1" name="Loading...2" type="string"> + <text name="Loading...2"> Cargando... </text> <slider label="[DESC]" name="param slider"/> diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml index 0c5559a359..31cde7d237 100644 --- a/indra/newview/skins/default/xui/es/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/es/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text length="1" name="ParcelNameText" tool_tip="Nombre de la parcela en la que está. Pulse Acerca del terreno." type="string"> + <text name="ParcelNameText" tool_tip="Nombre de la parcela en la que está. Pulse Acerca del terreno."> el nombre de la parcela va aquí </text> - <text length="1" name="BalanceText" tool_tip="Saldo de su cuenta" type="string"> + <text name="BalanceText" tool_tip="Saldo de su cuenta"> Cargando... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Comprar dinero"/> - <text length="12" name="TimeText" tool_tip="Hora actual (costa oeste EE.UU.)" type="string"> + <text name="TimeText" tool_tip="Hora actual (costa oeste EE.UU.)"> 12:00 AM </text> <string name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </string> <button label="" label_selected="" name="scriptout" tool_tip="Errores y alertas de los scripts"/> <button label="" label_selected="" name="health" tool_tip="Vida"/> - <text length="1" name="HealthText" tool_tip="Vida" type="string"> + <text name="HealthText" tool_tip="Vida"> 100% </text> <button label="" label_selected="" name="no_fly" tool_tip="Prohibido volar"/> diff --git a/indra/newview/skins/default/xui/es/panel_world_map.xml b/indra/newview/skins/default/xui/es/panel_world_map.xml new file mode 100644 index 0000000000..93d0ea8fe3 --- /dev/null +++ b/indra/newview/skins/default/xui/es/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ E
+ </panel.string>
+ <panel.string name="world_map_west">
+ O
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NO
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 96bf0ea865..6b7019ba95 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -486,4 +486,45 @@ <string name="choose_the_directory"> Elegir directorio </string> + <!-- OSMessageBox messages --> + <string name="MBAlreadyRunning"> + [APP_NAME] ya se está ejecutando. +Busque en la barra de su escritorio una copia minimizada del programa. +Si aun así persiste este mensaje, reinicie su ordenador. + </string> + <string name="MBVideoDrvErr"> + No se puede ejecutar [APP_NAME] porque los drivers de su tarjeta de vídeo no están instalados correctamente, o no están actualizados, o son de un hardware no admitido. Por favor, asegúrese de que tiene los últimos drivers para su tarjeta de vídeo, e incluso en ese caso intente reinstalarlos. + +Si sigue recibiendo este mensaje, contacte con el [SUPPORT_SITE]. + </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Alt- + </string> + <string name="accel-mac-shift"> + Mayús- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Mayús+ + </string> + <string name="GraphicsQualityLow"> + Bajo + </string> + <string name="GraphicsQualityMid"> + Medio + </string> + <string name="GraphicsQualityHigh"> + Alto + </string> </strings> diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml index a556fa4173..f2d2dbfa07 100644 --- a/indra/newview/skins/default/xui/fr/floater_about_land.xml +++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml @@ -2,11 +2,11 @@ <floater name="floaterland" title="À propos du terrain"> <tab_container name="landtab"> <panel label="Général" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> Nom : </text> <line_editor name="Name"/> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Description : </text> <text_editor name="Description"/> @@ -22,14 +22,14 @@ <text name="ContentRatingText"> Adult </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> Propriétaire : </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="Profil..." label_selected="Profil..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> Groupe : </text> <text name="GroupText"/> @@ -37,43 +37,43 @@ <check_box label="Autoriser la cession au groupe" name="check deed" tool_tip="Un officier peut céder ce terrain au groupe. Il viendra alors s'ajouter au patrimoine du groupe."/> <button label="Céder..." label_selected="Céder..." name="Deed..." tool_tip="Vous ne pouvez céder le terrain que si vous avez un rôle d'officier dans le groupe sélectionné."/> <check_box label="Le propriétaire contribue en cédant du terrain" name="check contrib" tool_tip="Lorsqu'un terrain est cédé au groupe, l'ancien propriétaire fait également un don de terrain suffisant."/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> À vendre : </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> Pas à vendre </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> Prix : [PRICE] L$ ([PRICE_PER_SQM] L$/m²). </text> <text name="SalePending"/> <button label="Vendre le terrain..." label_selected="Vendre le terrain..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> À vendre à : [BUYER] </text> - <text length="1" name="Sell with landowners objects in parcel." type="string"> + <text name="Sell with landowners objects in parcel."> Objets inclus dans la vente. </text> - <text length="1" name="Selling with no objects in parcel." type="string"> + <text name="Selling with no objects in parcel."> Objets non inclus dans la vente. </text> <button label="Annuler la vente du terrain" label_selected="Annuler la vente du terrain" left="275" name="Cancel Land Sale" width="165"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> Acquis : </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> Tue Aug 15 13:47:25 2006 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> Superficie : </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048 m² </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> Trafic : </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 0 </text> <button label="Acheter le terrain..." label_selected="Acheter le terrain..." left="130" name="Buy Land..." width="125"/> @@ -82,76 +82,76 @@ <button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="Abandon Land..."/> <button label="Redemander le terrain..." label_selected="Redemander le terrain…" name="Reclaim Land..."/> <button label="Vente Linden..." label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d'un résident, avoir un contenu défini et ne pas être aux enchères."/> - <string name="new users only"> + <panel.string name="new users only"> Nouveaux utilisateurs uniquement - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Tout le monde - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Surface - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Code de l'enchère : [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Pour modifier ce terrain, vous devez approuver votre achat. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (propriété du groupe) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Infos... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (public) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (aucun) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (vente en cours) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Aucune parcelle sélectionnée. Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre parcelle pour en afficher les détails. - </string> + </panel.string> </panel> <panel label="Règlement" name="land_covenant_panel"> <text name="estate_section_lbl"> Domaine : </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> Nom : </text> - <text length="1" name="estate_name_text" type="string"> + <text name="estate_name_text"> continent </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> Propriétaire : </text> - <text length="1" name="estate_owner_text" type="string"> + <text name="estate_owner_text"> (aucun) </text> - <text_editor length="1" name="covenant_editor" type="string"> + <text_editor name="covenant_editor"> Il n'y a aucun règlement pour ce domaine. </text_editor> - <text length="1" name="covenant_timestamp_text" type="string"> + <text name="covenant_timestamp_text"> Last Modified Wed Dec 31 16:00:00 1969 </text> <text name="region_section_lbl"> Région : </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> Nom : </text> - <text length="1" name="region_name_text" type="string"> + <text name="region_name_text"> leyla </text> <text name="region_landtype_lbl"> @@ -169,93 +169,93 @@ Allez dans le menu Monde > À propos du terrain ou sélectionnez une autre pa <text name="resellable_lbl"> Revendre : </text> - <text length="1" name="resellable_clause" type="string"> + <text name="resellable_clause"> Le terrain dans cette région ne peut être revendu. </text> <text name="changeable_lbl"> Sous-diviser : </text> - <text length="1" name="changeable_clause" type="string"> + <text name="changeable_clause"> Le terrain dans cette région ne peut être fusionné/divisé. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Le terrain acheté dans cette région peut être revendu. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Le terrain acheté dans cette région ne peut pas être revendu. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Le terrain acheté dans cette région peut être fusionné ou divisé. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Le terrain acheté dans cette région ne peut pas être fusionné ou divisé. - </string> + </panel.string> </panel> <panel label="Objets" name="land_objects_panel"> <text name="parcel_object_bonus"> Facteur Bonus Objets : [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string"> + <text name="Simulator primitive usage:"> Prims utilisées sur la parcelle : </text> <text left="214" name="objects_available" width="230"> [COUNT] sur [MAX] ([AVAILABLE] disponibles) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] sur [MAX] ([AVAILABLE] disponibles) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] sur [MAX] ([DELETED] seront supprimés) - </string> - <text length="1" name="Primitives parcel supports:" type="string" width="200"> + </panel.string> + <text name="Primitives parcel supports:" width="200"> Prims max. sur la parcelle : </text> - <text left="214" length="1" name="object_contrib_text" type="string" width="152"> + <text left="214" name="object_contrib_text" width="152"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> Prims sur la parcelle : </text> - <text left="214" length="1" name="total_objects_text" type="string" width="48"> + <text left="214" name="total_objects_text" width="48"> [COUNT] </text> - <text left="14" length="1" name="Owned by parcel owner:" type="string" width="180"> + <text left="14" name="Owned by parcel owner:" width="180"> Appartenant au propriétaire : </text> - <text left="214" length="1" name="owner_objects_text" type="string" width="48"> + <text left="214" name="owner_objects_text" width="48"> [COUNT] </text> <button label="Afficher" label_selected="Afficher" name="ShowOwner" right="-135" width="60"/> <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOwner..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" length="1" name="Set to group:" type="string" width="180"> + <text left="14" name="Set to group:" width="180"> Données au groupe : </text> - <text left="214" length="1" name="group_objects_text" type="string" width="48"> + <text left="214" name="group_objects_text" width="48"> [COUNT] </text> <button label="Afficher" label_selected="Afficher" name="ShowGroup" right="-135" width="60"/> <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnGroup..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" length="1" name="Owned by others:" type="string" width="128"> + <text left="14" name="Owned by others:" width="128"> Appartenant à d'autres : </text> - <text left="214" length="1" name="other_objects_text" type="string" width="48"> + <text left="214" name="other_objects_text" width="48"> [COUNT] </text> <button label="Afficher" label_selected="Afficher" name="ShowOther" right="-135" width="60"/> <button label="Renvoyer..." label_selected="Renvoyer..." name="ReturnOther..." right="-10" tool_tip="Renvoyer les objets à leurs propriétaires." width="119"/> - <text left="14" length="1" name="Selected / sat upon:" type="string" width="193"> + <text left="14" name="Selected / sat upon:" width="193"> Sélectionnées/où quelqu'un est assis : </text> - <text left="214" length="1" name="selected_objects_text" type="string" width="48"> + <text left="214" name="selected_objects_text" width="48"> [COUNT] </text> <text left="4" name="Autoreturn" width="412"> Renvoi automatique des objets des autres résidents (min., 0 pour désactiver) : </text> <line_editor name="clean other time" right="-6" width="36"/> - <text length="1" name="Object Owners:" type="string"> + <text name="Object Owners:"> Propriétaires : </text> <button label="Rafraîchir" label_selected="Rafraîchir" name="Refresh List"/> @@ -269,7 +269,7 @@ ou divisé. </name_list> </panel> <panel label="Options" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> Autoriser les autres résidents à : </text> <check_box label="Modifier le terrain" name="edit land check" tool_tip="Si cette option est cochée, n'importe qui peut terraformer votre terrain. Il vaut mieux ne pas cocher cette option pour toujours pouvoir modifer votre propre terrain."/> @@ -290,147 +290,119 @@ ou divisé. </text> <check_box label="Tous les résidents" left="285" name="check other scripts"/> <check_box label="Groupe" left="395" name="check group scripts"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> Options du terrain : </text> <check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n'y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/> <check_box bottom="-140" label="Pas de bousculades" left="14" name="PushRestrictCheck" tool_tip="Empêche l'utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/> <check_box bottom="-160" label="Afficher dans la recherche (30 L$/semaine) sous" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Permettre aux autres résidents de voir cette parcelle dans les résultats de recherche - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Cette option est désactivée car la superficie de cette parcelle est inférieure ou égale à 128 m². Seules les parcelles de grande taille peuvent apparaître dans la recherche. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Cette option est désactivée car vous ne pouvez pas modifier les options de cette parcelle. - </string> + </panel.string> <combo_box bottom="-160" left="286" name="land category with adult" width="146"> - <combo_item name="AnyCategory"> - Toutes catégories - </combo_item> - <combo_item name="LindenLocation"> - Appartenant aux Lindens - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Art et Culture - </combo_item> - <combo_item name="Business"> - Affaires - </combo_item> - <combo_item name="Educational"> - Éducation - </combo_item> - <combo_item name="Gaming"> - Jeux - </combo_item> - <combo_item name="Hangout"> - Favoris - </combo_item> - <combo_item name="NewcomerFriendly"> - Accueil pour les nouveaux - </combo_item> - <combo_item name="Parks&Nature"> - Parcs et Nature - </combo_item> - <combo_item name="Residential"> - Résidentiel - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Autre - </combo_item> + <combo_box.item name="item0" label="Toutes catégories" + /> + <combo_box.item name="item1" label="Appartenant aux Lindens" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Art et Culture" + /> + <combo_box.item name="item4" label="Affaires" + /> + <combo_box.item name="item5" label="Éducation" + /> + <combo_box.item name="item6" label="Jeux" + /> + <combo_box.item name="item7" label="Favoris" + /> + <combo_box.item name="item8" label="Accueil pour les nouveaux" + /> + <combo_box.item name="item9" label="Parcs et Nature" + /> + <combo_box.item name="item10" label="Résidentiel" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Autre" + /> </combo_box> <combo_box bottom="-160" left="286" name="land category" width="146"> - <combo_item name="AnyCategory"> - Toutes catégories - </combo_item> - <combo_item name="LindenLocation"> - Appartenant aux Lindens - </combo_item> - <combo_item name="Arts&Culture"> - Art et Culture - </combo_item> - <combo_item name="Business"> - Affaires - </combo_item> - <combo_item name="Educational"> - Éducation - </combo_item> - <combo_item name="Gaming"> - Jeux - </combo_item> - <combo_item name="Hangout"> - Favoris - </combo_item> - <combo_item name="NewcomerFriendly"> - Accueil pour les nouveaux - </combo_item> - <combo_item name="Parks&Nature"> - Parcs et Nature - </combo_item> - <combo_item name="Residential"> - Résidentiel - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Autre - </combo_item> + <combo_box.item name="item0" label="Toutes catégories" + /> + <combo_box.item name="item1" label="Appartenant aux Lindens" + /> + <combo_box.item name="item3" label="Art et Culture" + /> + <combo_box.item name="item4" label="Affaires" + /> + <combo_box.item name="item5" label="Éducation" + /> + <combo_box.item name="item6" label="Jeux" + /> + <combo_box.item name="item7" label="Favoris" + /> + <combo_box.item name="item8" label="Accueil pour les nouveaux" + /> + <combo_box.item name="item9" label="Parcs et Nature" + /> + <combo_box.item name="item10" label="Résidentiel" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Autre" + /> </combo_box> <button bottom="-160" label="?" label_selected="?" left="436" name="?"/> <check_box bottom="-180" label="Contenu Mature" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Contenu Mature - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Contenu Adult - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Les informations ou contenu de votre parcelle sont classés Mature. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Les informations ou contenu de votre parcelle sont classés Adult. - </string> - <text bottom="-200" length="1" name="Snapshot:" type="string"> + </panel.string> + <text bottom="-200" name="Snapshot:"> Photo : </text> <texture_picker bottom="-319" label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/> <text bottom="-323" name="landing_point"> Lieu d'arrivée : [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (aucun) - </string> + </panel.string> <button bottom="-323" label="Définir" label_selected="Définir" name="Set" tool_tip="Définit le point d'arrivée des visiteurs. Définit l'emplacement de votre avatar sur ce terrain."/> <button bottom="-323" label="Annuler" label_selected="Annuler" name="Clear" tool_tip="Libérer le lieu d'arrivée."/> - <text bottom="-343" length="1" name="Teleport Routing: " type="string"> + <text bottom="-343" name="Teleport Routing: "> Règles de téléportation : </text> <combo_box bottom="-343" left="140" name="landing type" tool_tip="Vous permet de paramétrer les téléportations sur votre terrain." width="140"> - <combo_item length="1" name="Blocked" type="string"> - Bloqué - </combo_item> - <combo_item length="1" name="LandingPoint" type="string"> - Lieu d'arrivée fixe - </combo_item> - <combo_item length="1" name="Anywhere" type="string"> - Lieu d'arrivée libre - </combo_item> + <combo_box.item name="Blocked" label="Bloqué" + /> + <combo_box.item name="LandingPoint" label="Lieu d'arrivée fixe" + /> + <combo_box.item name="Anywhere" label="Lieu d'arrivée libre" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Pas de bousculades - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Pas de bousculades (les règles de la région priment) - </string> + </panel.string> </panel> <panel label="Médias" name="land_media_panel"> <text name="with media:" width="85"> @@ -447,7 +419,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche. Description : </text> <line_editor left="97" name="url_description" tool_tip="Texte affiché à côté du bouton Jouer/Charger"/> - <text length="1" name="Media texture:" type="string"> + <text name="Media texture:"> Remplacer la texture : </text> @@ -490,7 +462,7 @@ musique : <check_box label="Limiter le chat vocal à cette parcelle" left="117" name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="Accès" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> Accès à cette parcelle </text> <check_box label="Autoriser l'accès public" name="public_access"/> @@ -499,18 +471,16 @@ musique : </text> <check_box label="Qui n'ont pas fourni leurs informations de paiement à Linden Lab" name="limit_payment" tool_tip="Aux résidents non identifés"/> <check_box label="Dont l'âge n'a pas été vérifié" name="limit_age_verified" tool_tip="Aux résidents dont l'âge n'a pas été vérifié. Pour plus d'infos, consultez la page support.secondlife.com."/> - <string name="estate_override"> + <panel.string name="estate_override"> Au moins une de ces options est définie au niveau du domaine. - </string> + </panel.string> <check_box label="Autoriser l'accès au groupe : [GROUP]" name="GroupCheck" tool_tip="Définir le groupe à l'onglet Général."/> <check_box label="Vendre des pass à :" name="PassCheck" tool_tip="Autoriser un accès temporaire à cette parcelle"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Tout le monde - </combo_item> - <combo_item name="Group"> - Groupe - </combo_item> + <combo_box.item name="Anyone" label="Tout le monde" + /> + <combo_box.item name="Group" label="Groupe" + /> </combo_box> <spinner label="Prix en L$ :" name="PriceSpin"/> <spinner label="Durée en heures :" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/fr/floater_customize.xml b/indra/newview/skins/default/xui/fr/floater_customize.xml index 89b3705570..1250c46933 100644 --- a/indra/newview/skins/default/xui/fr/floater_customize.xml +++ b/indra/newview/skins/default/xui/fr/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Apparence" width="548"> <tab_container name="customize tab container" tab_min_width="150" width="546"> - <panel label="Parties du corps" name="body_parts_placeholder"/> + <placeholder label="Parties du corps" name="body_parts_placeholder"/> <panel label="Silhouette" left="154" name="Shape" width="389"> <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> <button label="Corps" label_selected="Corps" name="Body"/> @@ -14,34 +14,30 @@ <button label="Torse" label_selected="Torse" name="Torso"/> <button label="Jambes" label_selected="Jambes" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string"> - Femme - </radio_item> - <radio_item length="1" name="radio2" type="string"> - Homme - </radio_item> + <radio_item name="radio" label="Femme"/> + <radio_item name="radio2" label="Homme"/> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portée </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour changer de silhouette, faites-en glisser une à partir de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et de la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -56,26 +52,26 @@ et de la porter. <button label="Détails visage" label_selected="Détails visage" name="Face Detail" width="84"/> <button label="Maquillage" label_selected="Maquillage" name="Makeup" width="84"/> <button label="Détails corps" label_selected="Détails corps" name="Body Detail" width="84"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portée </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour changer de peau, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -94,27 +90,27 @@ Vous pouvez aussi en créer une nouvelle et la porter. <button label="Style" label_selected="Style" name="Style"/> <button label="Sourcils" label_selected="Sourcils" name="Eyebrows"/> <button label="Pilosité" label_selected="Pilosité" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portés </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour changer de chevelure, faites-en glisser une de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -127,26 +123,26 @@ et la porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Yeux" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portés </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour changer vos yeux, faites-les glisser de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer de nouveaux et les porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -167,26 +163,26 @@ votre avatar. Vous pouvez aussi en créer de nouveaux et les porter. <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portée </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter une nouvelle chemise, faites-en glisser une de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -201,26 +197,26 @@ jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porte <button label="Enregistrer" label_selected="Enregistrer" left="100" name="Save" width="82"/> <button label="Enregistrer sous..." label_selected="Enregistrer sous..." left="188" name="Save As" width="111"/> <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non porté </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter un nouveau pantalon, faites-en glisser un de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -228,27 +224,27 @@ jusqu'à votre avatar. Vous pouvez aussi en créer un nouveau et le porter. </text> </panel> <panel label="Chaussures" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portées </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter de nouvelles chaussures, faites-en glisser une paire de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle paire et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -263,27 +259,27 @@ nouvelle paire et la porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Chaussettes" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portées </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter de nouvelles chaussettes, faites-en glisser une paire de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle paire et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -298,26 +294,26 @@ nouvelle paire et la porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Veste" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portée </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter une nouvelle veste, faites-en glisser une de votre inventaire jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -333,26 +329,26 @@ jusqu'à votre avatar. Vous pouvez aussi en créer une nouvelle et la porte <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Gants" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portés </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter de nouveaux gants, faites-les glisser à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> @@ -367,26 +363,26 @@ inventaire. Vous pouvez aussi en créer une nouvelle paire et la porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Sous-vêtements (haut)" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portés </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92" bottom="-470"> @@ -402,26 +398,26 @@ votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Sous-vêtements (bas)" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portés </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter de nouveaux sous-vêtements, faites-les glisser à partir de votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92" bottom="-470"> @@ -437,26 +433,26 @@ votre inventaire. Vous pouvez aussi en créer des nouveaux et les porter. <button label="Rétablir" label_selected="Rétablir" left="305" name="Revert" width="82"/> </panel> <panel label="Jupe" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: impossible de modifier </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: en cours de chargement... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: non portée </text> - <text length="1" name="path" type="string"> + <text name="path"> Emplacement : [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Pour porter une nouvelle jupe, faites-en glisser une à partir de votre inventaire. Vous pouvez aussi en créer une nouvelle et la porter. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Vous n'avez pas la permission de modifier cet objet. </text> <text name="Item Action Label" right="92"> diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml index cb7e618232..634bb6e2e9 100644 --- a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Aucun" label_selected="Aucun" name="None" width="70" bottom_delta="0" left="83"/> <check_box label="Toujours montrer les dossiers" name="check_show_empty" bottom_delta="-20"/> <check_box label="Depuis la déconnexion" name="check_since_logoff" bottom_delta="-36"/> - <text length="1" name="- OR -" type="string"> + <text name="- OR -"> Ou il y a... </text> <spinner label="Heures" name="spin_hours_ago"/> diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml index be336c827e..75800847d7 100644 --- a/indra/newview/skins/default/xui/fr/floater_joystick.xml +++ b/indra/newview/skins/default/xui/fr/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Configuration du joystick"> - <check_box name="enable_joystick"> - Activer : - </check_box> + <check_box name="enable_joystick" label="Activer :"/> <spinner label="Mapping axe des X " name="JoystickAxis1"/> <spinner label="Mapping axe des Y" name="JoystickAxis2"/> <spinner label="Mapping axe des Z" name="JoystickAxis0"/> @@ -16,15 +14,9 @@ <text name="Control Modes:"> Modes de contrôle : </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled"> - Build - </check_box> - <check_box name="JoystickFlycamEnabled"> - Flycam - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" label="Build"/> + <check_box name="JoystickFlycamEnabled" label="Flycam"/> <text name="XScale"> Échelle des X </text> @@ -73,12 +65,14 @@ <button label="Options par défaut du joystick" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Annuler" label_selected="Annuler" name="cancel_btn"/> - <string name="JoystickMonitor"> - Contrôle du joystick - </string> - <string name="Axis"> - Axe [NUM] - </string> + <stat_view label="Contrôle du joystick" name="axis_view"> + <stat_bar label="Axe 0" name="axis0"/> + <stat_bar label="Axe 1" name="axis1"/> + <stat_bar label="Axe 2" name="axis2"/> + <stat_bar label="Axe 3" name="axis3"/> + <stat_bar label="Axe 4" name="axis4"/> + <stat_bar label="Axe 5" name="axis5"/> + </stat_view> <string name="NoDevice"> aucun joystick détecté </string> diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml new file mode 100644 index 0000000000..20bd9e60b4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ E
+ </floater.string>
+ <floater.string name="mini_map_west">
+ O
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NO
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml index 55ea8700a6..e59f09cba1 100644 --- a/indra/newview/skins/default/xui/fr/floater_moveview.xml +++ b/indra/newview/skins/default/xui/fr/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Tourner à gauche"/> <button label="" label_selected="" name="turn right btn" tool_tip="Tourner à droite"/> <button label="" label_selected="" name="move up btn" tool_tip="Sauter ou voler vers le haut"/> @@ -9,4 +10,5 @@ <joystick_slide name="slide right btn" tool_tip="Se déplacer vers la droite"/> <joystick_turn name="forward btn" tool_tip="Se déplacer vers l'avant"/> <joystick_turn name="backward btn" tool_tip="Se déplacer vers l'arrière"/> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml index 36c712e8a3..3761200d48 100644 --- a/indra/newview/skins/default/xui/fr/floater_openobject.xml +++ b/indra/newview/skins/default/xui/fr/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="Contenu des objets"> - <text type="string" length="1" name="object_name"> + <text name="object_name"> [DESC]: </text> <button label="Copier vers l'inventaire" label_selected="Copier vers l'inventaire" name="copy_to_inventory_button" width="132" /> diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml index c5b689e2dd..b66ea79e7b 100644 --- a/indra/newview/skins/default/xui/fr/floater_pay.xml +++ b/indra/newview/skins/default/xui/fr/floater_pay.xml @@ -6,16 +6,16 @@ <button label="20 L$" label_selected="20 L$" name="fastpay 20"/> <button label="Payer" label_selected="Payer" name="pay btn"/> <button label="Annuler" label_selected="Annuler" name="cancel btn"/> - <text length="1" name="payee_label" type="string" left="5"> + <text name="payee_label" left="5"> Payer : </text> - <text length="1" name="payee_name" type="string"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text length="1" name="fastpay text" type="string" width="100" halign="left"> + <text name="fastpay text" width="100" halign="left"> Paiement rapide : </text> - <text left="4" length="1" name="amount text" type="string"> + <text left="4" name="amount text"> Montant : </text> <line_editor left="60" name="amount" width="55"/> diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml index 3dc0af75e8..077e6965b6 100644 --- a/indra/newview/skins/default/xui/fr/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/fr/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Give Money" title=""> - <text length="1" name="payee_group" type="string" width="95"> + <text name="payee_group" width="95"> Payer le groupe : </text> - <text length="1" name="payee_resident" type="string" width="100" halign="left" > + <text name="payee_resident" width="100" halign="left" > Payer le résident : </text> - <text length="1" name="payee_name" type="string" left="105"> + <text name="payee_name" left="105"> [FIRST] [LAST] </text> - <text length="1" name="object_name_label" type="string" left="25"> + <text name="object_name_label" left="25"> Via un objet : </text> - <text length="1" name="object_name_text" type="string" left="105"> + <text name="object_name_text" left="105"> ... </text> - <text length="1" name="fastpay text" type="string" width="95"> + <text name="fastpay text" width="95"> Paiement rapide : </text> - <text length="1" name="amount text" type="string" left="5" halign="left"> + <text name="amount text" left="5" halign="left"> Montant : </text> <button label="1 L$" label_selected="1 L$" name="fastpay 1" left="105" /> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml index 0ee4ea1df6..813e611621 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_anim"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Description : </text> <button label="Jouer dans le Monde" label_selected="Stop" name="Anim play btn" diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml index 5e7d7b86ad..a23b906df6 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview notecard" title="Remarque :"> <button label="Enregistrer" label_selected="Enregistrer" name="Save" /> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Description : </text> - <text_editor type="string" length="1" name="Notecard Editor"> + <text_editor name="Notecard Editor"> Chargement... </text_editor> <string name="no_object"> diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml index e55ca1a583..19ae28c463 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_sound"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Description : </text> <button label="Jouer dans le Monde" label_selected="Jouer dans le Monde" diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml index 245847809e..e5fd5fc78f 100644 --- a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Description : </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> Dimensions : [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml index 628f308f88..687b3068e6 100644 --- a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml @@ -37,123 +37,84 @@ Hendrerit Vulputate </text> <combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport"> - <combo_item name="Select_category"> - Sélectionnez une catégorie - </combo_item> - <combo_item name="Age__Age_play"> - Âge > « Age play » - </combo_item> - <combo_item name="Age__Adult_resident_on_Teen_Second_Life"> - Âge > Résident adulte sur Second Life pour adolescents - </combo_item> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Âge > Resident mineur en dehors de Teen Second Life - </combo_item> - <combo_item name="Assault__Combat_sandbox___unsafe_area"> - Assaut > Bac à sable utilisé pour des combats/zone non sécurisée - </combo_item> - <combo_item name="Assault__Safe_area"> - Assaut > Zone sécurisée - </combo_item> - <combo_item name="Assault__Weapons_testing_sandbox"> - Assaut > Bac à sable pour tests d'armes à feu - </combo_item> - <combo_item name="Commerce__Failure_to_deliver_product_or_service"> - Commerce > Incapacité à fournir un produit ou service - </combo_item> - <combo_item name="Disclosure__Real_world_information"> - Divulgation > Informations sur la vie réelle - </combo_item> - <combo_item name="Disclosure__Remotely_monitoring chat"> - Divulgation > Écoute d'un chat à distance - </combo_item> - <combo_item name="Disclosure__Second_Life_information_chat_IMs"> - Divulgation > Informations sur Second Life/chat/IM - </combo_item> - <combo_item name="Disturbing_the_peace__Unfair_use_of_region_resources"> - Trouble de la paix > Utilisation inadéquate des ressources de la région - </combo_item> - <combo_item name="Disturbing_the_peace__Excessive_scripted_objects"> - Trouble de la paix > Nombre d'objets scriptés excessif - </combo_item> - <combo_item name="Disturbing_the_peace__Object_littering"> - Trouble de la paix > Abandon d'objets - </combo_item> - <combo_item name="Disturbing_the_peace__Repetitive_spam"> - Trouble de la paix > Spam à répétition - </combo_item> - <combo_item name="Disturbing_the_peace__Unwanted_advert_spam"> - Trouble de la paix > Spam à caractère commercial - </combo_item> - <combo_item name="Fraud__L$"> - Fraude > L$ - </combo_item> - <combo_item name="Fraud__Land"> - Fraude > Terrain - </combo_item> - <combo_item name="Fraud__Pyramid_scheme_or_chain_letter"> - Fraude > Vente pyramidale ou lettre-chaîne - </combo_item> - <combo_item name="Fraud__US$"> - Fraude > US$ - </combo_item> - <combo_item name="Harassment__Advert_farms___visual_spam"> - Harcèlement > Spam visuel - </combo_item> - <combo_item name="Harassment__Defaming_individuals_or_groups"> - Harcèlement > Diffamation envers des individus ou des groupes - </combo_item> - <combo_item name="Harassment__Impeding_movement"> - Harcèlement > Immobilisation - </combo_item> - <combo_item name="Harassment__Sexual_harassment"> - Harcèlement > Harcèlement sexuel - </combo_item> - <combo_item name="Harassment__Solicting_inciting_others_to_violate_ToS"> - Harcèlement > Incitation à enfreindre les Conditions d'utilisation - </combo_item> - <combo_item name="Harassment__Verbal_abuse"> - Harcèlement > Abus verbal - </combo_item> - <combo_item name="Indecency__Broadly_offensive_content_or_conduct"> - Indécence > Contenu ou comportement offensifs - </combo_item> - <combo_item name="Indecency__Inappropriate_avatar_name"> - Indécence > Nom d'avatar inapproprié - </combo_item> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Indécence > Contenu ou conduite inappropriés dans une région PG - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Indécence > Contenu ou conduite inappropriés dans une région Mature - </combo_item> - <combo_item name="Intellectual_property_infringement_Content_Removal"> - Violation de droits de propriété intellectuelle > Suppression de contenu - </combo_item> - <combo_item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"> - Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits - </combo_item> - <combo_item name="Intolerance"> - Intolérance - </combo_item> - <combo_item name="Land__Abuse_of_sandbox_resources"> - Terrain > Utilisation abusive des ressources du bac à sable - </combo_item> - <combo_item name="Land__Encroachment__Objects_textures"> - Terrain > Empiètement > Objets/textures - </combo_item> - <combo_item name="Land__Encroachment__Particles"> - Terrain > Empiètement > Particules - </combo_item> - <combo_item name="Land__Encroachment__Trees_plants"> - Terrain > Empiètement > Arbres/plantes - </combo_item> - <combo_item name="Wagering_gambling"> - Paris/jeux d'argent - </combo_item> - <combo_item name="Other"> - Autre - </combo_item> + <combo_box.item name="Select_category" label="Sélectionnez une catégorie" + /> + <combo_box.item name="Age__Age_play" label="Âge > « Age play »" + /> + <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Âge > Résident adulte sur Second Life pour adolescents" + /> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Âge > Resident mineur en dehors de Teen Second Life" + /> + <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assaut > Bac à sable utilisé pour des combats/zone non sécurisée" + /> + <combo_box.item name="Assault__Safe_area" label="Assaut > Zone sécurisée" + /> + <combo_box.item name="Assault__Weapons_testing_sandbox" label="Assaut > Bac à sable pour tests d'armes à feu" + /> + <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="Commerce > Incapacité à fournir un produit ou service" + /> + <combo_box.item name="Disclosure__Real_world_information" label="Divulgation > Informations sur la vie réelle" + /> + <combo_box.item name="Disclosure__Remotely_monitoring chat" label="Divulgation > Écoute d'un chat à distance" + /> + <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="Divulgation > Informations sur Second Life/chat/IM" + /> + <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="Trouble de la paix > Utilisation inadéquate des ressources de la région" + /> + <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="Trouble de la paix > Nombre d'objets scriptés excessif" + /> + <combo_box.item name="Disturbing_the_peace__Object_littering" label="Trouble de la paix > Abandon d'objets" + /> + <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="Trouble de la paix > Spam à répétition" + /> + <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="Trouble de la paix > Spam à caractère commercial" + /> + <combo_box.item name="Fraud__L$" label="Fraude > L$" + /> + <combo_box.item name="Fraud__Land" label="Fraude > Terrain" + /> + <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="Fraude > Vente pyramidale ou lettre-chaîne" + /> + <combo_box.item name="Fraud__US$" label="Fraude > US$" + /> + <combo_box.item name="Harassment__Advert_farms___visual_spam" label="Harcèlement > Spam visuel" + /> + <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="Harcèlement > Diffamation envers des individus ou des groupes" + /> + <combo_box.item name="Harassment__Impeding_movement" label="Harcèlement > Immobilisation" + /> + <combo_box.item name="Harassment__Sexual_harassment" label="Harcèlement > Harcèlement sexuel" + /> + <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="Harcèlement > Incitation à enfreindre les Conditions d'utilisation" + /> + <combo_box.item name="Harassment__Verbal_abuse" label="Harcèlement > Abus verbal" + /> + <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indécence > Contenu ou comportement offensifs" + /> + <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indécence > Nom d'avatar inapproprié" + /> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indécence > Contenu ou conduite inappropriés dans une région PG" + /> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indécence > Contenu ou conduite inappropriés dans une région Mature" + /> + <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violation de droits de propriété intellectuelle > Suppression de contenu" + /> + <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violation de droits de propriété intellectuelle > CopyBot ou exploitation abusive des droits" + /> + <combo_box.item name="Intolerance" label="Intolérance" + /> + <combo_box.item name="Land__Abuse_of_sandbox_resources" label="Terrain > Utilisation abusive des ressources du bac à sable" + /> + <combo_box.item name="Land__Encroachment__Objects_textures" label="Terrain > Empiètement > Objets/textures" + /> + <combo_box.item name="Land__Encroachment__Particles" label="Terrain > Empiètement > Particules" + /> + <combo_box.item name="Land__Encroachment__Trees_plants" label="Terrain > Empiètement > Arbres/plantes" + /> + <combo_box.item name="Wagering_gambling" label="Paris/jeux d'argent" + /> + <combo_box.item name="Other" label="Autre" + /> </combo_box> <text name="abuser_name_title"> Nom du contrevenant : diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml index 4b77d6b4cd..b767081625 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="Script : Script de rotation"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Description : </text> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml index 1c20c9c34b..6f912026c4 100644 --- a/indra/newview/skins/default/xui/fr/floater_script_search.xml +++ b/indra/newview/skins/default/xui/fr/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="Rechercher" label_selected="Rechercher" name="search_btn" width="96"/> <button label="Remplacer" label_selected="Remplacer" name="replace_btn" left="111" width="96"/> <button label="Tout remplacer" label_selected="Tout remplacer" name="replace_all_btn" left="212" width="96"/> - <text type="string" length="1" name="txt" width="65"> + <text name="txt" width="65"> Rechercher </text> - <text type="string" length="1" name="txt2" width="65"> + <text name="txt2" width="65"> Remplacer </text> <line_editor left="75" name="search_text" width="240" /> diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml index 90feea91e0..49c6ff04a6 100644 --- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml @@ -69,12 +69,8 @@ <button label="Enregistrer ([AMOUNT] L$)" name="upload_btn" width="118"/> <button label="Envoyer" name="send_btn" width="118"/> <flyout_button label="Enregistrer" name="save_btn" tool_tip="Enregistrer l'image dans un fichier" width="118"> - <flyout_button.item name="save_item"> - Enregistrer - </flyout_button.item> - <flyout_button.item name="saveas_item"> - Enregistrer sous... - </flyout_button.item> + <flyout_button.item name="save_item" label="Enregistrer"/> + <flyout_button.item name="saveas_item" label="Enregistrer sous..."/> </flyout_button> <button label="Annuler" name="discard_btn" left="133" width="72" /> <string name="unknown"> diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml index 2a234a37c5..fa8b65d8a5 100644 --- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Cliquez pour sélectionner une image </string> - <text length="1" name="Multiple" type="string"> + <text name="Multiple"> Multiple </text> - <text length="1" name="unknown" type="string"> + <text name="unknown"> Dimensions : [DIMENSIONS] </text> <button label="Défaut" label_selected="Défaut" name="Default" width="60" /> diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml index 8c462fc6ec..03ab397ea1 100644 --- a/indra/newview/skins/default/xui/fr/floater_tools.xml +++ b/indra/newview/skins/default/xui/fr/floater_tools.xml @@ -5,16 +5,22 @@ <button label="" label_selected="" name="button edit" tool_tip="Modifier"/> <button label="" label_selected="" name="button create" tool_tip="Créer"/> <button label="" label_selected="" name="button land" tool_tip="Terrain"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Orbite (Ctrl)" name="radio orbit"/> - <check_box label="Panoramique (Ctrl-Maj)" name="radio pan"/> - <check_box label="Déplacer" name="radio move"/> - <check_box label="Orbite (Ctrl)" name="radio lift"/> - <check_box label="Faire tourner (Ctrl-Maj)" name="radio spin"/> - <check_box label="Positionner" name="radio position"/> - <check_box label="Pivoter (Ctrl)" name="radio rotate"/> - <check_box label="Étirer (Ctrl-Maj)" name="radio stretch"/> - <check_box label="Sélectionner une face" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Orbite (Ctrl)" name="radio orbit"/> + <radio_item label="Panoramique (Ctrl-Maj)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Déplacer" name="radio move"/> + <radio_item label="Orbite (Ctrl)" name="radio lift"/> + <radio_item label="Faire tourner (Ctrl-Maj)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Positionner" name="radio position"/> + <radio_item label="Pivoter (Ctrl)" name="radio rotate"/> + <radio_item label="Étirer (Ctrl-Maj)" name="radio stretch"/> + <radio_item label="Sélectionner une face" name="radio select face"/> + </radio_group> <check_box label="Modifier les parties liées" name="checkbox edit linked parts"/> <text name="text ruler mode"> Axe : @@ -50,13 +56,15 @@ <check_box label="Copier la sélection" name="checkbox copy selection"/> <check_box label="Centrer" name="checkbox copy centers"/> <check_box label="Pivoter" name="checkbox copy rotates"/> - <check_box label="Sélectionner le terrain" name="radio select land"/> - <check_box label="Aplatir" name="radio flatten"/> - <check_box label="Élever" name="radio raise"/> - <check_box label="Abaisser" name="radio lower"/> - <check_box label="Lisser" name="radio smooth"/> - <check_box label="Bosseler" name="radio noise"/> - <check_box label="Annuler modification" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Sélectionner le terrain" name="radio select land"/> + <radio_item label="Aplatir" name="radio flatten"/> + <radio_item label="Élever" name="radio raise"/> + <radio_item label="Abaisser" name="radio lower"/> + <radio_item label="Lisser" name="radio smooth"/> + <radio_item label="Bosseler" name="radio noise"/> + <radio_item label="Annuler modification" name="radio revert"/> + </radio_group> <button label="Appliquer" label_selected="Appliquer" name="button apply to selection" tool_tip="Modifier le terrain sélectionné" left="176"/> <text name="Bulldozer:"> Bulldozer : @@ -105,9 +113,7 @@ <text name="Permissions:"> Droits : </text> - <text name="perm_modify"> - Vous pouvez modifier cet objet. - </text> + <check_box label="Partager avec le groupe" name="checkbox share with group" tool_tip="Autorisez tous les membres du groupe choisi à utiliser et à partager vos droits pour cet objet. Pour activer les restrictions de rôles, vous devez d'abord cliquer sur Transférer."/> <string name="text deed continued"> Transférer... @@ -123,17 +129,12 @@ <text name="Cost"> Prix : L$ </text> - <radio_group name="sale type"> - <radio_item name="Original" label="Original" /> - <radio_item name="Copy" label="Copie" /> - <radio_item name="Contents" label="Contenus" /> - </radio_group> - <text name="Next owner can:"> - Le prochain propriétaire pourra : - </text> - <check_box label="Modifier" name="checkbox next owner can modify"/> - <check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/> - <check_box label="Revendre/Donner" name="checkbox next owner can transfer"/> + <combo_box name="sale type"> + <combo_box.item label="Copie" name="Copy"/> + <combo_box.item label="Contenus" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <text name="label click action"> Action du clic-gauche : </text> @@ -146,6 +147,10 @@ <combo_box.item name="Play" label="Jouer le média de la parcelle"/> <combo_box.item name="Opemmedia" label="Ouvrir le média de la parcelle"/> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Vous pouvez modifier cet objet. + </text> <text name="B:"> B : </text> @@ -164,6 +169,13 @@ <text name="F:"> F : </text> + <text name="Next owner can:"> + Le prochain propriétaire pourra : + </text> + <check_box label="Modifier" name="checkbox next owner can modify"/> + <check_box label="Copier" left_delta="66" name="checkbox next owner can copy"/> + <check_box name="checkbox next owner can transfer"/> + </panel> <string name="text modify info 1"> Vous pouvez modifier cet objet. </string> @@ -316,7 +328,7 @@ Type de raccord </text> <combo_box name="sculpt type control"> - <combo_box.item name="None" label="aucun)"/> + <combo_box.item name="None" label="(aucun)"/> <combo_box.item name="Sphere" label="Sphère"/> <combo_box.item name="Torus" label="Tore"/> <combo_box.item name="Plane" label="Plan"/> @@ -459,43 +471,43 @@ <button label="Acheter le terrain..." label_selected="Acheter le terrain..." name="button buy land" width="142"/> <button label="Abandonner le terrain..." label_selected="Abandonner le terrain..." name="button abandon land" width="142"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Pour faire tourner l'objet, faîtes glisser les bandes de couleur. - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Pour étirer le côté sélectionné, cliquez et faites glisser. - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Glissez pour déplacer, Maj-glissez pour copier. - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Cliquez et maintenez pour modifier le terrain. - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Cliquez et faites glisser pour changer l'affichage. - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Glisser pour déplacer, Ctrl pour soulever, Crtl-Maj pour pivoter. - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Cliquez dans le monde pour construire. - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Cliquez et faites glisser pour sélectionner le terrain. - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Écran - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Local - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Monde - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Référence - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Pièce-jointe - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml index a5bc87d951..af6274d4e2 100644 --- a/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/fr/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container"> <button label="Enregistrer" label_selected="Enregistrer" name="Save" /> <button label="Annuler" label_selected="Annuler" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> Enregistrer l'objet sous : </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml index bb5738be27..ec2db5f163 100644 --- a/indra/newview/skins/default/xui/fr/floater_world_map.xml +++ b/indra/newview/skins/default/xui/fr/floater_world_map.xml @@ -40,11 +40,11 @@ <check_box label="Adult" name="event_adult_chk"/> <icon left="973" name="avatar_icon"/> <combo_box label="Amis connectés" name="friend combo" tool_tip="Ami à afficher sur la carte" width="232"> - <combo_box.item name="none_selected" label="Amis connectés" /> + <combo_box.item name="item1" label="Amis connectés" /> </combo_box> <icon left="973" name="landmark_icon"/> <combo_box label="Repères" name="landmark combo" tool_tip="Repère à afficher sur la carte" width="232"> - <combo_box.item name="none_selected" label="Repères" /> + <combo_box.item name="item1" label="Repères" /> </combo_box> <icon left="973" name="location_icon"/> <line_editor label="Rechercher par nom de région" name="location" tool_tip="Saisissez le nom d'une région" width="155"/> diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index a9c1cad86f..951c199b1c 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -964,7 +964,7 @@ Proposer à [NAME] de devenir votre ami(e) ? Proposer à [NAME] de devenir votre ami(e) ? <form name="form"> - <input name="message" type="text"> + <input name="message"> Voulez-vous être mon ami(e) ? </input> <button name="Offer" text="OK"/> @@ -1359,7 +1359,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="KickUser"> Éjecter cet utilisateur avec quel message ? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un administrateur vous a déconnecté. </input> <button name="OK" text="OK"/> @@ -1369,7 +1369,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="KickAllUsers"> Éjecter tous les résidents actuellement en ligne avec quel message ? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un administrateur vous a déconnecté. </input> <button name="OK" text="OK"/> @@ -1379,7 +1379,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="FreezeUser"> Geler cet utilisateur avec quel message ? <form name="form"> - <input name="message" type="text"> + <input name="message"> Vous avez été gelé. Vous ne pouvez ni bouger ni chatter. Un administrateur va vous envoyer un message instantané (IM). </input> <button name="OK" text="OK"/> @@ -1389,7 +1389,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="UnFreezeUser"> Dégeler cet utilisateur avec quel message ? <form name="form"> - <input name="message" type="text"> + <input name="message"> Vous n'êtes plus gelé. </input> <button name="OK" text="OK"/> @@ -1399,7 +1399,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="OfferTeleport"> Proposez une téléportation avec le message suivant ? <form name="form"> - <input name="message" type="text"> + <input name="message"> On se rejoint à [REGION] ? </input> <button name="OK" text="OK"/> @@ -1409,7 +1409,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification name="OfferTeleportFromGod"> Demander au résident de venir vous rejoindre ? <form name="form"> - <input name="message" type="text"> + <input name="message"> On se rejoint à [REGION] ? </input> <button name="OK" text="OK"/> @@ -1423,7 +1423,7 @@ Pour quitter un groupe, sélectionnez l'option Groupe dans le menu Éditer. <notification label="Envoyer un message à tout le monde dans votre domaine" name="MessageEstate"> Saisissez un message court qui sera envoyé à tous les résidents se trouvant actuellement sur votre domaine. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annuler"/> </form> @@ -1609,7 +1609,7 @@ Publier cette petite annonce maintenant pour [AMOUNT] L$ ? <notification label="Envoyer un message à la région" name="MessageRegion"> Saisissez une message qui sera envoyé à tous les résidents présents dans cette région. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annuler"/> </form> @@ -1895,7 +1895,7 @@ Ils seront copiés dans votre inventaire. Êtes-vous certain de vouloir effectuer cette transaction ? <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Suite à cette transaction, vous allez : [ACTION] @@ -2268,7 +2268,7 @@ Même chose que l'azimut. <notification name="NewSkyPreset"> Nommez le nouveau ciel. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nouveau préréglage </input> <button name="OK" text="OK"/> @@ -2281,7 +2281,7 @@ Même chose que l'azimut. <notification name="NewWaterPreset"> Nommez ce nouveau préréglage d'eau. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nouveau préréglage </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml index 2b983ced80..f89c90e508 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_general.xml @@ -33,9 +33,9 @@ (Les propriétaires apparaissent en gras) </text> <name_list name="visible_members"> - <column label="Nom du membre" name="name" relwidth="0.40"/> - <column label="Titre" name="title" relwidth="0.25"/> - <column label="Dernière connexion" name="online" relwidth="0.35"/> + <name_list.columns label="Nom du membre" name="name" relwidth="0.40"/> + <name_list.columns label="Titre" name="title" relwidth="0.25"/> + <name_list.columns label="Dernière connexion" name="online" relwidth="0.35"/> </name_list> <text name="text_group_preferences"> Préférences @@ -46,15 +46,9 @@ <check_box label="Frais d'inscription : L$" name="check_enrollment_fee" tool_tip="Indique s'il y a des frais d'inscription pour devenir membre."/> <spinner name="spin_enrollment_fee" tool_tip="Si la case Frais d'inscription est cochée, cela signifie qu'il faut payer des frais pour devenir membre."/> <combo_box name="group_mature_check" tool_tip="Indique si les informations sur votre groupe sont classées Mature." width="195"> - <combo_item name="select_mature"> - - Type de public - - </combo_item> - <combo_item name="mature"> - Contenu Mature - </combo_item> - <combo_item name="pg"> - Contenu PG - </combo_item> + <combo_box.item name="select_mature" label="- Type de public -"/> + <combo_box.item name="mature" label="Contenu Mature"/> + <combo_box.item name="pg" label="Contenu PG"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml index d824ae5461..841ac5e7ee 100644 --- a/indra/newview/skins/default/xui/fr/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/fr/panel_group_notices.xml @@ -11,8 +11,7 @@ Anciennes notices du groupe </text> <text name="lbl2"> - Double-cliquez sur une notice pour l'afficher. Les notices sont conservées -pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices. + Les notices sont conservées pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices. </text> <scroll_list name="notice_list"> <column label="" name="icon"/> @@ -30,11 +29,7 @@ pendant 14 jours et chaque groupe a une limite quotidienne de 200 notices. Créer une notice </text> <text name="lbl2"> - Pour envoyer une notice, saisissez un sujet. Pour joindre -une pièce-jointe à cette notice, faites-la glisser depuis votre -inventaire vers cette fenêtre. Les pièces-jointes doivent être -copiables et transférables. Il n'est pas possible d'envoyer de -dossiers. + Pour joindre une pièce-jointe à cette notice, faites-la glisser depuis votre inventaire vers cette fenêtre. Les pièces-jointes doivent être copiables et transférables. Il n'est pas possible d'envoyer de dossiers. </text> <text bottom_delta="-79" name="lbl3" left="20"> Sujet : @@ -49,7 +44,7 @@ dossiers. </text> <line_editor name="create_inventory_name" width="190" left_delta="74"/> <button label="Supprimer pièce-jointe" label_selected="Supprimer pièce-jointe" left="274" name="remove_attachment" width="140"/> - <button label="Envoyer la notice" label_selected="Envoyer la notice" left="274" name="send_notice" width="140"/> + <button label="Envoyer" label_selected="Envoyer" left="274" name="send_notice" width="140"/> <panel name="drop_target2" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/> <panel name="drop_target" tool_tip="Pour joindre un objet de l'inventaire à la notice, faites-le glisser dans la boîte de message. Pour envoyer l'objet avec la notice, vous devez avoir la permission de le copier et de le transférer."/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 74bbe9c5b6..eeef97454f 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -18,8 +18,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Domicile" /> <combo_box.item name="MyLastLocation" label="Dernier emplacement" /> - <combo_box.item name="<Typeregionname>" label="lt;Choisir région>" /> - <combo_box.item name="Typeregionname" label="lt;Nom de la région>" /> + <combo_box.item name="Typeregionname" label="<Nom de la région>" /> </combo_box> <check_box label="Mémoriser" name="remember_check"/> <text name="full_screen_text"> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml new file mode 100644 index 0000000000..89b4096de7 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="largeur/hauteur">
+ Rapport hauteur/largeur :
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="largeur/hauteur">
+ <combo_box.item label="4:3 (Standard CRT)" name="item1"/>
+ <combo_box.item label="5:4 (1280 x 1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (écran large)" name="item3"/>
+ <combo_box.item label="16:9 (plein écran)" name="item4"/>
+ </combo_box>
+</panel>
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 5fbd3cec22..f616591c4e 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml @@ -1,53 +1,59 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Chat écrit" name="chat"> - <text length="1" name="text_box" type="string"> + <text name="text_box"> Taille de la police du chat : </text> <radio_group name="chat_font_size"> - <radio_item length="1" name="radio" type="string" label="Petite" /> - <radio_item length="1" name="radio2" type="string" label="Moyenne" /> - <radio_item length="1" name="radio3" type="string" label="Grande" /> + <radio_item name="radio" label="Petite" /> + <radio_item name="radio2" label="Moyenne" /> + <radio_item name="radio3" label="Grande" /> </radio_group> - <text length="1" name="text_box2" type="string"> - Couleur du chat : - </text> <color_swatch label="Vous" name="user"/> - <color_swatch label="Avatars" name="agent" width="60"/> - <color_swatch label="IM" left_delta="64" name="im"/> + <text name="text_box1"> + Vous + </text> + <color_swatch label="Avatars" name="agent"/> + <text name="text_box2"> + Avatars + </text> + <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM + </text> <color_swatch label="Système" name="system"/> - <color_swatch label="Erreurs" name="script_error"/> + <text name="text_box4"> + Système + </text> + <color_swatch label="Erreurs de script" name="script_error"/> + <text name="text_box5"> + Erreurs de script + </text> <color_swatch label="Objets" name="objects"/> - <color_swatch label="Propriétaire" name="owner" width="60"/> - <color_swatch label="Bulle" left_delta="64" name="background"/> + <text name="text_box6"> + Objets + </text> + <color_swatch label="Propriétaire" name="owner"/> + <text name="text_box7"> + Propriétaire + </text> + <color_swatch label="Bulle" name="background"/> + <text name="text_box8"> + Bulle + </text> <color_swatch label="URL" name="links"/> - <text length="1" name="text_box3" type="string"> - Console du chat : + <text name="text_box9"> + URL </text> <spinner label="Effacer le texte après" label_width="112" name="fade_chat_time" width="162"/> - <text left="313" length="1" name="text_box4" type="string"> - s - </text> <spinner left="335" name="max_chat_count"/> - <text left="397" length="1" name="text_box5" type="string" width="74"> - lignes - </text> <slider label="Opacité" name="console_opacity"/> - <text length="1" name="text_box6" type="string"> - Options du chat : - </text> <check_box label="Utiliser la largeur de l'écran (redémarrage requis)" name="chat_full_width_check"/> <check_box label="Fermer le chat après avoir appuyé sur Entrée" name="close_chat_on_return_check"/> <check_box label="Faire bouger l'avatar avec les touches de direction" name="arrow_keys_move_avatar_check"/> <check_box label="Afficher les heures dans le chat" name="show_timestamps_check"/> <check_box label="Jouer l'animation clavier quand vous écrivez" name="play_typing_animation"/> - <text length="1" name="text_box7" type="string"> - Bulles de chat : - </text> <check_box label="Afficher les bulles de chat" name="bubble_text_chat"/> <slider label="Opacité" name="bubble_chat_opacity"/> - <text length="1" name="text_box8" type="string"> - Erreurs de script : - </text> <check_box label="Afficher les erreurs dans le chat" name="script_errors_as_chat"/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml index 23e1e74035..f3a1a0c0e2 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Général" name="general_panel"> - <radio_group name="default_start_location" width="166"> - <radio_item name="MyHome" tool_tip="Par défaut, choisir mon domicile comme lieu de départ."> - Domicile - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Par défaut, choisir mon dernier emplacement comme lieu de départ."> - Dernier emplacement - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Par défaut, choisir mon domicile comme lieu de départ." label="Domicile"/> + <combo_box.item name="MyLastLocation" tool_tip="Par défaut, choisir mon dernier emplacement comme lieu de départ." label="Dernier emplacement"/> + </combo_box> <check_box label="Afficher le lieu de départ sur l'écran de connexion" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox" width="166"> - <combo_item name="Never"> - Jamais - </combo_item> - <combo_item name="Show Temporarily"> - Afficher temporairement - </combo_item> - <combo_item name="Always"> - Toujours - </combo_item> + <combo_box name="fade_out_combobox"> + <combo_box.item name="Never" label="Jamais"/> + <combo_box.item name="Show Temporarily" label="Afficher temporairement"/> + <combo_box.item name="Always" label="Toujours"/> </combo_box> <check_box label="Nom des avatars en petit" name="small_avatar_names_checkbox"/> <check_box label="Masquer mon nom sur mon écran" name="show_my_name_checkbox"/> @@ -41,108 +31,61 @@ <text name="maturity_desired_prompt"> Je veux accéder au contenu classé : </text> - <combo_box name="maturity_desired_combobox" left="340"> - <combo_item name="Desired_Adult"> - PG, Mature et Adult - </combo_item> - <combo_item name="Desired_Mature"> - PG et Mature - </combo_item> - <combo_item name="Desired_PG"> - PG uniquement - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="PG, Mature et Adult"/> + <combo_box.item name="Desired_Mature" label="PG et Mature"/> + <combo_box.item name="Desired_PG" label="PG uniquement"/> </combo_box> - <text name="maturity_desired_textbox" left="340"> + <text name="maturity_desired_textbox"> PG uniquement </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> Lieu de départ : </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> Afficher les noms : </text> - <text bottom="-174" length="1" name="effects_color_textbox" type="string"> - Couleur du faisceau -de sélection : + <text name="effects_color_textbox"> + Couleur du faisceau de sélection : </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> secondes </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> Rapports de crash : </text> - <text length="1" name="language_textbox" type="string"> + <text name="language_textbox"> Langue : </text> - <text left_delta="313" length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (redémarrage requis) </text> <string name="region_name_prompt"> <Saisissez le nom de la région> </string> - <combo_box name="crash_behavior_combobox" width="166"> - <combo_item length="1" name="Askbeforesending" type="string"> - Demander avant d'envoyer - </combo_item> - <combo_item length="1" name="Alwayssend" type="string"> - Toujours envoyer - </combo_item> - <combo_item length="1" name="Neversend" type="string"> - Ne jamais envoyer - </combo_item> + <combo_box name="crash_behavior_combobox"> + <combo_box.item name="Askbeforesending" label="Demander avant d'envoyer"/> + <combo_box.item name="Alwayssend" label="Toujours envoyer"/> + <combo_box.item name="Neversend" label="Ne jamais envoyer"/> </combo_box> - <combo_box name="language_combobox" width="166"> - <combo_item name="System Default Language"> - Choix par défaut - </combo_item> - <combo_item length="1" name="English" type="string"> - English (Anglais) - </combo_item> - <combo_item length="1" name="Danish" type="string"> - Dansk (Danois) - Bêta - </combo_item> - <combo_item length="1" name="Deutsch(German)" type="string"> - Deutsch (Allemand) - Bêta - </combo_item> - <combo_item name="Spanish"> - Español (Espagnol) - Bêta - </combo_item> - <combo_item name="French"> - Français - Bêta - </combo_item> - <combo_item name="Italian"> - Italiano (Italien) - Bêta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Hongrois) - Bêta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Néerlandais) - Bêta - </combo_item> - <combo_item name="Polish"> - Polski (Polonais) - Bêta - </combo_item> - <combo_item name="Portugese"> - Portugués (Portugais) - Bêta - </combo_item> - <combo_item name="Russian"> - Русский (Russe) - Bêta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Turc) - Bêta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ukrainien) - Bêta - </combo_item> - <combo_item length="1" name="Chinese" type="string"> - 中文 (简体) (Chinois) - Bêta - </combo_item> - <combo_item length="1" name="(Japanese)" type="string"> - 日本語 (Japonais) - Bêta - </combo_item> - <combo_item length="1" name="(Korean)" type="string"> - 한국어 (Coréen) - Bêta - </combo_item> + <combo_box name="language_combobox"> + <combo_box.item name="System Default Language" label="Choix par défaut"/> + <combo_box.item name="English" label="English (Anglais)"/> + <combo_box.item name="Danish" label="Dansk (Danois) - Bêta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Allemand) - Bêta"/> + <combo_box.item name="Spanish" label="Español (Espagnol) - Bêta"/> + <combo_box.item name="French" label="Français - Bêta"/> + <combo_box.item name="Italian" label="Italiano (Italien) - Bêta"/> + <combo_box.item name="Hungarian" label="Magyar (Hongrois) - Bêta"/> + <combo_box.item name="Dutch" label="Nederlands (Néerlandais) - Bêta"/> + <combo_box.item name="Polish" label="Polski (Polonais) - Bêta"/> + <combo_box.item name="Portugese" label="Portugués (Portugais) - Bêta"/> + <combo_box.item name="Russian" label="Русский (Russe) - Bêta"/> + <combo_box.item name="Turkish" label="Türkçe (Turc) - Bêta"/> + <combo_box.item name="Ukrainian" label="Українська (Ukrainien) - Bêta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Chinois) - Bêta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japonais) - Bêta"/> + <combo_box.item name="(Korean)" label="한국어 (Coréen) - Bêta"/> </combo_box> <check_box label="Partager la langue avec les objets" name="language_is_public" tool_tip="Cette option permet de faire connaître aux objets du Monde votre langue favorite."/> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml index cc9e2a8569..726ebc78b0 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml @@ -21,27 +21,27 @@ Rapport hauteur/largeur : </text> <combo_box name="aspect_ratio" tool_tip="largeur/hauteur"> - <combo_box.item length="1" name="4:3(StandardCRT)" type="string" label="4:3 (Standard CRT)" /> - <combo_box.item length="1" name="5:4(1280x1024LCD)" type="string" label="5:4 (1280 x 1024 LCD)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standard CRT)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280 x 1024 LCD)" /> <combo_box.item name="8:5(Widescreen)" label="8:5 (écran large)" /> - <combo_box.item length="1" name="16:9(Widescreen)" type="string" label="16:9 (plein écran)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9 (plein écran)" /> </combo_box> - <text length="1" name="text" type="string"> + <text name="text"> Résolution d'affichage : </text> - <text length="1" name="Fullscreen Aspect Ratio:" type="string"> + <text name="Fullscreen Aspect Ratio:"> Format de plein écran : </text> - <text length="1" name="(width / height)" type="string"> + <text name="(width / height)"> (largeur / hauteur) </text> - <text length="1" name="UI Size:" type="string"> + <text name="UI Size:"> Taille de l'IU : </text> - <text length="1" name="(meters, lower is faster)" type="string"> + <text name="(meters, lower is faster)"> (mètres, moins = plus rapide) </text> - <text length="1" name="text2" type="string"> + <text name="text2"> Options d'affichage : </text> <check_box label="Lancer Second Life en mode fenêtré" name="windowed mode"/> @@ -75,6 +75,7 @@ </text> <text name="QualityText2" visible="false"/> <check_box label="Personnaliser" left="395" name="CustomSettings"/> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> Effets : </text> @@ -150,12 +151,13 @@ <radio_item name="0" label="Faible" /> <radio_item name="2" label="Élevé" /> </radio_group> + </panel> <button label="Paramètres recommandés" name="Defaults"/> <button label="Configuration du matériel" label_selected="Configuration du matériel" name="GraphicsHardwareButton"/> - <text name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </text> - <text name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </text> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml index 425f273790..b592d29711 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Domaine" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Domaine" name="Estate"> <text name="estate_help_text" bottom="-34"> Les changements apportés aux paramètres de cet onglet auront des répercussions sur @@ -75,4 +77,6 @@ toutes les régions du domaine. <button label="Supprimer..." name="remove_banned_avatar_btn"/> <button label="Envoyer un message au domaine..." name="message_estate_btn"/> <button label="Éjecter le résident du domaine..." name="kick_user_from_estate_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml index 6a8afd24ed..70782e2aa6 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_general.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml @@ -40,15 +40,9 @@ Catégorie : </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Appliquer" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/fr/panel_region_texture.xml b/indra/newview/skins/default/xui/fr/panel_region_texture.xml index d312646788..da800dc6bd 100644 --- a/indra/newview/skins/default/xui/fr/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/fr/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Textures du sol" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Textures du sol" name="Textures"> <text name="region_text_lbl"> Région : </text> @@ -69,4 +71,6 @@ et la valeur HAUTE correspond à la hauteur MINIMUM de la Texture #4. </text> <button label="Appliquer" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml index a6ec93bef5..8febdccbed 100644 --- a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> - <text type="string" length="1" name="Loading..."> + <text name="Loading..."> Chargement... </text> - <text type="string" length="1" name="Loading...2"> + <text name="Loading...2"> Chargement... </text> <button label="" label_selected="" name="less" /> diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml index 9ea667fcbf..9545b25126 100644 --- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text length="1" name="ParcelNameText" tool_tip="Nom de la parcelle de terrain sur laquelle vous vous trouvez. Cliquez pour ouvrir la section À propos du terrain." type="string"> + <text name="ParcelNameText" tool_tip="Nom de la parcelle de terrain sur laquelle vous vous trouvez. Cliquez pour ouvrir la section À propos du terrain."> Saisissez le nom de la parcelle ici </text> - <text length="1" name="BalanceText" tool_tip="Solde du compte" type="string"> + <text name="BalanceText" tool_tip="Solde du compte"> Chargement... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Acheter des devises"/> - <text length="12" name="TimeText" tool_tip="Heure actuelle (Californie)" type="string"> + <text name="TimeText" tool_tip="Heure actuelle (Californie)"> midi </text> <string name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </string> <button label="" label_selected="" name="scriptout" tool_tip="Alertes et erreurs de scripts"/> <button label="" label_selected="" name="health" tool_tip="Santé"/> - <text length="1" name="HealthText" tool_tip="Santé" type="string"> + <text name="HealthText" tool_tip="Santé"> 100 % </text> <button label="" label_selected="" name="fly" tool_tip="Vol interdit"/> diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml new file mode 100644 index 0000000000..4d4f94273b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ E
+ </panel.string>
+ <panel.string name="world_map_west">
+ O
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NO
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 067c34294d..80248a95f8 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -487,4 +487,34 @@ <string name="choose_the_directory"> Choisir le répertoire </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Maj- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Maj+ + </string> + <string name="GraphicsQualityLow"> + Faible + </string> + <string name="GraphicsQualityMid"> + Moyen + </string> + <string name="GraphicsQualityHigh"> + Élevé + </string> </strings> diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml index 6e70a04cab..ede581c5ed 100644 --- a/indra/newview/skins/default/xui/it/floater_about_land.xml +++ b/indra/newview/skins/default/xui/it/floater_about_land.xml @@ -80,46 +80,46 @@ <button label="Abbandona la terra..." label_selected="Abbandona la terra..." name="Abandon Land..."/> <button label="Reclama la terra..." label_selected="Reclama la terra..." name="Reclaim Land..."/> <button label="Vendita Linden..." label_selected="Vendita Linden..." name="Linden Sale..." tool_tip="La terra deve essere posseduta, con contenuto impostato, e non già messa in asta."/> - <string name="new users only"> + <panel.string name="new users only"> Solo ai nuovi residenti - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> A chiunque - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Area - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Asta n.: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Devi confermare l'acquisto prima di poter modificare il terreno. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Posseduta dal gruppo) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profilo... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Info... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (pubblica) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (nessuno) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (vendita in corso) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Nessun appezzamento selezionato. Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezzamento per vederne i dettagli. - </string> + </panel.string> </panel> <panel label="Regolamento" name="land_covenant_panel"> <text name="estate_section_lbl"> @@ -176,20 +176,20 @@ Vai al menu Mondo > Informazioni sul terreno oppure seleziona un altro appezz <text name="changeable_clause" left="125"> La terra in questa regione non può essere unita/suddivisa. </text> - <string name="can_resell"> + <panel.string name="can_resell"> La terra acquistata in questa regione può essere rivenduta. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> La terra acquistata in questa regione non può essere rivenduta. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> La terra acquistata in questa regione può essere unita o suddivisa. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> La terra acquistata in questa regione non può essere unita o suddivisa. - </string> + </panel.string> </panel> <panel label="Oggetti" name="land_objects_panel"> <text name="parcel_object_bonus"> @@ -201,12 +201,12 @@ o suddivisa. <text name="objects_available" left="214" width="230" > [COUNT] dei [MAX] ([AVAILABLE] dsponibili) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] dei [MAX] ([AVAILABLE] disponibili) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] dei [MAX] ([DELETED] saranno cancellati) - </string> + </panel.string> <text name="Primitives parcel supports:" width="200"> Oggetti che il terreno supporta: </text> @@ -293,109 +293,84 @@ o suddivisa. <check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su 'sicuro', disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento a morte."/> <check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/> <check_box label="Mostra il luogo nella ricerca (30 L$/week) sotto" name="ShowDirectoryCheck" tool_tip="Lascia che questa terra sia vista dagli altri nei risultati di ricerca"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Fai in modo che la gente trovi questo terreno nei risultati della ricerca. - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Questa opzione è disabilitata perchè questo terreno ha un'area di 128 m² o inferiore. Solamente terreni più grandi possono essere abilitati nella ricerca. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Questa opzione è disabilitata perchè tu non puoi modificare le opzioni di questo terreno. - </string> + </panel.string> <combo_box name="land category with adult" left="282" width="140"> - <combo_item name="AnyCategory"> - Tutte le categorie - </combo_item> - <combo_item name="LindenLocation"> - Luoghi Linden - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Arte & Cultura - </combo_item> - <combo_item name="Business"> - Affari - </combo_item> - <combo_item name="Educational"> - Educazione - </combo_item> - <combo_item name="Gaming"> - Giochi - </combo_item> - <combo_item name="Hangout"> - Divertimento - </combo_item> - <combo_item name="NewcomerFriendly"> - Ospitalità per i nuovi entrati - </combo_item> - <combo_item name="Parks&Nature"> - Parchi & Natura - </combo_item> - <combo_item name="Residential"> - Residenziale - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Altro - </combo_item> + <combo_box.item name="item0" label="Tutte le categorie" + /> + <combo_box.item name="item1" label="Luogo dei Linden" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Arte & Cultura" + /> + <combo_box.item name="item4" label="Affari" + /> + <combo_box.item name="item5" label="Educazione" + /> + <combo_box.item name="item6" label="Gioco" + /> + <combo_box.item name="item7" label="Divertimento" + /> + <combo_box.item name="item8" label="Accoglienza nuovi residenti" + /> + <combo_box.item name="item9" label="Parchi & Natura" + /> + <combo_box.item name="item10" label="Residenziale" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Altro" + /> </combo_box> <combo_box name="land category" left="282" width="140"> - <combo_item name="AnyCategory"> - Tutte le categorie - </combo_item> - <combo_item name="LindenLocation"> - Luogo dei Linden - </combo_item> - <combo_item name="Arts&Culture"> - Arte & Cultura - </combo_item> - <combo_item name="Business"> - Affari - </combo_item> - <combo_item name="Educational"> - Educazione - </combo_item> - <combo_item name="Gaming"> - Gioco - </combo_item> - <combo_item name="Hangout"> - Divertimento - </combo_item> - <combo_item name="NewcomerFriendly"> - Accoglienza nuovi residenti - </combo_item> - <combo_item name="Parks&Nature"> - Parchi & Natura - </combo_item> - <combo_item name="Residential"> - Residenziale - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Altro - </combo_item> + <combo_box.item name="item0" label="Tutte le categorie" + /> + <combo_box.item name="item1" label="Luogo dei Linden" + /> + <combo_box.item name="item3" label="Arte & Cultura" + /> + <combo_box.item name="item4" label="Affari" + /> + <combo_box.item name="item5" label="Educazione" + /> + <combo_box.item name="item6" label="Gioco" + /> + <combo_box.item name="item7" label="Divertimento" + /> + <combo_box.item name="item8" label="Accoglienza nuovi residenti" + /> + <combo_box.item name="item9" label="Parchi & Natura" + /> + <combo_box.item name="item10" label="Residenziale" + /> + <combo_box.item name="item11" label="Shopping" + /> + <combo_box.item name="item12" label="Altro" + /> </combo_box> <button label="?" label_selected="?" name="?" left="427"/> <check_box label="Contenuto Mature" name="MatureCheck" tool_tip=" "/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Contenuto Mature - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Contenuto Adult - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Il contenuto o le informazioni del tuo terreno sono considerate Mature. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Il contenuto o le informazioni del tuo terreno sono considerate Adult. - </string> + </panel.string> <text name="Snapshot:"> Fotografia: </text> @@ -403,31 +378,28 @@ Solamente terreni più grandi possono essere abilitati nella ricerca. <text name="landing_point"> Punto di atterraggio: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (nessuno) - </string> + </panel.string> <button width="60" label="Imposta" label_selected="Imposta" name="Set" tool_tip="Imposta il punto di atterraggio dove arrivano i visitatori. Impostalo nel punto dove si trova il tuo avatar in questo terreno."/> <button width="60" left="301" label="Elimina" label_selected="Elimina" name="Clear" tool_tip="Elimina punto di atterraggio."/> <text name="Teleport Routing: "> Rotte dei teleport: </text> <combo_box width="140" name="landing type" tool_tip="Rotte dei teleport -- seleziona come vuoi organizzare i teleport nella tua terra."> - <combo_item name="Blocked"> - Bloccati - </combo_item> - <combo_item name="LandingPoint"> - Punto di atterraggio - </combo_item> - <combo_item name="Anywhere"> - Ovunque - </combo_item> + <combo_box.item name="Blocked" label="Bloccati" + /> + <combo_box.item name="LandingPoint" label="Punto di atterraggio" + /> + <combo_box.item name="Anywhere" label="Ovunque" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Nessuna spinta - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Nessuna spinta (Impostazione regionale) - </string> + </panel.string> </panel> <panel label="Media" name="land_media_panel"> <text name="with media:" width="85"> @@ -495,18 +467,16 @@ Media: </text> <check_box label="Che non hanno dato le proprie informazioni di pagamento alla Linden Lab" name="limit_payment" tool_tip="Manda via residenti non identificati."/> <check_box label="Che non sono adulti con età verificata" name="limit_age_verified" tool_tip="Manda via residenti che non hanno verificato la loro età. Guarda il sito support.secondlife.com per ulteriori informazioni."/> - <string name="estate_override"> + <panel.string name="estate_override"> Una o più di queste impostazioni sono già impostate a livello regionale - </string> + </panel.string> <check_box label="Permetti accesso al gruppo: [GROUP]" name="GroupCheck" tool_tip="Imposta il gruppo nel pannello generale."/> <check_box label="Vendi pass a:" name="PassCheck" tool_tip="Permetti in questo terreno l'accesso temporaneo"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Chiunque - </combo_item> - <combo_item name="Group"> - Gruppo - </combo_item> + <combo_box.item name="Anyone" label="Chiunque" + /> + <combo_box.item name="Group" label="Gruppo" + /> </combo_box> <spinner label="Prezzo in L$:" name="PriceSpin"/> <spinner label="Ore di accesso:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/it/floater_customize.xml b/indra/newview/skins/default/xui/it/floater_customize.xml index 70fc27b3bb..eac673e004 100644 --- a/indra/newview/skins/default/xui/it/floater_customize.xml +++ b/indra/newview/skins/default/xui/it/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Aspetto fisico" width="551"> <tab_container name="customize tab container" tab_min_width="120" width="549"> - <panel label="Parti del corpo" name="body_parts_placeholder"/> + <placeholder label="Parti del corpo" name="body_parts_placeholder"/> <panel label="Forma del corpo" name="Shape" left="124" width="389"> <button font="SansSerifSmall" width="120" left="267" label="Annulla le modifiche" label_selected="Annulla le modifiche" name="Revert"/> <button label="Corpo" label_selected="Corpo" name="Body"/> diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml index ced227a845..b7b7663910 100644 --- a/indra/newview/skins/default/xui/it/floater_joystick.xml +++ b/indra/newview/skins/default/xui/it/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Configurazione Joystick"> - <check_box name="enable_joystick"> - Abilita Joystick: - </check_box> + <check_box name="enable_joystick" label="Abilita Joystick:"/> <text left="120" name="joystick_type" width="380"/> <spinner label="Mapping: asse X" name="JoystickAxis1" label_width="140" width="180" left="12"/> <spinner label="Mapping: asse Y" name="JoystickAxis2" label_width="134" width="174" left="205"/> @@ -17,15 +15,9 @@ <text name="Control Modes:" left="3" width="113"> Modalità di controllo: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled" left="192"> - Costruire - </check_box> - <check_box name="JoystickFlycamEnabled"> - Camera dall'alto - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" left="192" label="Costruire"/> + <check_box name="JoystickFlycamEnabled" label="Camera dall'alto"/> <text name="XScale"> Regolazione X </text> @@ -74,12 +66,14 @@ <button label="SpaceNavigator Defaults" name="SpaceNavigatorDefaults"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Annulla" label_selected="Annulla" name="cancel_btn"/> - <string name="JoystickMonitor"> - Monitor del Joystick - </string> - <string name="Axis"> - Assi [NUM] - </string> + <stat_view label="Monitor del Joystick" name="axis_view"> + <stat_bar label="Assi 0" name="axis0"/> + <stat_bar label="Assi 1" name="axis1"/> + <stat_bar label="Assi 2" name="axis2"/> + <stat_bar label="Assi 3" name="axis3"/> + <stat_bar label="Assi 4" name="axis4"/> + <stat_bar label="Assi 5" name="axis5"/> + </stat_view> <string name="NoDevice"> nessun dispositivo trovato </string> diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml new file mode 100644 index 0000000000..20bd9e60b4 --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ E
+ </floater.string>
+ <floater.string name="mini_map_west">
+ O
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NO
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml index 8a86947875..5bd84d48c8 100644 --- a/indra/newview/skins/default/xui/it/floater_moveview.xml +++ b/indra/newview/skins/default/xui/it/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Gira a sinistra"/> <button label="" label_selected="" name="turn right btn" tool_tip="Gira a destra"/> <button label="" label_selected="" name="move up btn" tool_tip="Salta o vola in alto"/> @@ -8,4 +9,5 @@ <joystick_slide name="slide right btn" tool_tip="Vai a destra"/> <joystick_turn name="forward btn" tool_tip="Vai avanti"/> <joystick_turn name="backward btn" tool_tip="Vai indietro"/> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml index abcd953c13..c67fc69db6 100644 --- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml @@ -39,9 +39,7 @@ <combo_box.item name="Select_category" label="Scegli la categoria"/> <combo_box.item name="Age__Age_play" label="Età > Far finta di essere minore"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Età > Residente adulto nella Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Età > Residente minorenne al di fuori della 'Second Life per Teenager' - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Età > Residente minorenne al di fuori della 'Second Life per Teenager'"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assalto > sandbox da combattimento / area pericolosa"/> <combo_box.item name="Assault__Safe_area" label="Assalto > Area sicura"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Assalto > Test di armi in sandbox"/> @@ -66,12 +64,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Molestie > Abusi verbali"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indecenza > Condotta o contenuti largamente offensivi"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indecenza > Nome di un avatar inappropriato"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Indecenza > Contenuto o condotta inappropriata in una regione PG - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Indecenza > Contenuto o condotta inappropriata in una regione Mature - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indecenza > Contenuto o condotta inappropriata in una regione PG"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indecenza > Contenuto o condotta inappropriata in una regione Mature"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violazione della proprietà intellettuale > Rimozione contenuti"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violazione della proprietà intellettuale > CopyBot o sblocco di permessi"/> <combo_box.item name="Intolerance" label="Intolleranza"/> diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml index 3c79cd8829..d4d70f3367 100644 --- a/indra/newview/skins/default/xui/it/floater_tools.xml +++ b/indra/newview/skins/default/xui/it/floater_tools.xml @@ -5,30 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Modifica"/> <button label="" label_selected="" name="button create" tool_tip="Crea"/> <button label="" label_selected="" name="button land" tool_tip="Terra"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Guarda ruotando (Ctrl)" name="radio orbit"/> - <check_box label="Guarda panoramicamente (Ctrl-Shift)" name="radio pan"/> - <check_box label="Muovi" name="radio move"/> - <check_box label="Alza (Ctrl)" name="radio lift"/> - <check_box label="Gira intorno (Ctrl-Shift)" name="radio spin"/> - <check_box label="Posizione" name="radio position"/> - <check_box label="Ruota (Ctrl)" name="radio rotate"/> - <check_box label="Ridimensiona (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Seleziona Texture" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Guarda ruotando (Ctrl)" name="radio orbit"/> + <radio_item label="Guarda panoramicamente (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Muovi" name="radio move"/> + <radio_item label="Alza (Ctrl)" name="radio lift"/> + <radio_item label="Gira intorno (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Posizione" name="radio position"/> + <radio_item label="Ruota (Ctrl)" name="radio rotate"/> + <radio_item label="Ridimensiona (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Seleziona Texture" name="radio select face"/> + </radio_group> <check_box label="Modifica parti unite" name="checkbox edit linked parts"/> <text name="text ruler mode"> Modalità: </text> <combo_box name="combobox grid mode" left_delta="48"> - <combo_item name="World"> - Globale - </combo_item> - <combo_item name="Local"> - Locale - </combo_item> - <combo_item name="Reference"> - Riferito a - </combo_item> + <combo_box.item name="World" label="Globale" + /> + <combo_box.item name="Local" label="Locale" + /> + <combo_box.item name="Reference" label="Riferito a" + /> </combo_box> <check_box label="Ridimens. simmetricamente" name="checkbox uniform"/> <check_box label="Ridimensiona le texture" name="checkbox stretch textures"/> @@ -56,13 +59,15 @@ <check_box label="Copia la selezione" name="checkbox copy selection"/> <check_box label="Centra" name="checkbox copy centers"/> <check_box label="Ruota" name="checkbox copy rotates"/> - <check_box label="Seleziona il terreno" name="radio select land"/> - <check_box label="Appiattisci" name="radio flatten"/> - <check_box label="Eleva" name="radio raise"/> - <check_box label="Abbassa" name="radio lower"/> - <check_box label="Uniforma" name="radio smooth"/> - <check_box label="Ondula" name="radio noise"/> - <check_box label="Ripristina" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Seleziona il terreno" name="radio select land"/> + <radio_item label="Appiattisci" name="radio flatten"/> + <radio_item label="Eleva" name="radio raise"/> + <radio_item label="Abbassa" name="radio lower"/> + <radio_item label="Uniforma" name="radio smooth"/> + <radio_item label="Ondula" name="radio noise"/> + <radio_item label="Ripristina" name="radio revert"/> + </radio_group> <button label="Applica" label_selected="Applica" name="button apply to selection" tool_tip="Modifica il terreno selezionato" left="146"/> <text name="Bulldozer:"> Bulldozer: @@ -112,9 +117,7 @@ <text name="Permissions:"> Permessi: </text> - <text name="perm_modify"> - Puoi modificare questo oggetto. - </text> + <check_box label="Condividi con il gruppo" name="checkbox share with group" tool_tip="Permetti a tutti i membri del gruppo di condividere ed utilizzare i tuoi permessi per questo oggetto. Devi cederlo al gruppo per abilitare le restrizioni di ruolo."/> <string name="text deed continued"> Cedi al gruppo... @@ -130,49 +133,35 @@ <text name="Cost"> Prezzo: L$ </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Originale - </radio_item> - <radio_item name="Copy"> - Copia - </radio_item> - <radio_item name="Contents"> - Contenuto - </radio_item> - </radio_group> - <text name="Next owner can:"> - Il prossimo proprietario può: - </text> - <check_box label="Modificare" name="checkbox next owner can modify"/> - <check_box label="Copiare" name="checkbox next owner can copy" left_delta="80"/> - <check_box label="Rivendere/Regalare" name="checkbox next owner can transfer" left_delta="67"/> + <combo_box name="sale type"> + <combo_box.item label="Copia" name="Copy"/> + <combo_box.item label="Contenuto" name="Contents"/> + <combo_box.item label="Originale" name="Original"/> + </combo_box> + <text name="label click action" width="220"> Se cliccato con il tasto sinistro del mouse: </text> <combo_box name="clickaction" width="192"> - <combo_item name="Touch/grab(default)"> - Tocca/Afferra (default) - </combo_item> - <combo_item name="Sitonobject"> - Siediti sull'oggetto - </combo_item> - <combo_item name="Buyobject"> - Compra l'oggetto - </combo_item> - <combo_item name="Payobject"> - Paga l'oggetto - </combo_item> - <combo_item name="Open"> - Apri - </combo_item> - <combo_item name="Play"> - Attiva i multimedia del terreno - </combo_item> - <combo_item name="Opemmedia"> - Apri i multimedia del terreno - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Tocca/Afferra (default)" + /> + <combo_box.item name="Sitonobject" label="Siediti sull'oggetto" + /> + <combo_box.item name="Buyobject" label="Compra l'oggetto" + /> + <combo_box.item name="Payobject" label="Paga l'oggetto" + /> + <combo_box.item name="Open" label="Apri" + /> + <combo_box.item name="Play" label="Attiva i multimedia del terreno" + /> + <combo_box.item name="Opemmedia" label="Apri i multimedia del terreno" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Puoi modificare questo oggetto. + </text> <text name="B:"> B: </text> @@ -191,6 +180,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Il prossimo proprietario può: + </text> + <check_box label="Modificare" name="checkbox next owner can modify"/> + <check_box label="Copiare" name="checkbox next owner can copy" left_delta="80"/> + <check_box name="checkbox next owner can transfer" left_delta="67"/> + </panel> <string name="text modify info 1"> Puoi modificare questo oggetto. </string> @@ -255,56 +251,41 @@ Materiale </text> <combo_box name="material"> - <combo_item name="Stone"> - Pietra - </combo_item> - <combo_item name="Metal"> - Metallo - </combo_item> - <combo_item name="Glass"> - Vetro - </combo_item> - <combo_item name="Wood"> - Legno - </combo_item> - <combo_item name="Flesh"> - Carne - </combo_item> - <combo_item name="Plastic"> - Plastica - </combo_item> - <combo_item name="Rubber"> - Gomma - </combo_item> + <combo_box.item name="Stone" label="Pietra" + /> + <combo_box.item name="Metal" label="Metallo" + /> + <combo_box.item name="Glass" label="Vetro" + /> + <combo_box.item name="Wood" label="Legno" + /> + <combo_box.item name="Flesh" label="Carne" + /> + <combo_box.item name="Plastic" label="Plastica" + /> + <combo_box.item name="Rubber" label="Gomma" + /> </combo_box> <text name="label basetype"> Forma di costruzione </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Cubo - </combo_item> - <combo_item name="Cylinder"> - Cilindro - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Sfera - </combo_item> - <combo_item name="Torus"> - Toro - </combo_item> - <combo_item name="Tube"> - Tubo - </combo_item> - <combo_item name="Ring"> - Anello - </combo_item> - <combo_item name="Sculpted"> - Sculpted - </combo_item> + <combo_box.item name="Box" label="Cubo" + /> + <combo_box.item name="Cylinder" label="Cilindro" + /> + <combo_box.item name="Prism" label="Prisma" + /> + <combo_box.item name="Sphere" label="Sfera" + /> + <combo_box.item name="Torus" label="Toro" + /> + <combo_box.item name="Tube" label="Tubo" + /> + <combo_box.item name="Ring" label="Anello" + /> + <combo_box.item name="Sculpted" label="Sculpted" + /> </combo_box> <text name="text cut"> Linea di taglio Inizio e Fine @@ -321,18 +302,14 @@ Forma del foro </text> <combo_box name="hole"> - <combo_item name="Default"> - Default - </combo_item> - <combo_item name="Circle"> - Rotondo - </combo_item> - <combo_item name="Square"> - Quadrato - </combo_item> - <combo_item name="Triangle"> - Triangolare - </combo_item> + <combo_box.item name="Default" label="Default" + /> + <combo_box.item name="Circle" label="Rotondo" + /> + <combo_box.item name="Square" label="Quadrato" + /> + <combo_box.item name="Triangle" label="Triangolare" + /> </combo_box> <text name="text twist"> Torsione Inizio e Fine @@ -381,21 +358,16 @@ Tipo di congiunzione </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (nessuna) - </combo_item> - <combo_item name="Sphere"> - Sferica - </combo_item> - <combo_item name="Torus"> - Toroidale - </combo_item> - <combo_item name="Plane"> - Piana - </combo_item> - <combo_item name="Cylinder"> - Cilindrica - </combo_item> + <combo_box.item name="None" label="(nessuna)" + /> + <combo_box.item name="Sphere" label="Sferica" + /> + <combo_box.item name="Torus" label="Toroidale" + /> + <combo_box.item name="Plane" label="Piana" + /> + <combo_box.item name="Cylinder" label="Cilindrica" + /> </combo_box> </panel> <panel label="Caratteristiche" name="Features"> @@ -437,88 +409,64 @@ Applicazione della texture </text> <combo_box name="combobox texgen" bottom_delta="-38"> - <combo_item name="Default"> - Default - </combo_item> - <combo_item name="Planar"> - Planare - </combo_item> + <combo_box.item name="Default" label="Default" + /> + <combo_box.item name="Planar" label="Planare" + /> </combo_box> <text name="label shininess" bottom="-120"> Brillantezza </text> <combo_box name="combobox shininess" bottom_delta="-22"> - <combo_item name="None"> - Nessuna - </combo_item> - <combo_item name="Low"> - Bassa - </combo_item> - <combo_item name="Medium"> - Media - </combo_item> - <combo_item name="High"> - Alta - </combo_item> + <combo_box.item name="None" label="Nessuna" + /> + <combo_box.item name="Low" label="Bassa" + /> + <combo_box.item name="Medium" label="Media" + /> + <combo_box.item name="High" label="Alta" + /> </combo_box> <text name="label bumpiness" bottom="-120"> Rilievo </text> <combo_box name="combobox bumpiness" width="100" bottom_delta="-22"> - <combo_item name="None"> - Nessuna - </combo_item> - <combo_item name="Brightness"> - Luminoso - </combo_item> - <combo_item name="Darkness"> - Scuro - </combo_item> - <combo_item name="woodgrain"> - Venature del legno - </combo_item> - <combo_item name="bark"> - Corteccia - </combo_item> - <combo_item name="bricks"> - Mattoni - </combo_item> - <combo_item name="checker"> - Scacchi - </combo_item> - <combo_item name="concrete"> - Cemento - </combo_item> - <combo_item name="crustytile"> - Mattonella incrostata - </combo_item> - <combo_item name="cutstone"> - Mosaico in pietra - </combo_item> - <combo_item name="discs"> - Dischi - </combo_item> - <combo_item name="gravel"> - Ghiaia - </combo_item> - <combo_item name="petridish"> - Sassi - </combo_item> - <combo_item name="siding"> - Listoni - </combo_item> - <combo_item name="stonetile"> - Mattonelle in pietra - </combo_item> - <combo_item name="stucco"> - Stucco - </combo_item> - <combo_item name="suction"> - Cerchi rialzati - </combo_item> - <combo_item name="weave"> - Trama - </combo_item> + <combo_box.item name="None" label="Nessuna" + /> + <combo_box.item name="Brightness" label="Luminoso" + /> + <combo_box.item name="Darkness" label="Scuro" + /> + <combo_box.item name="woodgrain" label="Venature del legno" + /> + <combo_box.item name="bark" label="Corteccia" + /> + <combo_box.item name="bricks" label="Mattoni" + /> + <combo_box.item name="checker" label="Scacchi" + /> + <combo_box.item name="concrete" label="Cemento" + /> + <combo_box.item name="crustytile" label="Mattonella incrostata" + /> + <combo_box.item name="cutstone" label="Mosaico in pietra" + /> + <combo_box.item name="discs" label="Dischi" + /> + <combo_box.item name="gravel" label="Ghiaia" + /> + <combo_box.item name="petridish" label="Sassi" + /> + <combo_box.item name="siding" label="Listoni" + /> + <combo_box.item name="stonetile" label="Mattonelle in pietra" + /> + <combo_box.item name="stucco" label="Stucco" + /> + <combo_box.item name="suction" label="Cerchi rialzati" + /> + <combo_box.item name="weave" label="Trama" + /> </combo_box> <text name="tex scale"> Ripetizioni per faccia @@ -583,43 +531,43 @@ <button label="Acquista il terreno..." label_selected="Acquista il terreno..." name="button buy land" width="156"/> <button label="Abbandona il terreno..." label_selected="Abbandona il terreno..." name="button abandon land" width="156"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Sposta le fasce colorate per ruotare l'oggetto - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Clicca e trascina per ridimensionare il lato selezionato - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Trascina per spostare, maiuscolo+trascina per copiare - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Clicca e tieni premuto per modificare il terreno - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Clicca e sposta per cambiare visuale - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Trascina per muovere, Ctrl per alzare, Ctrl-Shift per ruotare - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Clicca inworld per costruire - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Clicca e trascina per selezionare il terreno - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Schermo - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Locale - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Globale - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Riferimento - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Accessorio - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml index 9b2fc5aff1..e19335fe07 100644 --- a/indra/newview/skins/default/xui/it/floater_world_map.xml +++ b/indra/newview/skins/default/xui/it/floater_world_map.xml @@ -30,10 +30,10 @@ <check_box label="Adult" name="event_adult_chk"/> <icon bottom="-200" name="avatar_icon" /> <combo_box label="Amici Online" name="friend combo" tool_tip="Amici da mostrare sulla mappa"> - <combo_box.item name="none_selected" label="Amici Online"/> + <combo_box.item name="item1" label="Amici Online"/> </combo_box> <combo_box label="Landmark" name="landmark combo" tool_tip="Landmarks da mostrare sulla mappa"> - <combo_box.item name="none_selected" label="Landmark"/> + <combo_box.item name="item1" label="Landmark"/> </combo_box> <line_editor label="Cerca per nome di regione" name="location" tool_tip="Scrivi il nome di una regione"/> <button label="Cerca" name="DoSearch" tool_tip="Cerca regione"/> diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 36fa02978a..427247634b 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -980,7 +980,7 @@ Offri l'amicizia a [NAME]? Offri l'amicizia a [NAME]? <form name="form"> - <input name="message" type="text"> + <input name="message"> Vorresti essere mio amico? </input> <button name="Offer" text="OK"/> @@ -1386,7 +1386,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="KickUser"> Espelli questo utente con quale messaggio? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un amministratore ti ha disconnesso. </input> <button name="OK" text="OK"/> @@ -1396,7 +1396,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="KickAllUsers"> Espelli tutti quelli che sono sulla griglia con quale messaggio? <form name="form"> - <input name="message" type="text"> + <input name="message"> Un amministratore ti ha disconnesso. </input> <button name="OK" text="OK"/> @@ -1406,7 +1406,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="FreezeUser"> Immobilizza questo utente con quale messaggio? <form name="form"> - <input name="message" type="text"> + <input name="message"> Sei stato immobilizzato. Non puoi muoverti o usare la chat. Un amministratore ti contatterà con un messaggio (IM). </input> <button name="OK" text="OK"/> @@ -1416,7 +1416,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="UnFreezeUser"> Smobilizza questo utente con quale messaggio? <form name="form"> - <input name="message" type="text"> + <input name="message"> Non sei più immobilizzato. </input> <button name="OK" text="OK"/> @@ -1426,7 +1426,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="OfferTeleport"> Offri un teleport nel posto dove sei con il seguente messaggio? <form name="form"> - <input name="message" type="text"> + <input name="message"> Raggiungimi a [REGION] </input> <button name="OK" text="OK"/> @@ -1436,7 +1436,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification name="OfferTeleportFromGod"> Vuoi trasportare divinamente l'utente nel posto dove sei? <form name="form"> - <input name="message" type="text"> + <input name="message"> Raggiungimi in [REGION] </input> <button name="OK" text="OK"/> @@ -1450,7 +1450,7 @@ Per abbandonare un gruppo seleziona l'opzione 'Gruppi..' dal menu <notification label="Manda un messaggio a tutti nella tua proprietà" name="MessageEstate"> Scrivi un annuncio breve che verrà mandato a tutti quelli che sono in questo momento nella tua proprietà. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annulla"/> </form> @@ -1672,7 +1672,7 @@ Pubblica questo annuncio adesso per [AMOUNT]L$? <notification label="Manda un messaggio a tutti in questa regione" name="MessageRegion"> Scrivi un breve annuncio che verrà mandato a tutti in questa regione. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annulla"/> </form> @@ -1968,14 +1968,14 @@ Il contenuto verrà copiato nel tuo inventario. Confermi di voler procedere all'acquisto? <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Questa transazione farà: [ACTION] Confermi di voler procedere all'acquisto? Ridigita la tua password e premi OK. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="Annulla"/> </form> @@ -2345,7 +2345,7 @@ D (Densità) controlla quanto gonfie o spezzettate appaiono le nuvole. <notification name="NewSkyPreset"> Fornisci il nome per il nuovo cielo. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nuova preimpostazione </input> <button name="OK" text="OK"/> @@ -2358,7 +2358,7 @@ D (Densità) controlla quanto gonfie o spezzettate appaiono le nuvole. <notification name="NewWaterPreset"> Fornisci il nome per la nuova preregolazione del livello dell'acqua. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nuova preimpostazione </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml index 2c04ec776c..08d6268f5b 100644 --- a/indra/newview/skins/default/xui/it/panel_group_general.xml +++ b/indra/newview/skins/default/xui/it/panel_group_general.xml @@ -37,9 +37,9 @@ Passa il mouse sulle opzioni per un aiuto aggiuntivo. (I proprietari sono scritti in neretto) </text> <name_list name="visible_members"> - <column label="Nome del membro" name="name"/> - <column label="Titolo" name="title"/> - <column label="Ultimo login" name="online"/> + <name_list.columns label="Nome del membro" name="name"/> + <name_list.columns label="Titolo" name="title"/> + <name_list.columns label="Ultimo login" name="online"/> </name_list> <text name="text_group_preferences"> Preferenze di gruppo @@ -50,15 +50,9 @@ Passa il mouse sulle opzioni per un aiuto aggiuntivo. <check_box label="Tassa di iscrizione: L$" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa di iscrizione per unirsi al gruppo."/> <spinner width="60" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi membri devono pagare questa tassa per unirsi al gruppo. La tassa di iscrizione è selezionata."/> <combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi Mature."> - <combo_item name="select_mature"> - - Seleziona - - </combo_item> - <combo_item name="mature"> - Contenuto Mature - </combo_item> - <combo_item name="pg"> - Contenuto PG - </combo_item> + <combo_box.item name="select_mature" label="- Seleziona -"/> + <combo_box.item name="mature" label="Contenuto Mature"/> + <combo_box.item name="pg" label="Contenuto PG"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml index 6bf0f1e8c0..c6ef84e220 100644 --- a/indra/newview/skins/default/xui/it/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/it/panel_group_notices.xml @@ -12,9 +12,7 @@ Puoi disattivare la ricezione delle notice nella finestra principale. Archivio delle notice del gruppo </text> <text name="lbl2"> - Le notice sono conservate per 14 giorni. Clicca la notice qui sotto che desideri -leggere. Clicca il bottone 'Aggiorna' per controllare se sono arrivate nuove -notice. Il numero delle notice è limitato a 200 notice per gruppo al giorno. + Le notice sono conservate per 14 giorni. Il numero delle notice è limitato a 200 notice per gruppo al giorno. </text> <scroll_list name="notice_list"> <column label="Oggetto" name="subject"/> @@ -31,10 +29,7 @@ notice. Il numero delle notice è limitato a 200 notice per gruppo al giorno. Crea una notice </text> <text name="lbl2"> - Devi scrivere l'oggetto della notice per poterla inviare. -Puoi aggiungere un solo allegato alla notice trascinandolo dal -tuo inventario in questa finestra. L'allegato deve essere -copiabile e cedibile, e non puoi allegare una cartella. + Puoi aggiungere un solo allegato alla notice trascinandolo dal tuo inventario in questa finestra. L'allegato deve essere copiabile e cedibile, e non puoi allegare una cartella. </text> <text name="lbl3" left="20"> Oggetto: @@ -49,7 +44,7 @@ copiabile e cedibile, e non puoi allegare una cartella. </text> <line_editor name="create_inventory_name" width="190" left_delta="74"/> <button label="Rimuovi allegato" label_selected="Rimuovi allegato" name="remove_attachment"/> - <button label="Invia la notice" label_selected="Invia la notice" name="send_notice"/> + <button label="Invia" label_selected="Invia" name="send_notice"/> <panel name="drop_target" tool_tip="Trascina un oggetto dall'inventario sulla casella del messaggio per inviarlo con la notice. Devi avere il permesso di copia e trasferimento dell'oggetto per poterlo inviare con la notice."/> </panel> <panel label="Vedi le notice precedenti" name="panel_view_past_notice"> diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml index acd047d75d..1782089039 100644 --- a/indra/newview/skins/default/xui/it/panel_login.xml +++ b/indra/newview/skins/default/xui/it/panel_login.xml @@ -21,15 +21,9 @@ Punto di partenza: </text> <combo_box name="start_location_combo" left_delta="105" width="160"> - <combo_item name="MyHome"> - Casa Mia - </combo_item> - <combo_item name="MyLastLocation"> - Ultimo luogo visitato - </combo_item> - <combo_item name="Typeregionname"> - <Scrivi la regione> - </combo_item> + <combo_box.item name="MyHome" label="Casa Mia" /> + <combo_box.item name="MyLastLocation" label="Ultimo luogo visitato" /> + <combo_box.item name="Typeregionname" label="<Scrivi la regione>" /> </combo_box> <check_box label="Ricorda password" name="remember_check" left_delta="168"/> <button label="Log In" label_selected="Log In" name="connect_btn"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml new file mode 100644 index 0000000000..cf1e22997a --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="larghezza/altezza">
+ Rapporto di visualizzazione:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="larghezza/altezza">
+ <combo_box.item label="4:3 (Monitor Standard)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (Widescreen)" name="item3"/>
+ <combo_box.item label="16:9 (Widescreen)" name="item4"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml index 8afcd74bf7..7125832c7b 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml @@ -9,44 +9,50 @@ chat: <radio_item name="radio2" label="Medio" /> <radio_item name="radio3" label="Grande" /> </radio_group> + <color_swatch label="Tuo" name="user"/> + <text name="text_box1"> + Tuo + </text> + <color_swatch label="Altri" name="agent"/> <text name="text_box2"> - Colore carattere chat: + Altri + </text> + <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM </text> - <color_swatch label="Tuo" name="user"/> - <color_swatch label="Altri" name="agent" width="60" left_delta="48"/> - <color_swatch label="IM" name="im" left_delta="64" /> <color_swatch label="Sistema" name="system"/> - <color_swatch label="Errori" name="script_error"/> + <text name="text_box4"> + Sistema + </text> + <color_swatch label="Errori script" name="script_error"/> + <text name="text_box5"> + Errori script + </text> <color_swatch label="Oggetti" name="objects"/> - <color_swatch label="Proprietario" name="owner" width="60" left_delta="48"/> - <color_swatch label="Vignetta" name="background" left_delta="64" /> - <color_swatch label="URLs" name="links"/> - <text name="text_box8"> - Errori script: + <text name="text_box6"> + Oggetti </text> - <check_box label="Mostra errori script ed avvertimenti nella chat principale" name="script_errors_as_chat"/> - <text name="text_box3"> - Console della chat: + <color_swatch label="Proprietario" name="owner"/> + <text name="text_box7"> + Proprietario </text> - <spinner label="Dissolvi la chat dopo" name="fade_chat_time" label_width="112" width="162"/> - <text name="text_box4" left="313" > - (s) + <color_swatch label="Vignetta" name="background"/> + <text name="text_box8"> + Vignetta </text> - <text name="text_box5"> - (# linee) + <color_swatch label="URLs" name="links"/> + <text name="text_box9"> + URLs </text> + <check_box label="Mostra errori script ed avvertimenti nella chat principale" name="script_errors_as_chat"/> + <spinner label="Dissolvi la chat dopo" name="fade_chat_time" label_width="112" width="162"/> <slider label="Opacità" name="console_opacity"/> <check_box label="Utilzza la larghezza intera dello schermo (Richiede riavvio)" name="chat_full_width_check"/> - <text name="text_box6"> - Opzioni chat: - </text> <check_box label="Chiudi la barra chat dopo aver premuto invio" name="close_chat_on_return_check"/> <check_box label="Le frecce muovono comunque l'avatar quando si sta scrivendo" name="arrow_keys_move_avatar_check"/> <check_box label="Mostra orario nella chat principale" name="show_timestamps_check"/> <check_box label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/> - <text name="text_box7"> - Chat con vignette: - </text> <check_box label="Mostra vignette chat" name="bubble_text_chat"/> <slider label="Opacità" name="bubble_chat_opacity"/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml index aadd86d055..4c6a7d8eb3 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Generale" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Vai a casa di default quando fai login"> - Casa mia - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Vai nell'ultimo posto visitato di default quando fai login."> - Ultimo posto visitato - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Vai a casa di default quando fai login" label="Casa mia"/> + <combo_box.item name="MyLastLocation" tool_tip="Vai nell'ultimo posto visitato di default quando fai login." label="Ultimo posto visitato"/> + </combo_box> <check_box label="Mostra il punto di partenza nella schermata d'inizio" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox" width="166"> - <combo_item name="Never"> - Mai - </combo_item> - <combo_item name="Show Temporarily"> - Mostra temporanemente - </combo_item> - <combo_item name="Always"> - Sempre - </combo_item> + <combo_box name="fade_out_combobox"> + <combo_box.item name="Never" label="Mai"/> + <combo_box.item name="Show Temporarily" label="Mostra temporanemente"/> + <combo_box.item name="Always" label="Sempre"/> </combo_box> <check_box label="Nomi avatar in piccolo" name="small_avatar_names_checkbox"/> <check_box label="Nascondi il mio nome sul mio schermo" name="show_my_name_checkbox"/> @@ -34,25 +24,18 @@ <check_box label="Usa ridimensionamento indipendente dalla risoluzione" name="ui_auto_scale"/> <spinner label="Assente dopo:" name="afk_timeout_spinner"/> <check_box label="Avvisami quando spendo o ricevo Linden Dollars (L$)" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label" bottom="-312"> + <text name="maturity_desired_label"> Categoria di accesso: </text> - <text name="maturity_desired_prompt" bottom="-312"> - Voglio accedere al -contenuto di tipo: + <text name="maturity_desired_prompt"> + Voglio accedere al contenuto di tipo: </text> - <combo_box name="maturity_desired_combobox" bottom="-330" left="274"> - <combo_item name="Desired_Adult"> - PG, Mature e Adult - </combo_item> - <combo_item name="Desired_Mature"> - PG e Mature - </combo_item> - <combo_item name="Desired_PG"> - solo PG - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="PG, Mature e Adult"/> + <combo_box.item name="Desired_Mature" label="PG e Mature"/> + <combo_box.item name="Desired_PG" label="solo PG"/> </combo_box> - <text name="maturity_desired_textbox" bottom="-324" left="274"> + <text name="maturity_desired_textbox"> solo PG </text> <text name="start_location_textbox"> @@ -73,75 +56,35 @@ contenuto di tipo: <text name="language_textbox"> Lingua: </text> - <text left_delta="313" name="language_textbox2"> + <text name="language_textbox2"> (Richiede il riavvio) </text> <string name="region_name_prompt"> <Scrivi il nome della regione> </string> - <combo_box name="crash_behavior_combobox" width="166"> - <combo_item name="Askbeforesending"> - Chiedi prima di inviare - </combo_item> - <combo_item name="Alwayssend"> - Invia sempre - </combo_item> - <combo_item name="Neversend"> - Non inviare mai - </combo_item> + <combo_box name="crash_behavior_combobox"> + <combo_box.item name="Askbeforesending" label="Chiedi prima di inviare"/> + <combo_box.item name="Alwayssend" label="Invia sempre"/> + <combo_box.item name="Neversend" label="Non inviare mai"/> </combo_box> - <combo_box name="language_combobox" width="166"> - <combo_item name="System Default Language"> - Default di sistema - </combo_item> - <combo_item name="English"> - English - </combo_item> - <combo_item name="Danish"> - Dansk (Danese) - Beta - </combo_item> - <combo_item name="Deutsch(German)"> - Deutsch (Tedesco) - Beta - </combo_item> - <combo_item name="Spanish"> - Español (Spagnolo) - Beta - </combo_item> - <combo_item name="French"> - Français (Francese) - Beta - </combo_item> - <combo_item name="Italian"> - Italiano - Beta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Ungherese) - Beta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Olandese) - Beta - </combo_item> - <combo_item name="Polish"> - Polski (Polacco) - Beta - </combo_item> - <combo_item name="Portugese"> - Portugués (Portoghese) - Beta - </combo_item> - <combo_item name="Russian"> - Русский (Russo) - Beta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Turco) - Beta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ukraino) - Beta - </combo_item> - <combo_item name="Chinese"> - 中文 (简体) (Cinese) - Beta - </combo_item> - <combo_item name="(Japanese)"> - 日本語 (Giapponese) - Beta - </combo_item> - <combo_item name="(Korean)"> - 한국어 (Coreano) - Beta - </combo_item> + <combo_box name="language_combobox"> + <combo_box.item name="System Default Language" label="Default di sistema"/> + <combo_box.item name="English" label="English"/> + <combo_box.item name="Danish" label="Dansk (Danese) - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Tedesco) - Beta"/> + <combo_box.item name="Spanish" label="Español (Spagnolo) - Beta"/> + <combo_box.item name="French" label="Français (Francese) - Beta"/> + <combo_box.item name="Italian" label="Italiano - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Ungherese) - Beta"/> + <combo_box.item name="Dutch" label="Nederlands (Olandese) - Beta"/> + <combo_box.item name="Polish" label="Polski (Polacco) - Beta"/> + <combo_box.item name="Portugese" label="Portugués (Portoghese) - Beta"/> + <combo_box.item name="Russian" label="Русский (Russo) - Beta"/> + <combo_box.item name="Turkish" label="Türkçe (Turco) - Beta"/> + <combo_box.item name="Ukrainian" label="Українська (Ukraino) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Cinese) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Giapponese) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Coreano) - Beta"/> </combo_box> <check_box label="Condividi la tua lingua con gli oggetti" name="language_is_public" tool_tip="Questo fa in modo che gli oggetti inworld riconoscano la tua lingua."/> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml index f9aaa58f09..6e1640334f 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml @@ -56,6 +56,7 @@ Qualità </text> <check_box label="Personalizzate" name="CustomSettings"/> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> Effetti grafici: </text> @@ -131,12 +132,13 @@ <radio_item name="0" label="Bassi" /> <radio_item name="2" label="Alti" /> </radio_group> + </panel> <button label="Configurazione raccomandata" name="Defaults" left="110" width="190" /> <button label="Opzioni hardware" label_selected="Opzioni hardware" name="GraphicsHardwareButton"/> - <string name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </string> - <string name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </string> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml index 5b95b7378b..345e8c532c 100644 --- a/indra/newview/skins/default/xui/it/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/it/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Proprietà immobiliari" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Proprietà immobiliari" name="Estate"> <text name="estate_help_text"> I cambiamenti alle impostazioni in questa finestra avranno effetto su tutte le regioni della proprietà. @@ -66,4 +68,6 @@ avranno effetto su tutte le regioni della proprietà. <button label="?" name="ban_resident_help"/> <button label="Rimuovi..." name="remove_banned_avatar_btn"/> <button label="Aggiungi..." name="add_banned_avatar_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml index d3afc1c63a..8c31172ab5 100644 --- a/indra/newview/skins/default/xui/it/panel_region_general.xml +++ b/indra/newview/skins/default/xui/it/panel_region_general.xml @@ -40,15 +40,9 @@ Categoria di accesso: </text> <combo_box label="Mature" name="access_combo" left="126" width="74"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Applica" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/it/panel_region_texture.xml b/indra/newview/skins/default/xui/it/panel_region_texture.xml index 254700e9f1..976a93abb8 100644 --- a/indra/newview/skins/default/xui/it/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/it/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Texture del terreno" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Texture del terreno" name="Textures"> <text name="region_text_lbl"> Regione: </text> @@ -54,4 +56,6 @@ Texture #1, e il valore più ALTO all'altezza MINIMA della Texture #4. </text> <button label="Applica" name="apply_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_world_map.xml b/indra/newview/skins/default/xui/it/panel_world_map.xml new file mode 100644 index 0000000000..4d4f94273b --- /dev/null +++ b/indra/newview/skins/default/xui/it/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ E
+ </panel.string>
+ <panel.string name="world_map_west">
+ O
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NO
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 37c003a07b..38283df469 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -483,4 +483,34 @@ <string name="choose_the_directory"> Scegli la cartella </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + Basso + </string> + <string name="GraphicsQualityMid"> + Medio + </string> + <string name="GraphicsQualityHigh"> + Alto + </string> </strings> diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml index c8195d8f38..fb7136d7ce 100644 --- a/indra/newview/skins/default/xui/ja/floater_about_land.xml +++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml @@ -2,11 +2,11 @@ <floater name="floaterland" title="土地情報"> <tab_container name="landtab"> <panel label="一般" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> 名前: </text> <line_editor name="Name"/> - <text length="1" name="Description:" type="string"> + <text name="Description:"> 説明: </text> <text name="LandType"> @@ -21,56 +21,56 @@ <text name="ContentRatingText"> Adult </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> オーナー: </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="プロフィール..." label_selected="プロフィール..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> グループ: </text> <button label="設定..." label_selected="設定..." name="Set..."/> <check_box label="グループへの譲渡を許可" name="check deed" tool_tip="グループ・オフィサーは、この土地をグループに譲渡し、グループの土地配分に委ねることができます。"/> <button label="譲渡..." label_selected="譲渡..." name="Deed..." tool_tip="選択されたグループのオフィサーであるときのみ、土地を譲渡できます。"/> <check_box label="オーナーが譲渡と共に寄付" name="check contrib" tool_tip="土地がグループに譲渡されるとき、前の所有者は譲渡が成立するよう、十分な土地を寄付します。"/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> 販売の有無: </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> 販売対象外 </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> 価格: L$[PRICE] (L$[PRICE_PER_SQM]/平方メートル) </text> <button label="土地を販売..." label_selected="土地を販売..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> 販売先:[BUYER] </text> - <text length="1" name="Sell with landowners objects in parcel." type="string"> + <text name="Sell with landowners objects in parcel."> オブジェクトも販売価格に含まれます </text> - <text length="1" name="Selling with no objects in parcel." type="string"> + <text name="Selling with no objects in parcel."> オブジェクトは販売対象外です </text> <button label="土地販売の取り消し" label_selected="土地販売の取り消し" name="Cancel Land Sale"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> 取得日時: </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> 2006年8月15日火曜日13:47:25 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> 面積: </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048平方メートル </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> 交通量: </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 誤 </text> <button label="土地を購入..." label_selected="土地を購入..." left="130" name="Buy Land..." width="125"/> @@ -79,76 +79,76 @@ <button label="土地を放棄..." label_selected="土地を放棄..." name="Abandon Land..."/> <button label="土地の返還を要求..." label_selected="土地の返還を要求..." name="Reclaim Land..."/> <button label="Lindenセール..." label_selected="Lindenセール..." name="Linden Sale..." tool_tip="土地が所有されており、コンテンツが設定されている必要があります。オークションの対象になっていないことも必要条件です。"/> - <string name="new users only"> + <panel.string name="new users only"> 新規ユーザーのみ - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> 誰でも - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> 面積: - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA]平方メートル - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> オークションID: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> この土地を修正変更するには、購入を承認する必要があります。 - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (グループ所有) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> プロフィール... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> 情報... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (公共) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (なし) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (購入審査中) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> 区画が選定されていません。 「世界」メニュー>「土地情報」に進むか、別の区画を選択して、詳細を表示します。 - </string> + </panel.string> </panel> <panel label="約款" name="land_covenant_panel"> <text font="SansSerifLarge" name="estate_section_lbl"> 不動産: </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> 名前: </text> - <text length="1" name="estate_name_text" type="string"> + <text name="estate_name_text"> メインランド </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> オーナー: </text> - <text length="1" name="estate_owner_text" type="string"> + <text name="estate_owner_text"> (なし) </text> - <text_editor length="1" name="covenant_editor" type="string"> + <text_editor name="covenant_editor"> この不動産には約款がありません。 </text_editor> - <text length="1" name="covenant_timestamp_text" type="string"> + <text name="covenant_timestamp_text"> 最後の更新1969年12月31日水曜日16:00:00 </text> <text font="SansSerifLarge" name="region_section_lbl"> 地域: </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> 名前: </text> - <text length="1" name="region_name_text" type="string"> + <text name="region_name_text"> Leyla </text> <text name="region_landtype_lbl"> @@ -166,93 +166,93 @@ <text name="resellable_lbl"> 再販: </text> - <text length="1" name="resellable_clause" type="string"> + <text name="resellable_clause"> この地域(リージョン)にある土地は再販できません。 </text> <text name="changeable_lbl"> 再分割: </text> - <text length="1" name="changeable_clause" type="string"> + <text name="changeable_clause"> この地域(リージョン)にある土地は統合または分割ができ ません。 </text> - <string name="can_resell"> + <panel.string name="can_resell"> この地域で購入した土地は、再販できます。 - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> この地域で購入した土地は、再販できないことがあります。 - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> この地域で購入した土地は、統合または再分割できます。 - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> この地域で購入した土地は、統合/再分割できないことが あります。 - </string> + </panel.string> </panel> <panel label="オブジェクト" name="land_objects_panel"> <text name="parcel_object_bonus"> 地域オブジェクトボーナス要因: [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string" width="500"> + <text name="Simulator primitive usage:" width="500"> 地域全体のプリム使用状況: </text> <text left="200" name="objects_available"> [MAX]の内[COUNT]([AVAILABLE]利用可能) </text> - <string left="200" name="objects_available_text"> + <panel.string left="200" name="objects_available_text"> [MAX]の内[COUNT]([AVAILABLE]利用可能) - </string> - <string left="200" name="objects_deleted_text"> + </panel.string> + <panel.string left="200" name="objects_deleted_text"> [MAX]の内[COUNT]([DELETED]を削除) - </string> - <text length="1" name="Primitives parcel supports:" type="string" width="200"> + </panel.string> + <text name="Primitives parcel supports:" width="200"> 区画でサポートされるプリム数: </text> - <text left="200" length="1" name="object_contrib_text" type="string"> + <text left="200" name="object_contrib_text"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> 区画上のプリム数: </text> - <text left="200" length="1" name="total_objects_text" type="string"> + <text left="200" name="total_objects_text"> [COUNT] </text> - <text length="1" name="Owned by parcel owner:" type="string" width="300"> + <text name="Owned by parcel owner:" width="300"> 区画オーナーによる所有: </text> - <text left="200" length="1" name="owner_objects_text" type="string"> + <text left="200" name="owner_objects_text"> [COUNT] </text> <button label="表示" label_selected="表示" name="ShowOwner" right="-145"/> <button label="返却..." label_selected="返却..." name="ReturnOwner..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/> - <text length="1" name="Set to group:" type="string"> + <text name="Set to group:"> グループに設定: </text> - <text left="200" length="1" name="group_objects_text" type="string"> + <text left="200" name="group_objects_text"> [COUNT] </text> <button label="表示" label_selected="表示" name="ShowGroup" right="-145"/> <button label="返却..." label_selected="返却..." name="ReturnGroup..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/> - <text length="1" name="Owned by others:" type="string"> + <text name="Owned by others:"> 他人による所有: </text> - <text left="200" length="1" name="other_objects_text" type="string"> + <text left="200" name="other_objects_text"> [COUNT] </text> <button label="表示" label_selected="表示" name="ShowOther" right="-145"/> <button label="返却..." label_selected="返却..." name="ReturnOther..." right="-15" tool_tip="オブジェクトをオーナーに返却します"/> - <text length="1" name="Selected / sat upon:" type="string"> + <text name="Selected / sat upon:"> 選択済み/決定済み: </text> - <text left="200" length="1" name="selected_objects_text" type="string"> + <text left="200" name="selected_objects_text"> [COUNT] </text> - <text length="1" name="Autoreturn" type="string" width="500"> + <text name="Autoreturn" width="500"> 他の住人のオブジェクトの自動返却(分、0で自動返却なし) </text> <line_editor left_delta="5" name="clean other time" right="-80"/> - <text length="1" name="Object Owners:" type="string" width="150"> + <text name="Object Owners:" width="150"> オブジェクトのオーナー: </text> <button label="リスト更新" label_selected="リスト更新" left="146" name="Refresh List"/> @@ -266,168 +266,140 @@ </name_list> </panel> <panel label="オプション" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> 他の住人に以下を許可: </text> <check_box label="地形を編集" name="edit land check" tool_tip="チェックを入れると、他人があなたの土地の地形編集を行うことが可能となります。このオプションのチェックを外しておくことをおすすめします。外した状態であなたの土地の地形編集が可能です。"/> <check_box label="ランドマーク作成" name="check landmark"/> <check_box label="飛行" name="check fly" tool_tip="チェックを入れるとこの土地での飛行が可能となります。チェックを外すと土地に入る際と通り過ぎるときのみ飛行可能となります。"/> - <text left="138" length="1" name="allow_label2" type="string" width="144"> + <text left="138" name="allow_label2" width="144"> オブジェクトの作成: </text> <check_box label="すべての住人" left="280" name="edit objects check"/> <check_box label="グループ" left="380" name="edit group objects check"/> - <text left="138" length="1" name="allow_label3" type="string" width="144"> + <text left="138" name="allow_label3" width="144"> オブジェクトの進入: </text> <check_box label="すべての住人" left="280" name="all object entry check"/> <check_box label="グループ" left="380" name="group object entry check"/> - <text left="138" length="1" name="allow_label4" type="string" width="144"> + <text left="138" name="allow_label4" width="144"> スクリプトの実行: </text> <check_box label="すべての住人" left="280" name="check other scripts"/> <check_box label="グループ" left="380" name="check group scripts"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> 土地オプション: </text> <check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/> <check_box label="プッシングを制限" name="PushRestrictCheck" tool_tip="スクリプトによるプッシングを制限します。 このオプションを選択することにより、あなたの土地での破壊的行動を妨げることができます。"/> <check_box label="検索に表示>(週L$30)以下の場所" name="ShowDirectoryCheck" tool_tip="検索結果でこの区画を表示させる"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> この区画を検索結果に表示する - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> 区画面積が128平方メートルかそれ以下のため、このオプションは無効です。 大きな区画のみ検索に表示させることが可能です。 - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> あなたはこの区画の設定編集ができないため、このオプションは無効です。 - </string> + </panel.string> <combo_box name="land category with adult"> - <combo_item name="AnyCategory"> - 全カテゴリ - </combo_item> - <combo_item name="LindenLocation"> - Linden所在地 - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - アートとカルチャー - </combo_item> - <combo_item name="Business"> - ビジネス - </combo_item> - <combo_item name="Educational"> - 教育的 - </combo_item> - <combo_item name="Gaming"> - ゲーム - </combo_item> - <combo_item name="Hangout"> - たまり場 - </combo_item> - <combo_item name="NewcomerFriendly"> - 新住人に好意的 - </combo_item> - <combo_item name="Parks&Nature"> - 公園と自然 - </combo_item> - <combo_item name="Residential"> - 住宅用 - </combo_item> - <combo_item name="Shopping"> - ショッピング - </combo_item> - <combo_item name="Other"> - その他 - </combo_item> + <combo_box.item name="item0" label="全カテゴリ" + /> + <combo_box.item name="item1" label="Linden所在地" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="アートとカルチャー" + /> + <combo_box.item name="item4" label="ビジネス" + /> + <combo_box.item name="item5" label="教育的" + /> + <combo_box.item name="item6" label="ゲーム" + /> + <combo_box.item name="item7" label="たまり場" + /> + <combo_box.item name="item8" label="新住人に好意的" + /> + <combo_box.item name="item9" label="公園と自然" + /> + <combo_box.item name="item10" label="住宅用" + /> + <combo_box.item name="item11" label="ショッピング" + /> + <combo_box.item name="item12" label="その他" + /> </combo_box> <combo_box name="land category"> - <combo_item name="AnyCategory"> - 全カテゴリー - </combo_item> - <combo_item name="LindenLocation"> - Linden所在地 - </combo_item> - <combo_item name="Arts&Culture"> - アート&カルチャー - </combo_item> - <combo_item name="Business"> - ビジネス - </combo_item> - <combo_item name="Educational"> - 教育的 - </combo_item> - <combo_item name="Gaming"> - ゲーム - </combo_item> - <combo_item name="Hangout"> - たまり場 - </combo_item> - <combo_item name="NewcomerFriendly"> - 新住人に好意的 - </combo_item> - <combo_item name="Parks&Nature"> - 公園と自然 - </combo_item> - <combo_item name="Residential"> - 住宅用 - </combo_item> - <combo_item name="Shopping"> - ショッピング - </combo_item> - <combo_item name="Other"> - その他 - </combo_item> + <combo_box.item name="item0" label="全カテゴリー" + /> + <combo_box.item name="item1" label="Linden所在地" + /> + <combo_box.item name="item3" label="アート&カルチャー" + /> + <combo_box.item name="item4" label="ビジネス" + /> + <combo_box.item name="item5" label="教育的" + /> + <combo_box.item name="item6" label="ゲーム" + /> + <combo_box.item name="item7" label="たまり場" + /> + <combo_box.item name="item8" label="新住人に好意的" + /> + <combo_box.item name="item9" label="公園と自然" + /> + <combo_box.item name="item10" label="住宅用" + /> + <combo_box.item name="item11" label="ショッピング" + /> + <combo_box.item name="item12" label="その他" + /> </combo_box> <button label="?" label_selected="?" name="?"/> <check_box label="Matureコンテンツ" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Matureコンテンツ - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Adultコンテンツ - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> あなたの区画情報及びコンテンツはMatureとされています。 - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> あなたの区画情報及びコンテンツはAdultとされています。 - </string> - <text length="1" name="Snapshot:" type="string"> + </panel.string> + <text name="Snapshot:"> スナップショット: </text> <texture_picker label="" left="116" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/> <text name="landing_point"> 着地点: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (なし) - </string> + </panel.string> <button label="設定" label_selected="設定" name="Set" tool_tip="訪問者の着地点の設定を行います。この区画内に立って行ってください。"/> <button label="クリア" label_selected="クリア" name="Clear" tool_tip="着地点をクリアしてください。"/> - <text length="1" name="Teleport Routing: " type="string"> + <text name="Teleport Routing: "> テレポート制限: </text> <combo_box name="landing type" tool_tip="Teleport Routing -- select how to handle teleports onto your land."> - <combo_item length="1" name="Blocked" type="string"> - 不可 - </combo_item> - <combo_item length="1" name="LandingPoint" type="string"> - 着地点 - </combo_item> - <combo_item length="1" name="Anywhere" type="string"> - どこでも - </combo_item> + <combo_box.item name="Blocked" label="不可" + /> + <combo_box.item name="LandingPoint" label="着地点" + /> + <combo_box.item name="Anywhere" label="どこでも" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> プッシングを制限 - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> プッシングを制限 (地域優先) - </string> + </panel.string> </panel> <panel label="メディア" name="land_media_panel"> <text name="with media:"> @@ -442,7 +414,7 @@ 説明: </text> <line_editor name="url_description" tool_tip="[再生]/[ロード]ボタンの隣に表示されるテキスト"/> - <text length="1" name="Media texture:" type="string"> + <text name="Media texture:"> テクスチ ャ取替: </text> @@ -484,7 +456,7 @@ <check_box label="この区画でのボイス使用を制限する" name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="アクセス" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> この区画にアクセス </text> <check_box label="パブリック・アクセスを許可" name="public_access"/> @@ -493,18 +465,16 @@ </text> <check_box label="Linden Labに支払い情報を登録していない住人" name="limit_payment" tool_tip="支払い情報未確認の住人を排除する"/> <check_box label="年齢確認を済ませていない成人の住人" name="limit_age_verified" tool_tip="年齢確認を済ませていない住人を排除する詳細については、support.secondlife.comを参照してください。"/> - <string name="estate_override"> + <panel.string name="estate_override"> 1つ以上のオプションが、不動産レベルで設定されています。 - </string> + </panel.string> <check_box label="グループ・アクセスを許可:[GROUP]" name="GroupCheck" tool_tip="[一般]タブで、グループを選択してください。"/> <check_box label="入場許可を販売:" name="PassCheck" tool_tip="この区画への一時的なアクセスを許可"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - 誰でも - </combo_item> - <combo_item name="Group"> - グループ - </combo_item> + <combo_box.item name="Anyone" label="誰でも" + /> + <combo_box.item name="Group" label="グループ" + /> </combo_box> <spinner label="価格(L$):" name="PriceSpin"/> <spinner label="アクセス時間:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/ja/floater_customize.xml b/indra/newview/skins/default/xui/ja/floater_customize.xml index 27fa434963..d51fb74807 100644 --- a/indra/newview/skins/default/xui/ja/floater_customize.xml +++ b/indra/newview/skins/default/xui/ja/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="容姿"> <tab_container name="customize tab container"> - <panel label="身体部位" name="body_parts_placeholder"/> + <placeholder label="身体部位" name="body_parts_placeholder"/> <panel label="シェイプ" name="Shape"> <button label="戻す" label_selected="戻す" name="Revert"/> <button label="身体" label_selected="身体" name="Body"/> @@ -14,33 +14,29 @@ <button label="胴体" label_selected="胴体" name="Torso"/> <button label="両脚" label_selected="両脚" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string"> - 女性 - </radio_item> - <radio_item length="1" name="radio2" type="string"> - 男性 - </radio_item> + <radio_item name="radio" label="女性"/> + <radio_item name="radio2" label="男性"/> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいシェイプ(体型)を持ち物からアバターにドラッグして装着しま しょう。完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -55,26 +51,26 @@ <button label="顔の細部" label_selected="顔の細部" name="Face Detail"/> <button label="メイクアップ" label_selected="メイクアップ" name="Makeup"/> <button label="身体細部" label_selected="身体細部" name="Body Detail"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいスキンを持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -93,26 +89,26 @@ <button label="スタイル" label_selected="スタイル" name="Style"/> <button label="眉毛" label_selected="眉毛" name="Eyebrows"/> <button label="顔" label_selected="顔" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい髪型を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -125,26 +121,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="眼" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい眼を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -165,26 +161,26 @@ <button label="保存" label_selected="保存" name="Save"/> <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> <button label="戻す" label_selected="戻す" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいシャツを持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -199,26 +195,26 @@ <button label="保存" label_selected="保存" name="Save"/> <button label="別名で保存..." label_selected="別名で保存..." name="Save As"/> <button label="戻す" label_selected="戻す" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいズボンを持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -226,26 +222,26 @@ </text> </panel> <panel label="靴" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい靴を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -260,26 +256,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="靴下" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい靴下を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -294,26 +290,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="上着" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい上着を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -329,26 +325,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="手袋" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい手袋を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -363,26 +359,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="下着シャツ" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しい下着を持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -397,26 +393,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="下着パンツ" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいパンツを持ち物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> @@ -431,26 +427,26 @@ <button label="戻す" label_selected="戻す" name="Revert"/> </panel> <panel label="スカート" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: 修正できません。 </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ロード中... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: 未装着。 </text> - <text length="1" name="path" type="string"> + <text name="path"> [PATH] に所在 </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> 新しいスカートを持物からアバターにドラッグして装着しましょう。 完全に新規の状態から作成して装着することもできます。 </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> あなたはこの服の修正を許されていません。 </text> <text name="Item Action Label"> diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml index 92475aacf4..d4037487b7 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="なし" label_selected="なし" name="None" /> <check_box label="常にフォルダを表示" name="check_show_empty" /> <check_box label="ログオフ以降" name="check_since_logoff" /> - <text type="string" length="1" name="- OR -"> + <text name="- OR -"> -または- </text> <spinner label="経過時間" name="spin_hours_ago" /> diff --git a/indra/newview/skins/default/xui/ja/floater_joystick.xml b/indra/newview/skins/default/xui/ja/floater_joystick.xml index 5029a781f6..177567c806 100644 --- a/indra/newview/skins/default/xui/ja/floater_joystick.xml +++ b/indra/newview/skins/default/xui/ja/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="ジョイスティックの設定"> - <check_box name="enable_joystick" width="120"> - ジョイスティックを使う: - </check_box> + <check_box name="enable_joystick" width="120" label="ジョイスティックを使う:"/> <text left="180" name="joystick_type" width="320"/> <spinner label="X軸マッピング" name="JoystickAxis1"/> <spinner label="Y軸マッピング" name="JoystickAxis2"/> @@ -17,15 +15,9 @@ <text name="Control Modes:"> 制御モード: </text> - <check_box left="131" name="JoystickAvatarEnabled"> - アバター - </check_box> - <check_box left="201" name="JoystickBuildEnabled"> - 造る - </check_box> - <check_box left="271" name="JoystickFlycamEnabled"> - フライ・カメラ - </check_box> + <check_box left="131" name="JoystickAvatarEnabled" label="アバター"/> + <check_box left="201" name="JoystickBuildEnabled" label="造る"/> + <check_box left="271" name="JoystickFlycamEnabled" label="フライ・カメラ"/> <text left="5" name="XScale" width="120"> Xスケール </text> @@ -113,12 +105,14 @@ <button label="SpaceNavigatorのデフォルト設定" left="330" name="SpaceNavigatorDefaults" width="210"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="取り消し" label_selected="取り消し" name="cancel_btn"/> - <string name="JoystickMonitor"> - ジョイスティック・モニター - </string> - <string name="Axis"> - 軸 [NUM] - </string> + <stat_view label="ジョイスティック・モニター" name="axis_view"> + <stat_bar label="軸 0" name="axis0"/> + <stat_bar label="軸 1" name="axis1"/> + <stat_bar label="軸 2" name="axis2"/> + <stat_bar label="軸 3" name="axis3"/> + <stat_bar label="軸 4" name="axis4"/> + <stat_bar label="軸 5" name="axis5"/> + </stat_view> <string name="NoDevice"> デバイスは検出されませんでした </string> diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml new file mode 100644 index 0000000000..3884333c91 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ 北
+ </floater.string>
+ <floater.string name="mini_map_east">
+ 東
+ </floater.string>
+ <floater.string name="mini_map_west">
+ 西
+ </floater.string>
+ <floater.string name="mini_map_south">
+ 南
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ 南東
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ 北東
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ 南西
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ 北西
+ </floater.string>
+ <text label="北" name="floater_map_north" text="北">
+ 北
+ </text>
+ <text label="東" name="floater_map_east" text="東">
+ 東
+ </text>
+ <text label="西" name="floater_map_west" text="西">
+ 西
+ </text>
+ <text label="南" name="floater_map_south" text="南">
+ 南
+ </text>
+ <text label="南東" name="floater_map_southeast" text="南東">
+ 南東
+ </text>
+ <text label="北東" name="floater_map_northeast" text="北東">
+ 北東
+ </text>
+ <text label="南西" name="floater_map_southwest" text="南西">
+ 南西
+ </text>
+ <text label="北西" name="floater_map_northwest" text="北西">
+ 北西
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml index c40a1d93f4..df6ae7bb61 100644 --- a/indra/newview/skins/default/xui/ja/floater_moveview.xml +++ b/indra/newview/skins/default/xui/ja/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="左に曲がる" /> <button label="" label_selected="" name="turn right btn" tool_tip="右に曲がる" /> <button label="" label_selected="" name="move up btn" @@ -12,4 +13,5 @@ <joystick_slide name="slide right btn" tool_tip="右に移動" /> <joystick_turn name="forward btn" tool_tip="前に移動" /> <joystick_turn name="backward btn" tool_tip="後ろに移動" /> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_openobject.xml b/indra/newview/skins/default/xui/ja/floater_openobject.xml index 3abda50f18..485528e985 100644 --- a/indra/newview/skins/default/xui/ja/floater_openobject.xml +++ b/indra/newview/skins/default/xui/ja/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="オブジェクト・コンテンツ"> - <text type="string" length="1" name="object_name"> + <text name="object_name"> [DESC]: </text> <button label="持ち物にコピー" label_selected="持ち物にコピー" diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml index 114cb90bf2..8702ab1e74 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay.xml @@ -6,16 +6,16 @@ <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="支払い" label_selected="支払い" name="pay btn" /> <button label="取り消し" label_selected="取り消し" name="cancel btn" /> - <text type="string" length="1" name="payee_label"> + <text name="payee_label"> 支払い先: </text> - <text type="string" length="1" name="payee_name"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text type="string" length="1" name="fastpay text"> + <text name="fastpay text"> 一括払い: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> 金額: </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml index 6ad9c7c2b8..5f280ca5fa 100644 --- a/indra/newview/skins/default/xui/ja/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/ja/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <text type="string" length="1" name="payee_group"> + <text name="payee_group"> グループへの支払い: </text> - <text type="string" length="1" name="payee_resident"> + <text name="payee_resident"> 住人への支払い: </text> - <text type="string" length="1" name="payee_name"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text type="string" length="1" name="object_name_label"> + <text name="object_name_label"> オブジェクトを介して: </text> - <text type="string" length="1" name="object_name_text"> + <text name="object_name_text"> ... </text> - <text type="string" length="1" name="fastpay text"> + <text name="fastpay text"> 一括払い: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> 金額: </text> <button label="L$1" label_selected="L$1" name="fastpay 1" /> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml index dfb90f2c20..653674129c 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_anim"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> 説明: </text> <button label="世界で再生" label_selected="停止" name="Anim play btn" diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml index 2fb42d1fae..e7dd4d2c09 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview notecard" title="メモ:"> <button label="保存" label_selected="保存" name="Save" /> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> 説明: </text> - <text_editor type="string" length="1" name="Notecard Editor"> + <text_editor name="Notecard Editor"> ローディング... </text_editor> <text name="no_object"> diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml index d455d4cea9..244ef13d13 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_sound"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> 説明: </text> <button label="世界で再生" label_selected="世界で再生" name="Sound play btn" diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml index affcc51b0b..ffd9e3bfbe 100644 --- a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> 説明: </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> 寸法:[HEIGHT]x[WIDTH] </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml index b523023e6e..6eae7613b3 100644 --- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml @@ -37,123 +37,84 @@ Hendrerit Vulputate </text> <combo_box name="category_combo" tool_tip="カテゴリー -- この報告に最も適したカテゴリーを選択してください"> - <combo_item name="Select_category"> - カテゴリーを選択 - </combo_item> - <combo_item name="Age__Age_play"> - 年齢>年齢偽証 - </combo_item> - <combo_item name="Age__Adult_resident_on_Teen_Second_Life"> - 年齢>成人の住人がTeen Second Life上にいる - </combo_item> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - 年齢>未成年な住人がTeen Second Lifeの外にいる - </combo_item> - <combo_item name="Assault__Combat_sandbox___unsafe_area"> - 攻撃>コンバット・サンドボックス/危険なエリア - </combo_item> - <combo_item name="Assault__Safe_area"> - 攻撃>安全なエリア - </combo_item> - <combo_item name="Assault__Weapons_testing_sandbox"> - 攻撃>武器テスト用サンドボックス - </combo_item> - <combo_item name="Commerce__Failure_to_deliver_product_or_service"> - 商取引>製品またはサービスの提供が行われない - </combo_item> - <combo_item name="Disclosure__Real_world_information"> - 開示>リアルワールドの情報 - </combo_item> - <combo_item name="Disclosure__Remotely_monitoring chat"> - 開示>離れたところからチャットをモニターしている - </combo_item> - <combo_item name="Disclosure__Second_Life_information_chat_IMs"> - 開示>Second Lifeの情報/チャット/IM - </combo_item> - <combo_item name="Disturbing_the_peace__Unfair_use_of_region_resources"> - 平穏を乱す行為>地域リソースの使用が不公平 - </combo_item> - <combo_item name="Disturbing_the_peace__Excessive_scripted_objects"> - 平穏を乱す行為>スクリプト・オブジェクトの乱用 - </combo_item> - <combo_item name="Disturbing_the_peace__Object_littering"> - 平穏を乱す行為>オブジェクトの捨て置き - </combo_item> - <combo_item name="Disturbing_the_peace__Repetitive_spam"> - 平穏を乱す行為>繰り返しスパム - </combo_item> - <combo_item name="Disturbing_the_peace__Unwanted_advert_spam"> - 平穏を乱す行為>不要な広告スパム - </combo_item> - <combo_item name="Fraud__L$"> - 詐欺> L$ - </combo_item> - <combo_item name="Fraud__Land"> - 詐欺>土地 - </combo_item> - <combo_item name="Fraud__Pyramid_scheme_or_chain_letter"> - 詐欺>マルチ商法またはチェーン・メール - </combo_item> - <combo_item name="Fraud__US$"> - 詐欺> US$ - </combo_item> - <combo_item name="Harassment__Advert_farms___visual_spam"> - 嫌がらせ>広告委託/視覚的なスパム - </combo_item> - <combo_item name="Harassment__Defaming_individuals_or_groups"> - 嫌がらせ>個人またはグループの中傷 - </combo_item> - <combo_item name="Harassment__Impeding_movement"> - 嫌がらせ>移動の妨害 - </combo_item> - <combo_item name="Harassment__Sexual_harassment"> - 嫌がらせ>性的な嫌がらせ - </combo_item> - <combo_item name="Harassment__Solicting_inciting_others_to_violate_ToS"> - 嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動 - </combo_item> - <combo_item name="Harassment__Verbal_abuse"> - 嫌がらせ>暴言 - </combo_item> - <combo_item name="Indecency__Broadly_offensive_content_or_conduct"> - わいせつ>著しく不快であると見なされるコンテンツまたは行為 - </combo_item> - <combo_item name="Indecency__Inappropriate_avatar_name"> - わいせつ>不適切なアバター名 - </combo_item> - <combo_item name="Indecency__Mature_content_in_PG_region"> - わいせつ>PG地域での不適切なコンテンツまたは行為 - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - わいせつ>Mature地域での不適切なコンテンツまたは行為 - </combo_item> - <combo_item name="Intellectual_property_infringement_Content_Removal"> - 知的財産の侵害>コンテンツの撤去 - </combo_item> - <combo_item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit"> - 知的財産の侵害>コピーBot及び権限の悪用 - </combo_item> - <combo_item name="Intolerance"> - 不寛容 - </combo_item> - <combo_item name="Land__Abuse_of_sandbox_resources"> - 土地>サンドボックス・リソースの乱用 - </combo_item> - <combo_item name="Land__Encroachment__Objects_textures"> - 土地>不法侵入>オブジェクト/テクスチャー - </combo_item> - <combo_item name="Land__Encroachment__Particles"> - 土地>不法侵入>パーティクル - </combo_item> - <combo_item name="Land__Encroachment__Trees_plants"> - 土地>不法侵入>樹木/植物 - </combo_item> - <combo_item name="Wagering_gambling"> - 賭け/ギャンブル - </combo_item> - <combo_item name="Other"> - その他 - </combo_item> + <combo_box.item name="Select_category" label="カテゴリーを選択" + /> + <combo_box.item name="Age__Age_play" label="年齢>年齢偽証" + /> + <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="年齢>成人の住人がTeen Second Life上にいる" + /> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="年齢>未成年な住人がTeen Second Lifeの外にいる" + /> + <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="攻撃>コンバット・サンドボックス/危険なエリア" + /> + <combo_box.item name="Assault__Safe_area" label="攻撃>安全なエリア" + /> + <combo_box.item name="Assault__Weapons_testing_sandbox" label="攻撃>武器テスト用サンドボックス" + /> + <combo_box.item name="Commerce__Failure_to_deliver_product_or_service" label="商取引>製品またはサービスの提供が行われない" + /> + <combo_box.item name="Disclosure__Real_world_information" label="開示>リアルワールドの情報" + /> + <combo_box.item name="Disclosure__Remotely_monitoring chat" label="開示>離れたところからチャットをモニターしている" + /> + <combo_box.item name="Disclosure__Second_Life_information_chat_IMs" label="開示>Second Lifeの情報/チャット/IM" + /> + <combo_box.item name="Disturbing_the_peace__Unfair_use_of_region_resources" label="平穏を乱す行為>地域リソースの使用が不公平" + /> + <combo_box.item name="Disturbing_the_peace__Excessive_scripted_objects" label="平穏を乱す行為>スクリプト・オブジェクトの乱用" + /> + <combo_box.item name="Disturbing_the_peace__Object_littering" label="平穏を乱す行為>オブジェクトの捨て置き" + /> + <combo_box.item name="Disturbing_the_peace__Repetitive_spam" label="平穏を乱す行為>繰り返しスパム" + /> + <combo_box.item name="Disturbing_the_peace__Unwanted_advert_spam" label="平穏を乱す行為>不要な広告スパム" + /> + <combo_box.item name="Fraud__L$" label="詐欺> L$" + /> + <combo_box.item name="Fraud__Land" label="詐欺>土地" + /> + <combo_box.item name="Fraud__Pyramid_scheme_or_chain_letter" label="詐欺>マルチ商法またはチェーン・メール" + /> + <combo_box.item name="Fraud__US$" label="詐欺> US$" + /> + <combo_box.item name="Harassment__Advert_farms___visual_spam" label="嫌がらせ>広告委託/視覚的なスパム" + /> + <combo_box.item name="Harassment__Defaming_individuals_or_groups" label="嫌がらせ>個人またはグループの中傷" + /> + <combo_box.item name="Harassment__Impeding_movement" label="嫌がらせ>移動の妨害" + /> + <combo_box.item name="Harassment__Sexual_harassment" label="嫌がらせ>性的な嫌がらせ" + /> + <combo_box.item name="Harassment__Solicting_inciting_others_to_violate_ToS" label="嫌がらせ>利用規約(ToS)に違反する行為を行うよう他者を勧誘/扇動" + /> + <combo_box.item name="Harassment__Verbal_abuse" label="嫌がらせ>暴言" + /> + <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="わいせつ>著しく不快であると見なされるコンテンツまたは行為" + /> + <combo_box.item name="Indecency__Inappropriate_avatar_name" label="わいせつ>不適切なアバター名" + /> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="わいせつ>PG地域での不適切なコンテンツまたは行為" + /> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="わいせつ>Mature地域での不適切なコンテンツまたは行為" + /> + <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="知的財産の侵害>コンテンツの撤去" + /> + <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="知的財産の侵害>コピーBot及び権限の悪用" + /> + <combo_box.item name="Intolerance" label="不寛容" + /> + <combo_box.item name="Land__Abuse_of_sandbox_resources" label="土地>サンドボックス・リソースの乱用" + /> + <combo_box.item name="Land__Encroachment__Objects_textures" label="土地>不法侵入>オブジェクト/テクスチャー" + /> + <combo_box.item name="Land__Encroachment__Particles" label="土地>不法侵入>パーティクル" + /> + <combo_box.item name="Land__Encroachment__Trees_plants" label="土地>不法侵入>樹木/植物" + /> + <combo_box.item name="Wagering_gambling" label="賭け/ギャンブル" + /> + <combo_box.item name="Other" label="その他" + /> </combo_box> <text name="abuser_name_title"> 迷惑ユーザーの名前: diff --git a/indra/newview/skins/default/xui/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml index 4cf485155a..ef729e0f6f 100644 --- a/indra/newview/skins/default/xui/ja/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="スクリプト:回転スクリプト"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> 説明: </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_script_search.xml b/indra/newview/skins/default/xui/ja/floater_script_search.xml index 2accc0f1e4..90f4393bf7 100644 --- a/indra/newview/skins/default/xui/ja/floater_script_search.xml +++ b/indra/newview/skins/default/xui/ja/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="検索" label_selected="検索" name="search_btn" /> <button label="置換" label_selected="置換" name="replace_btn" /> <button label="すべて置換" label_selected="すべて置換" name="replace_all_btn" /> - <text type="string" length="1" name="txt"> + <text name="txt"> 検索 </text> - <text type="string" length="1" name="txt2"> + <text name="txt2"> 置換 </text> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml index 98db0e358e..fb9f7be7a9 100644 --- a/indra/newview/skins/default/xui/ja/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/ja/floater_snapshot.xml @@ -15,12 +15,8 @@ <button label="送信" name="send_btn"/> <button label="保存(L$[AMOUNT])" name="upload_btn"/> <flyout_button label="保存" name="save_btn" tool_tip="画像をファイルに保存"> - <flyout_button.item name="save_item"> - 保存 - </flyout_button.item> - <flyout_button.item name="saveas_item"> - 名前を付けて保存 - </flyout_button.item> + <flyout_button.item name="save_item" label="保存"/> + <flyout_button.item name="saveas_item" label="名前を付けて保存"/> </flyout_button> <button label="キャンセル" name="discard_btn"/> <button label="全表示 >>" name="more_btn" tool_tip="高度なオプション"/> diff --git a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml index 79af253bdc..5102116069 100644 --- a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> クリックして写真を選択 </string> - <text type="string" length="1" name="Multiple"> + <text name="Multiple"> 複数 </text> - <text type="string" length="1" name="unknown"> + <text name="unknown"> 寸法: [DIMENSIONS] </text> <button label="デフォルト" label_selected="デフォルト" name="Default" /> diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml index 477ba2bdcb..36aec17f9a 100644 --- a/indra/newview/skins/default/xui/ja/floater_tools.xml +++ b/indra/newview/skins/default/xui/ja/floater_tools.xml @@ -5,16 +5,22 @@ <button label="" label_selected="" name="button edit" tool_tip="編集"/> <button label="" label_selected="" name="button create" tool_tip="作成"/> <button label="" label_selected="" name="button land" tool_tip="土地"/> - <check_box label="ズーム" name="radio zoom"/> - <check_box label="軌跡(Ctrl)" name="radio orbit"/> - <check_box label="パン(Ctrl+Shift)" name="radio pan"/> - <check_box label="移動" name="radio move"/> - <check_box label="持ち上げる(Ctrl)" name="radio lift"/> - <check_box label="スピン(Ctrl+Shift)" name="radio spin"/> - <check_box label="位置" name="radio position"/> - <check_box label="回転(Ctrl)" name="radio rotate"/> - <check_box label="引伸ばす(Ctrl+Shift)" name="radio stretch"/> - <check_box label="テクスチャーを選択" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="ズーム" name="radio zoom"/> + <radio_item label="軌跡(Ctrl)" name="radio orbit"/> + <radio_item label="パン(Ctrl+Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="移動" name="radio move"/> + <radio_item label="持ち上げる(Ctrl)" name="radio lift"/> + <radio_item label="スピン(Ctrl+Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="位置" name="radio position"/> + <radio_item label="回転(Ctrl)" name="radio rotate"/> + <radio_item label="引伸ばす(Ctrl+Shift)" name="radio stretch"/> + <radio_item label="テクスチャーを選択" name="radio select face"/> + </radio_group> <check_box label="リンク部位を編集" name="checkbox edit linked parts"/> <text name="text ruler mode" width="88"> ルーラー: @@ -50,13 +56,15 @@ <check_box label="選択したものをコピー" name="checkbox copy selection"/> <check_box label="中央に位置" name="checkbox copy centers"/> <check_box label="回転" name="checkbox copy rotates"/> - <check_box label="土地を選択" name="radio select land"/> - <check_box label="ならす" name="radio flatten"/> - <check_box label="隆起" name="radio raise"/> - <check_box label="低くする" name="radio lower"/> - <check_box label="滑らかにする" name="radio smooth"/> - <check_box label="凸凹にする" name="radio noise"/> - <check_box label="元に戻す" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="土地を選択" name="radio select land"/> + <radio_item label="ならす" name="radio flatten"/> + <radio_item label="隆起" name="radio raise"/> + <radio_item label="低くする" name="radio lower"/> + <radio_item label="滑らかにする" name="radio smooth"/> + <radio_item label="凸凹にする" name="radio noise"/> + <radio_item label="元に戻す" name="radio revert"/> + </radio_group> <button label="適用" label_selected="適用" name="button apply to selection" tool_tip="選択した土地を修正"/> <text name="Bulldozer:"> ブルドーザー: @@ -68,7 +76,7 @@ 強度 </text> <text name="obj_count"> - 選択オブジェクト:[COUNT] + 選択済オブジェクト:[COUNT] </text> <text name="prim_count"> プリム:[COUNT] @@ -105,9 +113,7 @@ <text name="Permissions:"> 権限 </text> - <text name="perm_modify"> - このオブジェクトは修正できます。 - </text> + <check_box label="グループで共同管理" name="checkbox share with group" tool_tip="設定したグループに属するすべてのメンバーとこのオブジェクトの権限を共有します。 役割制限を有効にするには、譲渡する必要があります。"/> <string name="text deed continued"> 譲渡... @@ -123,22 +129,17 @@ <text name="Cost"> 価格: L$ </text> - <radio_group left="30" name="sale type"> - <radio_item name="Original" label="オリジナル" /> - <radio_item left="82" name="Copy" label="コピー" /> - <radio_item left="148" name="Contents" label="コンテンツ" /> - </radio_group> - <text name="Next owner can:"> - 次のオーナーが実行できる操作: - </text> - <check_box label="修正" name="checkbox next owner can modify"/> - <check_box label="コピー" name="checkbox next owner can copy"/> - <check_box label="再販/プレゼント" name="checkbox next owner can transfer"/> + <combo_box name="sale type"> + <combo_box.item label="コピー" name="Copy"/> + <combo_box.item label="コンテンツ" name="Contents"/> + <combo_box.item label="オリジナル" name="Original"/> + </combo_box> + <text name="label click action"> 左クリックすると: </text> <combo_box name="clickaction"> - <combo_box.item name="Touch/grab(default)" label="触る/つかむ (デフォルト)"/> + <combo_box.item name="Touch/grab(default)" label="触る/つかむ (デフォルト)"/> <combo_box.item name="Sitonobject" label="オブジェクトに座る"/> <combo_box.item name="Buyobject" label="オブジェクトを購入"/> <combo_box.item name="Payobject" label="オブジェクトへの支払い"/> @@ -146,11 +147,15 @@ <combo_box.item name="Play" label="区画メディアを再生"/> <combo_box.item name="Opemmedia" label="区画メディアを開く"/> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + このオブジェクトは修正できます。 + </text> <text name="B:"> B: </text> <text name="O:"> - O; + O: </text> <text name="G:"> G: @@ -164,6 +169,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + 次のオーナーが実行できる操作: + </text> + <check_box label="修正" name="checkbox next owner can modify"/> + <check_box label="コピー" name="checkbox next owner can copy"/> + <check_box name="checkbox next owner can transfer"/> + </panel> <string name="text modify info 1"> このオブジェクトは修正できます。 </string> @@ -255,7 +267,7 @@ <spinner label="B" name="cut begin"/> <spinner label="E" name="cut end"/> <text name="text hollow"> - 中空(空洞) + 中空(空洞) </text> <text name="text skew"> 傾斜 @@ -316,7 +328,7 @@ 縫い目のタイプ </text> <combo_box name="sculpt type control"> - <combo_box.item name="None" label="なし)"/> + <combo_box.item name="None" label="(なし)"/> <combo_box.item name="Sphere" label="球形"/> <combo_box.item name="Torus" label="トーラス"/> <combo_box.item name="Plane" label="平面"/> @@ -402,7 +414,7 @@ </text> <spinner label="水平(U)" name="TexScaleU"/> <check_box label="反転" name="checkbox flip s"/> - <spinner label="垂直 (V)" name="TexScaleV"/> + <spinner label="垂直(V)" name="TexScaleV"/> <check_box label="反転" name="checkbox flip t"/> <text name="tex rotate"> 回転(度) @@ -421,7 +433,7 @@ ずれ </text> <spinner label="水平(U)" name="TexOffsetU"/> - <spinner label="垂直 (V)" name="TexOffsetV"/> + <spinner label="垂直(V)" name="TexOffsetV"/> <text name="textbox autofix" width="190"> メディア・テクスチャーを揃える (最初にロードすること) @@ -457,43 +469,43 @@ <button label="土地を購入..." label_selected="土地を購入..." name="button buy land"/> <button label="土地を放棄..." label_selected="土地を放棄..." name="button abandon land"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> 色の付いたバンドをドラッグしてオブジェクトを回転 - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> 選択した側をクリックし、ドラッグして引き伸ばす - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> 移動:ドラッグ、コピー:Shiftを押しながらドラッグ - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> 土地をクリックし、ボタンを押したまま入力して修正変更 - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> クリックしドラッグして視界を調整 - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> 移動:ドラッグ、持ち上げ:Ctrl、回転:Ctrl+Shift - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> インワールドでクリックして作成 - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> 土地をクリックし、ドラッグして選択 - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> 画面 - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> ローカル - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> 世界 - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> 参照 - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> アタッチメント - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml index 693446b21a..fc9ddf5096 100644 --- a/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/ja/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=" "> <button label="保存" label_selected="保存" name="Save" /> <button label="取り消し" label_selected="取り消し" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> アイテムを別名で保存: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml index f7fe65bb72..6a34e49d84 100644 --- a/indra/newview/skins/default/xui/ja/floater_world_map.xml +++ b/indra/newview/skins/default/xui/ja/floater_world_map.xml @@ -29,10 +29,10 @@ <check_box label="Mature" name="event_mature_chk"/> <check_box label="Adult" name="event_adult_chk"/> <combo_box label="オンラインのフレンド" name="friend combo" tool_tip="地図に表示されたフレンド"> - <combo_box.item name="none_selected" label="オンラインのフレンド" /> + <combo_box.item name="item1" label="オンラインのフレンド" /> </combo_box> <combo_box label="ランドマーク" name="landmark combo" tool_tip="地図に表示されたランドマーク"> - <combo_box.item name="none_selected" label="ランドマーク" /> + <combo_box.item name="item1" label="ランドマーク" /> </combo_box> <line_editor label="地域名で検索" name="location" tool_tip="地域名を入力してください。"/> <button label="検索" name="DoSearch" tool_tip="地域検索"/> diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index b6d09f893b..f9d91c31fa 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1030,7 +1030,7 @@ L$は返金されません。 [NAME] にフレンドシップのオファーをしますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> フレンドとして登録してくれますか? </input> <button name="Offer" text="OK"/> @@ -1459,7 +1459,7 @@ F1キーを押してください。 <notification name="KickUser"> どんなメッセージを表示して、このユーザーを追い出しますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> あなたは管理者によりログオフされました。 </input> <button name="OK" text="OK"/> @@ -1469,7 +1469,7 @@ F1キーを押してください。 <notification name="KickAllUsers"> どんなメッセージを表示して、グリッドにいる全員を追い出しますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> あなたは管理者によりログオフされました。 </input> <button name="OK" text="OK"/> @@ -1479,7 +1479,7 @@ F1キーを押してください。 <notification name="FreezeUser"> どんなメッセージを表示して、このユーザーをフリーズしますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> あなたはフリーズされています。 動くこともチャットすることもできません。 管理者がIMを通じてあなたに連絡します。 </input> <button name="OK" text="OK"/> @@ -1489,7 +1489,7 @@ F1キーを押してください。 <notification name="UnFreezeUser"> どんなメッセージを表示して、このユーザーのフリーズを解除しますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> もうフリーズされていません。 </input> <button name="OK" text="OK"/> @@ -1499,7 +1499,7 @@ F1キーを押してください。 <notification name="OfferTeleport"> 次のメッセージを添えてあなたが今いる場所へのテレポートを送りますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> [REGION]に来ませんか? </input> <button name="OK" text="OK"/> @@ -1509,7 +1509,7 @@ F1キーを押してください。 <notification name="OfferTeleportFromGod"> ユーザーをゴッド・コールで呼び寄せますか? <form name="form"> - <input name="message" type="text"> + <input name="message"> [REGION]に来ませんか? </input> <button name="OK" text="OK"/> @@ -1524,7 +1524,7 @@ F1キーを押してください。 今あなたの不動産にいる人全員に送る 短いメッセージを入力してください。 <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="取り消し"/> </form> @@ -1719,7 +1719,7 @@ L$[AMOUNT]で、このクラシファイド広告を今すぐ公開しますか この地域にいる人全員に送る 短いメッセージを入力してください。 <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="取り消し"/> </form> @@ -2094,14 +2094,14 @@ RGB、256x256で、チャンネル数が13 この購入を続行しますか? <usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> この取引は以下のとおり行われます: [ACTION] この購入を続行しますか? パスワードを再入力し、「OK」をクリックしてください。 <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="取り消し"/> </form> @@ -2527,7 +2527,7 @@ Linden Lab <notification name="NewSkyPreset"> 新しい空の名前を指定してください。 <form name="form"> - <input name="message" type="text"> + <input name="message"> 新しい事前設定 </input> <button name="OK" text="OK"/> @@ -2540,7 +2540,7 @@ Linden Lab <notification name="NewWaterPreset"> 新しい水の事前設定の名前を指定してください。 <form name="form"> - <input name="message" type="text"> + <input name="message"> 新しい事前設定 </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml index ea2953038e..266937e216 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_general.xml @@ -37,9 +37,9 @@ (オーナーは太字で表示されています) </text> <name_list name="visible_members"> - <column label="メンバー名" name="name"/> - <column label="タイトル" name="title"/> - <column label="最終ログイン" name="online"/> + <name_list.columns label="メンバー名" name="name"/> + <name_list.columns label="タイトル" name="title"/> + <name_list.columns label="最終ログイン" name="online"/> </name_list> <text name="text_group_preferences"> グループ環境設定 @@ -50,15 +50,9 @@ <check_box label="入会費:L$" name="check_enrollment_fee" tool_tip="このグループへの参加に入会費を必須とするかどうかを指定します"/> <spinner name="spin_enrollment_fee" tool_tip="「入会費」がチェックされている場合、新規会員は入会時にここに指定された金額を支払う必要があります"/> <combo_box name="group_mature_check" tool_tip="グループ情報がMature向けかどうかの設定をします。"> - <combo_item name="select_mature"> - - Matureの選択 - - </combo_item> - <combo_item name="mature"> - Matureコンテンツ - </combo_item> - <combo_item name="pg"> - PGコンテンツ - </combo_item> + <combo_box.item name="select_mature" label="- Matureの選択 -"/> + <combo_box.item name="mature" label="Matureコンテンツ"/> + <combo_box.item name="pg" label="PGコンテンツ"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml index 090ae2e329..afca4c4dfd 100644 --- a/indra/newview/skins/default/xui/ja/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/ja/panel_group_notices.xml @@ -15,9 +15,7 @@ グループ通知アーカイブ </text> <text name="lbl2"> - 通知は14日間保存されます。閲覧したい通知をクリックしてください。 -新着の通知をチェックするには、「更新」ボタンをクリックします。 -ただし、各グループの通知リストは1日あたり200通に制限されます。 + 通知は14日間保存されます。ただし、各グループの通知リストは1日あたり200通に制限されます。 </text> <scroll_list name="notice_list"> <column label="" name="icon"/> @@ -35,10 +33,7 @@ 通知を作成 </text> <text name="lbl2"> - 件名を入力して通知を送ります。 -持ち物のアイテムを1つこのパネルにドラッグして、 -通知に添付することができます。 添付できるのはコピー、 -譲渡が可能なアイテムで、フォルダを送ることはできません。 + 持ち物のアイテムを1つこのパネルにドラッグして、通知に添付することができます。 添付できるのはコピー、譲渡が可能なアイテムで、フォルダを送ることはできません。 </text> <text name="lbl3"> 件名: diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index dc57b51b0d..0f270beb2c 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -17,7 +17,7 @@ <combo_box name="start_location_combo" left_delta="92" width="172"> <combo_box.item name="MyHome" label="自宅(ホーム)" /> <combo_box.item name="MyLastLocation" label="最後にログアウトした場所" /> - <combo_box.item name="Typeregionname" label="lt; 地域の名前入力 >" /> + <combo_box.item name="Typeregionname" label="< 地域の名前入力 >" /> </combo_box> <check_box label="パスワードを記憶" name="remember_check" left_delta="180"/> <text name="full_screen_text"> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml new file mode 100644 index 0000000000..4b6f1f061b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="(幅/高さ)">
+ 縦横比:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="(幅/高さ)">
+ <combo_box.item label="4:3(標準CRT)" name="item1"/>
+ <combo_box.item label="5:4(1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5(ワイドスクリ-ン)" name="item3"/>
+ <combo_box.item label="16:9(ワイドスクリ-ン)" name="item4"/>
+ </combo_box>
+</panel>
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 875755a8c7..3bf303eaa3 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -1,52 +1,57 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="チャット" name="chat"> - <text length="1" name="text_box" type="string"> + <text name="text_box"> チャットのフォント: </text> <radio_group name="chat_font_size"> - <radio_item length="1" name="radio" type="string" label="小" /> - <radio_item length="1" name="radio2" type="string" label="中" /> - <radio_item length="1" name="radio3" type="string" label="大" /> + <radio_item name="radio" label="小" /> + <radio_item name="radio2" label="中" /> + <radio_item name="radio3" label="大" /> </radio_group> - <text length="1" name="text_box2" type="string"> - チャット・カラー: + <color_swatch label="自分" name="user"/> + <text name="text_box1"> + 自分 + </text> + <color_swatch label="その他" name="agent"/> + <text name="text_box2"> + その他 </text> - <color_swatch label="自分" name="user" width="56"/> - <color_swatch label="その他" name="agent" left_delta="60"/> <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM + </text> <color_swatch label="システム" name="system"/> - <color_swatch label="チャット" name="users"/> - <color_swatch label="オブジェクト" name="objects" width="56"/> - <color_swatch label="所有者" name="owner" left_delta="60"/> + <text name="text_box4"> + システム + </text> + <color_swatch label="エラー" name="script_error"/> + <text name="text_box5"> + エラー + </text> + <color_swatch label="オブジェクト" name="objects"/> + <text name="text_box6"> + オブジェクト + </text> + <color_swatch label="所有者" name="owner"/> + <text name="text_box7"> + 所有者 + </text> <color_swatch label="吹出し" name="background"/> + <text name="text_box8"> + 吹出し + </text> <color_swatch label="URL" name="links"/> - <text length="1" name="text_box3" type="string"> - チャット・コンソール: + <text name="text_box9"> + URL </text> <spinner label="フェード" name="fade_chat_time"/> - <text length="1" name="text_box4" type="string"> - (秒後) - </text> - <text length="1" name="text_box5" type="string"> - (行数) - </text> <slider label="不透明度" name="console_opacity"/> - <text length="1" name="text_box6" type="string"> - チャット・オプション: - </text> <check_box label="全画面幅を使用 (再起動が必要)" name="chat_full_width_check"/> <check_box label="Enterキーを押した後チャット バーを閉じる" name="close_chat_on_return_check"/> <check_box label="チャット中は、いつでも矢印キーでアバターを移動可能" name="arrow_keys_move_avatar_check"/> <check_box label="ローカルチャットにタイムスタンプを表示" name="show_timestamps_check"/> <check_box label="チャット中はタイピング動作のアニメーションを再生" name="play_typing_animation"/> - <text length="1" name="text_box7" type="string"> - チャットの吹き出し: - </text> <check_box label="チャットの吹き出しを表示" name="bubble_text_chat"/> <slider label="不透明度" name="bubble_chat_opacity"/> - <text length="1" name="text_box8" type="string"> - スクリプト・エラー: - </text> <check_box label="スクリプト・エラーと警告をチャット同様に表示" name="script_errors_as_chat"/> - <color_swatch label="エラー" name="script_error"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml index 83b21b87d2..6c3ad93d4f 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="一般" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="常に自宅(ホーム)にログイン"> - 自宅(ホーム) - </radio_item> - <radio_item name="MyLastLocation" tool_tip="常に最後にいた場所にログイン"> - 最後にログアウトした場所 - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="常に自宅(ホーム)にログイン" label="自宅(ホーム)"/> + <combo_box.item name="MyLastLocation" tool_tip="常に最後にいた場所にログイン" label="最後にログアウトした場所"/> + </combo_box> <check_box label="ログイン画面にログイン位置を表示" name="show_location_checkbox"/> <combo_box name="fade_out_combobox"> - <combo_item name="Never"> - なし - </combo_item> - <combo_item name="Show Temporarily"> - 一時的に表示 - </combo_item> - <combo_item name="Always"> - いつも - </combo_item> + <combo_box.item name="Never" label="なし"/> + <combo_box.item name="Show Temporarily" label="一時的に表示"/> + <combo_box.item name="Always" label="いつも"/> </combo_box> <check_box label="小さなアバター名" name="small_avatar_names_checkbox"/> <check_box label="画面上で自分の名前を隠す" name="show_my_name_checkbox"/> @@ -41,106 +31,60 @@ アクセスしたいコンテンツ: </text> <combo_box name="maturity_desired_combobox"> - <combo_item name="Desired_Adult"> - PG、Mature、 Adult - </combo_item> - <combo_item name="Desired_Mature"> - PGとMature - </combo_item> - <combo_item name="Desired_PG"> - PG限定 - </combo_item> + <combo_box.item name="Desired_Adult" label="PG、Mature、Adult"/> + <combo_box.item name="Desired_Mature" label="PGとMature"/> + <combo_box.item name="Desired_PG" label="PG限定"/> </combo_box> <text name="maturity_desired_textbox"> PG限定 </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> ログイン位置: </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> 名前を表示: </text> - <text length="1" name="effects_color_textbox" type="string"> + <text name="effects_color_textbox"> 自分の効果の色: </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> 秒 </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> クラッシュ報告: </text> - <text length="1" name="language_textbox" type="string"> + <text name="language_textbox"> 言語: </text> - <text length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (再起動にて反映) </text> <string name="region_name_prompt"> <地域の名前入力> </string> <combo_box name="crash_behavior_combobox"> - <combo_item length="1" name="Askbeforesending" type="string"> - 送る前に確認する - </combo_item> - <combo_item length="1" name="Alwayssend" type="string"> - 常に送信 - </combo_item> - <combo_item length="1" name="Neversend" type="string"> - 送信しない - </combo_item> + <combo_box.item name="Askbeforesending" label="送る前に確認する"/> + <combo_box.item name="Alwayssend" label="常に送信"/> + <combo_box.item name="Neversend" label="送信しない"/> </combo_box> <combo_box name="language_combobox"> - <combo_item length="1" name="System Default Language" type="string"> - システム・デフォルト - </combo_item> - <combo_item length="1" name="English" type="string"> - English (英語) - </combo_item> - <combo_item length="1" name="Danish" type="string"> - Dansk (デンマーク語) – ベータ - </combo_item> - <combo_item length="1" name="Deutsch(German)" type="string"> - Deutsch (ドイツ語) – ベータ - </combo_item> - <combo_item length="1" name="Spanish" type="string"> - Español (スペイン語) – ベータ - </combo_item> - <combo_item length="1" name="French" type="string"> - Français (フランス語) – ベータ - </combo_item> - <combo_item name="Italian"> - Italiano (イタリア語) - ベータ - </combo_item> - <combo_item name="Hungarian"> - Magyar (ハンガリー語) - ベータ - </combo_item> - <combo_item name="Dutch"> - Nederlands (オランダ語) - ベータ - </combo_item> - <combo_item name="Polish"> - Polski (ポーランド語) - ベータ - </combo_item> - <combo_item length="1" name="Portugese" type="string"> - Português (ポルトガル語) – ベータ - </combo_item> - <combo_item name="Russian"> - Русский (ロシア語) - ベータ - </combo_item> - <combo_item name="Turkish"> - Türkçe (トルコ語) - ベータ - </combo_item> - <combo_item name="Ukrainian"> - Українська (ウクライナ語) - ベータ - </combo_item> - <combo_item length="1" name="Chinese" type="string"> - 中文 (简体) (中国語) - ベータ - </combo_item> - <combo_item length="1" name="(Japanese)" type="string"> - 日本語 – ベータ - </combo_item> - <combo_item length="1" name="(Korean)" type="string"> - 한국어 (韓国語) – ベータ - </combo_item> + <combo_box.item name="System Default Language" label="システム・デフォルト"/> + <combo_box.item name="English" label="English (英語)"/> + <combo_box.item name="Danish" label="Dansk (デンマーク語) – ベータ"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (ドイツ語) – ベータ"/> + <combo_box.item name="Spanish" label="Español (スペイン語) – ベータ"/> + <combo_box.item name="French" label="Français (フランス語) – ベータ"/> + <combo_box.item name="Italian" label="Italiano (イタリア語) - ベータ"/> + <combo_box.item name="Hungarian" label="Magyar (ハンガリー語) - ベータ"/> + <combo_box.item name="Dutch" label="Nederlands (オランダ語) - ベータ"/> + <combo_box.item name="Polish" label="Polski (ポーランド語) - ベータ"/> + <combo_box.item name="Portugese" label="Português (ポルトガル語) – ベータ"/> + <combo_box.item name="Russian" label="Русский (ロシア語) - ベータ"/> + <combo_box.item name="Turkish" label="Türkçe (トルコ語) - ベータ"/> + <combo_box.item name="Ukrainian" label="Українська (ウクライナ語) - ベータ"/> + <combo_box.item name="Chinese" label="中文 (简体) (中国語) - ベータ"/> + <combo_box.item name="(Japanese)" label="日本語 – ベータ"/> + <combo_box.item name="(Korean)" label="한국어 (韓国語) – ベータ"/> </combo_box> <check_box label="言語をオブジェクトと共有" name="language_is_public" tool_tip="優先言語をインワールドのオブジェクトが認識する"/> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml index b70f04645f..636c137b4b 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel label="表示" name="Display panel"> - <text type="string" length="1" name="text"> + <text name="text"> 表示解像度: </text> <button label="?" name="GraphicsPreferencesHelpButton" /> @@ -8,10 +8,10 @@ <text_editor name="voice_chat_description"> チェック無しの場合は、ログイン時にフルスクリーン表示 </text_editor> - <text type="string" length="1" name="Fullscreen Aspect Ratio:"> + <text name="Fullscreen Aspect Ratio:"> 全画面の縦横比: </text> - <text type="string" length="1" name="(width / height)"> + <text name="(width / height)"> (幅/高さ) </text> <text_editor bottom="-56" height="40" name="FullScreenInfo" width="480"> @@ -34,19 +34,19 @@ 縦横比: </text> <combo_box name="aspect_ratio" tool_tip="(幅/高さ)"> - <combo_box.item type="string" length="1" name="4:3(StandardCRT)" label="4:3(標準CRT)" /> - <combo_box.item type="string" length="1" name="5:4(1280x1024LCD)" label="5:4(1280x1024 LCD)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3(標準CRT)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4(1280x1024 LCD)" /> <combo_box.item name="8:5(Widescreen)" label="8:5(ワイドスクリ-ン)" /> - <combo_box.item type="string" length="1" name="16:9(Widescreen)" label="16:9(ワイドスクリ-ン)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9(ワイドスクリ-ン)" /> </combo_box> <check_box label="自動検出率" name="aspect_auto_detect" /> - <text type="string" length="1" name="UI Size:"> + <text name="UI Size:"> UIサイズ: </text> - <text type="string" length="1" name="(meters, lower is faster)"> + <text name="(meters, lower is faster)"> (メートル、低いほど速い) </text> - <text type="string" length="1" name="text2"> + <text name="text2"> 表示オプション: </text> <check_box label="解像度単独スケールを使用" name="ui_auto_scale" /> @@ -80,6 +80,7 @@ 品質 </text> <check_box label="カスタム" name="CustomSettings" /> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> シェーダー: </text> @@ -156,14 +157,15 @@ <radio_item name="0" label="低" /> <radio_item name="2" label="高" /> </radio_group> + </panel> <button label="推奨された設定" name="Defaults" /> <button label="ハードウェア・オプション" label_selected="ハードウェア・オプション" name="GraphicsHardwareButton" /> - <text name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </text> - <text name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </text> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml index 186820f00a..ce4f3c19b2 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="不動産" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="不動産" name="Estate"> <text name="estate_help_text"> このタブの設定を変更するとこの不動産内 の全ての地域に影響を与えます。 @@ -75,4 +77,6 @@ <button label="メッセージを不動産へ送信..." name="message_estate_btn" /> <button label="土地からユーザーを追い出す..." name="kick_user_from_estate_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml index 73d2025446..690cf3f33d 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_general.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml @@ -40,15 +40,9 @@ 区分: </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="適用" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/ja/panel_region_texture.xml b/indra/newview/skins/default/xui/ja/panel_region_texture.xml index 6527f0fbe6..19326c82b6 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="地面テクスチャー" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="地面テクスチャー" name="Textures"> <text name="region_text_lbl"> 地域: </text> @@ -54,4 +56,6 @@ そして「高」の値はテクスチャー#4の高さの下限となります。 </text> <button label="適用" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml b/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml index b7e334df10..b698fa762d 100644 --- a/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> - <text type="string" length="1" name="Loading..."> + <text name="Loading..."> ロード中... </text> - <text type="string" length="1" name="Loading...2"> + <text name="Loading...2"> ロード中... </text> <button label="" label_selected="" name="less" /> diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml index d713d867c4..9c5fe981b8 100644 --- a/indra/newview/skins/default/xui/ja/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/ja/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text length="1" name="ParcelNameText" tool_tip="あなたが立っている土地区画の名 前。クリックすると「土地情報」が開きます。" type="string"> + <text name="ParcelNameText" tool_tip="あなたが立っている土地区画の名 前。クリックすると「土地情報」が開きます。"> 区画名はここです </text> - <text length="1" name="BalanceText" tool_tip="口座残高" type="string"> + <text name="BalanceText" tool_tip="口座残高"> ローディング... </text> <button label="" label_selected="" name="buycurrency" tool_tip="貨幣の購入"/> - <text length="12" name="TimeText" tool_tip="現在時刻(太平洋時)" type="string"> + <text name="TimeText" tool_tip="現在時刻(太平洋時)"> 12:00 AM </text> <text name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </text> <button label="" label_selected="" name="scriptout" tool_tip="スクリプト警告およびエラー"/> <button label="" label_selected="" name="health" tool_tip="健康状態"/> - <text length="1" name="HealthText" tool_tip="健康状態" type="string"> + <text name="HealthText" tool_tip="健康状態"> 100% </text> <button label="" label_selected="" name="fly" tool_tip="飛行禁止"/> diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml new file mode 100644 index 0000000000..22b9471533 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ 北
+ </panel.string>
+ <panel.string name="world_map_east">
+ 東
+ </panel.string>
+ <panel.string name="world_map_west">
+ 西
+ </panel.string>
+ <panel.string name="world_map_south">
+ 南
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ 南東
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ 北東
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ 南西
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ 北西
+ </panel.string>
+ <text label="北" name="floater_map_north" text="北">
+ 北
+ </text>
+ <text label="東" name="floater_map_east" text="東">
+ 東
+ </text>
+ <text label="西" name="floater_map_west" text="西">
+ 西
+ </text>
+ <text label="南" name="floater_map_south" text="南">
+ 南
+ </text>
+ <text label="南東" name="floater_map_southeast" text="南東">
+ 南東
+ </text>
+ <text label="北東" name="floater_map_northeast" text="北東">
+ 北東
+ </text>
+ <text label="南西" name="floater_map_southwest" text="南西">
+ 南西
+ </text>
+ <text label="北西" name="floater_map_northwest" text="北西">
+ 北西
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 5432c116a7..5d308f78d1 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -487,4 +487,34 @@ <string name="choose_the_directory"> 参照 </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + 低 + </string> + <string name="GraphicsQualityMid"> + 中 + </string> + <string name="GraphicsQualityHigh"> + 高 + </string> </strings> diff --git a/indra/newview/skins/default/xui/nl/floater_about_land.xml b/indra/newview/skins/default/xui/nl/floater_about_land.xml index f2aa9ff47c..6aa80c00db 100644 --- a/indra/newview/skins/default/xui/nl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/nl/floater_about_land.xml @@ -79,45 +79,45 @@ <button label="Land Afstaan..." label_selected="Land Afstaan..." name="Abandon Land..."/> <button label="Land terugvorderen..." label_selected="Land terugvorderen..." name="Reclaim Land..."/> <button label="Lindenverkoop..." label_selected="Lindenverkoop..." name="Linden Sale..." tool_tip="Land moet in bezit zijn, de inhoud moet ingesteld zijn en niet al ter veiling zijn aangeboden."/> - <string name="new users only"> + <panel.string name="new users only"> Alleen nieuwe gebruikers - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Iedereen - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Gebied - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Veiling ID: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> U dient uw aankoop te goedkeuren voor u dit land kunt wijzigen. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Groepseigendom) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profiel... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Informatie... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (public) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (none) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Verkoop bezig) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Geen perceel geselecteerd. Ga naar Wereld menu > Over land of selecteer een ander perceel om zijn details te tonen. - </string> + </panel.string> </panel> <panel label="Convenant" name="land_covenant_panel"> <text name="estate_section_lbl"> @@ -174,20 +174,20 @@ <text name="changeable_clause" left="114" width="340"> Land in deze regio mag niet worden samengevoegd/opgesplitst. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Aangekocht land in deze regio mag worden doorverkocht. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Aangekocht land in deze regio mag niet worden doorverkocht. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Aangekocht land in deze regio mag worden samengevoegd of opgedeeld. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Aangekocht land in deze regio mag niet worden samengevoegd of opgedeeld. - </string> + </panel.string> </panel> <panel label="Objecten" name="land_objects_panel"> <text name="parcel_object_bonus"> @@ -199,12 +199,12 @@ of opgedeeld. <text name="objects_available" left="214" width="230"> [COUNT] van [MAX] ([AVAILABLE] beschikbaar) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] van [MAX] ([AVAILABLE] beschikbaar) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] van [MAX] ([DELETED] zullen worden verwijderd) - </string> + </panel.string> <text name="Primitives parcel supports:" width="200"> Primitieven ondersteund door perceel: </text> @@ -292,108 +292,83 @@ of opgedeeld. <check_box label="Veilig (geen letsel)" name="check safe" tool_tip="Indien aangevinkt, wordt het land op Veilig ingesteld, waarmee letselgevechten worden uitgeschakeld. Indien niet aangevinkt, is letsel ingeschakeld."/> <check_box label="Niet duwen" name="PushRestrictCheck" tool_tip="Weerhoudt scripts van duwen. Het aanvinken van deze optie kan handig zijn om storend gedrag op uw land te voorkomen."/> <check_box label="Toon plaats in Zoeken (L$30/week) onder" name="ShowDirectoryCheck" tool_tip="Laat mensen dit perceel zien in zoekresultaten."/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Laat mensen dit perceel zien in zoekresultaten - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Deze optie is uitgeschakeld, omdat dit gebied 128 m² of kleiner is. Alleen grote percelen kunnen worden opgenomen in Zoeken. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Deze optie is uitgeschakeld omdat u de opties van dit perceel niet kunt wijzigen. - </string> + </panel.string> <combo_box name="land category with adult"> - <combo_item name="AnyCategory"> - Alle Categorieën - </combo_item> - <combo_item name="LindenLocation"> - Linden locatie - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Kunst & Cultuur - </combo_item> - <combo_item name="Business"> - Zakelijk - </combo_item> - <combo_item name="Educational"> - Educatief - </combo_item> - <combo_item name="Gaming"> - Spellen - </combo_item> - <combo_item name="Hangout"> - Ontmoetingsplaats - </combo_item> - <combo_item name="NewcomerFriendly"> - Nieuwkomervriendelijk - </combo_item> - <combo_item name="Parks&Nature"> - Parken & natuur - </combo_item> - <combo_item name="Residential"> - Woongebied - </combo_item> - <combo_item name="Shopping"> - Winkelen - </combo_item> - <combo_item name="Other"> - Anders - </combo_item> + <combo_box.item name="item0" label="Alle Categorieën" + /> + <combo_box.item name="item1" label="Linden locatie" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Kunst & Cultuur" + /> + <combo_box.item name="item4" label="Zakelijk" + /> + <combo_box.item name="item5" label="Educatief" + /> + <combo_box.item name="item6" label="Spelen" + /> + <combo_box.item name="item7" label="Ontmoetingsplaats" + /> + <combo_box.item name="item8" label="Nieuwkomervriendelijk" + /> + <combo_box.item name="item9" label="Parken & natuur" + /> + <combo_box.item name="item10" label="Woongebied" + /> + <combo_box.item name="item11" label="Winkelen" + /> + <combo_box.item name="item12" label="Anders" + /> </combo_box> <combo_box name="land category"> - <combo_item name="AnyCategory"> - Alle categorieën - </combo_item> - <combo_item name="LindenLocation"> - Linden Locatie - </combo_item> - <combo_item name="Arts&Culture"> - Kunst & Cultuur - </combo_item> - <combo_item name="Business"> - Zakelijk - </combo_item> - <combo_item name="Educational"> - Educatief - </combo_item> - <combo_item name="Gaming"> - Spelen - </combo_item> - <combo_item name="Hangout"> - Ontmoetingsplaats - </combo_item> - <combo_item name="NewcomerFriendly"> - Nieuwkomervriendelijk - </combo_item> - <combo_item name="Parks&Nature"> - Parken & Natuur - </combo_item> - <combo_item name="Residential"> - Woongebied - </combo_item> - <combo_item name="Shopping"> - Winkelen - </combo_item> - <combo_item name="Other"> - Anders - </combo_item> + <combo_box.item name="item0" label="Alle categorieën" + /> + <combo_box.item name="item1" label="Linden Locatie" + /> + <combo_box.item name="item3" label="Kunst & Cultuur" + /> + <combo_box.item name="item4" label="Zakelijk" + /> + <combo_box.item name="item5" label="Educatief" + /> + <combo_box.item name="item6" label="Spelen" + /> + <combo_box.item name="item7" label="Ontmoetingsplaats" + /> + <combo_box.item name="item8" label="Nieuwkomervriendelijk" + /> + <combo_box.item name="item9" label="Parken & Natuur" + /> + <combo_box.item name="item10" label="Woongebied" + /> + <combo_box.item name="item11" label="Winkelen" + /> + <combo_box.item name="item12" label="Anders" + /> </combo_box> <button label="?" label_selected="?" name="?"/> <check_box label="Mature inhoud" name="MatureCheck" tool_tip=" "/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Mature inhoud - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Adult inhoud - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Uw perceelinformatie of -inhoud wordt beschouwd als mature. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Uw perceelinformatie of -inhoud wordt beschouwd als adult. - </string> + </panel.string> <text name="Snapshot:"> Foto: </text> @@ -401,31 +376,28 @@ of opgedeeld. <text name="landing_point"> Landingsplaats: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (none) - </string> + </panel.string> <button width="70" label="Instellen" label_selected="Instellen" name="Set" tool_tip="Stelt het landingspunt in waar bezoekers arriveren. Wordt ingesteld op uw avatar's positie binnen dit perceel."/> <button width="80" left="311" label="Opschonen" label_selected="Opschonen" name="Clear" tool_tip="Landingspunt leegmaken"/> <text name="Teleport Routing: "> Teleport routering: </text> <combo_box name="landing type" tool_tip="Teleport routering -- selecteer hoe teleports naar uw land moeten worden afgehandeld."> - <combo_item name="Blocked"> - Geblokkeerd - </combo_item> - <combo_item name="LandingPoint"> - Landingsplaats - </combo_item> - <combo_item name="Anywhere"> - Overal - </combo_item> + <combo_box.item name="Blocked" label="Geblokkeerd" + /> + <combo_box.item name="LandingPoint" label="Landingsplaats" + /> + <combo_box.item name="Anywhere" label="Overal" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Niet duwen - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Niet duwen (ingesteld op regio) - </string> + </panel.string> </panel> <panel label="Media" name="land_media_panel"> <text name="with media:"> @@ -490,18 +462,16 @@ hebt geklikt.) </text> <check_box label="Inwoners die geen betalingsinformatie hebben gegeven aan Linden Lab" name="limit_payment" tool_tip="Verban ongeïdentificeerde inwoners."/> <check_box label="Inwoners die geen leeftijdgeverifieerde volwassenen zijn" name="limit_age_verified" tool_tip="Verban inwoners die hun leeftijd niet geverifieerd hebben. Zie support.secondlife.com voor meer informatie."/> - <string name="estate_override"> + <panel.string name="estate_override"> Een of meer van deze opties is op estate-niveau ingesteld - </string> + </panel.string> <check_box label="Groepstoegang toestaan: [GROUP]" name="GroupCheck" tool_tip="Stel de groep in op het tabblad Algemeen"/> <check_box label="Verkoop toegangspassen aan:" name="PassCheck" tool_tip="Tijdelijke toegang tot dit perceel toestaan"/> <combo_box name="pass_combo" left_delta="190"> - <combo_item name="Anyone"> - Iedereen - </combo_item> - <combo_item name="Group"> - Groep - </combo_item> + <combo_box.item name="Anyone" label="Iedereen" + /> + <combo_box.item name="Group" label="Groep" + /> </combo_box> <spinner label="Prijs in L$:" name="PriceSpin" label_width="168" width="228" /> <spinner label="Toegangsuren" name="HoursSpin" label_width="168" width="228" /> diff --git a/indra/newview/skins/default/xui/nl/floater_customize.xml b/indra/newview/skins/default/xui/nl/floater_customize.xml index a94f4f2348..99a109ab78 100644 --- a/indra/newview/skins/default/xui/nl/floater_customize.xml +++ b/indra/newview/skins/default/xui/nl/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Uiterlijk" width="551"> <tab_container name="customize tab container" tab_min_width="120" width="549"> - <panel label="Lichaamsdelen" name="body_parts_placeholder"/> + <placeholder label="Lichaamsdelen" name="body_parts_placeholder"/> <panel label="Postuur" name="Shape" left="124" width="389"> <button label="Herstel" label_selected="Herstel" name="Revert"/> <button label="Lichaam" label_selected="Lichaam" name="Body"/> diff --git a/indra/newview/skins/default/xui/nl/floater_joystick.xml b/indra/newview/skins/default/xui/nl/floater_joystick.xml index dcdddd0492..ccc39034f5 100644 --- a/indra/newview/skins/default/xui/nl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/nl/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Joystick configuratie"> - <check_box name="enable_joystick" width="80"> - Joystick inschakelen: - </check_box> + <check_box name="enable_joystick" width="80" label="Joystick inschakelen:"/> <text left="146" name="joystick_type" width="360"/> <spinner label="X-as mapping" name="JoystickAxis1"/> <spinner label="Y-as mapping" name="JoystickAxis2"/> @@ -17,15 +15,9 @@ <text name="Control Modes:"> Besturingsmodi: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled"> - Bouwen - </check_box> - <check_box name="JoystickFlycamEnabled"> - Vliegcamera - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" label="Bouwen"/> + <check_box name="JoystickFlycamEnabled" label="Vliegcamera"/> <text name="XScale"> X schaal </text> @@ -74,12 +66,14 @@ <button label="SpaceNavigator standaardwaarden" name="SpaceNavigatorDefaults" width="200" font="SansSerifSmall"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Annuleren" label_selected="Annuleren" name="cancel_btn" left_delta="110"/> - <string name="JoystickMonitor"> - Joystick monitor - </string> - <string name="Axis"> - As [NUM] - </string> + <stat_view label="Joystick monitor" name="axis_view"> + <stat_bar label="As 0" name="axis0"/> + <stat_bar label="As 1" name="axis1"/> + <stat_bar label="As 2" name="axis2"/> + <stat_bar label="As 3" name="axis3"/> + <stat_bar label="As 4" name="axis4"/> + <stat_bar label="As 5" name="axis5"/> + </stat_view> <string name="NoDevice"> Geen apparaat gedetecteerd </string> diff --git a/indra/newview/skins/default/xui/nl/floater_map.xml b/indra/newview/skins/default/xui/nl/floater_map.xml new file mode 100644 index 0000000000..4bd691a96a --- /dev/null +++ b/indra/newview/skins/default/xui/nl/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ O
+ </floater.string>
+ <floater.string name="mini_map_west">
+ W
+ </floater.string>
+ <floater.string name="mini_map_south">
+ Z
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ ZO
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NO
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ ZW
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NW
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="Z" name="floater_map_south" text="Z">
+ Z
+ </text>
+ <text label="ZO" name="floater_map_southeast" text="ZO">
+ ZO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="ZW" name="floater_map_southwest" text="ZW">
+ ZW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_moveview.xml b/indra/newview/skins/default/xui/nl/floater_moveview.xml index 9b0b95b99a..8a6a874e49 100644 --- a/indra/newview/skins/default/xui/nl/floater_moveview.xml +++ b/indra/newview/skins/default/xui/nl/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Draai links"/> <button label="" label_selected="" name="turn right btn" tool_tip="Draai rechts"/> <button label="" label_selected="" name="move up btn" tool_tip="Spring of vlieg omhoog"/> @@ -8,4 +9,5 @@ <joystick_slide name="slide right btn" tool_tip="Verplaats rechts"/> <joystick_turn name="forward btn" tool_tip="Verplaats vooruit"/> <joystick_turn name="backward btn" tool_tip="Verplaats achteruit"/> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml index e82a5a3b89..012198d7b6 100644 --- a/indra/newview/skins/default/xui/nl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/nl/floater_report_abuse.xml @@ -39,9 +39,7 @@ <combo_box.item name="Select_category" label="Selecteer categorie"/> <combo_box.item name="Age__Age_play" label="Leeftijd > Leeftijd spelen"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Leeftijd > Volwassen inwoner in Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Leeftijd > Minderjarige inwoner buiten Teen Second Life - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Leeftijd > Minderjarige inwoner buiten Teen Second Life"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Aanval > Gevechtszandbak / onveilig gebied"/> <combo_box.item name="Assault__Safe_area" label="Aanval > Veilig gebied"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Aanval > Zandbak voor het testen van wapens"/> @@ -66,12 +64,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Intimidatie > Verbaal misbruik"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Onfatsoenlijkheid > Globaal beledigende inhoud of gedrag"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Onfatsoenlijkheid > Ongepaste avatar naam"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een PG regio - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een Mature regio - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een PG regio"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Onfatsoenlijkheid > Ongepaste inhoud of gedrag in een Mature regio"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Inbreuk op intellectueel eigendom > Verwijderen van inhoud"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Inbreuk op intellectueel eigendom > CopyBot of misbruik van permissies"/> <combo_box.item name="Intolerance" label="Intolerantie"/> diff --git a/indra/newview/skins/default/xui/nl/floater_tools.xml b/indra/newview/skins/default/xui/nl/floater_tools.xml index 42cf22aa15..0d2c009dc6 100644 --- a/indra/newview/skins/default/xui/nl/floater_tools.xml +++ b/indra/newview/skins/default/xui/nl/floater_tools.xml @@ -5,30 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Bewerk"/> <button label="" label_selected="" name="button create" tool_tip="Maak"/> <button label="" label_selected="" name="button land" tool_tip="Land"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Roteren (Ctrl)" name="radio orbit"/> - <check_box label="Verplaatsen (Ctrl-Shift)" name="radio pan"/> - <check_box label="Verplaatsen" name="radio move"/> - <check_box label="Optillen (Ctrl)" name="radio lift"/> - <check_box label="Roteren (Ctrl-Shift)" name="radio spin"/> - <check_box label="Positie" name="radio position"/> - <check_box label="Roteren (Ctrl)" name="radio rotate"/> - <check_box label="Uitrekken (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Selecteer textuur" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Roteren (Ctrl)" name="radio orbit"/> + <radio_item label="Verplaatsen (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Verplaatsen" name="radio move"/> + <radio_item label="Optillen (Ctrl)" name="radio lift"/> + <radio_item label="Roteren (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Positie" name="radio position"/> + <radio_item label="Roteren (Ctrl)" name="radio rotate"/> + <radio_item label="Uitrekken (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Selecteer textuur" name="radio select face"/> + </radio_group> <check_box label="Bewerk gekoppelde onderdelen" name="checkbox edit linked parts"/> <text name="text ruler mode"> Liniaal: </text> <combo_box name="combobox grid mode" width="78" left_delta="38"> - <combo_item name="World"> - Wereld - </combo_item> - <combo_item name="Local"> - Lokaal - </combo_item> - <combo_item name="Reference"> - Referentie - </combo_item> + <combo_box.item name="World" label="Wereld" + /> + <combo_box.item name="Local" label="Lokaal" + /> + <combo_box.item name="Reference" label="Referentie" + /> </combo_box> <check_box left="136" label="Beide zijden uitrekken" name="checkbox uniform"/> <check_box left="136" label="Texturen uitrekken" name="checkbox stretch textures"/> @@ -56,13 +59,15 @@ <check_box label="Kopiëer Selectie" name="checkbox copy selection"/> <check_box label="Middelpunt" name="checkbox copy centers"/> <check_box label="Roteer" name="checkbox copy rotates"/> - <check_box label="Selecteer land" name="radio select land"/> - <check_box label="Vlak maken" name="radio flatten"/> - <check_box label="Verhogen" name="radio raise"/> - <check_box label="Verlagen" name="radio lower"/> - <check_box label="Egaliseren" name="radio smooth"/> - <check_box label="Opruwen" name="radio noise"/> - <check_box label="Herstellen" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Selecteer land" name="radio select land"/> + <radio_item label="Vlak maken" name="radio flatten"/> + <radio_item label="Verhogen" name="radio raise"/> + <radio_item label="Verlagen" name="radio lower"/> + <radio_item label="Egaliseren" name="radio smooth"/> + <radio_item label="Opruwen" name="radio noise"/> + <radio_item label="Herstellen" name="radio revert"/> + </radio_group> <button label="Toepassen" label_selected="Toepassen" name="button apply to selection" tool_tip="Wijzig geselecteerd land"/> <text name="Bulldozer:"> Bulldozer: @@ -111,9 +116,7 @@ <text name="Permissions:"> Permissies: </text> - <text name="perm_modify"> - U kunt dit object wijzigen. - </text> + <check_box label="Deel met groep" name="checkbox share with group" tool_tip="Alle leden van de ingestelde groep toestaan om te delen en uw permissies voor dit object te gebruiken. U moet 'Overdragen' om rolbeperkingen in te schakelen."/> <string name="text deed continued"> Overdragen... @@ -129,49 +132,35 @@ <text name="Cost"> Prijs: L$ </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Origineel - </radio_item> - <radio_item name="Copy"> - Kopie - </radio_item> - <radio_item name="Contents"> - Inhoud - </radio_item> - </radio_group> - <text name="Next owner can:"> - Volgende eigenaar kan: - </text> - <check_box label="Wijzigen" name="checkbox next owner can modify"/> - <check_box label="Kopiëren" name="checkbox next owner can copy" left_delta="80"/> - <check_box label="Verkopen/weggeven" name="checkbox next owner can transfer" left_delta="67"/> + <combo_box name="sale type"> + <combo_box.item label="Kopie" name="Copy"/> + <combo_box.item label="Inhoud" name="Contents"/> + <combo_box.item label="Origineel" name="Original"/> + </combo_box> + <text name="label click action"> Wanneer links-geklikt: </text> <combo_box name="clickaction" width="178"> - <combo_item name="Touch/grab(default)"> - Aanraken/pakken (standaard) - </combo_item> - <combo_item name="Sitonobject"> - Zit op object - </combo_item> - <combo_item name="Buyobject"> - Koop object - </combo_item> - <combo_item name="Payobject"> - Betaal object - </combo_item> - <combo_item name="Open"> - Open - </combo_item> - <combo_item name="Play"> - Perceelmedia afspelen - </combo_item> - <combo_item name="Opemmedia"> - Perceelmedia openen - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Aanraken/pakken (standaard)" + /> + <combo_box.item name="Sitonobject" label="Zit op object" + /> + <combo_box.item name="Buyobject" label="Koop object" + /> + <combo_box.item name="Payobject" label="Betaal object" + /> + <combo_box.item name="Open" label="Open" + /> + <combo_box.item name="Play" label="Perceelmedia afspelen" + /> + <combo_box.item name="Opemmedia" label="Perceelmedia openen" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + U kunt dit object wijzigen. + </text> <text name="B:"> B: </text> @@ -190,6 +179,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Volgende eigenaar kan: + </text> + <check_box label="Wijzigen" name="checkbox next owner can modify"/> + <check_box label="Kopiëren" name="checkbox next owner can copy" left_delta="80"/> + <check_box name="checkbox next owner can transfer" left_delta="67"/> + </panel> <string name="text modify info 1"> U kunt dit object wijzigen. </string> @@ -254,56 +250,41 @@ Materiaal </text> <combo_box name="material"> - <combo_item name="Stone"> - Steen - </combo_item> - <combo_item name="Metal"> - Metaal - </combo_item> - <combo_item name="Glass"> - Glas - </combo_item> - <combo_item name="Wood"> - Hout - </combo_item> - <combo_item name="Flesh"> - Vlees - </combo_item> - <combo_item name="Plastic"> - Plastic - </combo_item> - <combo_item name="Rubber"> - Rubber - </combo_item> + <combo_box.item name="Stone" label="Steen" + /> + <combo_box.item name="Metal" label="Metaal" + /> + <combo_box.item name="Glass" label="Glas" + /> + <combo_box.item name="Wood" label="Hout" + /> + <combo_box.item name="Flesh" label="Vlees" + /> + <combo_box.item name="Plastic" label="Plastic" + /> + <combo_box.item name="Rubber" label="Rubber" + /> </combo_box> <text name="label basetype"> Bouwbloktype </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Kubus - </combo_item> - <combo_item name="Cylinder"> - Cilinder - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Bol - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Tube"> - Buis - </combo_item> - <combo_item name="Ring"> - Ring - </combo_item> - <combo_item name="Sculpted"> - Sculpted - </combo_item> + <combo_box.item name="Box" label="Kubus" + /> + <combo_box.item name="Cylinder" label="Cilinder" + /> + <combo_box.item name="Prism" label="Prisma" + /> + <combo_box.item name="Sphere" label="Bol" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Tube" label="Buis" + /> + <combo_box.item name="Ring" label="Ring" + /> + <combo_box.item name="Sculpted" label="Sculpted" + /> </combo_box> <text name="text cut"> Uitsnede begin en einde @@ -320,18 +301,14 @@ Holtevorm </text> <combo_box name="hole"> - <combo_item name="Default"> - Standaard - </combo_item> - <combo_item name="Circle"> - Cirkel - </combo_item> - <combo_item name="Square"> - Vierkant - </combo_item> - <combo_item name="Triangle"> - Driehoek - </combo_item> + <combo_box.item name="Default" label="Standaard" + /> + <combo_box.item name="Circle" label="Cirkel" + /> + <combo_box.item name="Square" label="Vierkant" + /> + <combo_box.item name="Triangle" label="Driehoek" + /> </combo_box> <text name="text twist"> Verdraai begin en einde @@ -380,21 +357,16 @@ Hechtingstype </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (none) - </combo_item> - <combo_item name="Sphere"> - Bol - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Plane"> - Vlak - </combo_item> - <combo_item name="Cylinder"> - Cilinder - </combo_item> + <combo_box.item name="None" label="(geen)" + /> + <combo_box.item name="Sphere" label="Bol" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Plane" label="Vlak" + /> + <combo_box.item name="Cylinder" label="Cilinder" + /> </combo_box> </panel> <panel label="Kenmerken" name="Features"> @@ -436,88 +408,64 @@ Mapping </text> <combo_box name="combobox texgen"> - <combo_item name="Default"> - Standaard - </combo_item> - <combo_item name="Planar"> - Vlak - </combo_item> + <combo_box.item name="Default" label="Standaard" + /> + <combo_box.item name="Planar" label="Vlak" + /> </combo_box> <text name="label shininess"> Glans </text> <combo_box name="combobox shininess"> - <combo_item name="None"> - Geen - </combo_item> - <combo_item name="Low"> - Laag - </combo_item> - <combo_item name="Medium"> - Middel - </combo_item> - <combo_item name="High"> - Hoog - </combo_item> + <combo_box.item name="None" label="Geen" + /> + <combo_box.item name="Low" label="Laag" + /> + <combo_box.item name="Medium" label="Middel" + /> + <combo_box.item name="High" label="Hoog" + /> </combo_box> <text name="label bumpiness"> Bumpiness </text> <combo_box name="combobox bumpiness"> - <combo_item name="None"> - Geen - </combo_item> - <combo_item name="Brightness"> - Helderheid - </combo_item> - <combo_item name="Darkness"> - Donkerheid - </combo_item> - <combo_item name="woodgrain"> - Houtnerf - </combo_item> - <combo_item name="bark"> - Schors - </combo_item> - <combo_item name="bricks"> - Stenen - </combo_item> - <combo_item name="checker"> - Dambord - </combo_item> - <combo_item name="concrete"> - Beton - </combo_item> - <combo_item name="crustytile"> - gebarsten tegels - </combo_item> - <combo_item name="cutstone"> - natuursteen - </combo_item> - <combo_item name="discs"> - schijven - </combo_item> - <combo_item name="gravel"> - grind - </combo_item> - <combo_item name="petridish"> - petrischaal - </combo_item> - <combo_item name="siding"> - wandpaneel - </combo_item> - <combo_item name="stonetile"> - plavuizen - </combo_item> - <combo_item name="stucco"> - stucwerk - </combo_item> - <combo_item name="suction"> - zuignappen - </combo_item> - <combo_item name="weave"> - weven - </combo_item> + <combo_box.item name="None" label="Geen" + /> + <combo_box.item name="Brightness" label="Helderheid" + /> + <combo_box.item name="Darkness" label="Donkerheid" + /> + <combo_box.item name="woodgrain" label="Houtnerf" + /> + <combo_box.item name="bark" label="Schors" + /> + <combo_box.item name="bricks" label="Stenen" + /> + <combo_box.item name="checker" label="Dambord" + /> + <combo_box.item name="concrete" label="Beton" + /> + <combo_box.item name="crustytile" label="gebarsten tegels" + /> + <combo_box.item name="cutstone" label="natuursteen" + /> + <combo_box.item name="discs" label="schijven" + /> + <combo_box.item name="gravel" label="grind" + /> + <combo_box.item name="petridish" label="petrischaal" + /> + <combo_box.item name="siding" label="wandpaneel" + /> + <combo_box.item name="stonetile" label="plavuizen" + /> + <combo_box.item name="stucco" label="stucwerk" + /> + <combo_box.item name="suction" label="zuignappen" + /> + <combo_box.item name="weave" label="weven" + /> </combo_box> <text name="tex scale"> Herhalingen per zijde @@ -580,43 +528,43 @@ <button label="Koop land..." label_selected="Koop land..." name="button buy land"/> <button label="Land Afstaan..." label_selected="Land Afstaan..." name="button abandon land"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Sleep de gekleurde banden om het object te roteren - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Klik en sleep om de geselecteerde zijde uit te rekken. - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Sleep om te verplaatsen, Shift-slepen om te kopiëren - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Klik en houd vast om land te wijzigen - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Klik en sleep om beeld te wijzigen - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Sleep om te verplaatsen, Ctrl om op te tillen, Ctrl-Shift om te roteren. - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Klik in-wereld om te bouwen - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Klik en sleep om land te selecteren - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Scherm - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Lokaal - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Wereld - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Referentie - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Bevestiging - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/nl/floater_world_map.xml b/indra/newview/skins/default/xui/nl/floater_world_map.xml index 4385442cd3..e1eebaf92f 100644 --- a/indra/newview/skins/default/xui/nl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/nl/floater_world_map.xml @@ -29,10 +29,10 @@ <check_box label="Mature" name="event_mature_chk"/> <check_box label="Adult" name="event_adult_chk"/> <combo_box label="Online vrienden" name="friend combo" tool_tip="Vriend die op kaart getoond wordt"> - <combo_box.item name="none_selected" label="Online vrienden"/> + <combo_box.item name="item1" label="Online vrienden"/> </combo_box> <combo_box label="Landmarkeringen" name="landmark combo" tool_tip="Landmarkering die op kaart getoond wordt"> - <combo_box.item name="none_selected" label="Landmarkeringen"/> + <combo_box.item name="item1" label="Landmarkeringen"/> </combo_box> <line_editor label="Zoek op regionaam" name="location" tool_tip="Type de naam van een regio"/> <button label="Zoeken" name="DoSearch" tool_tip="Zoek naar regio"/> diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml index 179ad2ace1..cbe075362a 100644 --- a/indra/newview/skins/default/xui/nl/notifications.xml +++ b/indra/newview/skins/default/xui/nl/notifications.xml @@ -983,7 +983,7 @@ Vriendschap aanbieden aan [NAME]? Vriendschap aanbieden aan [NAME]? <form name="form"> - <input name="message" type="text"> + <input name="message"> Wilt U mijn vriend zijn? </input> <button name="Offer" text="OK"/> @@ -1391,7 +1391,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="KickUser"> Verwijder deze gebruiker met welk bericht? <form name="form"> - <input name="message" type="text"> + <input name="message"> Een administrator heeft u uitgelogd. </input> <button name="OK" text="OK"/> @@ -1401,7 +1401,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="KickAllUsers"> Verwijder iedereen momenteel op het grid met welk bericht? <form name="form"> - <input name="message" type="text"> + <input name="message"> Een administrator heeft u uitgelogd. </input> <button name="OK" text="OK"/> @@ -1411,7 +1411,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="FreezeUser"> Bevries deze gebruiker met welk bericht? <form name="form"> - <input name="message" type="text"> + <input name="message"> U bent bevroren. U kunt zich niet verplaatsen of praten. Een administrator zal contact met u opnemen via instant message (IM). </input> <button name="OK" text="OK"/> @@ -1421,7 +1421,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="UnFreezeUser"> Ontdooi deze gebruiker met welk bericht? <form name="form"> - <input name="message" type="text"> + <input name="message"> U bent niet langer bevroren. </input> <button name="OK" text="OK"/> @@ -1431,7 +1431,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="OfferTeleport"> Een Teleport aanbieden naar uw locatie met welk bericht? <form name="form"> - <input name="message" type="text"> + <input name="message"> Voeg u bij mij in [REGION] </input> <button name="OK" text="OK"/> @@ -1441,7 +1441,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification name="OfferTeleportFromGod"> God beveel gebruiker naar uw locatie? <form name="form"> - <input name="message" type="text"> + <input name="message"> Voeg u bij mij in [REGION] </input> <button name="OK" text="OK"/> @@ -1455,7 +1455,7 @@ Om een groep te verlaten, selecteer de 'Groep..' optie via het 'B <notification label="Bericht iedereen in uw Estate" name="MessageEstate"> Type een kort bericht om naar iedereen sturen die momenteel in uw Estate aanwezig is. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annuleren"/> </form> @@ -1678,7 +1678,7 @@ Advertentie nu Publiceren voor L$[AMOUNT]? <notification label="Bericht iedereen in deze regio" name="MessageRegion"> Type een kort bericht om naar iedereen sturen die momenteel in regio aanwezig is. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Annuleren"/> </form> @@ -1971,14 +1971,14 @@ De inhoud zal naar uw inventaris gekopieerd worden. Weet u zeker dat u verder wilt gaan met deze aankoop? <usetemplate name="okcancelbuttons" notext="Annuleren" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Deze transactie zal: [ACTION] Weet u zeker dat u verder wilt gaan met deze aankoop? Voer alstublieft opnieuw uw wachtwoord in en klik op OK. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="Annuleren"/> </form> @@ -2351,7 +2351,7 @@ Gelijkwaardig aan azimut. <notification name="NewSkyPreset"> Geef een naam op voor de nieuwe lucht. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nieuwe Voorinstelling </input> <button name="OK" text="OK"/> @@ -2364,7 +2364,7 @@ Gelijkwaardig aan azimut. <notification name="NewWaterPreset"> Geef een naam voor de nieuwe voorinstelling van water. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nieuwe Voorinstelling </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/nl/panel_group_general.xml b/indra/newview/skins/default/xui/nl/panel_group_general.xml index 7b78c845cd..d92d41bcb3 100644 --- a/indra/newview/skins/default/xui/nl/panel_group_general.xml +++ b/indra/newview/skins/default/xui/nl/panel_group_general.xml @@ -35,9 +35,9 @@ Laat uw muis boven de opties zweven voor meer help. (Eigenaren worden vet getoond) </text> <name_list name="visible_members"> - <column label="Lidnaam" name="name"/> - <column label="Titel" name="title"/> - <column label="Laatste login" name="online"/> + <name_list.columns label="Lidnaam" name="name"/> + <name_list.columns label="Titel" name="title"/> + <name_list.columns label="Laatste login" name="online"/> </name_list> <text name="text_group_preferences"> Groepvoorkeuren @@ -48,15 +48,9 @@ Laat uw muis boven de opties zweven voor meer help. <check_box label="Contributiebijdrage: L$" name="check_enrollment_fee" tool_tip="Stelt in of er een contributiebijdrage vereist is om lid te worden van de groep."/> <spinner name="spin_enrollment_fee" tool_tip="Nieuwe leden moeten deze bijdrage betalen om deel te nemen aan de groep wanneer "Contributie bijdrage" is aangevinkt." width="58" left_delta="142"/> <combo_box name="group_mature_check" tool_tip="Stelt in of uw groepsinformatie als mature beschouwd wordt."> - <combo_item name="select_mature"> - - Selecteer - - </combo_item> - <combo_item name="mature"> - Mature inhoud - </combo_item> - <combo_item name="pg"> - PG inhoud - </combo_item> + <combo_box.item name="select_mature" label="- Selecteer -"/> + <combo_box.item name="mature" label="Mature inhoud"/> + <combo_box.item name="pg" label="PG inhoud"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/nl/panel_group_notices.xml b/indra/newview/skins/default/xui/nl/panel_group_notices.xml index 68f3c87f7d..134261197a 100644 --- a/indra/newview/skins/default/xui/nl/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/nl/panel_group_notices.xml @@ -11,9 +11,7 @@ Groepsberichtenarchief </text> <text name="lbl2"> - Berichten worden 14 dagen bewaard. Klik hieronder het bericht dat u wilt -bekijken. Klik de 'Verversen' knop om te controleren of nieuwe berichten zijn -ontvangen. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag. + Berichten worden 14 dagen bewaard. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag. </text> <scroll_list name="notice_list"> <column label="Onderwerp" name="subject"/> @@ -30,11 +28,7 @@ ontvangen. Berichtenlijsten zijn gelimiteerd tot 200 berichten groep per dag. Maak een bericht </text> <text name="lbl2"> - U dient een onderwerp in te voeren om een bericht te versturen. -U kunt een enkel item aan een bericht toevoegen door het van -uw inventaris naar dit paneel te slepen. Bevestigde items -moeten kopieerbaar en overdraagbaar zijn en u kunt geen -mappen versturen. + U kunt een enkel item aan een bericht toevoegen door het van uw inventaris naar dit paneel te slepen. Bevestigde items moeten kopieerbaar en overdraagbaar zijn en u kunt geen mappen versturen. </text> <text bottom_delta="-79" halign="right" left="10" name="lbl3" width="60"> Onderwerp: diff --git a/indra/newview/skins/default/xui/nl/panel_login.xml b/indra/newview/skins/default/xui/nl/panel_login.xml index 5014d7761c..5bfb9dd235 100644 --- a/indra/newview/skins/default/xui/nl/panel_login.xml +++ b/indra/newview/skins/default/xui/nl/panel_login.xml @@ -21,7 +21,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Mijn Thuis"/> <combo_box.item name="MyLastLocation" label="Mijn Laatste Locatie"/> - <combo_box.item name="Typeregionname" label="lt; Type regio naam >"/> + <combo_box.item name="Typeregionname" label="< Type regio naam >"/> </combo_box> <check_box label="Onthoud wachtwoord" name="remember_check"/> <button label="Inloggen" label_selected="Inloggen" name="connect_btn"/> diff --git a/indra/newview/skins/default/xui/nl/panel_region_estate.xml b/indra/newview/skins/default/xui/nl/panel_region_estate.xml index 7a5fa801d9..3a8096ce5f 100644 --- a/indra/newview/skins/default/xui/nl/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/nl/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Estate" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Estate" name="Estate"> <text name="estate_help_text"> Wijzigingen van instellingen op dit tabblad zullen alle regio's in de estate beïnvloeden. @@ -67,4 +69,6 @@ zullen alle regio's in de estate beïnvloeden. <button label="?" name="ban_resident_help"/> <button label="Verwijderen..." name="remove_banned_avatar_btn"/> <button label="Toevoegen..." name="add_banned_avatar_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/nl/panel_region_general.xml b/indra/newview/skins/default/xui/nl/panel_region_general.xml index fe69fe9d9a..74480ed0a4 100644 --- a/indra/newview/skins/default/xui/nl/panel_region_general.xml +++ b/indra/newview/skins/default/xui/nl/panel_region_general.xml @@ -40,15 +40,9 @@ Inhoudscategorie: </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Toepassen" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/nl/panel_region_texture.xml b/indra/newview/skins/default/xui/nl/panel_region_texture.xml index ff10e20b7c..da40926ce2 100644 --- a/indra/newview/skins/default/xui/nl/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/nl/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Grond texturen" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Grond texturen" name="Textures"> <text name="region_text_lbl"> Regio: </text> @@ -54,4 +56,6 @@ en de HIGH waarde is de MINIMUM hoogte van textuur #4. </text> <button label="Toepassen" name="apply_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/nl/panel_world_map.xml b/indra/newview/skins/default/xui/nl/panel_world_map.xml new file mode 100644 index 0000000000..4df1ec10d8 --- /dev/null +++ b/indra/newview/skins/default/xui/nl/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ O
+ </panel.string>
+ <panel.string name="world_map_west">
+ W
+ </panel.string>
+ <panel.string name="world_map_south">
+ Z
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ ZO
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NO
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ ZW
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NW
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="O" name="floater_map_east" text="O">
+ O
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="Z" name="floater_map_south" text="Z">
+ Z
+ </text>
+ <text label="ZO" name="floater_map_southeast" text="ZO">
+ ZO
+ </text>
+ <text label="NO" name="floater_map_northeast" text="NO">
+ NO
+ </text>
+ <text label="ZW" name="floater_map_southwest" text="ZW">
+ ZW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 49e566080a..4f5f60bcfe 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -486,4 +486,34 @@ <string name="choose_the_directory"> Kies folder </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + Laag + </string> + <string name="GraphicsQualityMid"> + Middel + </string> + <string name="GraphicsQualityHigh"> + Hoog + </string> </strings> diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml index 5f4bf4ece6..b146891787 100755 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -2,10 +2,10 @@ <floater name="floaterland" title="O Posiadłości"> <tab_container name="landtab"> <panel label="Ogólne" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> Nazwa: </text> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Opis: </text> <text name="LandType"> @@ -20,56 +20,56 @@ <text name="ContentRatingText"> 'Adult' </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> Właściciel: </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="Profile..." label_selected="Profile..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> Grupa: </text> <button label="Ustaw..." label_selected="Ustaw..." name="Set..."/> <check_box label="Udostępnij przypisywanie na grupę" name="check deed" tool_tip="Oficer grupy ma prawo przepisać prawo własności posiadłości na grupę. Posiadłość wspierana jest przez przydziały pochodzące od członków grupy."/> <button label="Przypisz..." label_selected="Przypisz..." name="Deed..." tool_tip="Prawo przypisania posiadłości na grupę może dokonać jedynie oficer grupy."/> <check_box label="Właścicel dokonuje wpłat związanych z posiadłością" name="check contrib" tool_tip="Kiedy posiadłość zostaje przypisana na grupę, poprzedni właściciel realizuje wpłaty z nią związane w celu jej utrzymania."/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> Na Sprzedaż: </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> Nie </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> Cena: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> <button label="Sprzedaj Posiadłość..." label_selected="Sprzedaj Posiadłość..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> Na sprzedaż dla: [BUYER] </text> - <text length="1" name="Sell with landowners objects in parcel." type="string"> + <text name="Sell with landowners objects in parcel."> Obiekty są zawarte w sprzedaży. </text> - <text length="1" name="Selling with no objects in parcel." type="string"> + <text name="Selling with no objects in parcel."> Obiekty nie są zawarte w sprzedaży. </text> <button label="Anuluj Sprzedaż" label_selected="Anuluj Sprzedaż" name="Cancel Land Sale"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> Data: </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> Tue Aug 15 13:47:25 2006 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> Obszar: </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048 m² </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> Ruch: </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 0 </text> <button label="Kup Posiadłość..." label_selected="Kup Posiadłość..." left="130" name="Buy Land..." width="125"/> @@ -78,76 +78,76 @@ <button label="Porzuć z Posiadłości..." label_selected="Porzuć z Posiadłości..." name="Abandon Land..."/> <button label="Odzyskaj Posiadłość..." label_selected="Odzyskaj Posiadłość..." name="Reclaim Land..."/> <button label="Sprzedaż przez Lindenów..." label_selected="Sprzedaż przez Lindenów..." name="Linden Sale..." tool_tip="Posiadłość musi mieć właściciela, zawartość oraz nie może być wystawiona na aukcę."/> - <string name="new users only"> + <panel.string name="new users only"> Tylko nowi użytkownicy - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Każdy - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Obszar: - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> Numer aukcji: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Musisz zaakceptować zakup by móc modyfikować posiadłość. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Własność Grupy) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Profil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Info... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (publiczne) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (brak) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Sprzedaż w Toku Realizacji) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Posiadłość nie wybrana. Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokazać jej dane. - </string> + </panel.string> </panel> <panel label="Umowa" name="land_covenant_panel"> <text name="estate_section_lbl"> Majątek: </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> Nazwa: </text> - <text length="1" name="estate_name_text" type="string" left="115"> + <text name="estate_name_text" left="115"> Główne </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> Właściciel: </text> - <text length="1" name="estate_owner_text" type="string" left="115"> + <text name="estate_owner_text" left="115"> (brak) </text> - <text_editor length="1" name="covenant_editor" type="string" left="115"> + <text_editor name="covenant_editor" left="115"> Ta posiadłość nie wymaga żadej umowy. </text_editor> - <text length="1" name="covenant_timestamp_text" type="string" left="115"> + <text name="covenant_timestamp_text" left="115"> Ostatnia Modyfikacja Wed Dec 31 16:00:00 1969 </text> <text name="region_section_lbl"> Region: </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> Nazwa: </text> - <text length="1" name="region_name_text" type="string" left="115"> + <text name="region_name_text" left="115"> leyla </text> <text name="region_landtype_lbl"> @@ -165,92 +165,92 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz <text name="resellable_lbl"> Odsprzedaj: </text> - <text length="1" name="resellable_clause" type="string" width="338" left="115"> + <text name="resellable_clause" width="338" left="115"> Posiadłość zakupiona w tym regionie nie może być odsprzedana. </text> <text name="changeable_lbl"> Podziel: </text> - <text length="1" name="changeable_clause" type="string" width="338" left="115"> + <text name="changeable_clause" width="338" left="115"> Posiadłość zakupiona w tym regionie nie może być łączona/dzielona. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Posiadłość zakupiona w tym regionie może być odsprzedana. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Posiadłość zakupiona w tym regionie nie może być odsprzedana. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Posiadłość zakupiona w tym regionie może być łączona/dzielona. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Posiadłość zakupiona w tym regionie nie może być łączona/dzielona. - </string> + </panel.string> </panel> <panel label="Obiekty" name="land_objects_panel"> - <text length="1" name="parcel_object_bonus" type="string"> + <text name="parcel_object_bonus"> Ilość Ekstra Obiektów: [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string"> + <text name="Simulator primitive usage:"> Ilość używanych primóww: </text> - <text length="1" name="objects_available" type="string" width="230"> + <text name="objects_available" width="230"> [COUNT] z [MAX] ([AVAILABLE] jest dostępne) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] z [MAX] ([AVAILABLE] jest dostępne) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] z [MAX] ([DELETED] zostanie usunięte) - </string> - <text length="1" name="Primitives parcel supports:" type="string"> + </panel.string> + <text name="Primitives parcel supports:"> Maksymalna ilość primów: </text> - <text length="1" name="object_contrib_text" type="string"> + <text name="object_contrib_text"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> Primy na posiadłości: </text> - <text length="1" name="total_objects_text" type="string"> + <text name="total_objects_text"> [COUNT] </text> - <text length="1" name="Owned by parcel owner:" type="string"> + <text name="Owned by parcel owner:"> Właściciela posiadłości: </text> - <text length="1" name="owner_objects_text" type="string"> + <text name="owner_objects_text"> [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowOwner"/> <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOwner..." tool_tip="Zwróć obiekty do ich właścicieli."/> - <text length="1" name="Set to group:" type="string"> + <text name="Set to group:"> Grupy: </text> - <text length="1" name="group_objects_text" type="string"> + <text name="group_objects_text"> [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowGroup"/> <button label="Zwróć..." label_selected="Zwróć..." name="ReturnGroup..." tool_tip="Zwróć obiekty do ich właścicieli.."/> - <text length="1" name="Owned by others:" type="string"> + <text name="Owned by others:"> Innych Rezydentów: </text> - <text length="1" name="other_objects_text" type="string"> + <text name="other_objects_text"> [COUNT] </text> <button label="Pokaż" label_selected="Pokaż" name="ShowOther"/> <button label="Zwróć..." label_selected="Zwróć..." name="ReturnOther..." tool_tip="Zwróć obiekty do ich właścicieli."/> - <text length="1" name="Selected / sat upon:" type="string"> + <text name="Selected / sat upon:"> Wybranych: </text> - <text length="1" name="selected_objects_text" type="string"> + <text name="selected_objects_text"> [COUNT] </text> - <text length="1" name="Autoreturn" type="string"> + <text name="Autoreturn"> Zwracaj obiekty innych Rezydentów (minut, 0 = wyłącz): </text> - <text length="1" name="Object Owners:" type="string" width="108"> + <text name="Object Owners:" width="108"> Właściciel Obiektów: </text> <button label="Odśwież Listę" label_selected="Odśwież Listę" left="112" name="Refresh List"/> @@ -264,183 +264,155 @@ Idź do Świat > O Posiadłości albo wybierz inną posiadłość żeby pokaz </name_list> </panel> <panel label="Opcje" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> Udostępnij innym Rezydentom: </text> <check_box label="Edytowanie Terenu" name="edit land check" tool_tip="Wybrana - każdy może kształtować Twój teren. Najlepiej jest zostawić tą opcję nie wybraną, Ty zawsze możesz kształtowć Twój teren."/> <check_box label="Zapisywania Miejsca" name="check landmark"/> <check_box label="Latanie" name="check fly" tool_tip="Wybrana - Rezydenci mogą latać na Twojej posiadłości. Nie wybrana - mogą tylko wlatywać do lub latać ponad Twoją posiadłością."/> - <text length="1" name="allow_label2" type="string"> + <text name="allow_label2"> Budowanie: </text> <check_box label="Wszyscy" name="edit objects check"/> <check_box label="Grupa" name="edit group objects check"/> - <text length="1" name="allow_label3" type="string"> + <text name="allow_label3"> Nowe Obiekty: </text> <check_box label="Wszyscy" name="all object entry check"/> <check_box label="Grupa" name="group object entry check"/> - <text length="1" name="allow_label4" type="string"> + <text name="allow_label4"> Skrypty: </text> <check_box label="Wszyscy" name="check other scripts"/> <check_box label="Grupa" name="check group scripts"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> Opcje Posiadłości: </text> <check_box label="Bezpieczna (brak zniszczeń)" name="check safe" tool_tip="Wybrana - posiadłość jest bezpieczna - zniszczenia w walce są zablokowane. Nie wybrana - zniszczenia w walce są włączone."/> <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju w Twojej posiadłości."/> <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy posiadłości w wyszukiwarce"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Udostępnij wyświetlanie tej posiadłości w wyszukiwarce - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Wybrana opcja jest wyłączona ze względu iż wielkość posiadłości wynosi 128 m² bądź mniej. Jedynie większe posiadłości mogą być umieszczone w bazie wyszukiwarki. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Wybrana opcja jest wyłączona ponieważ nie posiadasz prawa do modyfikacji posiadłości. - </string> + </panel.string> <combo_box name="land category with adult"> - <combo_item name="AnyCategory"> - Każda Kategoria - </combo_item> - <combo_item name="LindenLocation"> - Linden Lokacja - </combo_item> - <combo_item name="Adult"> - 'Adult' - </combo_item> - <combo_item name="Arts&Culture"> - Sztuka i Kultura - </combo_item> - <combo_item name="Business"> - Biznes - </combo_item> - <combo_item name="Educational"> - Edukacja - </combo_item> - <combo_item name="Gaming"> - Gra - </combo_item> - <combo_item name="Hangout"> - Poznawanie ludzi - </combo_item> - <combo_item name="NewcomerFriendly"> - Przyjazne dla nowych - </combo_item> - <combo_item name="Parks&Nature"> - Park i Natura - </combo_item> - <combo_item name="Residential"> - Mieszkalna - </combo_item> - <combo_item name="Shopping"> - Zakupy - </combo_item> - <combo_item name="Other"> - Inne - </combo_item> + <combo_box.item name="item0" label="Każda Kategoria" + /> + <combo_box.item name="item1" label="Linden Lokacja" + /> + <combo_box.item name="item2" label="'Adult'" + /> + <combo_box.item name="item3" label="Sztuka i Kultura" + /> + <combo_box.item name="item4" label="Biznes" + /> + <combo_box.item name="item5" label="Edukacyjna" + /> + <combo_box.item name="item6" label="Gra" + /> + <combo_box.item name="item7" label="Poznawanie ludzi" + /> + <combo_box.item name="item8" label="Przyjazne dla nowych" + /> + <combo_box.item name="item9" label=" Park i Natura" + /> + <combo_box.item name="item10" label="Mieszkalna" + /> + <combo_box.item name="item11" label="Zakupy" + /> + <combo_box.item name="item12" label="Inna" + /> </combo_box> <combo_box name="land category"> - <combo_item name="AnyCategory"> - Każda - </combo_item> - <combo_item name="LindenLocation"> - Linden Lokacja - </combo_item> - <combo_item name="Arts&Culture"> - Sztuka i Kultura - </combo_item> - <combo_item name="Business"> - Biznes - </combo_item> - <combo_item name="Educational"> - Edukacyjna - </combo_item> - <combo_item name="Gaming"> - Gra - </combo_item> - <combo_item name="Hangout"> - Poznawanie ludzi - </combo_item> - <combo_item name="NewcomerFriendly"> - Przyjazna dla nowych - </combo_item> - <combo_item name="Parks&Nature"> - Parki i Natura - </combo_item> - <combo_item name="Residential"> - Mieszkalna - </combo_item> - <combo_item name="Shopping"> - Komercja/Sklepy - </combo_item> - <combo_item name="Other"> - Inna - </combo_item> + <combo_box.item name="item0" label="Każda Kategoria" + /> + <combo_box.item name="item1" label="Linden Lokacja" + /> + <combo_box.item name="item3" label="Sztuka i Kultura" + /> + <combo_box.item name="item4" label="Biznes" + /> + <combo_box.item name="item5" label="Edukacyjna" + /> + <combo_box.item name="item6" label="Gra" + /> + <combo_box.item name="item7" label="Poznawanie ludzi" + /> + <combo_box.item name="item8" label="Przyjazna dla nowych" + /> + <combo_box.item name="item9" label="Parki i Natura" + /> + <combo_box.item name="item10" label="Mieszkalna" + /> + <combo_box.item name="item11" label="Zakupy" + /> + <combo_box.item name="item12" label="Inna" + /> </combo_box> <button label="?" label_selected="?" name="?"/> <check_box label="Treść 'Mature'" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Treść 'Mature' - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Treść 'Adult' - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> Twoja posiadłość bądź treść jaką zawiera klasyfikowana jest jako 'Mature'. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> Informacje o Twojej posiadłości i treści jaką zawiera klasyfikowane są jako 'Adult'. - </string> - <text length="1" name="Snapshot:" type="string"> + </panel.string> + <text name="Snapshot:"> Zdjęcie: </text> <texture_picker label="" name="snapshot_ctrl" tool_tip="Kliknij by wybrać zdjęce"/> - <text length="1" name="landing_point" type="string"> + <text name="landing_point"> Punkt Lądowania: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (brak) - </string> + </panel.string> <button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej posiadłości."/> <button label="Nowy" label_selected="Nowy" name="Clear" tool_tip="Clear the landing point."/> - <text length="1" name="Teleport Routing: " type="string"> + <text name="Teleport Routing: "> Trasa Teleportacji: </text> <combo_box name="landing type" tool_tip="Trasa Teleportacj-ustaw w jaki sposób będzie sę odbywać proces telportacji w posiadłości."> - <combo_item length="1" name="Blocked" type="string"> - Zablokowana - </combo_item> - <combo_item length="1" name="LandingPoint" type="string"> - Punkt Lądowania - </combo_item> - <combo_item length="1" name="Anywhere" type="string"> - Gdziekolwiek - </combo_item> + <combo_box.item name="Blocked" label="Zablokowana" + /> + <combo_box.item name="LandingPoint" label="Punkt Lądowania" + /> + <combo_box.item name="Anywhere" label="Gdziekolwiek" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Popychanie niedozwolone - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Popychanie niedozwolone (Ustawienie Regionu) - </string> + </panel.string> </panel> <panel label="Media" name="land_media_panel"> - <text length="1" name="with media:" type="string"> + <text name="with media:"> Typ Mediów: </text> <combo_box name="media type" tool_tip=""/> - <text length="1" name="at URL:" type="string"> + <text name="at URL:"> URL Mediów: </text> <button label="Ustaw..." label_selected="Ustaw..." name="set_media_url"/> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Opis: </text> <line_editor name="url_description" tool_tip="Text displayed next to play/load button"/> - <text length="1" name="Media texture:" type="string"> + <text name="Media texture:"> Zmień Teksturę: </text> @@ -450,7 +422,7 @@ Teksturę: film lub stronę internetową po naciśnięciu przycisku odtwarzania.) </text> - <text length="1" name="Options:" type="string"> + <text name="Options:"> Opcje Mediów: </text> @@ -458,23 +430,23 @@ Mediów: <check_box label="Powtórka Odtwarzania" name="media_loop" tool_tip="Odtwarzaj media z powtórką. Po wyświetleniu materialu, rozpocznie się odtwarzanie od początku."/> <check_box label="Ukryj URL Mediów" name="hide_media_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów wszystkim nieautoryzowanym użytkownikom. Nie dotyczy to jednak typów HTML."/> <check_box label="Ukryj URL Muzyki" name="hide_music_url" tool_tip="Wybranie tej opcji, zablokuje widok adresu do medów muzycznych w posiadłości wszystkim nieautoryzowanym użytkownikom"/> - <text length="1" name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych." type="string"> + <text name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych."> Rozmiar: </text> <spinner name="media_size_width" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych."/> <spinner name="media_size_height" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych."/> - <text length="1" name="pixels" type="string"> + <text name="pixels"> pixeli </text> - <text length="1" name="MusicURL:" type="string"> + <text name="MusicURL:"> URL Muzyki: </text> - <text length="1" name="Sound:" type="string"> + <text name="Sound:"> Dźwięk: </text> <check_box label="Restrykcja obiektów oraz gestur dozwolonych w tej posiadłości" name="check sound local"/> <button label="?" label_selected="?" name="?" left="432"/> - <text length="1" name="Voice settings:" type="string"> + <text name="Voice settings:"> Głos: </text> <check_box label="Rozmowy Dozwolone" name="parcel_enable_voice_channel"/> @@ -482,27 +454,25 @@ Mediów: <check_box label="Ogranicz komunikację głosową w tej posiadłości." name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="Dostęp" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> Dostęp do tej posiadłości: </text> <check_box label="Publiczny" name="public_access"/> - <text length="1" name="Only Allow" type="string"> + <text name="Only Allow"> Zablokuj dostęp dla: </text> <check_box label="Rezydentów niezarejestrowanych w systemie płatniczym z Linden Lab" name="limit_payment" tool_tip="Ban unidentified residents."/> <check_box label="Rezydentów z brakiem weryfikacji wieku " name="limit_age_verified" tool_tip="Zbanuj Rezydetów bez weryfikacji wieku. Odwiedź support.secondlife.com po więcej informacji."/> - <string name="estate_override"> + <panel.string name="estate_override"> Jedna lub więcej z tych opcji ustawiona jest z poziomu posiadłości - </string> + </panel.string> <check_box label="Udostępnij wejście grupie: [GROUP]" name="GroupCheck" tool_tip="Ustaw grupę w głównej zakładce"/> <check_box label="Sprzedaj wejściówki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej posiadłości"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Każdemu - </combo_item> - <combo_item name="Group"> - Grupie - </combo_item> + <combo_box.item name="Anyone" label="Każdemu" + /> + <combo_box.item name="Group" label="Grupie" + /> </combo_box> <spinner label="Cena w L$:" name="PriceSpin"/> <spinner label="Ilość godzin dostępu:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/pl/floater_customize.xml b/indra/newview/skins/default/xui/pl/floater_customize.xml index 83c7c5c87d..64d9300621 100755 --- a/indra/newview/skins/default/xui/pl/floater_customize.xml +++ b/indra/newview/skins/default/xui/pl/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Wygląd"> <tab_container name="customize tab container"> - <panel label="Części Ciała" name="body_parts_placeholder"/> + <placeholder label="Części Ciała" name="body_parts_placeholder"/> <panel label="Kształt" name="Shape"> <button label="Wróć" label_selected="Wróć" name="Revert"/> <button label="Ciało" label_selected="Ciało" name="Body"/> @@ -14,34 +14,30 @@ <button label="Tułów" label_selected="Tułów" name="Torso"/> <button label="Nogi" label_selected="Nogi" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string"> - Kobieta - </radio_item> - <radio_item length="1" name="radio2" type="string"> - Mężczyzna - </radio_item> + <radio_item name="radio" label="Kobieta"/> + <radio_item name="radio2" label="Mężczyzna"/> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: zabroniona modyfikacja </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowy kształt poprzez przeciągnięcie go ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny kształt z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tego kształtu. </text> <text name="Item Action Label"> @@ -56,27 +52,27 @@ z plików roboczych. <button label="Detale Twarzy" label_selected="Detale Twarzy" name="Face Detail"/> <button label="Makijaż" label_selected="Makijaż" name="Makeup"/> <button label="Detale Ciała" label_selected="Detale Ciała" name="Body Detail"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nową skórkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną skórkę z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej skórki. </text> <text name="Item Action Label"> @@ -95,27 +91,27 @@ z plików roboczych. <button label="Styl" label_selected="Styl" name="Style"/> <button label="Brwi" label_selected="Brwi" name="Eyebrows"/> <button label="Twarzy" label_selected="Twarzy" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe włosy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne włosy z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych włosów. </text> <text name="Item Action Label"> @@ -128,27 +124,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Oczy" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe oczy poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne oczy z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych oczów. </text> <text name="Item Action Label"> @@ -169,27 +165,27 @@ z plików roboczych. <button label="Zapisz" label_selected="Zapisz" name="Save"/> <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikowanie zabronione </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nową koszulę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną koszulę z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej koszuli. </text> <text name="Item Action Label"> @@ -204,27 +200,27 @@ z plików roboczych. <button label="Zapisz" label_selected="Zapisz" name="Save"/> <button label="Zapisz Jako..." label_selected="Zapisz Jako..." name="Save As"/> <button label="Wróć" label_selected="Wróć" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikcja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe spodnie poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne spodnie z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych spodni. </text> <text name="Item Action Label"> @@ -232,27 +228,27 @@ z plików roboczych. </text> </panel> <panel label="Buty" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładwanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe buty poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne buty z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych butów. </text> <text name="Item Action Label"> @@ -267,27 +263,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Skarpety" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe skarpety poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne skarpety z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych skarpet. </text> <text name="Item Action Label"> @@ -302,27 +298,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Kurtka" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nową kurtkę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną kurtkę z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej kurtki. </text> <text name="Item Action Label"> @@ -338,27 +334,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Rękawiczki" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowe rękawiczki poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własne rękawiczki z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tych rękawiczek </text> <text name="Item Action Label"> @@ -373,27 +369,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Podkoszulek" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nowy podkoszulek poprzez przeciągnięcie ich ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własny podkoszulek z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tego podkoszulka. </text> <text name="Item Action Label"> @@ -408,27 +404,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Bielizna" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nową bieliznę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną bieliznę z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej bielizny. </text> <text name="Item Action Label"> @@ -443,27 +439,27 @@ z plików roboczych. <button label="Wróć" label_selected="Wróć" name="Revert"/> </panel> <panel label="Spódnica" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: modyfikacja zabroniona </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: ładowanie... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: niezałożone </text> - <text length="1" name="path" type="string"> + <text name="path"> Zapisane w [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Załóż nową spódnicę poprzez przeciągnięcie jej ze swojej szafy na awatara. Alternatywnie, możesz także stworzyć własną spódnicę z plików roboczych. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Nie posiadasz prawa do modyfikowania tej spódnicy. </text> <text name="Item Action Label"> diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml index 6f2dc69d8e..ea8db99570 100755 --- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml @@ -5,85 +5,85 @@ <button label="?" name="WLDayCycleHelp" /> <multi_slider label="" name="WLTimeSlider" /> <multi_slider label="" name="WLDayCycleKeys" /> - <text type="string" length="1" name="WL12am"> + <text name="WL12am"> 12am </text> - <text type="string" length="1" name="WL3am"> + <text name="WL3am"> 3am </text> - <text type="string" length="1" name="WL6am"> + <text name="WL6am"> 6am </text> - <text type="string" length="1" name="WL9amHash"> + <text name="WL9amHash"> 9am </text> - <text type="string" length="1" name="WL12pmHash"> + <text name="WL12pmHash"> 12pm </text> - <text type="string" length="1" name="WL3pm"> + <text name="WL3pm"> 3pm </text> - <text type="string" length="1" name="WL6pm"> + <text name="WL6pm"> 6pm </text> - <text type="string" length="1" name="WL9pm"> + <text name="WL9pm"> 9pm </text> - <text type="string" length="1" name="WL12am2"> + <text name="WL12am2"> 12am </text> - <text type="string" length="1" name="WL12amHash"> + <text name="WL12amHash"> | </text> - <text type="string" length="1" name="WL3amHash"> + <text name="WL3amHash"> I </text> - <text type="string" length="1" name="WL6amHash"> + <text name="WL6amHash"> | </text> - <text type="string" length="1" name="WL9amHash2"> + <text name="WL9amHash2"> I </text> - <text type="string" length="1" name="WL12pmHash2"> + <text name="WL12pmHash2"> | </text> - <text type="string" length="1" name="WL3pmHash"> + <text name="WL3pmHash"> I </text> - <text type="string" length="1" name="WL6pmHash"> + <text name="WL6pmHash"> | </text> - <text type="string" length="1" name="WL9pmHash"> + <text name="WL9pmHash"> I </text> - <text type="string" length="1" name="WL12amHash2"> + <text name="WL12amHash2"> | </text> <button label="Dodaj" label_selected="Dodaj" name="WLAddKey" /> <button label="Usuń" label_selected="Usuń" name="WLDeleteKey" /> - <text type="string" length="1" name="WLCurKeyFrameText"> + <text name="WLCurKeyFrameText"> Preferencje Czasu: </text> - <text type="string" length="1" name="WLCurKeyTimeText"> + <text name="WLCurKeyTimeText"> Czas: </text> <spinner label="Godz" name="WLCurKeyHour" /> <spinner label="Min" name="WLCurKeyMin" /> - <text type="string" length="1" name="WLCurKeyTimeText2"> + <text name="WLCurKeyTimeText2"> Ustawienia: </text> <combo_box label="Preset" name="WLKeyPresets" /> - <text type="string" length="1" name="DayCycleText"> + <text name="DayCycleText"> Przerwij: </text> <combo_box label="5 min" name="WLSnapOptions" /> - <text type="string" length="1" name="DayCycleText2"> + <text name="DayCycleText2"> Długość Cyklu: </text> <spinner label="Godz" name="WLLengthOfDayHour" /> <spinner label="Min" name="WLLengthOfDayMin" /> <spinner label="Sek" name="WLLengthOfDaySec" /> - <text type="string" length="1" name="DayCycleText3"> + <text name="DayCycleText3"> Wygląd: </text> <button label="Start" label_selected="Start" name="WLAnimSky" /> diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml index fbb8eca70e..3e0809b193 100755 --- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_env_settings.xml @@ -1,21 +1,21 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Environment Editor Floater" title="Edytor Środowiska"> - <text type="string" length="1" name="EnvTimeText"> + <text name="EnvTimeText"> Czas </text> - <text type="string" length="1" name="EnvTimeText2"> + <text name="EnvTimeText2"> 12:00 PM </text> <slider label="" name="EnvTimeSlider" /> - <text type="string" length="1" name="EnvCloudText"> + <text name="EnvCloudText"> Chmury: </text> <slider label="" name="EnvCloudSlider" /> - <text type="string" length="1" name="EnvWaterColorText"> + <text name="EnvWaterColorText"> Kolor Wody </text> <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij by wybrać kolor" /> - <text type="string" length="1" name="EnvWaterFogText"> + <text name="EnvWaterFogText"> Zamglenie: </text> <slider label="" name="EnvWaterFogSlider" /> diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml index 051e9b510d..f1e6e5ea9e 100755 --- a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml +++ b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Hardware Settings Floater" title="Ustawienia Sprzętowe"> - <text type="string" length="1" name="Filtering:"> + <text name="Filtering:"> Filtrowanie: </text> <check_box label="Filtrowanie Anizotropowe" name="ani" /> - <text type="string" length="1" name="Antialiasing:"> + <text name="Antialiasing:"> Antialiasing: </text> <combo_box label="Antialiasing" name="fsaa" width="84"> @@ -15,10 +15,10 @@ <combo_box.item name="16x" label="16x" /> </combo_box> <spinner label="Gamma:" name="gamma" /> - <text type="string" length="1" name="(brightness, lower is brighter)"> + <text name="(brightness, lower is brighter)"> (jaskrawość, mniej jest jaśniej, 0=domyślny) </text> - <text type="string" length="1" name="Enable VBO:"> + <text name="Enable VBO:"> Włącz VBO: </text> <check_box label="Włącz Bufor Vertexów OpenGL" name="vbo" tool_tip="" /> diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml index fb4e30d2a3..2224c026ef 100755 --- a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Żadne" label_selected="Żadne" name="None" /> <check_box label="Zawsze pokazuj foldery" name="check_show_empty" /> <check_box label="Od czasu wylogowania" name="check_since_logoff" /> - <text type="string" length="1" name="- OR -"> + <text name="- OR -"> - LUB - </text> <spinner label="Od godzin" name="spin_hours_ago" /> diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml index 8e21f225ca..2ab92dfbb7 100755 --- a/indra/newview/skins/default/xui/pl/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pl/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" width="590" title="Konfiguracja Joysticka"> - <check_box name="enable_joystick"> - Aktywuj Joystick: - </check_box> + <check_box name="enable_joystick" label="Aktywuj Joystick:"/> <text left="130" name="joystick_type" width="360"/> <spinner label="Kalibracja Osi X" left="20" width="170" label_width="130" name="JoystickAxis1"/> <spinner label="Kalibracja Osi Y" left="210" width="170" label_width="130" name="JoystickAxis2" /> @@ -14,18 +12,12 @@ <check_box label="Bezpośrednie" left="205" name="ZoomDirect" /> <check_box label="Kursor 3D" left="340" name="Cursor3D" /> <check_box label="Automatyczne" left="450" name="AutoLeveling" /> - <text length="1" left="22" name="Control Modes:" type="string"> + <text left="22" name="Control Modes:"> Kontroluj: </text> - <check_box left="130" width="90" name="JoystickAvatarEnabled"> - Awatara - </check_box> - <check_box left="205" width="90" name="JoystickBuildEnabled"> - Budowanie - </check_box> - <check_box left="282" width="90" name="JoystickFlycamEnabled"> - Kamerę podczas latania - </check_box> + <check_box left="130" width="90" name="JoystickAvatarEnabled" label="Awatara"/> + <check_box left="205" width="90" name="JoystickBuildEnabled" label="Budowanie"/> + <check_box left="282" width="90" name="JoystickFlycamEnabled" label="Kamerę podczas latania"/> <text width="104" name="XScale"> Skala X </text> @@ -113,12 +105,14 @@ <button left="366" label="Ustawienia Domyślne" name="SpaceNavigatorDefaults" /> <button left="366" label="OK" label_selected="OK" name="ok_btn" /> <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" /> - <string name="JoystickMonitor"> - Monitor Joysticka - </string> - <string name="Axis"> - Oś [NUM] - </string> + <stat_view label="Monitor Joysticka" name="axis_view"> + <stat_bar label="Oś 0" name="axis0"/> + <stat_bar label="Oś 1" name="axis1"/> + <stat_bar label="Oś 2" name="axis2"/> + <stat_bar label="Oś 3" name="axis3"/> + <stat_bar label="Oś 4" name="axis4"/> + <stat_bar label="Oś 5" name="axis5"/> + </stat_view> <string name="NoDevice"> brak podłącznego urządzenia </string> diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml new file mode 100644 index 0000000000..361f8f4f49 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ E
+ </floater.string>
+ <floater.string name="mini_map_west">
+ W
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SW
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NW
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_moveview.xml b/indra/newview/skins/default/xui/pl/floater_moveview.xml index 715fec0bae..e28cfd589d 100755 --- a/indra/newview/skins/default/xui/pl/floater_moveview.xml +++ b/indra/newview/skins/default/xui/pl/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Obróć w lewo" /> <button label="" label_selected="" name="turn right btn" tool_tip="Obroć w Prawo" /> <button label="" label_selected="" name="move up btn" @@ -10,4 +11,5 @@ <joystick_slide name="slide right btn" tool_tip="Przesuń w prawo" /> <joystick_turn name="forward btn" tool_tip="Przesuń do przodu" /> <joystick_turn name="backward btn" tool_tip="Przesuń do tyłu" /> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml index 9969d661a0..0470f4d6dc 100755 --- a/indra/newview/skins/default/xui/pl/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pl/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="objectcontents" title="Zawartość Obiektu"> - <text type="string" length="1" name="object_name"> + <text name="object_name"> [DESC]: </text> <button label="Kopiuj do Szafy" label_selected="Kopiuj do Szafy" diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml index 70358909f2..dfb1b6616c 100755 --- a/indra/newview/skins/default/xui/pl/floater_pay.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay.xml @@ -6,16 +6,16 @@ <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="Zapłać" label_selected="Zapłać" name="pay btn" /> <button label="Anuluj" label_selected="Anuluj" name="cancel btn" /> - <text type="string" length="1" name="payee_label"> + <text name="payee_label"> Zapłata dla: </text> - <text type="string" length="1" name="payee_name"> + <text name="payee_name"> [FIRST] [LAST] </text> - <text type="string" length="1" name="fastpay text" halign="left" left="12"> + <text name="fastpay text" halign="left" left="12"> Szybka Zapłata: </text> - <text type="string" length="1" name="amount text"> + <text name="amount text"> Suma: </text> <line_editor left="52" name="amount" /> diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml index 97c87d55d3..376f517aaa 100755 --- a/indra/newview/skins/default/xui/pl/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/pl/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <text type="string" length="1" name="payee_group" width="100" halign="left"> + <text name="payee_group" width="100" halign="left"> Zapłać Grupie: </text> - <text type="string" length="1" name="payee_resident" width="120" halign="left" > + <text name="payee_resident" width="120" halign="left" > Zapłać Rezydentowi: </text> - <text type="string" length="1" name="payee_name" left="125"> + <text name="payee_name" left="125"> [FIRST] [LAST] </text> - <text type="string" length="1" name="object_name_label" left="5" width="95" halign="left"> + <text name="object_name_label" left="5" width="95" halign="left"> Poprzez Obiekt: </text> - <text type="string" length="1" name="object_name_text" left="105" > + <text name="object_name_text" left="105" > ... </text> - <text type="string" length="1" name="fastpay text" width="95" halign="left"> + <text name="fastpay text" width="95" halign="left"> Szybka Zapłata: </text> - <text type="string" length="1" name="amount text" left="5" halign="left"> + <text name="amount text" left="5" halign="left"> Suma: </text> <button label="L$1" label_selected="L$1" name="fastpay 1" left="105"/> diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml index a86e1bcfa5..0081d1d3a7 100755 --- a/indra/newview/skins/default/xui/pl/floater_post_process.xml +++ b/indra/newview/skins/default/xui/pl/floater_post_process.xml @@ -3,19 +3,19 @@ <tab_container name="Post-Process Tabs"> <panel label="Kolor Filtru" name="wmiColorFilterPanel"> <check_box label="Udostępnij" name="wmiColorFilterToggle" /> - <text type="string" length="1" name="wmiColorFilterBrightnessText"> + <text name="wmiColorFilterBrightnessText"> Jasność </text> <slider label="" name="wmiColorFilterBrightness" /> - <text type="string" length="1" name="wmiColorFilterSaturationText"> + <text name="wmiColorFilterSaturationText"> Nasycenie </text> <slider label="" name="wmiColorFilterSaturation" /> - <text type="string" length="1" name="wmiColorFilterContrastText"> + <text name="wmiColorFilterContrastText"> Kontrast </text> <slider label="" name="wmiColorFilterContrast" /> - <text type="string" length="1" name="wmiColorFilterBaseText"> + <text name="wmiColorFilterBaseText"> Kontrast Koloru Podstawowego </text> <slider label="R" name="wmiColorFilterBaseR" /> @@ -25,30 +25,30 @@ </panel> <panel label="Wizja Nocna" name="wmiNightVisionPanel"> <check_box label="Udostępnij" name="wmiNightVisionToggle" /> - <text type="string" length="1" name="wmiNightVisionBrightMultText"> + <text name="wmiNightVisionBrightMultText"> Wielokrotne Wzmocnienie Światła </text> <slider label="" name="wmiNightVisionBrightMult" /> - <text type="string" length="1" name="wmiNightVisionNoiseSizeText"> + <text name="wmiNightVisionNoiseSizeText"> Rozmiar Szumu </text> <slider label="" name="wmiNightVisionNoiseSize" /> - <text type="string" length="1" name="wmiNightVisionNoiseStrengthText"> + <text name="wmiNightVisionNoiseStrengthText"> Moc Szumu </text> <slider label="" name="wmiNightVisionNoiseStrength" /> </panel> <panel label="Bloom" name="wmiBloomPanel"> <check_box label="Udostępnij" name="wmiBloomToggle" /> - <text type="string" length="1" name="wmiBloomExtractText"> + <text name="wmiBloomExtractText"> Ekstracja Luminacji </text> <slider label="" name="wmiBloomExtract" /> - <text type="string" length="1" name="wmiBloomSizeText"> + <text name="wmiBloomSizeText"> Rozmiar Rozmazania Obrazu </text> <slider label="" name="wmiBloomSize" /> - <text type="string" length="1" name="wmiBloomStrengthText"> + <text name="wmiBloomStrengthText"> Moc Rozmazania Obrazu </text> <slider label="" name="wmiBloomStrength" /> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml index d6752223f9..7139c470a4 100755 --- a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_anim"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Opis: </text> <button label="Używaj w Świecie" label_selected="Stop" name="Anim play btn" diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml index c67d9a9206..0b3b9063c4 100755 --- a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview notecard" title="Nota:"> <button label="Zapisz" label_selected="Zapisz" name="Save" /> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Opis: </text> - <text_editor type="string" length="1" name="Notecard Editor"> + <text_editor name="Notecard Editor"> Ładowanie... </text_editor> <string name="no_object"> diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml index 0c8684a8cf..656b9bec38 100755 --- a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_sound"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Opis: </text> <button label="Odtwarzaj Lokalnie" label_selected="Odtwarzaj Lokalnie" diff --git a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml index 860feee9b1..8bcd800411 100755 --- a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Opis: </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> Wymiary: [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml index a831c7e511..853c669ade 100755 --- a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml @@ -40,9 +40,7 @@ <combo_box.item name="Select_category" label="Wybierz Kategorię:"/> <combo_box.item name="Age__Age_play" label="Wiek > Udawanie Nieletniej Osoby"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Wiek > Dorosły Rezydent w Teen Second Life"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Wiek > Nieletni Rezydent poza Teen Second Life - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Wiek > Nieletni Rezydent poza Teen Second Life"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Napaść > Strefa Militarna / Niebezpieczny Obszar"/> <combo_box.item name="Assault__Safe_area" label="Napaść > Bezpieczny Obszar"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Napaść > Obszar do Testowania Broni"/> @@ -67,12 +65,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Prześladowanie > Znieważanie Słowne"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Nieprzyzwoitość > Obraźliwa Treść lub Postępowanie"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Nieprzyzwoitość > Niestosowne Imię Awatara"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'PG' - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'Mature' - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'PG'"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Nieprzyzwoitość > Obraźliwa treść i postępowanie w regionie 'Mature'"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Naruszenie Własności Intelektualnej > Usunięcie Treści"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Naruszenie Własności Intelektualnej > CopyBot albo Nadużycie Przywilejów"/> <combo_box.item name="Intolerance" label="Nietolerancja"/> diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml index 55a18be148..ca3fde33e7 100755 --- a/indra/newview/skins/default/xui/pl/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="Skrypt: Skrypt Obrotu"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Opis: </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml index d00f1c267a..50a9de1500 100755 --- a/indra/newview/skins/default/xui/pl/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pl/floater_script_search.xml @@ -5,10 +5,10 @@ <button label="Zamień" label_selected="Zamień" name="replace_btn" /> <button label="Zamień Wszystko" label_selected="Zamień Wszystko" name="replace_all_btn" /> - <text type="string" length="1" name="txt"> + <text name="txt"> Szukaj </text> - <text type="string" length="1" name="txt2"> + <text name="txt2"> Zamień </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_select_key.xml b/indra/newview/skins/default/xui/pl/floater_select_key.xml index aa9e577738..194a6da1bd 100755 --- a/indra/newview/skins/default/xui/pl/floater_select_key.xml +++ b/indra/newview/skins/default/xui/pl/floater_select_key.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="modal container" title=""> <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> By wybrać wciśnij klawisz </text> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml index 24bf88da85..4945cf6413 100755 --- a/indra/newview/skins/default/xui/pl/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pl/floater_snapshot.xml @@ -15,12 +15,8 @@ <button label="Wyślij" name="send_btn"/> <button label="Załaduj (L$[AMOUNT])" name="upload_btn"/> <flyout_button label="Zapisz" name="save_btn" tool_tip="Zapisz zdjęcie na dysk"> - <flyout_button.item name="save_item"> - Zapisz - </flyout_button.item> - <flyout_button.item name="saveas_item"> - Zapisz Jako... - </flyout_button.item> + <flyout_button.item name="save_item" label="Zapisz"/> + <flyout_button.item name="saveas_item" label="Zapisz Jako..."/> </flyout_button> <button label="Anuluj" name="discard_btn"/> <button label="Więcej >>" name="more_btn" tool_tip="Ustawienia Zaawansowane"/> diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml index 702422f1ba..6d4df12e4b 100755 --- a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Kliknij by wybrać obraz </string> - <text length="1" name="Multiple" type="string"> + <text name="Multiple"> Wiele </text> - <text length="1" name="unknown" type="string"> + <text name="unknown"> Wymiary: [DIMENSIONS] </text> <button label="Domyślna" label_selected="Domyślna" name="Default"/> diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml index c896222646..ad03e6e9f0 100755 --- a/indra/newview/skins/default/xui/pl/floater_tools.xml +++ b/indra/newview/skins/default/xui/pl/floater_tools.xml @@ -5,31 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Edycja"/> <button label="" label_selected="" name="button create" tool_tip="Stwórz"/> <button label="" label_selected="" name="button land" tool_tip="Teren"/> - <check_box label="Zbliżenie" name="radio zoom"/> - <volume_slider name="slider zoom"/> - <check_box label="Obracanie (Ctrl)" name="radio orbit"/> - <check_box label="Przesunięcie (Ctrl-Shift)" name="radio pan"/> - <check_box label="Przesuń" name="radio move"/> - <check_box label="Podnieś (Ctrl)" name="radio lift"/> - <check_box label="Obróć (Ctrl-Shift)" name="radio spin"/> - <check_box label="Pozycja" name="radio position"/> - <check_box label="Obróć (Ctrl)" name="radio rotate"/> - <check_box label="Rozciągnij (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Wybierz Teksturę" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zbliżenie" name="radio zoom"/> + <radio_item label="Obracanie (Ctrl)" name="radio orbit"/> + <radio_item label="Przesunięcie (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Przesuń" name="radio move"/> + <radio_item label="Podnieś (Ctrl)" name="radio lift"/> + <radio_item label="Obróć (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Pozycja" name="radio position"/> + <radio_item label="Obróć (Ctrl)" name="radio rotate"/> + <radio_item label="Rozciągnij (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Wybierz Teksturę" name="radio select face"/> + </radio_group> <check_box label="Edytuj Połączone Części" name="checkbox edit linked parts"/> <text name="text ruler mode"> Linijka: </text> <combo_box name="combobox grid mode"> - <combo_item name="World"> - Świat - </combo_item> - <combo_item name="Local"> - Lokalna - </combo_item> - <combo_item name="Reference"> - Względna - </combo_item> + <combo_box.item name="World" label="Świat" + /> + <combo_box.item name="Local" label="Lokalna" + /> + <combo_box.item name="Reference" label="Względna" + /> </combo_box> <check_box label="Rozciągnij 2 Strony" name="checkbox uniform"/> <check_box label="Rozciągnij Teksturę" name="checkbox stretch textures"/> @@ -57,13 +59,15 @@ <check_box label="Kopiuj zaznaczone" name="checkbox copy selection"/> <check_box label="Środek" name="checkbox copy centers"/> <check_box label="Obróć" name="checkbox copy rotates"/> - <check_box label="Zaznaczanie" name="radio select land"/> - <check_box label="Prostowanie" name="radio flatten"/> - <check_box label="Podnoszenie" name="radio raise"/> - <check_box label="Obniżanie" name="radio lower"/> - <check_box label="Wygładzanie" name="radio smooth"/> - <check_box label="Fałdowanie" name="radio noise"/> - <check_box label="Cofnij modyfikację" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Zaznaczanie" name="radio select land"/> + <radio_item label="Prostowanie" name="radio flatten"/> + <radio_item label="Podnoszenie" name="radio raise"/> + <radio_item label="Obniżanie" name="radio lower"/> + <radio_item label="Wygładzanie" name="radio smooth"/> + <radio_item label="Fałdowanie" name="radio noise"/> + <radio_item label="Cofnij modyfikację" name="radio revert"/> + </radio_group> <button label="Zastosuj" label_selected="Zastosuj" name="button apply to selection" tool_tip="Modyfikuj zaznaczony teren"/> <text name="Bulldozer:"> Burzenie: @@ -71,7 +75,7 @@ <text name="Dozer Size:"> Rozmiar </text> - <text length="1" name="Strength:" type="string"> + <text name="Strength:"> Siła </text> <volume_slider name="slider force"/> @@ -115,9 +119,7 @@ <text name="Permissions:"> Prawa: </text> - <text name="perm_modify"> - Nie masz prawda do modyfikacji tego obiektu - </text> + <check_box label="Udostępnij grupie" name="checkbox share with group" tool_tip="Pozwól członkom grupy przesuwać, modyfikować, kopiować i usuwać."/> <string name="text deed continued"> Przypisz... @@ -134,49 +136,35 @@ Cena: L$ </text> <line_editor name="Edit Cost"/> - <radio_group name="sale type"> - <radio_item name="Original"> - Orginał - </radio_item> - <radio_item name="Copy"> - Kopia - </radio_item> - <radio_item name="Contents"> - Zawartość - </radio_item> - </radio_group> - <text name="Next owner can:"> - Następny właściciel: - </text> - <check_box label="Zmienia" name="checkbox next owner can modify"/> - <check_box label="Kopiuje" name="checkbox next owner can copy"/> - <check_box label="Oddaje/Sprzedaje" name="checkbox next owner can transfer"/> + <combo_box name="sale type"> + <combo_box.item label="Kopia" name="Copy"/> + <combo_box.item label="Zawartość" name="Contents"/> + <combo_box.item label="Orginał" name="Original"/> + </combo_box> + <text name="label click action"> Lewe Kliknięcie: </text> <combo_box name="clickaction"> - <combo_item name="Touch/grab(default)"> - Dotknij (domyślne) - </combo_item> - <combo_item name="Sitonobject"> - Usiądź na Obiekcie - </combo_item> - <combo_item name="Buyobject"> - Kup Obiekt - </combo_item> - <combo_item name="Payobject"> - Zapłać Obiektowi - </combo_item> - <combo_item name="Open"> - Otwórz - </combo_item> - <combo_item name="Play"> - Odtwarzaj Media - </combo_item> - <combo_item name="Opemmedia"> - Otwrórz Media - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Dotknij (domyślne)" + /> + <combo_box.item name="Sitonobject" label="Usiądź na Obiekcie" + /> + <combo_box.item name="Buyobject" label="Kup Obiekt" + /> + <combo_box.item name="Payobject" label="Zapłać Obiektowi" + /> + <combo_box.item name="Open" label="Otwórz" + /> + <combo_box.item name="Play" label="Odtwarzaj Media" + /> + <combo_box.item name="Opemmedia" label="Otwrórz Media" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Nie masz prawda do modyfikacji tego obiektu + </text> <text name="B:"> B: </text> @@ -195,6 +183,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Następny właściciel: + </text> + <check_box label="Zmienia" name="checkbox next owner can modify"/> + <check_box label="Kopiuje" name="checkbox next owner can copy"/> + <check_box name="checkbox next owner can transfer"/> + </panel> <string name="text modify info 1"> Możesz modyfikować ten obiekt. </string> @@ -259,56 +254,41 @@ Materiał </text> <combo_box name="material"> - <combo_item name="Stone"> - Kamień - </combo_item> - <combo_item name="Metal"> - Metal - </combo_item> - <combo_item name="Glass"> - Szkło - </combo_item> - <combo_item name="Wood"> - Drewno - </combo_item> - <combo_item name="Flesh"> - Ciało - </combo_item> - <combo_item name="Plastic"> - Plastik - </combo_item> - <combo_item name="Rubber"> - Guma - </combo_item> + <combo_box.item name="Stone" label="Kamień" + /> + <combo_box.item name="Metal" label="Metal" + /> + <combo_box.item name="Glass" label="Szkło" + /> + <combo_box.item name="Wood" label="Drewno" + /> + <combo_box.item name="Flesh" label="Ciało" + /> + <combo_box.item name="Plastic" label="Plastik" + /> + <combo_box.item name="Rubber" label="Guma" + /> </combo_box> <text name="label basetype"> Rodzaj Bloku Budowalnego </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Klocek - </combo_item> - <combo_item name="Cylinder"> - Walec - </combo_item> - <combo_item name="Prism"> - Graniastosłup - </combo_item> - <combo_item name="Sphere"> - Kula - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Tube"> - Rura - </combo_item> - <combo_item name="Ring"> - Pierścień - </combo_item> - <combo_item name="Sculpted"> - Skulpty - </combo_item> + <combo_box.item name="Box" label="Klocek" + /> + <combo_box.item name="Cylinder" label="Walec" + /> + <combo_box.item name="Prism" label="Graniastosłup" + /> + <combo_box.item name="Sphere" label="Kula" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Tube" label="Rura" + /> + <combo_box.item name="Ring" label="Pierścień" + /> + <combo_box.item name="Sculpted" label="Skulpty" + /> </combo_box> <text name="text cut"> Wykrój początek i koniec @@ -327,18 +307,14 @@ Kształt Wydrążenia </text> <combo_box name="hole"> - <combo_item name="Default"> - Domyślny - </combo_item> - <combo_item name="Circle"> - Koło - </combo_item> - <combo_item name="Square"> - Kwadrat - </combo_item> - <combo_item name="Triangle"> - Trójkąt - </combo_item> + <combo_box.item name="Default" label="Domyślny" + /> + <combo_box.item name="Circle" label="Koło" + /> + <combo_box.item name="Square" label="Kwadrat" + /> + <combo_box.item name="Triangle" label="Trójkąt" + /> </combo_box> <text name="text twist"> Skręcenie @@ -389,21 +365,16 @@ Typ Ścięgna </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (żadne) - </combo_item> - <combo_item name="Sphere"> - Kula - </combo_item> - <combo_item name="Torus"> - Torus - </combo_item> - <combo_item name="Plane"> - Płaczyzna - </combo_item> - <combo_item name="Cylinder"> - Walec - </combo_item> + <combo_box.item name="None" label="(żadne)" + /> + <combo_box.item name="Sphere" label="Kula" + /> + <combo_box.item name="Torus" label="Torus" + /> + <combo_box.item name="Plane" label="Płaczyzna" + /> + <combo_box.item name="Cylinder" label="Walec" + /> </combo_box> </panel> <panel label="Atrybuty" name="Features"> @@ -447,88 +418,64 @@ Mapowanie </text> <combo_box name="combobox texgen"> - <combo_item name="Default"> - Domyślne - </combo_item> - <combo_item name="Planar"> - Planarne - </combo_item> + <combo_box.item name="Default" label="Domyślne" + /> + <combo_box.item name="Planar" label="Planarne" + /> </combo_box> <text name="label shininess"> Połysk </text> <combo_box name="combobox shininess"> - <combo_item name="None"> - Żadny - </combo_item> - <combo_item name="Low"> - Niski - </combo_item> - <combo_item name="Medium"> - Średni - </combo_item> - <combo_item name="High"> - Wysoki - </combo_item> + <combo_box.item name="None" label="Żadny" + /> + <combo_box.item name="Low" label="Niski" + /> + <combo_box.item name="Medium" label="Średni" + /> + <combo_box.item name="High" label="Wysoki" + /> </combo_box> <text name="label bumpiness"> Powierzchnia </text> <combo_box name="combobox bumpiness"> - <combo_item name="None"> - Żadna - </combo_item> - <combo_item name="Brightness"> - Najjaśniejsza - </combo_item> - <combo_item name="Darkness"> - Najciemniejsza - </combo_item> - <combo_item name="woodgrain"> - Drewniano-ziarnista - </combo_item> - <combo_item name="bark"> - Kory Drzewa - </combo_item> - <combo_item name="bricks"> - Cegieł - </combo_item> - <combo_item name="checker"> - Planszy Szachowej - </combo_item> - <combo_item name="concrete"> - Betonu - </combo_item> - <combo_item name="crustytile"> - Płytki/Kafelki - </combo_item> - <combo_item name="cutstone"> - Kamienia - </combo_item> - <combo_item name="discs"> - Dysku CD - </combo_item> - <combo_item name="gravel"> - Żwiru - </combo_item> - <combo_item name="petridish"> - Skamieliny - </combo_item> - <combo_item name="siding"> - Brzegu - </combo_item> - <combo_item name="stonetile"> - Płytki Kamiennej - </combo_item> - <combo_item name="stucco"> - Stucco - </combo_item> - <combo_item name="suction"> - Suction - </combo_item> - <combo_item name="weave"> - Fali - </combo_item> + <combo_box.item name="None" label="Żadna" + /> + <combo_box.item name="Brightness" label="Najjaśniejsza" + /> + <combo_box.item name="Darkness" label="Najciemniejsza" + /> + <combo_box.item name="woodgrain" label="Drewniano-ziarnista" + /> + <combo_box.item name="bark" label="Kory Drzewa" + /> + <combo_box.item name="bricks" label="Cegieł" + /> + <combo_box.item name="checker" label="Planszy Szachowej" + /> + <combo_box.item name="concrete" label="Betonu" + /> + <combo_box.item name="crustytile" label="Płytki/Kafelki" + /> + <combo_box.item name="cutstone" label="Kamienia" + /> + <combo_box.item name="discs" label="Dysku CD" + /> + <combo_box.item name="gravel" label="Żwiru" + /> + <combo_box.item name="petridish" label="Skamieliny" + /> + <combo_box.item name="siding" label="Brzegu" + /> + <combo_box.item name="stonetile" label="Płytki Kamiennej" + /> + <combo_box.item name="stucco" label="Stucco" + /> + <combo_box.item name="suction" label="Suction" + /> + <combo_box.item name="weave" label="Fali" + /> </combo_box> <text name="tex scale"> Ilość powtórzeń @@ -592,43 +539,43 @@ <button label="Kup..." label_selected="Kup..." name="button buy land"/> <button label="Anuluj..." label_selected="Anuluj..." name="button abandon land"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Przeciągaj kolorowe pierścienie żeby obracać obiekt - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Kliknij i przeciągaj żeby rozciągnąć wybraną stronę - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Wybierz opcję: - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Kliknij i przytrzymaj żeby modyfikować teren - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Kliknij i przeciągnij żeby zmienić widok - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Przeciągnij by przesunąć, wybierz Ctrl by podnieść, wybierz Ctrl-Shift by obrócić - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Kliknij in-world by zacząć budować - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Edytowanie Terenu: - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Widok - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Lokalna - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Świat - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Względa - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Załączniki - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml index 61ffce4177..a22b5809dc 100755 --- a/indra/newview/skins/default/xui/pl/floater_water.xml +++ b/indra/newview/skins/default/xui/pl/floater_water.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Water Floater" title="Zaawansowany Edytor Wody"> - <text type="string" length="1" name="KeyFramePresetsText"> + <text name="KeyFramePresetsText"> Ustawienia Wody: </text> <button label="Nowe" label_selected="Nowe" name="WaterNewPreset" /> @@ -8,89 +8,89 @@ <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset" /> <tab_container name="Water Tabs"> <panel label="Ustawienia" name="Settings"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Kolor Podwodnej Mgły </text> <button label="?" name="WaterFogColorHelp" /> <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij by wybrać kolor" /> - <text type="string" length="1" name="WaterFogDensText"> + <text name="WaterFogDensText"> Wykładnik Gęstości Mgły </text> <button label="?" name="WaterFogDensityHelp" /> <slider label="" name="WaterFogDensity" /> - <text type="string" length="1" name="WaterUnderWaterFogModText"> + <text name="WaterUnderWaterFogModText"> Modyfikator Mgły </text> <button label="?" name="WaterUnderWaterFogModHelp" /> <slider label="" name="WaterUnderWaterFogMod" /> - <text type="string" length="1" name="BDensText"> + <text name="BDensText"> Skala Zmarszczeń </text> <button label="?" name="WaterNormalScaleHelp" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> 1 </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> 2 </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> 3 </text> <slider label="" name="WaterNormalScaleX" /> <slider label="" name="WaterNormalScaleY" /> <slider label="" name="WaterNormalScaleZ" /> - <text type="string" length="1" name="HDText"> + <text name="HDText"> Skala Fresnela </text> <button label="?" name="WaterFresnelScaleHelp" /> <slider label="" name="WaterFresnelScale" /> - <text type="string" length="1" name="FresnelOffsetText"> + <text name="FresnelOffsetText"> Przesunięcie Fresnela </text> <button label="?" name="WaterFresnelOffsetHelp" /> <slider label="" name="WaterFresnelOffset" /> - <text type="string" length="1" name="DensMultText"> + <text name="DensMultText"> Górna Refrakcja </text> <button label="?" name="WaterScaleAboveHelp" /> <slider label="" name="WaterScaleAbove" /> - <text type="string" length="1" name="WaterScaleBelowText"> + <text name="WaterScaleBelowText"> Dolna Refrakcja </text> <button label="?" name="WaterScaleBelowHelp" /> <slider label="" name="WaterScaleBelow" /> - <text type="string" length="1" name="MaxAltText"> + <text name="MaxAltText"> Mnożnik Rozmycia </text> <button label="?" name="WaterBlurMultiplierHelp" /> <slider label="" name="WaterBlurMult" /> </panel> <panel label="Rysowanie" name="Waves"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Kierunek Dużych Fal </text> <button label="?" name="WaterWave1Help" /> - <text type="string" length="1" name="WaterWave1DirXText"> + <text name="WaterWave1DirXText"> X </text> - <text type="string" length="1" name="WaterWave1DirYText"> + <text name="WaterWave1DirYText"> Y </text> <slider label="" name="WaterWave1DirX" /> <slider label="" name="WaterWave1DirY" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> Kierunek Małych Fal </text> <button label="?" name="WaterWave2Help" /> - <text type="string" length="1" name="WaterWave2DirXText"> + <text name="WaterWave2DirXText"> X </text> - <text type="string" length="1" name="WaterWave2DirYText"> + <text name="WaterWave2DirYText"> Y </text> <slider label="" name="WaterWave2DirX" /> <slider label="" name="WaterWave2DirY" /> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> Mapa Normalnych </text> <button label="?" name="WaterNormalMapHelp" /> diff --git a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml index b9071c0df9..2d4582392c 100755 --- a/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/pl/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=""> <button label="Zapisz" label_selected="Zapisz" name="Save" /> <button label="Anuluj" label_selected="Anuluj" name="Cancel" /> - <text type="string" length="1" name="Save item as:"> + <text name="Save item as:"> Zachowaj jako: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml index 2a9d1dff24..94c20c06f7 100755 --- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml +++ b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="WindLight floater" title="Zaawansowany Edytor Nieba"> - <text type="string" length="1" name="KeyFramePresetsText"> + <text name="KeyFramePresetsText"> Ustawienia Nieba: </text> <button label="Nowe" label_selected="Nowe" name="WLNewPreset" /> @@ -10,210 +10,210 @@ name="WLDayCycleMenuButton" /> <tab_container name="WindLight Tabs"> <panel label="Atmosfera" name="Atmosphere"> - <text type="string" length="1" name="BHText"> + <text name="BHText"> Horyzont Błękitu </text> <button label="?" name="WLBlueHorizonHelp" /> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> R </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> G </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> B </text> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> I </text> <slider label="" name="WLBlueHorizonR" /> <slider label="" name="WLBlueHorizonG" /> <slider label="" name="WLBlueHorizonB" /> <slider label="" name="WLBlueHorizonI" /> - <text type="string" length="1" name="BDensText"> + <text name="BDensText"> Horyzont Zamglenia </text> <button label="?" name="WLHazeHorizonHelp" /> <slider label="" name="WLHazeHorizon" /> - <text type="string" length="1" name="BDensText2"> + <text name="BDensText2"> Gęstość Błękitu </text> <button label="?" name="WLBlueDensityHelp" /> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> R </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> G </text> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> B </text> - <text type="string" length="1" name="BHText9"> + <text name="BHText9"> I </text> <slider label="" name="WLBlueDensityR" /> <slider label="" name="WLBlueDensityG" /> <slider label="" name="WLBlueDensityB" /> <slider label="" name="WLBlueDensityI" /> - <text type="string" length="1" name="HDText"> + <text name="HDText"> Gęstość Zamglenia </text> <button label="?" name="WLHazeDensityHelp" /> <slider label="" name="WLHazeDensity" /> - <text type="string" length="1" name="DensMultText"> + <text name="DensMultText"> Mnożnik Gęsości </text> <button label="?" name="WLDensityMultHelp" /> <slider label="" name="WLDensityMult" /> - <text type="string" length="1" name="WLDistanceMultText"> + <text name="WLDistanceMultText"> Mnożnik Dystansu </text> <button label="?" name="WLDistanceMultHelp" /> <slider label="" name="WLDistanceMult" /> - <text type="string" length="1" name="MaxAltText"> + <text name="MaxAltText"> Max Wysokość </text> <button label="?" name="WLMaxAltitudeHelp" /> <slider label="" name="WLMaxAltitude" /> </panel> <panel label="Światło" name="Lighting"> - <text type="string" length="1" name="SLCText"> + <text name="SLCText"> Kolor Słońca/Księżyca </text> <button label="?" name="WLSunlightColorHelp" /> - <text type="string" length="1" name="BHText"> + <text name="BHText"> R </text> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> G </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> B </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> I </text> <slider label="" name="WLSunlightR" /> <slider label="" name="WLSunlightG" /> <slider label="" name="WLSunlightB" /> <slider label="" name="WLSunlightI" /> - <text type="string" length="1" name="TODText"> + <text name="TODText"> Pozycja Słońca/Księżyca </text> <button label="?" name="WLTimeOfDayHelp" /> <slider label="" name="WLSunAngle" /> - <text type="string" length="1" name="WLAmbientText"> + <text name="WLAmbientText"> Otoczenie </text> <button label="?" name="WLAmbientHelp" /> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> R </text> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> G </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> B </text> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> I </text> <slider label="" name="WLAmbientR" /> <slider label="" name="WLAmbientG" /> <slider label="" name="WLAmbientB" /> <slider label="" name="WLAmbientI" /> - <text type="string" length="1" name="WLEastAngleText"> + <text name="WLEastAngleText"> Pozycja Wschodu </text> <button label="?" name="WLEastAngleHelp" /> <slider label="" name="WLEastAngle" /> - <text type="string" length="1" name="SunGlowText"> + <text name="SunGlowText"> Blask Słońca </text> <button label="?" name="WLSunGlowHelp" /> <slider label="Ostrość" name="WLGlowB" /> <slider label="Rozmiar" name="WLGlowR" /> - <text type="string" length="1" name="SceneGammaText"> + <text name="SceneGammaText"> Jasność Obrazu </text> <button label="?" name="WLSceneGammaHelp" /> <slider label="" name="WLGamma" /> - <text type="string" length="1" name="WLStarText"> + <text name="WLStarText"> Blask Gwiazd </text> <button label="?" name="WLStarBrightnessHelp" /> <slider label="" name="WLStarAlpha" /> </panel> <panel label="Chmury" name="Clouds"> - <text type="string" length="1" name="WLCloudColorText"> + <text name="WLCloudColorText"> Kolor Chmur </text> <button label="?" name="WLCloudColorHelp" /> - <text type="string" length="1" name="BHText"> + <text name="BHText"> R </text> - <text type="string" length="1" name="BHText2"> + <text name="BHText2"> G </text> - <text type="string" length="1" name="BHText3"> + <text name="BHText3"> B </text> - <text type="string" length="1" name="BHText4"> + <text name="BHText4"> I </text> <slider label="" name="WLCloudColorR" /> <slider label="" name="WLCloudColorG" /> <slider label="" name="WLCloudColorB" /> <slider label="" name="WLCloudColorI" /> - <text type="string" length="1" name="WLCloudColorText2"> + <text name="WLCloudColorText2"> Chmury (XY/Gęstość) </text> <button label="?" name="WLCloudDensityHelp" /> - <text type="string" length="1" name="BHText5"> + <text name="BHText5"> X </text> - <text type="string" length="1" name="BHText6"> + <text name="BHText6"> Y </text> - <text type="string" length="1" name="BHText7"> + <text name="BHText7"> G </text> <slider label="" name="WLCloudX" /> <slider label="" name="WLCloudY" /> <slider label="" name="WLCloudDensity" /> - <text type="string" length="1" name="WLCloudCoverageText"> + <text name="WLCloudCoverageText"> Pokrycie Chmur </text> <button label="?" name="WLCloudCoverageHelp" /> <slider label="" name="WLCloudCoverage" /> - <text type="string" length="1" name="WLCloudScaleText"> + <text name="WLCloudScaleText"> Skala Chmur </text> <button label="?" name="WLCloudScaleHelp" /> <slider label="" name="WLCloudScale" /> - <text type="string" length="1" name="WLCloudDetailText"> + <text name="WLCloudDetailText"> Szczegóły (XY/Gęstość) </text> <button label="?" name="WLCloudDetailHelp" /> - <text type="string" length="1" name="BHText8"> + <text name="BHText8"> X </text> - <text type="string" length="1" name="BHText9"> + <text name="BHText9"> Y </text> - <text type="string" length="1" name="BHText10"> + <text name="BHText10"> G </text> <slider label="" name="WLCloudDetailX" /> <slider label="" name="WLCloudDetailY" /> <slider label="" name="WLCloudDetailDensity" /> - <text type="string" length="1" name="WLCloudScrollXText"> + <text name="WLCloudScrollXText"> Przewijanie Chmur X </text> <button label="?" name="WLCloudScrollXHelp" /> <check_box label="Zablokuj" name="WLCloudLockX" /> <slider label="" name="WLCloudScrollX" /> - <text type="string" length="1" name="WLCloudScrollYText"> + <text name="WLCloudScrollYText"> Przewijanie Chmur Y </text> <button label="?" name="WLCloudScrollYHelp" /> diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml index 42befb1aff..65f1c8ae59 100755 --- a/indra/newview/skins/default/xui/pl/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pl/floater_world_map.xml @@ -30,10 +30,10 @@ <check_box label="'Adult'" name="event_adult_chk"/> <icon bottom="-196" name="avatar_icon"/> <combo_box label="Dostępni Znajomi" name="friend combo" tool_tip="Znajomi na mapie"> - <combo_box.item name="none_selected" label="Dostępni Znajomi" /> + <combo_box.item name="item1" label="Dostępni Znajomi" /> </combo_box> <combo_box label="Zapisane Miejsca" name="landmark combo" tool_tip="Zapisane miejsca na mapie"> - <combo_box.item name="none_selected" label="Zapisane Miejsca" /> + <combo_box.item name="item1" label="Zapisane Miejsca" /> </combo_box> <line_editor label="Szukaj po nazwie regionu" name="location" tool_tip="Wpisz nazwę regionu"/> <button label="Szukaj" name="DoSearch" tool_tip="Wyszukiwaie regionu"/> diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 3c21f7f5b5..15089926b2 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -971,7 +971,7 @@ Zaproponować znajomość [NAME]? Zaproponować znajomość [NAME]? <form name="form"> - <input name="message" type="text"> + <input name="message"> Chcesz zawrzeć znajomość? </input> <button name="Offer" text="OK"/> @@ -1368,7 +1368,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="KickUser"> Z jakim komunikatem wyrzucić tego użytkownia? <form name="form"> - <input name="message" type="text"> + <input name="message"> Administrator wylogował Cię. </input> <button name="OK" text="OK"/> @@ -1378,7 +1378,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="KickAllUsers"> Z jakim komunikatem wyrzucić wszystkich użytkowników z regionu? <form name="form"> - <input name="message" type="text"> + <input name="message"> Administrator wylogował Cię. </input> <button name="OK" text="OK"/> @@ -1388,7 +1388,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="FreezeUser"> Z jakim komunikatem unieruchomić tego użytkownia? <form name="form"> - <input name="message" type="text"> + <input name="message"> Unieruchomiono Cię. Nie możesz się ruszać ani rozmawiać. Administrator skontaktuje się z Tobą poprzez IM. </input> <button name="OK" text="OK"/> @@ -1398,7 +1398,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="UnFreezeUser"> Z jakim komunikatem odblokować tego użytkownia? <form name="form"> - <input name="message" type="text"> + <input name="message"> Odblokowano Cię. </input> <button name="OK" text="OK"/> @@ -1408,7 +1408,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="OfferTeleport"> Zaproponować teleportację do miejsca Twojego pobytu z tą wiadomością? <form name="form"> - <input name="message" type="text"> + <input name="message"> Zapraszam do siebie. Region: [REGION] </input> <button name="OK" text="OK"/> @@ -1418,7 +1418,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification name="OfferTeleportFromGod"> Wymusić przeniesienie użytkownika do miejsca Twojego pobytu? <form name="form"> - <input name="message" type="text"> + <input name="message"> Zapraszam do siebie. Region: [REGION] </input> <button name="OK" text="OK"/> @@ -1432,7 +1432,7 @@ Musisz opuścić przynajmniej jedną grupę żeby przyjąć członkostwo w tej g <notification label="Wiadomość do Wszystkich w Twoim Majątku" name="MessageEstate"> Wpisz krótką wiadomość która zostanie wysłana do wszystkich osób w Twoim majątku. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Anuluj"/> </form> @@ -1654,7 +1654,7 @@ Zamieścić tą reklamę za [AMOUNT]L$? <notification label="Wiadomość do Wszystkich w tym Regionie" name="MessageRegion"> Wpisz krótką wiadomość która zostanie wysłana do wszystkich osób w tym regionie. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Anuluj"/> </form> @@ -1916,14 +1916,14 @@ Zawartość zostanie skopiowana do Twojej szafy. Na pewno chcesz dokonać tego zakupu? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="OK"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Ta transakcja spowoduje: [ACTION] Na pewno chcesz dokonać tego zakupu? Wpisz hasło ponownie i kliknij OK. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="OK"/> <button name="Cancel" text="Anuluj"/> </form> @@ -2287,7 +2287,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur. <notification name="NewSkyPreset"> Nazwij nowe niebo. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nowe Ustawienie </input> <button name="OK" text="OK"/> @@ -2300,7 +2300,7 @@ Suwak G (Gęstość) kontroluje gęstość chmur. <notification name="NewWaterPreset"> Nazwij nowe ustawienie wody. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nowe Ustawienie </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/pl/panel_audio_device.xml b/indra/newview/skins/default/xui/pl/panel_audio_device.xml index ad30dfbacb..fc3b3776f0 100755 --- a/indra/newview/skins/default/xui/pl/panel_audio_device.xml +++ b/indra/newview/skins/default/xui/pl/panel_audio_device.xml @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="device_settings"> - <text type="string" length="1" name="Audio Devices"> + <text name="Audio Devices"> Urządzenia Audio </text> - <text type="string" length="1" name="Input device (microphone):"> + <text name="Input device (microphone):"> Urządzenia Wejściowe (mikrofon): </text> - <text type="string" length="1" name="Output device (speakers):"> + <text name="Output device (speakers):"> Urządzenia Wyjściowe (głośniki): </text> - <text type="string" length="1" name="Input level:"> + <text name="Input level:"> Poziom Wejścia </text> - <text_editor type="string" length="1" name="voice_intro_text1"> + <text_editor name="voice_intro_text1"> Użyj suwaka by dostosować jak głośno Cię słychać dla innych Rezydentów. By przetestować poziom wejścia, zacznij mówić do mikrofonu. </text_editor> <volume_slider name="mic_volume_slider" diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml index 6f6d524cd9..5d19485634 100755 --- a/indra/newview/skins/default/xui/pl/panel_group_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_general.xml @@ -35,9 +35,9 @@ ustawienia grupy oraz opcje członkostwa. (Właściciele wyświetlają się pogrubioną czcionką) </text> <name_list name="visible_members"> - <column label="Imię" name="name"/> - <column label="Tytuł" name="title"/> - <column label="Ostatnio w SL" name="online"/> + <name_list.columns label="Imię" name="name"/> + <name_list.columns label="Tytuł" name="title"/> + <name_list.columns label="Ostatnio w SL" name="online"/> </name_list> <text name="text_group_preferences"> Ustawienia Grupy @@ -48,21 +48,15 @@ ustawienia grupy oraz opcje członkostwa. <check_box label="Opłata Wstępu: L$" name="check_enrollment_fee" tool_tip="Ustaw opłatę za przyłączenie się do grupy."/> <spinner name="spin_enrollment_fee" tool_tip="Nowi członkowie grupy muszą zapłacić wymaganą opłatę by dołączyć do grupy."/> <combo_box name="group_mature_check" tool_tip="Wybierz jeżeli uważasz, iż Twoja grupa klasyfikowana jest jako 'Mature'."> - <combo_item name="select_mature"> - - Wybierz Treść - - </combo_item> - <combo_item name="mature"> - Treść 'Mature' - </combo_item> - <combo_item name="pg"> - Treść 'PG' - </combo_item> + <combo_box.item name="select_mature" label="- Wybierz Treść -"/> + <combo_box.item name="mature" label="Treść 'Mature'"/> + <combo_box.item name="pg" label="Treść 'PG'"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> Mój Aktywny Tytuł </text> - <combo_box length="150" name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/> + <combo_box name="active_title" tool_tip="Ustaw tytuł który wyświetla się kiedy grupa jest aktywna."/> </panel> <check_box label="Otrzymuj grupowe ogłoszenia" name="receive_notices" tool_tip="Zaznacz jeżeli chcesz otrzymywać ogłoszenia z tej grupy. Anuluj z zaznaczenia, jeżeli nie chcesz otrzymywać żadnych ogłoszeń z tej grupy."/> <check_box label="Wyświetl grupę w profilu" name="list_groups_in_profile" tool_tip="Zaznacz jeżeli chcesz by grupa wyświetlała się w Twoim profilu"/> diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml index 7a3b6fbcec..1c19571ec0 100755 --- a/indra/newview/skins/default/xui/pl/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pl/panel_group_notices.xml @@ -12,8 +12,6 @@ </text> <text name="lbl2"> Ogłoszenia przechowywane są przez 14 dni. -Kliknij tutaj by zobaczyć ogłoszenie. -Użyj Odswież by zobaczyć czy nowe ogloszenia zostały wysłane. Limit dzienny ogłoszeń dla grupy wynosi 200. </text> <scroll_list name="notice_list"> @@ -33,10 +31,7 @@ Limit dzienny ogłoszeń dla grupy wynosi 200. Stwórz Ogłoszenie </text> <text name="lbl2"> - By wysłać ogłoszenie musisz nadać mu tytuł. -Możesz także dołączyć pojedynczy załącznik ze swojej -szafy. Załącznik musi mieć prawo modyfikacyjne -do kopiowania oraz transferu. + Możesz także dołączyć pojedynczy załącznik ze swojej szafy. Załącznik musi mieć prawo modyfikacyjne do kopiowania oraz transferu. </text> <text name="lbl3"> Temat: diff --git a/indra/newview/skins/default/xui/pl/panel_groups.xml b/indra/newview/skins/default/xui/pl/panel_groups.xml index 58106a6105..9df90fc797 100755 --- a/indra/newview/skins/default/xui/pl/panel_groups.xml +++ b/indra/newview/skins/default/xui/pl/panel_groups.xml @@ -3,10 +3,10 @@ <scroll_list name="group list"> <column label="" name="name" /> </scroll_list> - <text type="string" length="1" name="groupdesc"> + <text name="groupdesc"> Twoja aktywna grupa jest pogrubiona. </text> - <text type="string" length="1" name="groupcount"> + <text name="groupcount"> Należysz do [COUNT] grup (maksimum to [MAX]). </text> <button label="Czat/IM" name="IM" tool_tip="Rozpocznij sesję czatu (IM)" /> diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml index 63659cf429..3caf9338a2 100755 --- a/indra/newview/skins/default/xui/pl/panel_login.xml +++ b/indra/newview/skins/default/xui/pl/panel_login.xml @@ -21,7 +21,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Mój Start" /> <combo_box.item name="MyLastLocation" label="Ostatnie Miejsce" /> - <combo_box.item name="Typeregionname" label="lt;Wpisz Region>" /> + <combo_box.item name="Typeregionname" label="<Wpisz Region>" /> </combo_box> <check_box label="Zapamiętaj Hasło" name="remember_check" /> <button label="Połącz" label_selected="Połącz" name="connect_btn" /> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml new file mode 100644 index 0000000000..75a9efcd0a --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="width / height">
+ Proporcje:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="width / height">
+ <combo_box.item label="4:3 (Standardowy CRT)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (Panoramiczny)" name="item3"/>
+ <combo_box.item label="16:9 (Panoramiczny)" name="item4"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml index 67252f6fd2..13b66ed242 100755 --- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml @@ -1,51 +1,57 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Czat/IM" name="chat"> - <text type="string" length="1" name="text_box"> + <text name="text_box"> Rozmiar Czcionki Czatu: </text> <radio_group name="chat_font_size"> - <radio_item type="string" length="1" name="radio" label="Mała" /> - <radio_item type="string" length="1" name="radio2" label="Średnia" /> - <radio_item type="string" length="1" name="radio3" label="Duża" /> + <radio_item name="radio" label="Mała" /> + <radio_item name="radio2" label="Średnia" /> + <radio_item name="radio3" label="Duża" /> </radio_group> - <text type="string" length="1" name="text_box2"> - Kolor Czatu: - </text> - <color_swatch label="Ty" name="user" /> - <color_swatch label="Inni" name="agent" /> - <color_swatch label="IM" name="im" /> - <color_swatch label="System" name="system" /> - <color_swatch label="Błędy" name="script_error" /> - <color_swatch label="Obiekty" name="objects" /> - <color_swatch label="Właściciel" name="owner" /> - <color_swatch label="Chmurka" name="background" /> - <color_swatch label="Linki" name="links" /> - <text type="string" length="1" name="text_box8"> - Błędy Skryptu: + <color_swatch label="Ty" name="user"/> + <text name="text_box1"> + Ty </text> - <check_box label="Pokazuj ostrzeżenia i błędy skryptu w czacie" name="script_errors_as_chat" /> - <text type="string" length="1" name="text_box3"> - Konsola Czatu: + <color_swatch label="Inni" name="agent"/> + <text name="text_box2"> + Inni </text> - <spinner label="Zamykaj czat w" name="fade_chat_time" /> - <text type="string" length="1" name="text_box4"> - (sekund) + <color_swatch label="IM" name="im"/> + <text name="text_box3"> + IM + </text> + <color_swatch label="System" name="system"/> + <text name="text_box4"> + System + </text> + <color_swatch label="Błędy" name="script_error"/> + <text name="text_box5"> + Błędy + </text> + <color_swatch label="Obiekty" name="objects"/> + <text name="text_box6"> + Obiekty + </text> + <color_swatch label="Właściciel" name="owner"/> + <text name="text_box7"> + Właściciel </text> - <text type="string" length="1" name="text_box5"> - (linii) + <color_swatch label="Chmurka" name="background"/> + <text name="text_box8"> + Chmurka </text> + <color_swatch label="Linki" name="links"/> + <text name="text_box9"> + Linki + </text> + <check_box label="Pokazuj ostrzeżenia i błędy skryptu w czacie" name="script_errors_as_chat" /> + <spinner label="Zamykaj czat w" name="fade_chat_time" /> <slider label="Przeźroczystość" name="console_opacity" /> <check_box label="Używaj pełnej szerokość ekranu (restart wymagany)" name="chat_full_width_check" /> - <text type="string" length="1" name="text_box6"> - Ustawienia Czatu: - </text> <check_box label="Zamknij panel czatu po naciśnięciu Wróć" name="close_chat_on_return_check" /> <check_box label="Strzałki sterują awatarem podczas czatu" name="arrow_keys_move_avatar_check" /> <check_box label="Pokazuj czas w czacie" name="show_timestamps_check" /> <check_box label="Używaj animacji podczas pisania" name="play_typing_animation" /> - <text type="string" length="1" name="text_box7"> - Czat z Chmurkami: - </text> <check_box label="Pokazuj chmurki w czacie" name="bubble_text_chat" /> <slider label="Przeźroczystość" name="bubble_chat_opacity" /> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml index 1199f0622f..a7654ef2ff 100755 --- a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml @@ -1,148 +1,91 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Ogólne" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu."> - Mój Start - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca."> - Ostatnie Miejsce - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Domyślnie loguj mnie do mojego miejsca startu." label="Mój Start"/> + <combo_box.item name="MyLastLocation" tool_tip="Domyślnie loguj mnie do ostatnio odwiedzonego miejsca." label="Ostatnie Miejsce"/> + </combo_box> <check_box label="Pokaż Miejsce Startu podczas Logowania" name="show_location_checkbox"/> <combo_box name="fade_out_combobox"> - <combo_item name="Never"> - Nigdy - </combo_item> - <combo_item name="Show Temporarily"> - Tymczasowo - </combo_item> - <combo_item name="Always"> - Zawsze - </combo_item> + <combo_box.item name="Never" label="Nigdy"/> + <combo_box.item name="Show Temporarily" label="Tymczasowo"/> + <combo_box.item name="Always" label="Zawsze"/> </combo_box> <check_box label="Używaj Małych Imion Awatarów" name="small_avatar_names_checkbox"/> <check_box label="Nie Wyświetlaj Mojego Imienia" name="show_my_name_checkbox"/> - <text length="1" name="group_titles_textbox" type="string"> + <text name="group_titles_textbox"> Tytuły Grupowe: </text> <check_box label="Nie Wyświetlaj Żadnych Tytułów Grupowych" name="show_all_title_checkbox"/> <check_box label="Nie Wyświetlaj Mojego Tytułu Grupowego" name="show_my_title_checkbox"/> <color_swatch label="" name="effect_color_swatch" tool_tip="Selekcja koloru"/> - <text length="1" name="UI Size:" type="string"> + <text name="UI Size:"> Wymiar Interfejsu (UI): </text> <slider name="ui_scale_slider"/> <check_box label="Używaj Skali Nizależnej od Rozdzielczości" name="ui_auto_scale"/> <spinner label="Zasypiaj w:" name="afk_timeout_spinner"/> <check_box label="Powiadamiaj o Wydatkach i Zarobkach (L$)" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label" bottom="-312"> + <text name="maturity_desired_label"> Treść: </text> - <text name="maturity_desired_prompt" bottom="-312"> - Chcę uzyskać dostęp do -miejsc zakwalifikowanych jako: + <text name="maturity_desired_prompt"> + Chcę uzyskać dostęp do miejsc zakwalifikowanych jako: </text> - <combo_box name="maturity_desired_combobox" bottom="-330" left="322" width="162" > - <combo_item name="Desired_Adult"> - 'PG', 'Mature' oraz 'Adult' - </combo_item> - <combo_item name="Desired_Mature"> - 'PG' i 'Mature' - </combo_item> - <combo_item name="Desired_PG"> - tylko 'PG' - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="'PG', 'Mature' oraz 'Adult'"/> + <combo_box.item name="Desired_Mature" label="'PG' i 'Mature'"/> + <combo_box.item name="Desired_PG" label="tylko 'PG'"/> </combo_box> - <text name="maturity_desired_textbox" bottom="-324" left="322"> + <text name="maturity_desired_textbox"> tylko 'PG' </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> Miejsce Startu: </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> Imiona: </text> - <text length="1" name="effects_color_textbox" type="string"> + <text name="effects_color_textbox"> Kolor dla Moich Efektów: </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> sekund </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> Zgłaszanie Błędów: </text> - <text length="1" name="language_textbox" type="string"> + <text name="language_textbox"> Język: </text> - <text length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (Restart wymagany) </text> <string name="region_name_prompt"> <Wpisz Region> </string> <combo_box name="crash_behavior_combobox"> - <combo_item length="1" name="Askbeforesending" type="string"> - Pytaj przed wysłaniem - </combo_item> - <combo_item length="1" name="Alwayssend" type="string"> - Zawsze wysyłaj - </combo_item> - <combo_item length="1" name="Neversend" type="string"> - Nigdy nie wysyłaj - </combo_item> + <combo_box.item name="Askbeforesending" label="Pytaj przed wysłaniem"/> + <combo_box.item name="Alwayssend" label="Zawsze wysyłaj"/> + <combo_box.item name="Neversend" label="Nigdy nie wysyłaj"/> </combo_box> <combo_box name="language_combobox"> - <combo_item length="1" name="System Default Language" type="string"> - Domyślny - </combo_item> - <combo_item length="1" name="English" type="string"> - English (Angielski) - </combo_item> - <combo_item name="Danish"> - Dansk (Duński) - Beta - </combo_item> - <combo_item length="1" name="Deutsch(German)" type="string"> - Deutsch (Niemiecki) - Beta - </combo_item> - <combo_item length="1" name="Spanish" type="string"> - Español (Hiszpański) - Beta - </combo_item> - <combo_item length="1" name="French" type="string"> - Français (Francuski) - Beta - </combo_item> - <combo_item name="Italian"> - Italiano (Włoski) - Beta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Węgierski) - Beta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Niderlandzki) - Beta - </combo_item> - <combo_item length="1" name="Polish" type="string"> - Polski - Beta - </combo_item> - <combo_item length="1" name="Portugese" type="string"> - Portugués (Portugalski) - Beta - </combo_item> - <combo_item name="Russian"> - Русский (Rosyjski) - Beta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Turecki) - Beta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ukraiński) - Beta - </combo_item> - <combo_item length="1" name="Chinese" type="string"> - 中文 (简体) (Chiński) - Beta - </combo_item> - <combo_item length="1" name="(Japanese)" type="string"> - 日本語 (Japoński) - Beta - </combo_item> - <combo_item length="1" name="(Korean)" type="string"> - 한국어 (Koreański) - Beta - </combo_item> + <combo_box.item name="System Default Language" label="Domyślny"/> + <combo_box.item name="English" label="English (Angielski)"/> + <combo_box.item name="Danish" label="Dansk (Duński) - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Niemiecki) - Beta"/> + <combo_box.item name="Spanish" label="Español (Hiszpański) - Beta"/> + <combo_box.item name="French" label="Français (Francuski) - Beta"/> + <combo_box.item name="Italian" label="Italiano (Włoski) - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Węgierski) - Beta"/> + <combo_box.item name="Dutch" label="Nederlands (Niderlandzki) - Beta"/> + <combo_box.item name="Polish" label="Polski - Beta"/> + <combo_box.item name="Portugese" label="Portugués (Portugalski) - Beta"/> + <combo_box.item name="Russian" label="Русский (Rosyjski) - Beta"/> + <combo_box.item name="Turkish" label="Türkçe (Turecki) - Beta"/> + <combo_box.item name="Ukrainian" label="Українська (Ukraiński) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Chiński) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japoński) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Koreański) - Beta"/> </combo_box> <check_box label="Język znany publicznie" name="language_is_public" tool_tip="Pozwala obiektom w świecie poznać Twój wybór język."/> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml index d59e6dbaf0..ddd4c736d6 100755 --- a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml @@ -2,62 +2,63 @@ <panel label="Grafika" name="Display panel"> <button label="?" name="GraphicsPreferencesHelpButton" /> <check_box label="Uruchom Second Life w oknie" name="windowed mode" /> - <text_editor type="string" length="1" name="FullScreenInfo"> + <text_editor name="FullScreenInfo"> Wyłączone = klient uruchamiany w trybie pełnoekranowym. </text_editor> - <text type="string" length="1" name="WindowSizeLabel"> + <text name="WindowSizeLabel"> Wymiary Okna: </text> <combo_box name="windowsize combo"> - <combo_box.item type="string" length="1" name="640x480" label="640x480" /> - <combo_box.item type="string" length="1" name="800x600" label="800x600" /> - <combo_box.item type="string" length="1" name="720x480" label="720x480 (NTSC)" /> - <combo_box.item type="string" length="1" name="768x576" label="768x576 (PAL)" /> - <combo_box.item type="string" length="1" name="1024x768" label="1024x768" /> + <combo_box.item name="640x480" label="640x480" /> + <combo_box.item name="800x600" label="800x600" /> + <combo_box.item name="720x480" label="720x480 (NTSC)" /> + <combo_box.item name="768x576" label="768x576 (PAL)" /> + <combo_box.item name="1024x768" label="1024x768" /> </combo_box> - <text type="string" length="1" name="DisplayResLabel"> + <text name="DisplayResLabel"> Rozdzielczość: </text> - <text type="string" length="1" name="AspectRatioLabel1" tool_tip="width / height"> + <text name="AspectRatioLabel1" tool_tip="width / height"> Proporcje: </text> <combo_box name="aspect_ratio" tool_tip="width / height"> - <combo_box.item type="string" length="1" name="4:3(StandardCRT)" label="4:3 (Standardowy CRT)" /> - <combo_box.item type="string" length="1" name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> - <combo_box.item type="string" length="1" name="8:5(Widescreen)" label="8:5 (Panoramiczny)" /> - <combo_box.item type="string" length="1" name="16:9(Widescreen)" label="16:9 (Panoramiczny)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (Standardowy CRT)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> + <combo_box.item name="8:5(Widescreen)" label="8:5 (Panoramiczny)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9 (Panoramiczny)" /> </combo_box> <check_box label="Detekcja proporcji" name="aspect_auto_detect" /> - <text type="string" length="1" name="HigherText"> + <text name="HigherText"> Jakość i </text> - <text type="string" length="1" name="QualityText"> + <text name="QualityText"> Prędkość: </text> - <text type="string" length="1" name="FasterText"> + <text name="FasterText"> Prędkość </text> - <text type="string" length="1" name="ShadersPrefText"> + <text name="ShadersPrefText"> Niska </text> - <text type="string" length="1" name="ShadersPrefText2"> + <text name="ShadersPrefText2"> Średnia </text> - <text type="string" length="1" name="ShadersPrefText3"> + <text name="ShadersPrefText3"> Wysoka </text> - <text type="string" length="1" name="ShadersPrefText4"> + <text name="ShadersPrefText4"> Super </text> - <text type="string" length="1" name="HigherText2"> + <text name="HigherText2"> Wyższa </text> - <text type="string" length="1" name="QualityText2"> + <text name="QualityText2"> Jakość </text> <slider label="" name="QualityPerformanceSelection" /> <check_box label="Zaawansowane" name="CustomSettings" /> - <text type="string" length="1" name="ShadersText"> + <panel name="CustomGraphics Panel"> + <text name="ShadersText"> Shadery: </text> <check_box label="Mapowanie Wypukłości i Połysk" name="BumpShiny" /> @@ -65,31 +66,31 @@ tool_tip="Wyłączenie tej opcji może naprawić błędy niektórych sterowników graficznych." /> <check_box label="Shadery Atmosfery" name="WindLightUseAtmosShaders" /> <check_box label="Odbicia w Wodzie" name="Reflections" /> - <text type="string" length="1" name="ReflectionDetailText"> + <text name="ReflectionDetailText"> Ustawienia Odbić: </text> <radio_group name="ReflectionDetailRadio"> - <radio_item type="string" length="1" name="0" label="Teren i Drzewa" /> - <radio_item type="string" length="1" name="1" label="Obiekty Statyczne" /> - <radio_item type="string" length="1" name="2" label="Awatary i Obiekty" /> - <radio_item type="string" length="1" name="3" label="Wszystko" /> + <radio_item name="0" label="Teren i Drzewa" /> + <radio_item name="1" label="Obiekty Statyczne" /> + <radio_item name="2" label="Awatary i Obiekty" /> + <radio_item name="3" label="Wszystko" /> </radio_group> - <text type="string" length="1" name="AvatarRenderingText"> + <text name="AvatarRenderingText"> Prezentacja Awatarów: </text> <check_box label="Impostoryzacja Awatarowa" name="AvatarImpostors" /> <check_box label="Skinning" name="AvatarVertexProgram" /> <check_box label="Ubranie Awatarów" name="AvatarCloth" /> - <text type="string" length="1" name="DrawDistanceMeterText1"> + <text name="DrawDistanceMeterText1"> m </text> - <text type="string" length="1" name="DrawDistanceMeterText2"> + <text name="DrawDistanceMeterText2"> m </text> <slider label="Głębia Rysowania:" name="DrawDistance" /> <slider label="Liczba Cząsteczek:" name="MaxParticleCount" /> <slider label="Jakość Post-Procesu:" name="RenderPostProcess" /> - <text type="string" length="1" name="MeshDetailText"> + <text name="MeshDetailText"> Szczegóły Meszu: </text> <slider label=" Obiekty:" name="ObjectMeshDetail" /> @@ -98,48 +99,49 @@ <slider label=" Awatary:" name="AvatarMeshDetail" /> <slider label=" Teren:" name="TerrainMeshDetail" /> <slider label=" Niebo:" name="SkyMeshDetail" /> - <text type="string" length="1" name="PostProcessText"> + <text name="PostProcessText"> Mało </text> - <text type="string" length="1" name="ObjectMeshDetailText"> + <text name="ObjectMeshDetailText"> Mało </text> - <text type="string" length="1" name="FlexibleMeshDetailText"> + <text name="FlexibleMeshDetailText"> Mało </text> - <text type="string" length="1" name="TreeMeshDetailText"> + <text name="TreeMeshDetailText"> Mało </text> - <text type="string" length="1" name="AvatarMeshDetailText"> + <text name="AvatarMeshDetailText"> Mało </text> - <text type="string" length="1" name="TerrainMeshDetailText"> + <text name="TerrainMeshDetailText"> Mało </text> - <text type="string" length="1" name="SkyMeshDetailText"> + <text name="SkyMeshDetailText"> Mało </text> - <text type="string" length="1" name="LightingDetailText"> + <text name="LightingDetailText"> Ustawienia Światła: </text> <radio_group name="LightingDetailRadio"> - <radio_item type="string" length="1" name="SunMoon" label="Tylko Słońce i Księżyc" /> - <radio_item type="string" length="1" name="LocalLights" label="Tylko Bliskie Światła" /> + <radio_item name="SunMoon" label="Tylko Słońce i Księżyc" /> + <radio_item name="LocalLights" label="Tylko Bliskie Światła" /> </radio_group> - <text type="string" length="1" name="TerrainDetailText"> + <text name="TerrainDetailText"> Szczgóły Terenu: </text> <radio_group name="TerrainDetailRadio"> - <radio_item type="string" length="1" name="0" label="Mało" /> - <radio_item type="string" length="1" name="2" label="Dużo" /> + <radio_item name="0" label="Mało" /> + <radio_item name="2" label="Dużo" /> </radio_group> + </panel> <button label="Ustawienia Domyślne" name="Defaults" /> <button label="Ustawnia Sprzętowe" label_selected="Ustawienia Sprzętowe" name="GraphicsHardwareButton" /> - <string name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </string> - <string name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </string> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml index 5ef94baaa5..4447de517b 100755 --- a/indra/newview/skins/default/xui/pl/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Majątek" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Majątek" name="Estate"> <text name="estate_help_text"> Zmiany ustawień na tej zakładce odnoszą się do wszystkich Regionów w tym Majątku. @@ -23,7 +25,7 @@ do wszystkich Regionów w tym Majątku. <slider label="Pora Doby" name="sun_hour_slider"/> <check_box label="Dostęp Publiczny" name="externally_visible_check"/> <button label="?" name="externally_visible_help"/> - <text length="1" name="Only Allow" type="string"> + <text name="Only Allow"> Dostęp Ograniczony do: </text> <check_box label="Rezydenci z danymi o koncie" name="limit_payment" tool_tip="Zablokuj niepożądanych Rezydentów."/> @@ -71,4 +73,6 @@ do wszystkich Regionów w tym Majątku. <name_list name="banned_avatar_name_list"/> <button label="Usuń..." name="remove_banned_avatar_btn"/> <button label="Dodaj..." name="add_banned_avatar_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml index 36cff9c2d0..20296dac71 100755 --- a/indra/newview/skins/default/xui/pl/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_general.xml @@ -40,15 +40,9 @@ Rodzaj: </text> <combo_box label="'Mature'" name="access_combo"> - <combo_item name="Adult"> - 'Adult' - </combo_item> - <combo_item name="Mature"> - 'Mature' - </combo_item> - <combo_item name="PG"> - 'PG' - </combo_item> + <combo_box.item label="'Adult'" name="Adult"/> + <combo_box.item label="'Mature'" name="Mature"/> + <combo_box.item label="'PG'" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Zastosuj" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml index d24579fc75..ac43f0b2cc 100755 --- a/indra/newview/skins/default/xui/pl/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/pl/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Tekstury Gruntu" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Tekstury Gruntu" name="Textures"> <text name="region_text_lbl"> Region: </text> @@ -54,4 +56,6 @@ a wartość GÓRA to MINIMALNY poziom dla tekstury #4. </text> <button label="Zastosuj" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml index f057c824ac..70a6e39412 100755 --- a/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="LLScrollingPanelParam"> - <text type="string" length="1" name="Loading..."> + <text name="Loading..."> Ładowanie... </text> - <text type="string" length="1" name="Loading...2"> + <text name="Loading...2"> Ładowanie... </text> <button label="" label_selected="" name="less" /> diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml index fcaac7f116..9226e67dff 100755 --- a/indra/newview/skins/default/xui/pl/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/pl/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel name="status"> - <text type="string" length="1" name="ParcelNameText" tool_tip="Nazwa posiadłości w której się znajdujesz. Po więcej informacji kliknij O Posiadłości."> + <text name="ParcelNameText" tool_tip="Nazwa posiadłości w której się znajdujesz. Po więcej informacji kliknij O Posiadłości."> Nazwa Posiadłości </text> - <text type="string" length="1" name="BalanceText" tool_tip="Stan Konta"> + <text name="BalanceText" tool_tip="Stan Konta"> Ładowanie... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Kup $L" /> - <text type="string" length="12" name="TimeText" tool_tip="Obecny Czas (Pacyficzny)"> + <text name="TimeText" tool_tip="Obecny Czas (Pacyficzny)"> 12:00 AM </text> <string name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </string> <button label="" label_selected="" name="scriptout" tool_tip="Błędy i Ostrzeżenia Skryptów" /> <button label="" label_selected="" name="health" tool_tip="Stan" /> - <text type="string" length="1" name="HealthText" tool_tip="Stan"> + <text name="HealthText" tool_tip="Stan"> 100% </text> <button label="" label_selected="" name="no_fly" tool_tip="Latanie jest niedozwolone" /> diff --git a/indra/newview/skins/default/xui/pl/panel_world_map.xml b/indra/newview/skins/default/xui/pl/panel_world_map.xml new file mode 100644 index 0000000000..babb9fbae1 --- /dev/null +++ b/indra/newview/skins/default/xui/pl/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ E
+ </panel.string>
+ <panel.string name="world_map_west">
+ W
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SW
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NW
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="E" name="floater_map_east" text="E">
+ E
+ </text>
+ <text label="W" name="floater_map_west" text="W">
+ W
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SW" name="floater_map_southwest" text="SW">
+ SW
+ </text>
+ <text label="NW" name="floater_map_northwest" text="NW">
+ NW
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 3ec2b45237..402bf0a3ed 100755 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -486,4 +486,34 @@ <string name="choose_the_directory"> Wybierz Katalog </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + Niska + </string> + <string name="GraphicsQualityMid"> + Średnia + </string> + <string name="GraphicsQualityHigh"> + Wysoka + </string> </strings> diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml index 79db9db822..417d24608e 100644 --- a/indra/newview/skins/default/xui/pt/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml @@ -2,10 +2,10 @@ <floater name="floaterland" title="Sobre o Terreno"> <tab_container name="landtab"> <panel label="Geral" name="land_general_panel"> - <text length="1" name="Name:" type="string"> + <text name="Name:"> Nome: </text> - <text length="1" name="Description:" type="string"> + <text name="Description:"> Descrição: </text> <text name="LandType"> @@ -20,56 +20,56 @@ <text name="ContentRatingText"> Adult </text> - <text length="1" name="Owner:" type="string"> + <text name="Owner:"> Proprietário: </text> - <text length="1" name="OwnerText" type="string"> + <text name="OwnerText"> Leyla Linden </text> <button label="Perfil..." label_selected="Perfil..." name="Profile..."/> - <text length="1" name="Group:" type="string"> + <text name="Group:"> Grupo: </text> <button label="Ajustar..." label_selected="Ajustar..." name="Set..."/> <check_box label="Permitir posse para o grupo" name="check deed" tool_tip="O gerente do grupo pode acionar essa terra ao grupo, então esta será mantida pelo gestor da ilha"/> <button label="Passar..." label_selected="Passar..." name="Deed..." tool_tip="Você só pode delegar esta terra se você for um gerente selecionado pelo grupo."/> <check_box label="Proprietário faz contribuição com delegação" name="check contrib" tool_tip="Quando a terra é delegada ao grupo, o proprietário anterior contribui alocando terra suficiente para mantê-la."/> - <text length="1" name="For Sale:" type="string"> + <text name="For Sale:"> À Venda: </text> - <text length="1" name="Not for sale." type="string"> + <text name="Not for sale."> Não está à Venda. </text> - <text length="1" name="For Sale: Price L$[PRICE]." type="string"> + <text name="For Sale: Price L$[PRICE]."> Preço: L$[PRICE] (L$[PRICE_PER_SQM]/m²). </text> <button label="Vender Terra..." label_selected="Vender Terra..." name="Sell Land..."/> - <text length="1" name="For sale to" type="string"> + <text name="For sale to"> À venda para: [BUYER] </text> - <text length="1" name="Sell with landowners objects in parcel." type="string"> + <text name="Sell with landowners objects in parcel."> À venda (Objetos incluídos). </text> - <text length="1" name="Selling with no objects in parcel." type="string"> + <text name="Selling with no objects in parcel."> À venda (Objetos não incluídos). </text> <button label="Cancelar venda do terreno" label_selected="Cancelar venda do terreno" left="275" name="Cancel Land Sale" width="165"/> - <text length="1" name="Claimed:" type="string"> + <text name="Claimed:"> Reclamado: </text> - <text length="1" name="DateClaimText" type="string"> + <text name="DateClaimText"> Ter Ago 15 13:47:25 2006 </text> - <text length="1" name="PriceLabel" type="string"> + <text name="PriceLabel"> Área: </text> - <text length="1" name="PriceText" type="string"> + <text name="PriceText"> 4048 m² </text> - <text length="1" name="Traffic:" type="string"> + <text name="Traffic:"> Tráfego: </text> - <text length="1" name="DwellText" type="string"> + <text name="DwellText"> 0 </text> <button label="Comprar Terra..." label_selected="Comprar Terra..." left="130" name="Buy Land..." width="125"/> @@ -78,76 +78,76 @@ <button label="Abandonar Terra.." label_selected="Abandonar Terra.." name="Abandon Land..."/> <button label="Reclamar Terra..." label_selected="Reclamar Terra..." name="Reclaim Land..."/> <button label="Venda Linden..." label_selected="Venda Linden..." name="Linden Sale..." tool_tip="A terra precisa ser possuída, estar com o conteúdo configurado e não estar pronta para leilão."/> - <string name="new users only"> + <panel.string name="new users only"> Somente novos usuários - </string> - <string name="anyone"> + </panel.string> + <panel.string name="anyone"> Qualquer um - </string> - <string name="area_text"> + </panel.string> + <panel.string name="area_text"> Área - </string> - <string name="area_size_text"> + </panel.string> + <panel.string name="area_size_text"> [AREA] m² - </string> - <string name="auction_id_text"> + </panel.string> + <panel.string name="auction_id_text"> ID do Leilão: [ID] - </string> - <string name="need_tier_to_modify"> + </panel.string> + <panel.string name="need_tier_to_modify"> Você deve ter sua compra aprovada para modificar este terreno. - </string> - <string name="group_owned_text"> + </panel.string> + <panel.string name="group_owned_text"> (Possuído pelo Grupo) - </string> - <string name="profile_text"> + </panel.string> + <panel.string name="profile_text"> Perfil... - </string> - <string name="info_text"> + </panel.string> + <panel.string name="info_text"> Informação... - </string> - <string name="public_text"> + </panel.string> + <panel.string name="public_text"> (público) - </string> - <string name="none_text"> + </panel.string> + <panel.string name="none_text"> (nenhum) - </string> - <string name="sale_pending_text"> + </panel.string> + <panel.string name="sale_pending_text"> (Venda Pendente) - </string> - <string name="no_selection_text"> + </panel.string> + <panel.string name="no_selection_text"> Nenhum lote selecionado. Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar seus detalhes. - </string> + </panel.string> </panel> <panel label="Corretor" name="land_covenant_panel"> <text name="estate_section_lbl"> Propriedade: </text> - <text length="1" name="estate_name_lbl" type="string"> + <text name="estate_name_lbl"> Nome: </text> - <text length="1" name="estate_name_text" type="string"> + <text name="estate_name_text"> mainland </text> - <text length="1" name="estate_owner_lbl" type="string"> + <text name="estate_owner_lbl"> Dono: </text> - <text length="1" name="estate_owner_text" type="string"> + <text name="estate_owner_text"> (nenhum) </text> - <text_editor length="1" name="covenant_editor" type="string"> + <text_editor name="covenant_editor"> Não há corretor para esta Propriedade. </text_editor> - <text length="1" name="covenant_timestamp_text" type="string"> + <text name="covenant_timestamp_text"> Última Alteração: Qua, Dez 31 16:00:00 1969 </text> <text name="region_section_lbl"> Região: </text> - <text length="1" name="region_name_lbl" type="string"> + <text name="region_name_lbl"> Nome: </text> - <text length="1" name="region_name_text" type="string"> + <text name="region_name_text"> leyla </text> <text name="region_landtype_lbl"> @@ -165,93 +165,93 @@ Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar se <text name="resellable_lbl"> Revender: </text> - <text length="1" name="resellable_clause" type="string"> + <text name="resellable_clause"> Terra nesta região não pode ser revendida. </text> <text name="changeable_lbl"> Subdividir: </text> - <text length="1" name="changeable_clause" type="string"> + <text name="changeable_clause"> Terra nesta região não pode ser unida/sub-dividida. </text> - <string name="can_resell"> + <panel.string name="can_resell"> Terra comprada nesta região pode ser revendida. - </string> - <string name="can_not_resell"> + </panel.string> + <panel.string name="can_not_resell"> Terra comprada nesta região não pode ser revendida. - </string> - <string name="can_change"> + </panel.string> + <panel.string name="can_change"> Terra comprada nesta região pode ser compartilhada ou sub-dividida. - </string> - <string name="can_not_change"> + </panel.string> + <panel.string name="can_not_change"> Terra comprada nesta região não pode ser compartilhada ou sub-dividida. - </string> + </panel.string> </panel> <panel label="Objetos" name="land_objects_panel"> <text name="parcel_object_bonus"> Fator de Bonus para Objetos na Região: [BONUS] </text> - <text length="1" name="Simulator primitive usage:" type="string"> + <text name="Simulator primitive usage:"> Uso do simulador de primitivas: </text> <text left="214" name="objects_available" width="230"> [COUNT] de [MAX] ([AVAILABLE] disponíveis) </text> - <string name="objects_available_text"> + <panel.string name="objects_available_text"> [COUNT] de [MAX] ([AVAILABLE] disponíveis) - </string> - <string name="objects_deleted_text"> + </panel.string> + <panel.string name="objects_deleted_text"> [COUNT] de [MAX] ([DELETED] serão deletados) - </string> - <text length="1" name="Primitives parcel supports:" type="string" width="200"> + </panel.string> + <text name="Primitives parcel supports:" width="200"> Primitivas suportadas pelo lote: </text> - <text left="214" length="1" name="object_contrib_text" type="string" width="152"> + <text left="214" name="object_contrib_text" width="152"> [COUNT] </text> - <text length="1" name="Primitives on parcel:" type="string"> + <text name="Primitives on parcel:"> Primitivas no Lote: </text> - <text left="214" length="1" name="total_objects_text" type="string" width="48"> + <text left="214" name="total_objects_text" width="48"> [COUNT] </text> - <text left="14" length="1" name="Owned by parcel owner:" type="string" width="180"> + <text left="14" name="Owned by parcel owner:" width="180"> Pertencentes ao dono do lote: </text> - <text left="214" length="1" name="owner_objects_text" type="string" width="48"> + <text left="214" name="owner_objects_text" width="48"> [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOwner" right="-135" width="60"/> <button label="Retornar..." label_selected="Retornar..." name="ReturnOwner..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> - <text left="14" length="1" name="Set to group:" type="string" width="180"> + <text left="14" name="Set to group:" width="180"> Configurados ao grupo: </text> - <text left="214" length="1" name="group_objects_text" type="string" width="48"> + <text left="214" name="group_objects_text" width="48"> [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowGroup" right="-135" width="60"/> <button label="Retornar..." label_selected="Retornar..." name="ReturnGroup..." right="-10" tool_tip="Retornar os objetos para seus donos." width="119"/> - <text left="14" length="1" name="Owned by others:" type="string" width="128"> + <text left="14" name="Owned by others:" width="128"> Propriedade de Outros: </text> - <text left="214" length="1" name="other_objects_text" type="string" width="48"> + <text left="214" name="other_objects_text" width="48"> [COUNT] </text> <button label="Mostrar" label_selected="Mostrar" name="ShowOther" right="-135" width="60"/> <button label="Retornar..." label_selected="Retornar..." name="ReturnOther..." right="-10" tool_tip="Retornar os objetos aos seus donos." width="119"/> - <text left="14" length="1" name="Selected / sat upon:" type="string" width="193"> + <text left="14" name="Selected / sat upon:" width="193"> Selecionado/Sentado: </text> - <text left="214" length="1" name="selected_objects_text" type="string" width="48"> + <text left="214" name="selected_objects_text" width="48"> [COUNT] </text> - <text left="4" length="1" name="Autoreturn" type="string" width="412"> + <text left="4" name="Autoreturn" width="412"> Auto-retornar objetos dos outros residentes (minutos, 0 para desligado): </text> <line_editor name="clean other time" right="-10"/> - <text length="1" name="Object Owners:" type="string"> + <text name="Object Owners:"> Donos dos Objetos: </text> <button label="Atualizar Lista" label_selected="Atualizar Lista" name="Refresh List" left="118"/> @@ -264,168 +264,140 @@ ou sub-dividida. </name_list> </panel> <panel label="Opções" name="land_options_panel"> - <text length="1" name="allow_label" type="string"> + <text name="allow_label"> Permitir outros residentes a: </text> <check_box label="Editar Terreno" name="edit land check" tool_tip="Se ativado, qualquer um pode modificar a forma da sua terra. É melhor deixar esta opção desativada, uma vez que você sempre pode editar seu próprio terreno."/> <check_box label="Criar Landmarks" name="check landmark"/> <check_box label="Voar" name="check fly" tool_tip="Se ativado, os Residentes podem voar na sua terra. Se desativado, eles podem voar apenas para dentro e por cima de sua terra."/> - <text length="1" name="allow_label2" type="string" left="172"> + <text name="allow_label2" left="172"> Criar Objetos: </text> <check_box label="Residentes" name="edit objects check"/> <check_box label="Grupo" name="edit group objects check"/> - <text length="1" name="allow_label3" type="string" left="172"> + <text name="allow_label3" left="172"> Entrada do Objeto: </text> <check_box label="Residentes" name="all object entry check"/> <check_box label="Grupo" name="group object entry check"/> - <text length="1" name="allow_label4" type="string" left="172"> + <text name="allow_label4" left="172"> Executar Scripts: </text> <check_box label="Residentes" name="check other scripts"/> <check_box label="Grupo" name="check group scripts"/> - <text length="1" name="land_options_label" type="string"> + <text name="land_options_label"> Opções de Terra: </text> <check_box label="Salvo (sem dano)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, desabilitando combate com danos. Se não ativado, o combate com danos é habilitado."/> <check_box label="Sem Empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. A ativação dessa opção pode ser útil para prevenir comportamentos desordeiros na sua terra."/> <check_box label="Mostra o Lugar na Busca (L$30/semana) sob" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/> - <string name="search_enabled_tooltip"> + <panel.string name="search_enabled_tooltip"> Permitir que as pessoas vejam este lote nos resultados de busca - </string> - <string name="search_disabled_small_tooltip"> + </panel.string> + <panel.string name="search_disabled_small_tooltip"> Esta opção está desabilitada porque a área deste lote tem 128 m² ou menos. Apenas lotes maiores podem ser listados na busca. - </string> - <string name="search_disabled_permissions_tooltip"> + </panel.string> + <panel.string name="search_disabled_permissions_tooltip"> Esta opção está desabilitada porque você não pode modificar as opções deste lote. - </string> + </panel.string> <combo_box name="land category with adult" left="265" width="155"> - <combo_item name="AnyCategory"> - Qualquer Categoria - </combo_item> - <combo_item name="LindenLocation"> - Local da Linden - </combo_item> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Arts&Culture"> - Artes & Cultura - </combo_item> - <combo_item name="Business"> - Negócios - </combo_item> - <combo_item name="Educational"> - Educacional - </combo_item> - <combo_item name="Gaming"> - Jogos - </combo_item> - <combo_item name="Hangout"> - Moradia - </combo_item> - <combo_item name="NewcomerFriendly"> - Amigável a Novos Usuários - </combo_item> - <combo_item name="Parks&Nature"> - Parques & Natureza - </combo_item> - <combo_item name="Residential"> - Residencial - </combo_item> - <combo_item name="Shopping"> - Shopping - </combo_item> - <combo_item name="Other"> - Outros - </combo_item> + <combo_box.item name="item0" label="Qualquer Categoria" + /> + <combo_box.item name="item1" label="Locação Linden" + /> + <combo_box.item name="item2" label="Adult" + /> + <combo_box.item name="item3" label="Artes e Cultura" + /> + <combo_box.item name="item4" label="Negócios" + /> + <combo_box.item name="item5" label="Educacional" + /> + <combo_box.item name="item6" label="Jogos" + /> + <combo_box.item name="item7" label="Moradia" + /> + <combo_box.item name="item8" label="Amigável a Novos Usuários" + /> + <combo_box.item name="item9" label="Parques & Natureza" + /> + <combo_box.item name="item10" label="Residencial" + /> + <combo_box.item name="item11" label="Compras" + /> + <combo_box.item name="item12" label="Outros" + /> </combo_box> <combo_box name="land category" left="265" width="155"> - <combo_item name="AnyCategory"> - Qualquer Categoria - </combo_item> - <combo_item name="LindenLocation"> - Locação Linden - </combo_item> - <combo_item name="Arts&Culture"> - Artes e Cultura - </combo_item> - <combo_item name="Business"> - Negócios - </combo_item> - <combo_item name="Educational"> - Educacional - </combo_item> - <combo_item name="Gaming"> - Jogo - </combo_item> - <combo_item name="Hangout"> - Lazer - </combo_item> - <combo_item name="NewcomerFriendly"> - Amigável para novatos - </combo_item> - <combo_item name="Parks&Nature"> - Parques e Natureza - </combo_item> - <combo_item name="Residential"> - Residencial - </combo_item> - <combo_item name="Shopping"> - Compras - </combo_item> - <combo_item name="Other"> - Outros - </combo_item> + <combo_box.item name="item0" label="Qualquer Categoria" + /> + <combo_box.item name="item1" label="Locação Linden" + /> + <combo_box.item name="item3" label="Artes e Cultura" + /> + <combo_box.item name="item4" label="Negócios" + /> + <combo_box.item name="item5" label="Educacional" + /> + <combo_box.item name="item6" label="Jogos" + /> + <combo_box.item name="item7" label="Moradia" + /> + <combo_box.item name="item8" label="Amigável a Novos Usuários" + /> + <combo_box.item name="item9" label="Parques e Natureza" + /> + <combo_box.item name="item10" label="Residencial" + /> + <combo_box.item name="item11" label="Compras" + /> + <combo_box.item name="item12" label="Outros" + /> </combo_box> <button label="?" label_selected="?" left="426" name="?"/> <check_box label="Conteúdo Mature" name="MatureCheck" tool_tip=""/> - <string name="mature_check_mature"> + <panel.string name="mature_check_mature"> Conteúdo Mature - </string> - <string name="mature_check_adult"> + </panel.string> + <panel.string name="mature_check_adult"> Conteúdo Adult - </string> - <string name="mature_check_mature_tooltip"> + </panel.string> + <panel.string name="mature_check_mature_tooltip"> A informação do seu lote ou seu conteúdo são considerados mature. - </string> - <string name="mature_check_adult_tooltip"> + </panel.string> + <panel.string name="mature_check_adult_tooltip"> A informação do seu lote ou seu conteúdo são considerados adult. - </string> - <text length="1" name="Snapshot:" type="string"> + </panel.string> + <text name="Snapshot:"> Foto: </text> <texture_picker label="" name="snapshot_ctrl" tool_tip="Clique para escolher uma imagem"/> <text name="landing_point"> Ponto de Aterrissagem: [LANDING] </text> - <string name="landing_point_none"> + <panel.string name="landing_point_none"> (nenhum) - </string> + </panel.string> <button label="Definir" label_selected="Definir" name="Set" tool_tip="Define o ponto de aterrissagem aonde o visitante chega. Define para o ponto em que seu avatar se encontra neste lote."/> <button label="Limpar" label_selected="Limpar" name="Clear" tool_tip="Limpar o ponto de aterrissagem."/> - <text length="1" name="Teleport Routing: " type="string"> + <text name="Teleport Routing: "> Rota de Tele-transporte: </text> <combo_box width="160" left="140" name="landing type" tool_tip="Rota de Teletransporte -- Selecione como tratar os tele-transportes no seu lote."> - <combo_item length="1" name="Blocked" type="string"> - Bloqueado - </combo_item> - <combo_item length="1" name="LandingPoint" type="string"> - Ponto de Aterrissagem - </combo_item> - <combo_item length="1" name="Anywhere" type="string"> - Qualquer lugar - </combo_item> + <combo_box.item name="Blocked" label="Bloqueado" + /> + <combo_box.item name="LandingPoint" label="Ponto de Aterrissagem" + /> + <combo_box.item name="Anywhere" label="Qualquer lugar" + /> </combo_box> - <string name="push_restrict_text"> + <panel.string name="push_restrict_text"> Sem Empurrar - </string> - <string name="push_restrict_region_text"> + </panel.string> + <panel.string name="push_restrict_region_text"> Sem Empurrar (Imposição na Região) - </string> + </panel.string> </panel> <panel label="Mídia" name="land_media_panel"> <text name="with media:" width="85"> @@ -441,7 +413,7 @@ Apenas lotes maiores podem ser listados na busca. Descrição: </text> <line_editor left="97" name="url_description" tool_tip="Texto mostrado ao lado do botão reproduzir/carregar"/> - <text length="1" name="Media texture:" type="string"> + <text name="Media texture:"> Substituir Textura: </text> @@ -484,7 +456,7 @@ Mídia: <check_box left="117" label="Restringir Voz a este lote" name="parcel_enable_voice_channel_parcel"/> </panel> <panel label="Acesso" name="land_access_panel"> - <text length="1" name="Limit access to this parcel to:" type="string"> + <text name="Limit access to this parcel to:"> Acesso a Este Lote </text> <check_box label="Permitir Acesso Público" name="public_access"/> @@ -493,18 +465,16 @@ Mídia: </text> <check_box label="Residentes que não forneceram informações de pagamento para a Linden Lab" name="limit_payment" tool_tip="Banir residentes não identificados."/> <check_box label="Residentes que não tiveram a idade de adulto confirmada" name="limit_age_verified" tool_tip="Banir residentes que não tiveram sua idade verificada. Veja support.secondlife.com para maiores informações."/> - <string name="estate_override"> + <panel.string name="estate_override"> Uma ou mais destas opções está definida no nível de propriedade. - </string> + </panel.string> <check_box label="Permitir Acesso do Grupo: [GROUP]" name="GroupCheck" tool_tip="Definir grupo na aba Geral."/> <check_box label="Vender passes para:" name="PassCheck" tool_tip="Permite acesso temporário a este terreno"/> <combo_box name="pass_combo"> - <combo_item name="Anyone"> - Qualquer um - </combo_item> - <combo_item name="Group"> - Grupo - </combo_item> + <combo_box.item name="Anyone" label="Qualquer um" + /> + <combo_box.item name="Group" label="Grupo" + /> </combo_box> <spinner label="Preço em L$:" name="PriceSpin"/> <spinner label="Horas de Acesso:" name="HoursSpin"/> diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml index 7c4fa20f1b..4bced69664 100644 --- a/indra/newview/skins/default/xui/pt/floater_customize.xml +++ b/indra/newview/skins/default/xui/pt/floater_customize.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="floater customize" title="Aparência" width="546"> <tab_container name="customize tab container" tab_min_width="115" width="544"> - <panel label="Partes de corpo" name="body_parts_placeholder"/> + <placeholder label="Partes de corpo" name="body_parts_placeholder"/> <panel label="Forma" name="Shape"> <button label="Reverter" label_selected="Reverter" name="Revert"/> <button label="Corpo" label_selected="Corpo" name="Body"/> @@ -14,29 +14,29 @@ <button label="Tórax" label_selected="Tórax" name="Torso"/> <button label="Pernas" label_selected="Pernas" name="Legs"/> <radio_group name="sex radio"> - <radio_item length="1" name="radio" type="string" label="Feminino" /> - <radio_item length="1" name="radio2" type="string" label="Masculino" /> + <radio_item name="radio" label="Feminino" /> + <radio_item name="radio2" label="Masculino" /> </radio_group> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Coloque uma nova forma arrastando uma do seu inventário para seu avatar. Alternativamente, você pode criar uma nova de um esboço e usá-la. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -51,27 +51,27 @@ Alternativamente, você pode criar uma nova de um esboço e usá-la. <button width="115" label="Detalhes Faciais" label_selected="Detalhes Faciais" name="Face Detail"/> <button width="115" label="Maquiagem" label_selected="Maquiagem" name="Makeup"/> <button width="115" label="Detalhes do Corpo" label_selected="Detalhes do Corpo" name="Body Detail"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando.. </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizada em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Coloque uma nova pele arrastando uma de seu inventário para seu avatar. Alternativamente, você pode criar uma nova forma a partir de um esboço e usá-la. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -90,27 +90,27 @@ e usá-la. <button width="115" label="Estilo" label_selected="Estilo" name="Style"/> <button width="115" label="Sombrancelhas" label_selected="Sombrancelhas" name="Eyebrows"/> <button width="115" label="Rosto" label_selected="Rosto" name="Facial"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Ponha um novo cabelo em seu avatar arrastando um do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não ter permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> @@ -123,26 +123,26 @@ e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Olhos" name="Eyes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para colocar novos olhos, arraste um do seu inventário para seu avatar. Alternativamente, você pode criar um novo modelo de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para alterar esta vestimenta. </text> <text name="Item Action Label"> @@ -163,27 +163,27 @@ Alternativamente, você pode criar um novo modelo de um esboço e usá-lo. <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por uma nova camisa em seu avatar, arraste uma do seu inventário para seu avatar. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não ter permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -198,27 +198,27 @@ um esboço e usá-lo. <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Salvar como..." label_selected="Salvar como..." name="Save As"/> <button label="Reverter" label_selected="Reverter" name="Revert"/> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestindo </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por uma nova calça em seu avatar, basta arrastar uma outra do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -226,27 +226,27 @@ de um esboço e usá-lo. </text> </panel> <panel label="Sapatos" name="Shoes"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por novos sapatos em seu avatar, basta arrastar um novo do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -261,27 +261,27 @@ de um esboço e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Meias" name="Socks"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido. </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por novas meias em seu avatar, basta arrastar uma nova do seu inventário. Alternativamente, você pode criar novas meias a partir de um esboço e usá-las. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> @@ -296,27 +296,27 @@ um esboço e usá-las. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Jaqueta" name="Jacket"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: Não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por uma nova jaqueta em seu avatar, basta arrastar um novo modelo do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> @@ -332,27 +332,27 @@ partir de um esboço e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Luvas" name="Gloves"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando.... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para colocar uma nova jaqueta em seu avatar, basta arrastar um novo modelo do seu inventário. Alternativamente, você pode criar uma novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> @@ -367,27 +367,27 @@ partir de um esboço e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Camiseta" name="Undershirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por uma nova Camiseta em seu avatar, basta arrastar um novo modelo de seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não ter permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> @@ -402,27 +402,27 @@ partir de um esboço e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Roupas de Baixo" name="Underpants"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por novas roupas de baixo em seu avatar, basta arrastar um novo modelo do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar essa vestimenta. </text> <text name="Item Action Label"> @@ -437,27 +437,27 @@ modelo a partir de um esboço e usá-lo. <button label="Reverter" label_selected="Reverter" name="Revert"/> </panel> <panel label="Saia" name="Skirt"> - <text length="1" name="title" type="string"> + <text name="title"> [DESC] </text> - <text length="1" name="title_no_modify" type="string"> + <text name="title_no_modify"> [DESC]: não foi possível modificar </text> - <text length="1" name="title_loading" type="string"> + <text name="title_loading"> [DESC]: carregando... </text> - <text length="1" name="title_not_worn" type="string"> + <text name="title_not_worn"> [DESC]: não vestido </text> - <text length="1" name="path" type="string"> + <text name="path"> Localizado em [PATH] </text> - <text length="1" name="not worn instructions" type="string"> + <text name="not worn instructions"> Para por uma nova saia em seu avatar, basta arrastar um novo modelo do seu inventário. Alternativamente, você pode criar um novo modelo a partir de um esboço e usá-lo. </text> - <text length="1" name="no modify instructions" type="string"> + <text name="no modify instructions"> Você não tem permissão para modificar esta vestimenta. </text> <text name="Item Action Label"> diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml index ed36826800..83df449ae6 100644 --- a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml +++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml @@ -15,7 +15,7 @@ <button label="Nenhum" label_selected="Nenhum" name="None"/> <check_box label="Sempre mostrar as pastas" name="check_show_empty" left="3"/> <check_box label="Desde o Logoff" name="check_since_logoff" left="3"/> - <text length="1" name="- OR -" type="string"> + <text name="- OR -"> - OU - </text> <spinner label="Horas Atrás" name="spin_hours_ago"/> diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml index 0bc3928710..ac7b7fd02a 100644 --- a/indra/newview/skins/default/xui/pt/floater_joystick.xml +++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="Joystick" title="Configuração do Joystick"> - <check_box name="enable_joystick"> - Habilitar Joystick: - </check_box> + <check_box name="enable_joystick" label="Habilitar Joystick:"/> <text left="135" name="joystick_type" width="360"/> <spinner label="Mapeamento: eixo X" name="JoystickAxis1" label_width="124" width="164"/> <spinner label="Mapeamento: eixo Y" name="JoystickAxis2" label_width="124" width="164"/> @@ -17,15 +15,9 @@ <text name="Control Modes:"> Modos de Controle: </text> - <check_box name="JoystickAvatarEnabled"> - Avatar - </check_box> - <check_box name="JoystickBuildEnabled" left="192"> - Construir - </check_box> - <check_box name="JoystickFlycamEnabled"> - Camera aérea - </check_box> + <check_box name="JoystickAvatarEnabled" label="Avatar"/> + <check_box name="JoystickBuildEnabled" left="192" label="Construir"/> + <check_box name="JoystickFlycamEnabled" label="Camera aérea"/> <text name="XScale"> Escala X </text> @@ -74,12 +66,14 @@ <button label="Padrões do SpaceNavigator" name="SpaceNavigatorDefaults" font="SansSerifSmall"/> <button label="OK" label_selected="OK" name="ok_btn"/> <button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/> - <string name="JoystickMonitor"> - Monitor do Joystick - </string> - <string name="Axis"> - Eixo [NUM] - </string> + <stat_view label="Monitor do Joystick" name="axis_view"> + <stat_bar label="Eixo 0" name="axis0"/> + <stat_bar label="Eixo 1" name="axis1"/> + <stat_bar label="Eixo 2" name="axis2"/> + <stat_bar label="Eixo 3" name="axis3"/> + <stat_bar label="Eixo 4" name="axis4"/> + <stat_bar label="Eixo 5" name="axis5"/> + </stat_view> <string name="NoDevice"> nenhum dispositivo detectado </string> diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml new file mode 100644 index 0000000000..eb55560a1e --- /dev/null +++ b/indra/newview/skins/default/xui/pt/floater_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Map">
+ <floater.string name="mini_map_north">
+ N
+ </floater.string>
+ <floater.string name="mini_map_east">
+ L
+ </floater.string>
+ <floater.string name="mini_map_west">
+ O
+ </floater.string>
+ <floater.string name="mini_map_south">
+ S
+ </floater.string>
+ <floater.string name="mini_map_southeast">
+ SE
+ </floater.string>
+ <floater.string name="mini_map_northeast">
+ NE
+ </floater.string>
+ <floater.string name="mini_map_southwest">
+ SO
+ </floater.string>
+ <floater.string name="mini_map_northwest">
+ NO
+ </floater.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="L" name="floater_map_east" text="L">
+ L
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml index fde1c16454..996a974254 100644 --- a/indra/newview/skins/default/xui/pt/floater_moveview.xml +++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="move floater" title=""> +<floater name="move_floater"> +<panel name="panel_actions"> <button label="" label_selected="" name="turn left btn" tool_tip="Virar à esquerda"/> <button label="" label_selected="" name="turn right btn" tool_tip="Virar à direita"/> <button label="" label_selected="" name="move up btn" tool_tip="Pular ou Voar"/> @@ -8,4 +9,5 @@ <joystick_slide name="slide right btn" tool_tip="Mover para a direita"/> <joystick_turn name="forward btn" tool_tip="Mover para a frente."/> <joystick_turn name="backward btn" tool_tip="Mover para trás"/> +</panel> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml index 78fe3398be..d3b72b4b18 100644 --- a/indra/newview/skins/default/xui/pt/floater_openobject.xml +++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="objectcontents" title="Conteúdo do objeto"> - <text length="1" name="object_name" type="string"> + <text name="object_name"> [DESC]: </text> <button label="Copiar para Inventário" label_selected="Copiar para Inventário" name="copy_to_inventory_button" width="132"/> diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml index 2eb1c5c1bf..187df8fd18 100644 --- a/indra/newview/skins/default/xui/pt/floater_pay.xml +++ b/indra/newview/skins/default/xui/pt/floater_pay.xml @@ -6,16 +6,16 @@ <button label="L$20" label_selected="L$20" name="fastpay 20" /> <button label="Pagar" label_selected="Pagar" name="pay btn" /> <button label="Cancelar" label_selected="Cancelar" name="cancel btn" /> - <text type="string" length="1" name="payee_label" width="110" left="5"> + <text name="payee_label" width="110" left="5"> Pagar residente: </text> - <text type="string" length="1" name="payee_name" left="115"> + <text name="payee_name" left="115"> [FIRST] [LAST] </text> - <text type="string" length="1" name="fastpay text" width="120" halign="left"> + <text name="fastpay text" width="120" halign="left"> Pagamento rápido: </text> - <text type="string" length="1" name="amount text" left="4" > + <text name="amount text" left="4" > Quantia: </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml index ad76cf805c..3a3dd9e52e 100644 --- a/indra/newview/skins/default/xui/pt/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/pt/floater_pay_object.xml @@ -1,24 +1,24 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="Give Money" title=""> - <text type="string" length="1" name="payee_group" width="100" halign="left"> + <text name="payee_group" width="100" halign="left"> Pagar Grupo: </text> - <text type="string" length="1" name="payee_resident" width="120" halign="left" > + <text name="payee_resident" width="120" halign="left" > Pagar residente: </text> - <text type="string" length="1" name="payee_name" left="105"> + <text name="payee_name" left="105"> [FIRST] [LAST] </text> - <text type="string" length="1" name="object_name_label" left="5" width="95" halign="left"> + <text name="object_name_label" left="5" width="95" halign="left"> Via objeto: </text> - <text type="string" length="1" name="object_name_text" left="105" > + <text name="object_name_text" left="105" > ... </text> - <text type="string" length="1" name="fastpay text" width="115" halign="left"> + <text name="fastpay text" width="115" halign="left"> Pagamento Rápido: </text> - <text type="string" length="1" name="amount text" left="5" halign="left"> + <text name="amount text" left="5" halign="left"> Quantia: </text> <button label="L$1" label_selected="L$1" name="fastpay 1" left="125" width="70"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml index f9b590b8c2..26ca8f87e0 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_anim"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descrição: </text> <button label="Executar in World" label_selected="Parar" left="20" name="Anim play btn" tool_tip="Executar esta animação para que outros vejam." width="131"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml index e7d3144292..e0a133d8ab 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview notecard" title="Nota:"> <button label="Salvar" label_selected="Salvar" name="Save"/> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descrição: </text> - <text_editor length="1" name="Notecard Editor" type="string"> + <text_editor name="Notecard Editor"> Carregando... </text_editor> <string name="no_object"> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml index b62146b92a..3dd2f84f91 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater name="preview_sound"> - <text length="1" name="desc txt" type="string"> + <text name="desc txt"> Descrição: </text> <button left_delta="-132" label="Executar in-World" label_selected="Executar in-World" name="Sound play btn" tool_tip="Executar este som para que todos possam ouvi-lo."/> diff --git a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml index 43f8497cbd..72bc42fa19 100644 --- a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml +++ b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview_texture"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Descrição: </text> - <text type="string" length="1" name="dimensions"> + <text name="dimensions"> Dimensões: [WIDTH] x [HEIGHT] </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml index 79dcf76494..51d7ef8190 100644 --- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml @@ -39,9 +39,7 @@ <combo_box.item name="Select_category" label="Selecionar categoria"/> <combo_box.item name="Age__Age_play" label="Idade > Idade no jogo"/> <combo_box.item name="Age__Adult_resident_on_Teen_Second_Life" label="Idade > Residente adulto no Second Life Jovem"/> - <combo_item name="Age__Underage_resident_outside_of_Teen_Second_Life"> - Idade > Residente menor de idade fora do Second Life Teen - </combo_item> + <combo_box.item name="Age__Underage_resident_outside_of_Teen_Second_Life" label="Idade > Residente menor de idade fora do Second Life Teen"/> <combo_box.item name="Assault__Combat_sandbox___unsafe_area" label="Assalto > Sandbox de combate / área não segura"/> <combo_box.item name="Assault__Safe_area" label="Assalto > Área segura"/> <combo_box.item name="Assault__Weapons_testing_sandbox" label="Assalto > Testando armas em sandbox"/> @@ -66,12 +64,8 @@ <combo_box.item name="Harassment__Verbal_abuse" label="Perturbação > Abuso verbal"/> <combo_box.item name="Indecency__Broadly_offensive_content_or_conduct" label="Indecência > Conteúdo ou conduta amplamente ofensivos"/> <combo_box.item name="Indecency__Inappropriate_avatar_name" label="Indecência > Nome de avatar inapropriado"/> - <combo_item name="Indecency__Mature_content_in_PG_region"> - Indecência > Conduta ou conteúdo inapropriados numa região PG - </combo_item> - <combo_item name="Indecency__Inappropriate_content_in_Mature_region"> - Indecência > Conduta ou conteúdo inapropriados numa região Mature - </combo_item> + <combo_box.item name="Indecency__Mature_content_in_PG_region" label="Indecência > Conduta ou conteúdo inapropriados numa região PG"/> + <combo_box.item name="Indecency__Inappropriate_content_in_Mature_region" label="Indecência > Conduta ou conteúdo inapropriados numa região Mature"/> <combo_box.item name="Intellectual_property_infringement_Content_Removal" label="Violação de propriedade intelectual > Remoção de Conteúdo"/> <combo_box.item name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" label="Violação de Propriedade intelectual > Cópia Ilegal ou Aproveitar-se de Permissões"/> <combo_box.item name="Intolerance" label="Intolerância"/> diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml index d014e040a2..2a7680565f 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_preview.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="preview lsl text" title="Script: Rotation Script"> - <text type="string" length="1" name="desc txt"> + <text name="desc txt"> Descrição: </text> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml index 5c1393107f..c904c0f816 100644 --- a/indra/newview/skins/default/xui/pt/floater_script_search.xml +++ b/indra/newview/skins/default/xui/pt/floater_script_search.xml @@ -4,10 +4,10 @@ <button label="Buscar" label_selected="Buscar" name="search_btn" width="85"/> <button label="Substituir" label_selected="Substituir" name="replace_btn" left="100" width="85"/> <button label="Substituir Tudo" label_selected="Substituir Tudo" name="replace_all_btn" left="190" width="122"/> - <text length="1" name="txt" type="string" width="65"> + <text name="txt" width="65"> Buscar </text> - <text length="1" name="txt2" type="string" width="65"> + <text name="txt2" width="65"> Substituir </text> <line_editor left="75" name="search_text" width="240" /> diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml index 2f6efd4998..a924706cb9 100644 --- a/indra/newview/skins/default/xui/pt/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml @@ -15,12 +15,8 @@ <button label="Enviar" name="send_btn"/> <button label="Salvar (L$[AMOUNT])" name="upload_btn"/> <flyout_button label="Salvar" name="save_btn" tool_tip="Salvar imagem em um arquivo"> - <flyout_button.item name="save_item"> - Salvar - </flyout_button.item> - <flyout_button.item name="saveas_item"> - Salvar como... - </flyout_button.item> + <flyout_button.item name="save_item" label="Salvar"/> + <flyout_button.item name="saveas_item" label="Salvar como..."/> </flyout_button> <button label="Cancelar" name="discard_btn"/> <button label="Mais >" name="more_btn" tool_tip="Opções Avançadas"/> diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml index 3fd0d6103e..784540a48e 100644 --- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml @@ -3,10 +3,10 @@ <string name="choose_picture"> Clique para escolher uma imagem </string> - <text length="1" name="Multiple" type="string"> + <text name="Multiple"> Multiplo </text> - <text length="1" name="unknown" type="string"> + <text name="unknown"> Dimensões: [DIMENSIONS] </text> <button label="Padrão" label_selected="Padrão" name="Default"/> diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml index 4f5054da73..7302c1c8f8 100644 --- a/indra/newview/skins/default/xui/pt/floater_tools.xml +++ b/indra/newview/skins/default/xui/pt/floater_tools.xml @@ -5,30 +5,33 @@ <button label="" label_selected="" name="button edit" tool_tip="Editar"/> <button label="" label_selected="" name="button create" tool_tip="Criar"/> <button label="" label_selected="" name="button land" tool_tip="Terra"/> - <check_box label="Zoom" name="radio zoom"/> - <check_box label="Órbita (Ctrl)" name="radio orbit"/> - <check_box label="Pan (Ctrl-Shift)" name="radio pan"/> - <check_box label="Mover" name="radio move"/> - <check_box label="Suspender (Ctrl)" name="radio lift"/> - <check_box label="Girar (Ctrl-Shift)" name="radio spin"/> - <check_box label="Posição" name="radio position"/> - <check_box label="Rotacionar (Ctrl)" name="radio rotate"/> - <check_box label="Esticar (Ctrl-Shift)" name="radio stretch"/> - <check_box label="Selecionar Textura" name="radio select face"/> + <radio_group name="focus_radio_group"> + <radio_item label="Zoom" name="radio zoom"/> + <radio_item label="Órbita (Ctrl)" name="radio orbit"/> + <radio_item label="Pan (Ctrl-Shift)" name="radio pan"/> + </radio_group> + <radio_group name="move_radio_group"> + <radio_item label="Mover" name="radio move"/> + <radio_item label="Suspender (Ctrl)" name="radio lift"/> + <radio_item label="Girar (Ctrl-Shift)" name="radio spin"/> + </radio_group> + <radio_group name="edit_radio_group"> + <radio_item label="Posição" name="radio position"/> + <radio_item label="Rotacionar (Ctrl)" name="radio rotate"/> + <radio_item label="Esticar (Ctrl-Shift)" name="radio stretch"/> + <radio_item label="Selecionar Textura" name="radio select face"/> + </radio_group> <check_box label="Editar partes unidas" name="checkbox edit linked parts"/> <text name="text ruler mode"> Régua: </text> <combo_box name="combobox grid mode"> - <combo_item name="World"> - Mundo - </combo_item> - <combo_item name="Local"> - Local - </combo_item> - <combo_item name="Reference"> - Referência - </combo_item> + <combo_box.item name="World" label="Mundo" + /> + <combo_box.item name="Local" label="Local" + /> + <combo_box.item name="Reference" label="Referência" + /> </combo_box> <check_box label="Esticar ambos os lados" name="checkbox uniform"/> <check_box label="Esticar Texturas" name="checkbox stretch textures"/> @@ -56,13 +59,15 @@ <check_box label="Copiar selecionado" name="checkbox copy selection"/> <check_box label="Centro" name="checkbox copy centers"/> <check_box label="Rotacionar" name="checkbox copy rotates"/> - <check_box label="Selecionar Terra" name="radio select land"/> - <check_box label="Aplainar" name="radio flatten"/> - <check_box label="Subir" name="radio raise"/> - <check_box label="Abaixar" name="radio lower"/> - <check_box label="Suavizar" name="radio smooth"/> - <check_box label="Endurecer" name="radio noise"/> - <check_box label="Reverter" name="radio revert"/> + <radio_group name="land_radio_group"> + <radio_item label="Selecionar Terra" name="radio select land"/> + <radio_item label="Aplainar" name="radio flatten"/> + <radio_item label="Subir" name="radio raise"/> + <radio_item label="Abaixar" name="radio lower"/> + <radio_item label="Suavizar" name="radio smooth"/> + <radio_item label="Endurecer" name="radio noise"/> + <radio_item label="Reverter" name="radio revert"/> + </radio_group> <button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar Terra Selecionada"/> <text name="Bulldozer:"> Escavadeira: @@ -111,9 +116,7 @@ <text name="Permissions:"> Permissões: </text> - <text name="perm_modify"> - Você pode modificar este objeto. - </text> + <check_box label="Compartilhar com o Grupo" name="checkbox share with group" tool_tip="Permite que todos os membros do grupo definido compartilhem e usem suas permissões para este objeto. Você precisa Doar ao Grupo para habilitar as restrições de função."/> <string name="text deed continued"> Doar... @@ -129,49 +132,35 @@ <text name="Cost"> Preço: L$ </text> - <radio_group name="sale type"> - <radio_item name="Original"> - Original - </radio_item> - <radio_item name="Copy"> - Cópia - </radio_item> - <radio_item name="Contents"> - Conteúdo - </radio_item> - </radio_group> - <text name="Next owner can:"> - Próximo Proprietário pode: - </text> - <check_box label="Modificar" name="checkbox next owner can modify"/> - <check_box label="Copiar" name="checkbox next owner can copy" left_delta="80"/> - <check_box label="Revender/Dar" name="checkbox next owner can transfer" left_delta="67"/> + <combo_box name="sale type"> + <combo_box.item label="Cópia" name="Copy"/> + <combo_box.item label="Conteúdo" name="Contents"/> + <combo_box.item label="Original" name="Original"/> + </combo_box> + <text name="label click action" width="220"> Quando clicado com o botão esquerdo: </text> <combo_box name="clickaction" width="192"> - <combo_item name="Touch/grab(default)"> - Tocar/Pegar (padrão) - </combo_item> - <combo_item name="Sitonobject"> - Sentar no objeto - </combo_item> - <combo_item name="Buyobject"> - Comprar objeto - </combo_item> - <combo_item name="Payobject"> - Pagar Objeto - </combo_item> - <combo_item name="Open"> - Abrir - </combo_item> - <combo_item name="Play"> - Executar a mídia do lote - </combo_item> - <combo_item name="Opemmedia"> - Abrir a mídia do lote - </combo_item> + <combo_box.item name="Touch/grab(default)" label="Tocar/Pegar (padrão)" + /> + <combo_box.item name="Sitonobject" label="Sentar no objeto" + /> + <combo_box.item name="Buyobject" label="Comprar objeto" + /> + <combo_box.item name="Payobject" label="Pagar Objeto" + /> + <combo_box.item name="Open" label="Abrir" + /> + <combo_box.item name="Play" label="Executar a mídia do lote" + /> + <combo_box.item name="Opemmedia" label="Abrir a mídia do lote" + /> </combo_box> + <panel name="perms_build"> + <text name="perm_modify"> + Você pode modificar este objeto. + </text> <text name="B:"> B: </text> @@ -190,6 +179,13 @@ <text name="F:"> F: </text> + <text name="Next owner can:"> + Próximo Proprietário pode: + </text> + <check_box label="Modificar" name="checkbox next owner can modify"/> + <check_box label="Copiar" name="checkbox next owner can copy" left_delta="80"/> + <check_box name="checkbox next owner can transfer" left_delta="67"/> + </panel> <string name="text modify info 1"> Você pode modificar este objeto. </string> @@ -254,56 +250,41 @@ Material </text> <combo_box name="material"> - <combo_item name="Stone"> - Pedra - </combo_item> - <combo_item name="Metal"> - Metal - </combo_item> - <combo_item name="Glass"> - Vidro - </combo_item> - <combo_item name="Wood"> - Madeira - </combo_item> - <combo_item name="Flesh"> - Carne - </combo_item> - <combo_item name="Plastic"> - Plástico - </combo_item> - <combo_item name="Rubber"> - Couro - </combo_item> + <combo_box.item name="Stone" label="Pedra" + /> + <combo_box.item name="Metal" label="Metal" + /> + <combo_box.item name="Glass" label="Vidro" + /> + <combo_box.item name="Wood" label="Madeira" + /> + <combo_box.item name="Flesh" label="Carne" + /> + <combo_box.item name="Plastic" label="Plástico" + /> + <combo_box.item name="Rubber" label="Couro" + /> </combo_box> <text name="label basetype"> Forma básica </text> <combo_box name="comboBaseType"> - <combo_item name="Box"> - Caixa - </combo_item> - <combo_item name="Cylinder"> - Cilindro - </combo_item> - <combo_item name="Prism"> - Prisma - </combo_item> - <combo_item name="Sphere"> - Esfera - </combo_item> - <combo_item name="Torus"> - Toróide - </combo_item> - <combo_item name="Tube"> - Tubo - </combo_item> - <combo_item name="Ring"> - Anel - </combo_item> - <combo_item name="Sculpted"> - Esculpida - </combo_item> + <combo_box.item name="Box" label="Caixa" + /> + <combo_box.item name="Cylinder" label="Cilindro" + /> + <combo_box.item name="Prism" label="Prisma" + /> + <combo_box.item name="Sphere" label="Esfera" + /> + <combo_box.item name="Torus" label="Toróide" + /> + <combo_box.item name="Tube" label="Tubo" + /> + <combo_box.item name="Ring" label="Anel" + /> + <combo_box.item name="Sculpted" label="Esculpida" + /> </combo_box> <text name="text cut"> Recorte Início e final @@ -320,18 +301,14 @@ Forma Vazia </text> <combo_box name="hole"> - <combo_item name="Default"> - Padrão - </combo_item> - <combo_item name="Circle"> - Circulo - </combo_item> - <combo_item name="Square"> - Quadrado - </combo_item> - <combo_item name="Triangle"> - Triâgulo - </combo_item> + <combo_box.item name="Default" label="Padrão" + /> + <combo_box.item name="Circle" label="Circulo" + /> + <combo_box.item name="Square" label="Quadrado" + /> + <combo_box.item name="Triangle" label="Triâgulo" + /> </combo_box> <text name="text twist"> Torcer no Início e final @@ -380,21 +357,16 @@ Tipo costura </text> <combo_box name="sculpt type control"> - <combo_item name="None"> - (nenhum) - </combo_item> - <combo_item name="Sphere"> - Esfera - </combo_item> - <combo_item name="Torus"> - Toróide - </combo_item> - <combo_item name="Plane"> - Plano - </combo_item> - <combo_item name="Cylinder"> - Cilindro - </combo_item> + <combo_box.item name="None" label="(nenhum)" + /> + <combo_box.item name="Sphere" label="Esfera" + /> + <combo_box.item name="Torus" label="Toróide" + /> + <combo_box.item name="Plane" label="Plano" + /> + <combo_box.item name="Cylinder" label="Cilindro" + /> </combo_box> </panel> <panel label="Recursos" name="Features"> @@ -436,88 +408,64 @@ Mapeamento </text> <combo_box name="combobox texgen"> - <combo_item name="Default"> - Padrão - </combo_item> - <combo_item name="Planar"> - Planar - </combo_item> + <combo_box.item name="Default" label="Padrão" + /> + <combo_box.item name="Planar" label="Planar" + /> </combo_box> <text name="label shininess"> Brilho </text> <combo_box name="combobox shininess"> - <combo_item name="None"> - Nenhum - </combo_item> - <combo_item name="Low"> - Baixo - </combo_item> - <combo_item name="Medium"> - Médio - </combo_item> - <combo_item name="High"> - Alto - </combo_item> + <combo_box.item name="None" label="Nenhum" + /> + <combo_box.item name="Low" label="Baixo" + /> + <combo_box.item name="Medium" label="Médio" + /> + <combo_box.item name="High" label="Alto" + /> </combo_box> <text name="label bumpiness"> Ondulação </text> <combo_box name="combobox bumpiness" width="100" > - <combo_item name="None"> - Nenhum - </combo_item> - <combo_item name="Brightness"> - Claridade - </combo_item> - <combo_item name="Darkness"> - Escuridão - </combo_item> - <combo_item name="woodgrain"> - Granulação - </combo_item> - <combo_item name="bark"> - Casca - </combo_item> - <combo_item name="bricks"> - Tijolos - </combo_item> - <combo_item name="checker"> - Caixa - </combo_item> - <combo_item name="concrete"> - Concreto - </combo_item> - <combo_item name="crustytile"> - Encaroçado - </combo_item> - <combo_item name="cutstone"> - Pedra Cortante - </combo_item> - <combo_item name="discs"> - Discos - </combo_item> - <combo_item name="gravel"> - Cascalho - </combo_item> - <combo_item name="petridish"> - Pedrisco - </combo_item> - <combo_item name="siding"> - Revestimento - </combo_item> - <combo_item name="stonetile"> - Empedrado - </combo_item> - <combo_item name="stucco"> - Grafiato - </combo_item> - <combo_item name="suction"> - Sulcos - </combo_item> - <combo_item name="weave"> - Weave - </combo_item> + <combo_box.item name="None" label="Nenhum" + /> + <combo_box.item name="Brightness" label="Claridade" + /> + <combo_box.item name="Darkness" label="Escuridão" + /> + <combo_box.item name="woodgrain" label="Granulação" + /> + <combo_box.item name="bark" label="Casca" + /> + <combo_box.item name="bricks" label="Tijolos" + /> + <combo_box.item name="checker" label="Caixa" + /> + <combo_box.item name="concrete" label="Concreto" + /> + <combo_box.item name="crustytile" label="Encaroçado" + /> + <combo_box.item name="cutstone" label="Pedra Cortante" + /> + <combo_box.item name="discs" label="Discos" + /> + <combo_box.item name="gravel" label="Cascalho" + /> + <combo_box.item name="petridish" label="Pedrisco" + /> + <combo_box.item name="siding" label="Revestimento" + /> + <combo_box.item name="stonetile" label="Empedrado" + /> + <combo_box.item name="stucco" label="Grafiato" + /> + <combo_box.item name="suction" label="Sulcos" + /> + <combo_box.item name="weave" label="Weave" + /> </combo_box> <text name="tex scale"> Repetir por Face @@ -579,43 +527,43 @@ <button label="Comprar Terra..." label_selected="Comprar Terra.." name="button buy land"/> <button label="Abandonar Terra..." label_selected="Abandonar Terra..." name="button abandon land"/> </panel> - <string name="status_rotate"> + <floater.string name="status_rotate"> Arrastar as bandas coloridas para girar o objeto - </string> - <string name="status_scale"> + </floater.string> + <floater.string name="status_scale"> Clicar e arrastar para esticar o lado selecionado - </string> - <string name="status_move"> + </floater.string> + <floater.string name="status_move"> Arrastar para mover, Shift-arrastar para copiar - </string> - <string name="status_modifyland"> + </floater.string> + <floater.string name="status_modifyland"> Clicar e reter para modificar a terra - </string> - <string name="status_camera"> + </floater.string> + <floater.string name="status_camera"> Clicar e arrastar para mudar a vista - </string> - <string name="status_grab"> + </floater.string> + <floater.string name="status_grab"> Arrastar para mover, Ctrl para levantar, Ctrl-Shift para rotacionar - </string> - <string name="status_place"> + </floater.string> + <floater.string name="status_place"> Clique no mundo para construir - </string> - <string name="status_selectland"> + </floater.string> + <floater.string name="status_selectland"> Clicar e arrastar para selecionar a terra - </string> - <string name="grid_screen_text"> + </floater.string> + <floater.string name="grid_screen_text"> Tela - </string> - <string name="grid_local_text"> + </floater.string> + <floater.string name="grid_local_text"> Local - </string> - <string name="grid_world_text"> + </floater.string> + <floater.string name="grid_world_text"> Mundo - </string> - <string name="grid_reference_text"> + </floater.string> + <floater.string name="grid_reference_text"> Referência - </string> - <string name="grid_attachment_text"> + </floater.string> + <floater.string name="grid_attachment_text"> Anexo - </string> + </floater.string> </floater> diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml index 3f08b4b992..2b2c669a18 100644 --- a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml +++ b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml @@ -2,7 +2,7 @@ <floater name="modal container" title=" "> <button label="Salvar" label_selected="Salvar" name="Save"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <text length="1" name="Save item as:" type="string"> + <text name="Save item as:"> Salvar item como: </text> <line_editor name="name ed"> diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml index bc4b5462ef..056d121520 100644 --- a/indra/newview/skins/default/xui/pt/floater_world_map.xml +++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml @@ -28,10 +28,10 @@ <check_box label="Mature" name="event_mature_chk"/> <check_box label="Adult" name="event_adult_chk"/> <combo_box label="Amigos Conectados" name="friend combo" tool_tip="Amigos para mostrar no Mapa"> - <combo_box.item name="none_selected" label="Amigos Conectados" /> + <combo_box.item name="item1" label="Amigos Conectados" /> </combo_box> <combo_box label="Landmarks" name="landmark combo" tool_tip="Landmark para mostrar no Mapa"> - <combo_box.item name="none_selected" label="Landmarks" /> + <combo_box.item name="item1" label="Landmarks" /> </combo_box> <line_editor label="Procurar por nome de região" name="location" tool_tip="Digite o nome de uma Região"/> <button label="Procurar" name="DoSearch" tool_tip="Procurar por região"/> diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index a303b38348..411f45a650 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -974,7 +974,7 @@ Oferecer amizade para [NAME]? Oferecer amizade para [NAME]? <form name="form"> - <input name="message" type="text"> + <input name="message"> Quer ser meu amigo? </input> <button name="Offer" text="Oferecer"/> @@ -1368,7 +1368,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="KickUser"> Expulsar este usuário com qual mensagem? <form name="form"> - <input name="message" type="text"> + <input name="message"> Um administrador desligou você. </input> <button name="OK" text="OK"/> @@ -1378,7 +1378,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="KickAllUsers"> Expulsar todo mundo atualmente do grid com qual mensagem? <form name="form"> - <input name="message" type="text"> + <input name="message"> Um administrador deslogou você. </input> <button name="OK" text="OK"/> @@ -1388,7 +1388,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="FreezeUser"> Paralise este usuário com qual mensagem? <form name="form"> - <input name="message" type="text"> + <input name="message"> Você foi congelado. Você não pode se mover ou conversar. Um administrador irá contatá-lo via mensagem instantânea (MI). </input> <button name="OK" text="OK"/> @@ -1398,7 +1398,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="UnFreezeUser"> Liberar este usuário com qual mensagem? <form name="form"> - <input name="message" type="text"> + <input name="message"> Você não está mais congelado. </input> <button name="OK" text="OK"/> @@ -1408,7 +1408,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="OfferTeleport"> Oferecer um teletransporte para sua localização com qual mensagem? <form name="form"> - <input name="message" type="text"> + <input name="message"> Junte-se a mim em [REGION] </input> <button name="OK" text="OK"/> @@ -1418,7 +1418,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification name="OfferTeleportFromGod"> God user convocou para a sua localização? <form name="form"> - <input name="message" type="text"> + <input name="message"> Junte-se a mim em [REGION] </input> <button name="OK" text="OK"/> @@ -1432,7 +1432,7 @@ Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas i <notification label="Mensagem para todos na sua Propriedade" name="MessageEstate"> Digite um breve anúncio que será enviado para todos que estejam atualmente na sua propriedade. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> @@ -1654,7 +1654,7 @@ Publicar este classificado agora por L$ [AMOUNT]? <notification label="Mensagem para todos desta Região" name="MessageRegion"> Digite um breve aviso que será enviado para todos nesta região. <form name="form"> - <input name="message" type="text"/> + <input name="message"/> <button name="OK" text="OK"/> <button name="Cancel" text="Cancelar"/> </form> @@ -1936,14 +1936,14 @@ Eles serão copiados para o seu inventário. Você tem certeza de que deseja prosseguir com esta compra? <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Confirmar"/> </notification> - <notification name="ConfirmPurchasePassword" type="password"> + <notification name="ConfirmPurchasePassword"> Esta transação fará: [ACTION] Você tem certeza de que deseja prosseguir com esta compra? Por favor, re-insira sua senha e clique 'Confirmar Compra'. <form name="form"> - <input name="message" type="password"/> + <input name="message"/> <button name="ConfirmPurchase" text="Confirmar Compra"/> <button name="Cancel" text="Cancelar"/> </form> @@ -2305,7 +2305,7 @@ Similar ao azimute. <notification name="NewSkyPreset"> Me dê o nome para o novo céu. <form name="form"> - <input name="message" type="text"> + <input name="message"> Novo padrão </input> <button name="OK" text="OK"/> @@ -2318,7 +2318,7 @@ Similar ao azimute. <notification name="NewWaterPreset"> Dê o nome para o novo padrão de água. <form name="form"> - <input name="message" type="text"> + <input name="message"> Nova Apresentação </input> <button name="OK" text="OK"/> diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml index 185ed77576..bdaa0e72f5 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml @@ -33,9 +33,9 @@ (Proprietários são mostrados em negrito ) </text> <name_list name="visible_members"> - <column label="Nome do membro" name="name"/> - <column label="Título" name="title"/> - <column label="Último login" name="online"/> + <name_list.columns label="Nome do membro" name="name"/> + <name_list.columns label="Título" name="title"/> + <name_list.columns label="Último login" name="online"/> </name_list> <text name="text_group_preferences"> Preferências do Grupo @@ -46,15 +46,9 @@ <check_box label="Taxa de adesão: L$" name="check_enrollment_fee" tool_tip="Define se é necessária uma taxa de adesão para se unir ao grupo."/> <spinner width="60" left_delta="120" name="spin_enrollment_fee" tool_tip="Os novos membros devem pagar esta taxa para se unir ao grupo quando a Taxa de Adesão está marcada."/> <combo_box width="170" name="group_mature_check" tool_tip="Define se a informação do seu grupo é considerada mature."> - <combo_item name="select_mature"> - - Selecionar Maturidade - - </combo_item> - <combo_item name="mature"> - Conteúdo Mature - </combo_item> - <combo_item name="pg"> - Conteúdo PG - </combo_item> + <combo_box.item name="select_mature" label="- Selecionar Maturidade -"/> + <combo_box.item name="mature" label="Conteúdo Mature"/> + <combo_box.item name="pg" label="Conteúdo PG"/> </combo_box> <panel name="title_container"> <text name="active_title_label"> diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml index 008e8144c6..d5c0f01e33 100644 --- a/indra/newview/skins/default/xui/pt/panel_group_notices.xml +++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml @@ -11,9 +11,8 @@ Arquivo de notícias do grupo </text> <text name="lbl2"> - As notícias são mantidas por 14 dias. Clique na notícia abaixo que você deseja -ver. Clique no botão “Atualizar” para verificar se novas notícias foram -recebidas. Listas de aviso estão limitadas a 200 por grupo, diariamente. + As notícias são mantidas por 14 dias. +Listas de aviso estão limitadas a 200 por grupo, diariamente. </text> <scroll_list name="notice_list"> <column label="Assunto" name="subject"/> @@ -30,10 +29,7 @@ recebidas. Listas de aviso estão limitadas a 200 por grupo, diariamente. Criar uma notícia </text> <text name="lbl2"> - Você deve colocar um assunto para enviar uma notícia. Você pode -adicionar um item simples à notícia, arrastando-o do seu -Inventário para o painel. Itens anexados devem ser copiáveis -e transferíveis e você não pode mandar uma pasta. + Você pode adicionar um item simples à notícia, arrastando-o do seu Inventário para o painel. Itens anexados devem ser copiáveis e transferíveis e você não pode mandar uma pasta. </text> <text name="lbl3" left="20"> Assunto: @@ -48,7 +44,7 @@ e transferíveis e você não pode mandar uma pasta. </text> <line_editor name="create_inventory_name" width="190" left_delta="74"/> <button label="Remover o anexo" label_selected="Remover o anexo" name="remove_attachment"/> - <button label="Enviar notícia" label_selected="Enviar notícia" name="send_notice"/> + <button label="Enviar" label_selected="Enviar" name="send_notice"/> <panel name="drop_target" tool_tip="Arraste um item do inventário para dentro da caixa de mensagem para enviá-lo com a notícia. Você deve ter permissão para copiar e transferir o objeto, para enviá-lo com a notícia."/> </panel> <panel label="Visualizar Notícia Anterior" name="panel_view_past_notice"> diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml index 9f9b80912d..c6f1433440 100644 --- a/indra/newview/skins/default/xui/pt/panel_login.xml +++ b/indra/newview/skins/default/xui/pt/panel_login.xml @@ -15,7 +15,7 @@ <combo_box name="start_location_combo"> <combo_box.item name="MyHome" label="Minha casa" /> <combo_box.item name="MyLastLocation" label="Minha última localização" /> - <combo_box.item name="Typeregionname" label="lt; Digite o nome da região;" /> + <combo_box.item name="Typeregionname" label="< Digite o nome da região >" /> </combo_box> <check_box label="Lembrar senha" name="remember_check"/> <button label="Entrar" label_selected="Entrar" name="connect_btn"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml new file mode 100644 index 0000000000..b53fe51509 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<panel name="advanced">
+ <text name="AspectRatioLabel1" tool_tip="largura / altura">
+ Relação de Aspecto:
+ </text>
+ <combo_box name="aspect_ratio" tool_tip="largura / altura">
+ <combo_box.item label="4:3 (CRT Padrão)" name="item1"/>
+ <combo_box.item label="5:4 (1280x1024 LCD)" name="item2"/>
+ <combo_box.item label="8:5 (tela ampla)" name="item3"/>
+ <combo_box.item label="16:9 (tela ampla)" name="item4"/>
+ </combo_box>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml index b32e1fb3e1..aa40f97fe3 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Chat" name="chat"> - <text length="1" name="text_box" type="string"> + <text name="text_box"> Tamanho da Fonte do Chat: </text> @@ -9,45 +9,51 @@ do Chat: <radio_item name="radio2" label="Médio" /> <radio_item name="radio3" label="Grande" /> </radio_group> - <text length="1" name="text_box2" type="string"> - Cor do Chat: - </text> <color_swatch label="Você" name="user"/> + <text name="text_box1"> + Você + </text> <color_swatch label="Outros" name="agent"/> + <text name="text_box2"> + Outros + </text> <color_swatch label="MI" name="im"/> + <text name="text_box3"> + MI + </text> <color_swatch label="Sistema" name="system"/> + <text name="text_box4"> + Sistema + </text> <color_swatch label="Erros" name="script_error"/> + <text name="text_box5"> + Erros + </text> <color_swatch label="Objetos" name="objects"/> + <text name="text_box6"> + Objetos + </text> <color_swatch label="Dono" name="owner"/> + <text name="text_box7"> + Dono + </text> <color_swatch label="Bolha" name="background"/> + <text name="text_box8"> + Bolha + </text> <color_swatch label="URLs" name="links"/> - <text length="1" name="text_box8" type="string"> - Erros de Script: + <text name="text_box9"> + URLs </text> <check_box label="Mostrar Erros de Script e avisos como chat comum" name="script_errors_as_chat"/> - <text length="1" name="text_box3" type="string"> - Console do Chat: - </text> <spinner label="Ocultar Chat depois" label_width="108" name="fade_chat_time" width="160"/> - <text left="310" length="1" name="text_box4" type="string"> - (segundos) - </text> <spinner left="373" name="max_chat_count"/> - <text left="435" length="1" name="text_box5" type="string" width="94"> - (# linhas) - </text> <slider label="Opacidade" name="console_opacity"/> <check_box label="Use a largura total da tela (Precisa reiniciar)" name="chat_full_width_check"/> - <text length="1" name="text_box6" type="string"> - Opções do Chat: - </text> <check_box label="Feche a barra de conversa após pressionar retornar" name="close_chat_on_return_check"/> <check_box label="Teclas de Setas sempre movem o avatar durante a conversa" name="arrow_keys_move_avatar_check"/> <check_box label="Mostrar a hora na conversa local" name="show_timestamps_check"/> <check_box label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/> - <text length="1" name="text_box7" type="string"> - Chat com bolha: - </text> <check_box label="Mostrar bolhas do chat" name="bubble_text_chat"/> <slider label="Opacidade" name="bubble_chat_opacity"/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml index fde3551b8b..e50713c0c8 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml @@ -1,24 +1,14 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel label="Geral" name="general_panel"> - <radio_group name="default_start_location"> - <radio_item name="MyHome" tool_tip="Como padrão, registrar na minha casa."> - Minha Casa - </radio_item> - <radio_item name="MyLastLocation" tool_tip="Por padrão, registrar na minha última localidade."> - Minha Última Localidade - </radio_item> - </radio_group> + <combo_box name="start_location_combo"> + <combo_box.item name="MyHome" tool_tip="Como padrão, registrar na minha casa." label="Minha Casa"/> + <combo_box.item name="MyLastLocation" tool_tip="Por padrão, registrar na minha última localidade." label="Minha Última Localidade"/> + </combo_box> <check_box label="Mostrar Posição Inicial na Tela de Login" name="show_location_checkbox"/> - <combo_box name="fade_out_combobox" width="166"> - <combo_item name="Never"> - Nunca - </combo_item> - <combo_item name="Show Temporarily"> - Mostrar Temporariamente - </combo_item> - <combo_item name="Always"> - Sempre - </combo_item> + <combo_box name="fade_out_combobox"> + <combo_box.item name="Never" label="Nunca"/> + <combo_box.item name="Show Temporarily" label="Mostrar Temporariamente"/> + <combo_box.item name="Always" label="Sempre"/> </combo_box> <check_box label="Avatar com Nomes Pequenos" name="small_avatar_names_checkbox"/> <check_box label="Ocultar meu Nome na minha Tela" name="show_my_name_checkbox"/> @@ -34,114 +24,67 @@ <check_box label="Usar escala independente da resolução" name="ui_auto_scale"/> <spinner label="Tempo para ficar Ausente:" name="afk_timeout_spinner"/> <check_box label="Avisar quando receber ou gastar Linden dollars (L$)" name="notify_money_change_checkbox"/> - <text name="maturity_desired_label" bottom="-312"> + <text name="maturity_desired_label"> Classificação: </text> - <text name="maturity_desired_prompt" bottom="-312"> - Eu quero acessar -conteúdo classificado: + <text name="maturity_desired_prompt"> + Eu quero acessar conteúdo classificado: </text> - <combo_box name="maturity_desired_combobox" bottom="-330" left="278"> - <combo_item name="Desired_Adult"> - PG, Mature e Adult - </combo_item> - <combo_item name="Desired_Mature"> - PG e Mature - </combo_item> - <combo_item name="Desired_PG"> - apenas PG - </combo_item> + <combo_box name="maturity_desired_combobox"> + <combo_box.item name="Desired_Adult" label="PG, Mature e Adult"/> + <combo_box.item name="Desired_Mature" label="PG e Mature"/> + <combo_box.item name="Desired_PG" label="apenas PG"/> </combo_box> - <text name="maturity_desired_textbox" bottom="-324" left="278"> + <text name="maturity_desired_textbox"> apenas PG </text> - <text length="1" name="start_location_textbox" type="string"> + <text name="start_location_textbox"> Posição Inicial: </text> - <text length="1" name="show_names_textbox" type="string"> + <text name="show_names_textbox"> Mostrar Nomes: </text> - <text length="1" name="effects_color_textbox" type="string"> + <text name="effects_color_textbox"> Cores para Meus Efeitos: </text> - <text length="1" name="seconds_textbox" type="string"> + <text name="seconds_textbox"> segundos </text> - <text length="1" name="crash_report_textbox" type="string"> + <text name="crash_report_textbox"> Relatórios de Falhas: </text> <text name="language_textbox"> Linguagem: </text> - <text left_delta="313" length="1" name="language_textbox2" type="string"> + <text name="language_textbox2"> (Precisa de reinício para efetivar) </text> <string name="region_name_prompt"> Digite o nome da Região </string> - <combo_box name="crash_behavior_combobox" width="166"> - <combo_item length="1" name="Askbeforesending" type="string"> - Perguntar antes de enviar - </combo_item> - <combo_item length="1" name="Alwayssend" type="string"> - Sempre enviar - </combo_item> - <combo_item length="1" name="Neversend" type="string"> - Nunca Enviar - </combo_item> + <combo_box name="crash_behavior_combobox"> + <combo_box.item name="Askbeforesending" label="Perguntar antes de enviar"/> + <combo_box.item name="Alwayssend" label="Sempre enviar"/> + <combo_box.item name="Neversend" label="Nunca Enviar"/> </combo_box> - <combo_box name="language_combobox" width="166"> - <combo_item name="System Default Language"> - Padrão do Sistema - </combo_item> - <combo_item name="English"> - English (Inglês) - </combo_item> - <combo_item name="Danish"> - Dansk (Dinamarquês) - Beta - </combo_item> - <combo_item name="Deutsch(German)"> - Deutsch (Alemão) - Beta - </combo_item> - <combo_item name="Spanish"> - Español (Espanhol) - Beta - </combo_item> - <combo_item name="French"> - Français (Francês) - Beta - </combo_item> - <combo_item name="Italian"> - Italiano - Beta - </combo_item> - <combo_item name="Hungarian"> - Magyar (Húngaro) - Beta - </combo_item> - <combo_item name="Dutch"> - Nederlands (Holandês) - Beta - </combo_item> - <combo_item name="Polish"> - Polski (Polonês) - Beta - </combo_item> - <combo_item name="Portugese"> - Português - Beta - </combo_item> - <combo_item name="Russian"> - Русский (Russo) - Beta - </combo_item> - <combo_item name="Turkish"> - Türkçe (Turco) - Beta - </combo_item> - <combo_item name="Ukrainian"> - Українська (Ucraniano) - Beta - </combo_item> - <combo_item name="Chinese"> - 中文 (简体) (Chinês) - Beta - </combo_item> - <combo_item name="(Japanese)"> - 日本語 (Japonês) - Beta - </combo_item> - <combo_item name="(Korean)"> - 한국어 (Coreano) - Beta - </combo_item> + <combo_box name="language_combobox"> + <combo_box.item name="System Default Language" label="Padrão do Sistema"/> + <combo_box.item name="English" label="English (Inglês)"/> + <combo_box.item name="Danish" label="Dansk (Dinamarquês) - Beta"/> + <combo_box.item name="Deutsch(German)" label="Deutsch (Alemão) - Beta"/> + <combo_box.item name="Spanish" label="Español (Espanhol) - Beta"/> + <combo_box.item name="French" label="Français (Francês) - Beta"/> + <combo_box.item name="Italian" label="Italiano - Beta"/> + <combo_box.item name="Hungarian" label="Magyar (Húngaro) - Beta"/> + <combo_box.item name="Dutch" label="Nederlands (Holandês) - Beta"/> + <combo_box.item name="Polish" label="Polski (Polonês) - Beta"/> + <combo_box.item name="Portugese" label="Português - Beta"/> + <combo_box.item name="Russian" label="Русский (Russo) - Beta"/> + <combo_box.item name="Turkish" label="Türkçe (Turco) - Beta"/> + <combo_box.item name="Ukrainian" label="Українська (Ucraniano) - Beta"/> + <combo_box.item name="Chinese" label="中文 (简体) (Chinês) - Beta"/> + <combo_box.item name="(Japanese)" label="日本語 (Japonês) - Beta"/> + <combo_box.item name="(Korean)" label="한국어 (Coreano) - Beta"/> </combo_box> <check_box label="Compartilhar a linguagem com objetos" name="language_is_public" tool_tip="Isto permite que os objetos no mundo conheçam sua linguagem preferida."/> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml index 621e99c9c5..d7982ab940 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml @@ -22,10 +22,10 @@ Relação de Aspecto: </text> <combo_box name="aspect_ratio" tool_tip="largura / altura"> - <combo_box.item length="1" name="4:3(StandardCRT)" type="string" label="4:3 (CRT Padrão)" /> - <combo_box.item length="1" name="5:4(1280x1024LCD)" type="string" label="5:4 (1280x1024 LCD)" /> + <combo_box.item name="4:3(StandardCRT)" label="4:3 (CRT Padrão)" /> + <combo_box.item name="5:4(1280x1024LCD)" label="5:4 (1280x1024 LCD)" /> <combo_box.item name="8:5(Widescreen)" label="8:5 (tela ampla)" /> - <combo_box.item length="1" name="16:9(Widescreen)" type="string" label="16:9 (tela ampla)" /> + <combo_box.item name="16:9(Widescreen)" label="16:9 (tela ampla)" /> </combo_box> <check_box label="Auto-detectar a relação" name="aspect_auto_detect"/> <text name="HigherText"> @@ -57,6 +57,7 @@ rápido Qualidade </text> <check_box label="Personalizar" left="395" name="CustomSettings"/> + <panel name="CustomGraphics Panel"> <text name="ShadersText"> Sombreadores: </text> @@ -132,12 +133,13 @@ rápido <radio_item name="0" label="Baixo" /> <radio_item name="2" label="Alto" /> </radio_group> + </panel> <button label="Configurações Recomendadas" name="Defaults" width="190" left="110"/> <button label="Opções de Hardware" label_selected="Opções de Hardware" name="GraphicsHardwareButton"/> - <string name="resolution_format"> + <panel.string name="resolution_format"> [RES_X] x [RES_Y] - </string> - <string name="aspect_ratio_text"> + </panel.string> + <panel.string name="aspect_ratio_text"> [NUM]:[DEN] - </string> + </panel.string> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml index f43402be15..e62ba85763 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_estate.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Propriedade" name="Estate"> +<panel name="EstateWrapper"> + <scroll_container name="container1"> + <panel label="Propriedade" name="Estate"> <text name="estate_help_text"> Mudanças nas definições nesta guia irão afetar todas as regiões desta propriedade. @@ -66,4 +68,6 @@ todas as regiões desta propriedade. <button label="?" name="ban_resident_help"/> <button label="Remover..." name="remove_banned_avatar_btn"/> <button label="Adicionar..." name="add_banned_avatar_btn"/> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml index 6873d4ac98..1a06d91aa8 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_general.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml @@ -40,15 +40,9 @@ Classificação: </text> <combo_box label="Mature" name="access_combo"> - <combo_item name="Adult"> - Adult - </combo_item> - <combo_item name="Mature"> - Mature - </combo_item> - <combo_item name="PG"> - PG - </combo_item> + <combo_box.item label="Adult" name="Adult"/> + <combo_box.item label="Mature" name="Mature"/> + <combo_box.item label="PG" name="PG"/> </combo_box> <button label="?" name="access_help"/> <button label="Aplicar" name="apply_btn"/> diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml index 4787b59a8d..2fdba79807 100644 --- a/indra/newview/skins/default/xui/pt/panel_region_texture.xml +++ b/indra/newview/skins/default/xui/pt/panel_region_texture.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<panel label="Texturas de Chão" name="Textures"> +<panel name="TextureWrapper"> + <scroll_container name="container1"> + <panel label="Texturas de Chão" name="Textures"> <text name="region_text_lbl"> Região: </text> @@ -54,4 +56,6 @@ e o valor Alto é a altura Mínima da Textura #4. </text> <button label="Aplicar" name="apply_btn" /> + </panel> + </scroll_container> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml index d5b67884c9..87e6d16056 100644 --- a/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="LLScrollingPanelParam"> - <text length="1" name="Loading..." type="string"> + <text name="Loading..."> Carregando... </text> - <text length="1" name="Loading...2" type="string"> + <text name="Loading...2"> Carregando... </text> <slider label="[DESC]" name="param slider"/> diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml index e9a02344ab..7f3d2b34a6 100644 --- a/indra/newview/skins/default/xui/pt/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml @@ -1,13 +1,13 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="status"> - <text length="1" name="ParcelNameText" tool_tip="Nome do pedaço de terra em que você está. Clique Sobre a Terra para informações." type="string"> + <text name="ParcelNameText" tool_tip="Nome do pedaço de terra em que você está. Clique Sobre a Terra para informações."> Nome do pedaço de terra vai aqui </text> - <text length="1" name="BalanceText" tool_tip="Saldo" type="string"> + <text name="BalanceText" tool_tip="Saldo"> Carregando... </text> <button label="" label_selected="" name="buycurrency" tool_tip="Comprar dinheiro"/> - <text length="12" name="TimeText" tool_tip="Hora atual (do Pacífico)" type="string"> + <text name="TimeText" tool_tip="Hora atual (do Pacífico)"> 12:00 AM </text> <string name="StatBarDaysOfWeek"> @@ -18,7 +18,7 @@ </string> <button label="" label_selected="" name="scriptout" tool_tip="Erros e avisos do Script"/> <button label="" label_selected="" name="health" tool_tip="Saúde"/> - <text length="1" name="HealthText" tool_tip="Saúde" type="string"> + <text name="HealthText" tool_tip="Saúde"> 100% </text> <button label="" label_selected="" name="no_fly" tool_tip="Não é permitido Voar"/> diff --git a/indra/newview/skins/default/xui/pt/panel_world_map.xml b/indra/newview/skins/default/xui/pt/panel_world_map.xml new file mode 100644 index 0000000000..ed63b1eb0d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/panel_world_map.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="world_map">
+ <panel.string name="world_map_north">
+ N
+ </panel.string>
+ <panel.string name="world_map_east">
+ L
+ </panel.string>
+ <panel.string name="world_map_west">
+ O
+ </panel.string>
+ <panel.string name="world_map_south">
+ S
+ </panel.string>
+ <panel.string name="world_map_southeast">
+ SE
+ </panel.string>
+ <panel.string name="world_map_northeast">
+ NE
+ </panel.string>
+ <panel.string name="world_map_southwest">
+ SO
+ </panel.string>
+ <panel.string name="world_map_northwest">
+ NO
+ </panel.string>
+ <text label="N" name="floater_map_north" text="N">
+ N
+ </text>
+ <text label="L" name="floater_map_east" text="L">
+ L
+ </text>
+ <text label="O" name="floater_map_west" text="O">
+ O
+ </text>
+ <text label="S" name="floater_map_south" text="S">
+ S
+ </text>
+ <text label="SE" name="floater_map_southeast" text="SE">
+ SE
+ </text>
+ <text label="NE" name="floater_map_northeast" text="NE">
+ NE
+ </text>
+ <text label="SO" name="floater_map_southwest" text="SO">
+ SO
+ </text>
+ <text label="NO" name="floater_map_northwest" text="NO">
+ NO
+ </text>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 8542fc6c0e..36377b346b 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -483,4 +483,34 @@ <string name="choose_the_directory"> Escolher Diretório </string> + <string name="accel-mac-control"> + Ctrl- + </string> + <string name="accel-mac-command"> + Cmd- + </string> + <string name="accel-mac-option"> + Opt- + </string> + <string name="accel-mac-shift"> + Shift- + </string> + <string name="accel-win-control"> + Ctrl+ + </string> + <string name="accel-win-alt"> + Alt+ + </string> + <string name="accel-win-shift"> + Shift+ + </string> + <string name="GraphicsQualityLow"> + Baixo + </string> + <string name="GraphicsQualityMid"> + Meio + </string> + <string name="GraphicsQualityHigh"> + Alto + </string> </strings> |