Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/pipeline.cpp # indra/newview/skins/default/xui/de/notifications.xml # indra/newview/skins/default/xui/es/notifications.xml # indra/newview/skins/default/xui/fr/notifications.xml # indra/newview/skins/default/xui/it/notifications.xml # indra/newview/skins/default/xui/ja/notifications.xml # indra/newview/skins/default/xui/pt/notifications.xml # indra/newview/skins/default/xui/ru/notifications.xmlmaster
commit
9573cc8e00
|
|
@ -276,16 +276,20 @@ S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 r
|
|||
// Estimate the number of layers. This is consistent with what's done for j2c encoding in LLImageJ2CKDU::encodeImpl().
|
||||
constexpr S32 precision = 8; // assumed bitrate per component channel, might change in future for HDR support
|
||||
constexpr S32 max_components = 4; // assumed the file has four components; three color and alpha
|
||||
S32 nb_layers = 1;
|
||||
const S32 surface = w*h;
|
||||
S32 s = 64*64;
|
||||
S32 totalbytes = (S32)(s * max_components * precision * rate); // first level computed before loop
|
||||
while (surface > s)
|
||||
// Use MAX_IMAGE_SIZE_DEFAULT (currently 2048) if either dimension is unknown (zero)
|
||||
S32 width = (w > 0) ? w : 2048;
|
||||
S32 height = (h > 0) ? h : 2048;
|
||||
S32 max_dimension = llmax(width, height); // Find largest dimension
|
||||
S32 block_area = MAX_BLOCK_SIZE * MAX_BLOCK_SIZE; // Calculated initial block area from established max block size (currently 64)
|
||||
block_area *= (max_dimension / MAX_BLOCK_SIZE / max_components); // Adjust initial block area by ratio of largest dimension to block size per component
|
||||
S32 totalbytes = (S32) (block_area * max_components * precision); // First block layer computed before loop without compression rate
|
||||
S32 block_layers = 1; // Start at layer 1 since first block layer is computed outside loop
|
||||
while (block_layers < 6) // Walk five layers for the five discards in JPEG2000
|
||||
{
|
||||
if (nb_layers <= (5 - discard_level))
|
||||
totalbytes += (S32)(s * max_components * precision * rate);
|
||||
nb_layers++;
|
||||
s *= 4;
|
||||
if (block_layers <= (5 - discard_level)) // Walk backwards from discard 5 to required discard layer.
|
||||
totalbytes += (S32) (block_area * max_components * precision * rate); // Add each block layer reduced by assumed compression rate
|
||||
block_layers++; // Move to next layer
|
||||
block_area *= 4; // Increase block area by power of four
|
||||
}
|
||||
|
||||
totalbytes /= 8; // to bytes
|
||||
|
|
|
|||
|
|
@ -1552,6 +1552,34 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
|
|||
}
|
||||
}
|
||||
|
||||
void LLGLSLShader::uniform4uiv(U32 index, U32 count, const GLuint* v)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
llassert(sCurBoundShaderPtr == this);
|
||||
|
||||
if (mProgramObject)
|
||||
{
|
||||
if (mUniform.size() <= index)
|
||||
{
|
||||
LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
|
||||
llassert(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mUniform[index] >= 0)
|
||||
{
|
||||
const auto& iter = mValue.find(mUniform[index]);
|
||||
LLVector4 vec((F32)v[0], (F32)v[1], (F32)v[2], (F32)v[3]);
|
||||
if (iter == mValue.end() || shouldChange(iter->second, vec) || count != 1)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
glUniform4uiv(mUniform[index], count, v);
|
||||
mValue[mUniform[index]] = vec;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
|
|
@ -1886,6 +1914,24 @@ void LLGLSLShader::uniform4fv(const LLStaticHashedString& uniform, U32 count, co
|
|||
}
|
||||
}
|
||||
|
||||
void LLGLSLShader::uniform4uiv(const LLStaticHashedString& uniform, U32 count, const GLuint* v)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
GLint location = getUniformLocation(uniform);
|
||||
|
||||
if (location >= 0)
|
||||
{
|
||||
LLVector4 vec((F32)v[0], (F32)v[1], (F32)v[2], (F32)v[3]);
|
||||
const auto& iter = mValue.find(location);
|
||||
if (iter == mValue.end() || shouldChange(iter->second, vec) || count != 1)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
glUniform4uiv(location, count, v);
|
||||
mValue[location] = vec;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLGLSLShader::uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat* v)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER;
|
||||
|
|
|
|||
|
|
@ -208,6 +208,7 @@ public:
|
|||
void uniform2fv(U32 index, U32 count, const GLfloat* v);
|
||||
void uniform3fv(U32 index, U32 count, const GLfloat* v);
|
||||
void uniform4fv(U32 index, U32 count, const GLfloat* v);
|
||||
void uniform4uiv(U32 index, U32 count, const GLuint* v);
|
||||
void uniform2i(const LLStaticHashedString& uniform, GLint i, GLint j);
|
||||
void uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v);
|
||||
void uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v);
|
||||
|
|
@ -223,6 +224,7 @@ public:
|
|||
void uniform2fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v);
|
||||
void uniform3fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v);
|
||||
void uniform4fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v);
|
||||
void uniform4uiv(const LLStaticHashedString& uniform, U32 count, const GLuint* v);
|
||||
void uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat* v);
|
||||
|
||||
void setMinimumAlpha(F32 minimum);
|
||||
|
|
|
|||
|
|
@ -316,8 +316,12 @@ S32 LLImageGL::dataFormatBits(S32 dataformat)
|
|||
case GL_RG16F: return 32;
|
||||
case GL_RGB16F: return 48;
|
||||
case GL_RGBA16F: return 64;
|
||||
case GL_R32F: return 32;
|
||||
case GL_RG32F: return 64;
|
||||
case GL_RGB32F: return 96;
|
||||
case GL_RGBA32F: return 128;
|
||||
default:
|
||||
LL_ERRS() << "LLImageGL::Unknown format: " << dataformat << LL_ENDL;
|
||||
LL_ERRS() << "LLImageGL::Unknown format: " << std::hex << dataformat << std::dec << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -367,7 +371,7 @@ S32 LLImageGL::dataFormatComponents(S32 dataformat)
|
|||
case GL_SRGB_ALPHA: return 4;
|
||||
case GL_BGRA: return 4; // Used for QuickTime media textures on the Mac
|
||||
default:
|
||||
LL_ERRS() << "LLImageGL::Unknown format: " << dataformat << LL_ENDL;
|
||||
LL_ERRS() << "LLImageGL::Unknown format: " << std::hex << dataformat << std::dec << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -601,8 +601,6 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
|
|||
extra_code_text[extra_code_count++] = strdup("precision highp float;\n");
|
||||
}
|
||||
}
|
||||
|
||||
extra_code_text[extra_code_count++] = strdup("#define FXAA_GLSL_130 1\n");
|
||||
}
|
||||
|
||||
// Use alpha float to store bit flags
|
||||
|
|
|
|||
|
|
@ -13350,6 +13350,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<string>00000000-0000-0000-0000-000000000000</string>
|
||||
</map>
|
||||
<key>RenderCASSharpness</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Level of sharpening to apply via Contrast Adaptive Sharpening (0.0(off) - 1.0)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.4</real>
|
||||
</map>
|
||||
<key>ReplaySession</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -17404,17 +17415,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>VoiceEffectExpiryWarningTime</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>How much notice to give of Voice Morph subscriptions expiry, in seconds.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>259200</integer>
|
||||
</map>
|
||||
<key>VoiceMorphingEnabled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -256,6 +256,10 @@ A. Or use FXAA_GREEN_AS_LUMA.
|
|||
#define FXAA_GLSL_130 0
|
||||
#endif
|
||||
/*--------------------------------------------------------------------------*/
|
||||
#ifndef FXAA_GLSL_400
|
||||
#define FXAA_GLSL_400 0
|
||||
#endif
|
||||
/*--------------------------------------------------------------------------*/
|
||||
#ifndef FXAA_HLSL_3
|
||||
#define FXAA_HLSL_3 0
|
||||
#endif
|
||||
|
|
@ -342,8 +346,8 @@ A. Or use FXAA_GREEN_AS_LUMA.
|
|||
// 1 = API supports gather4 on alpha channel.
|
||||
// 0 = API does not support gather4 on alpha channel.
|
||||
//
|
||||
#if (FXAA_GLSL_130 == 0)
|
||||
#define FXAA_GATHER4_ALPHA 0
|
||||
#if (FXAA_GLSL_400 == 1)
|
||||
#define FXAA_GATHER4_ALPHA 1
|
||||
#endif
|
||||
#if (FXAA_HLSL_5 == 1)
|
||||
#define FXAA_GATHER4_ALPHA 1
|
||||
|
|
@ -652,7 +656,7 @@ NOTE the other tuning knobs are now in the shader function inputs!
|
|||
API PORTING
|
||||
|
||||
============================================================================*/
|
||||
#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)
|
||||
#if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1) || (FXAA_GLSL_400 == 1)
|
||||
#define FxaaBool bool
|
||||
#define FxaaDiscard discard
|
||||
#define FxaaFloat float
|
||||
|
|
@ -714,6 +718,16 @@ NOTE the other tuning knobs are now in the shader function inputs!
|
|||
#endif
|
||||
#endif
|
||||
/*--------------------------------------------------------------------------*/
|
||||
#if (FXAA_GLSL_400 == 1)
|
||||
// Requires "#version 400" or better
|
||||
#define FxaaTexTop(t, p) textureLod(t, p, 0.0)
|
||||
#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
|
||||
#define FxaaTexAlpha4(t, p) textureGather(t, p, 3)
|
||||
#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)
|
||||
#define FxaaTexGreen4(t, p) textureGather(t, p, 1)
|
||||
#define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)
|
||||
#endif
|
||||
/*--------------------------------------------------------------------------*/
|
||||
#if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1)
|
||||
#define FxaaInt2 float2
|
||||
#define FxaaTex sampler2D
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 4
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderDownScaleMethod 1 1
|
||||
RenderCASSharpness 1 1
|
||||
|
||||
|
||||
//
|
||||
|
|
@ -115,6 +116,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 4
|
||||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -150,6 +152,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -185,6 +188,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -220,6 +224,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -255,6 +260,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 8
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -290,6 +296,7 @@ RenderHeroProbeResolution 1 1024
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -325,6 +332,7 @@ RenderHeroProbeResolution 1 2048
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -68,7 +68,6 @@ RenderShadowDetail 1 2
|
|||
RenderUseStreamVBO 1 1
|
||||
RenderFSAASamples 1 16
|
||||
RenderMaxTextureIndex 1 16
|
||||
RenderMirrors 1 1
|
||||
RenderGLContextCoreProfile 1 1
|
||||
RenderGLMultiThreadedTextures 1 0
|
||||
RenderGLMultiThreadedMedia 1 1
|
||||
|
|
@ -80,6 +79,7 @@ RenderHeroProbeDistance 1 16
|
|||
RenderHeroProbeUpdateRate 1 4
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderDownScaleMethod 1 1
|
||||
RenderCASSharpness 1 1
|
||||
|
||||
|
||||
//
|
||||
|
|
@ -116,6 +116,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 4
|
||||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -151,6 +152,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -186,6 +188,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -221,6 +224,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -256,6 +260,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 8
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -291,6 +296,7 @@ RenderHeroProbeResolution 1 1024
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -326,6 +332,7 @@ RenderHeroProbeResolution 1 2048
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ RenderHeroProbeResolution 1 2048
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 4
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 1
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -112,6 +113,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 4
|
||||
RenderHeroProbeUpdateRate 1 6
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -147,6 +149,7 @@ RenderHeroProbeResolution 1 256
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -182,6 +185,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 3
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 16
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -217,6 +221,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 6
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -252,6 +257,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 8
|
||||
RenderHeroProbeUpdateRate 1 2
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 8
|
||||
RenderCASSharpness 1 0
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (SSAO + all shadows)
|
||||
|
|
@ -287,6 +293,7 @@ RenderHeroProbeResolution 1 512
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -322,6 +329,7 @@ RenderHeroProbeResolution 1 1024
|
|||
RenderHeroProbeDistance 1 16
|
||||
RenderHeroProbeUpdateRate 1 1
|
||||
RenderHeroProbeConservativeUpdateMultiplier 1 4
|
||||
RenderCASSharpness 1 0.4
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ void LLPanelEnvironmentInfo::refresh()
|
|||
F32Hours dayoffset(mCurrentEnvironment->mDayOffset);
|
||||
|
||||
if (dayoffset.value() > 12.0f)
|
||||
dayoffset -= F32Hours(24.0);
|
||||
dayoffset -= daylength;
|
||||
|
||||
mSliderDayLength->setValue(daylength.value());
|
||||
mSliderDayOffset->setValue(dayoffset.value());
|
||||
|
|
@ -723,6 +723,11 @@ void LLPanelEnvironmentInfo::onSldDayLengthChanged(F32 value)
|
|||
F32Hours daylength(value);
|
||||
|
||||
mCurrentEnvironment->mDayLength = daylength;
|
||||
F32 offset = (F32)mSliderDayOffset->getValue().asReal();
|
||||
if (offset <= 0.0f)
|
||||
{
|
||||
onSldDayOffsetChanged(offset);
|
||||
}
|
||||
setDirtyFlag(DIRTY_FLAG_DAYLENGTH);
|
||||
|
||||
udpateApparentTimeOfDay();
|
||||
|
|
@ -736,7 +741,8 @@ void LLPanelEnvironmentInfo::onSldDayOffsetChanged(F32 value)
|
|||
F32Hours dayoffset(value);
|
||||
|
||||
if (dayoffset.value() <= 0.0f)
|
||||
dayoffset += F32Hours(24.0);
|
||||
// if day cycle is 5 hours long, we want -1h offset to result in 4h
|
||||
dayoffset += mCurrentEnvironment->mDayLength;
|
||||
|
||||
mCurrentEnvironment->mDayOffset = dayoffset;
|
||||
setDirtyFlag(DIRTY_FLAG_DAYOFFSET);
|
||||
|
|
@ -929,7 +935,7 @@ void LLPanelEnvironmentInfo::udpateApparentTimeOfDay()
|
|||
{
|
||||
static const F32 SECONDSINDAY(24.0 * 60.0 * 60.0);
|
||||
|
||||
if ((!mCurrentEnvironment) || (mCurrentEnvironment->mDayLength.value() < 1.0) || (mCurrentEnvironment->mDayOffset.value() < 1.0))
|
||||
if ((!mCurrentEnvironment) || (mCurrentEnvironment->mDayLength.value() < 1.0))
|
||||
{
|
||||
mLabelApparentTime->setVisible(false);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ LLGLSLShader gDeferredMultiLightProgram[16];
|
|||
LLGLSLShader gDeferredSpotLightProgram;
|
||||
LLGLSLShader gDeferredMultiSpotLightProgram;
|
||||
LLGLSLShader gDeferredSunProgram;
|
||||
LLGLSLShader gDeferredSunProbeProgram;
|
||||
LLGLSLShader gHazeProgram;
|
||||
LLGLSLShader gHazeWaterProgram;
|
||||
LLGLSLShader gDeferredBlurLightProgram;
|
||||
|
|
@ -201,6 +202,7 @@ LLGLSLShader gExposureProgram;
|
|||
LLGLSLShader gExposureProgramNoFade;
|
||||
LLGLSLShader gLuminanceProgram;
|
||||
LLGLSLShader gFXAAProgram;
|
||||
LLGLSLShader gCASProgram;
|
||||
LLGLSLShader gDeferredPostNoDoFProgram;
|
||||
LLGLSLShader gDeferredWLSkyProgram;
|
||||
LLGLSLShader gEnvironmentMapProgram;
|
||||
|
|
@ -404,6 +406,7 @@ void LLViewerShaderMgr::finalizeShaderList()
|
|||
mShaderList.push_back(&gObjectAlphaMaskNoColorProgram);
|
||||
mShaderList.push_back(&gUnderWaterProgram);
|
||||
mShaderList.push_back(&gDeferredSunProgram);
|
||||
mShaderList.push_back(&gDeferredSunProbeProgram);
|
||||
mShaderList.push_back(&gHazeProgram);
|
||||
mShaderList.push_back(&gHazeWaterProgram);
|
||||
mShaderList.push_back(&gDeferredSoftenProgram);
|
||||
|
|
@ -1620,10 +1623,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()
|
|||
if (success)
|
||||
{
|
||||
std::string fragment;
|
||||
std::string vertex = "deferred/sunLightV.glsl";
|
||||
|
||||
bool use_ao = gSavedSettings.getBOOL("RenderDeferredSSAO");
|
||||
|
||||
if (use_ao)
|
||||
{
|
||||
fragment = "deferred/sunLightSSAOF.glsl";
|
||||
|
|
@ -1631,10 +1631,6 @@ bool LLViewerShaderMgr::loadShadersDeferred()
|
|||
else
|
||||
{
|
||||
fragment = "deferred/sunLightF.glsl";
|
||||
if (mShaderLevel[SHADER_DEFERRED] == 1)
|
||||
{ //no shadows, no SSAO, no frag coord
|
||||
vertex = "deferred/sunLightNoFragCoordV.glsl";
|
||||
}
|
||||
}
|
||||
|
||||
gDeferredSunProgram.mName = "Deferred Sun Shader";
|
||||
|
|
@ -1643,7 +1639,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredSunProgram.mFeatures.hasAmbientOcclusion = use_ao;
|
||||
|
||||
gDeferredSunProgram.mShaderFiles.clear();
|
||||
gDeferredSunProgram.mShaderFiles.push_back(make_pair(vertex, GL_VERTEX_SHADER));
|
||||
gDeferredSunProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER));
|
||||
gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER));
|
||||
gDeferredSunProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
|
||||
|
|
@ -1651,6 +1647,21 @@ bool LLViewerShaderMgr::loadShadersDeferred()
|
|||
llassert(success);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gDeferredSunProbeProgram.mName = "Deferred Sun Probe Shader";
|
||||
gDeferredSunProbeProgram.mFeatures.isDeferred = true;
|
||||
gDeferredSunProbeProgram.mFeatures.hasShadows = true;
|
||||
|
||||
gDeferredSunProbeProgram.mShaderFiles.clear();
|
||||
gDeferredSunProbeProgram.mShaderFiles.push_back(make_pair("deferred/sunLightV.glsl", GL_VERTEX_SHADER));
|
||||
gDeferredSunProbeProgram.mShaderFiles.push_back(make_pair("deferred/sunLightF.glsl", GL_FRAGMENT_SHADER));
|
||||
gDeferredSunProbeProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
|
||||
success = gDeferredSunProbeProgram.createShader();
|
||||
llassert(success);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gDeferredBlurLightProgram.mName = "Deferred Blur Light Shader";
|
||||
|
|
@ -2354,11 +2365,32 @@ bool LLViewerShaderMgr::loadShadersDeferred()
|
|||
gFXAAProgram.mShaderFiles.clear();
|
||||
gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredV.glsl", GL_VERTEX_SHADER));
|
||||
gFXAAProgram.mShaderFiles.push_back(make_pair("deferred/fxaaF.glsl", GL_FRAGMENT_SHADER));
|
||||
|
||||
if (gGLManager.mGLVersion > 3.9)
|
||||
{
|
||||
gFXAAProgram.addPermutation("FXAA_GLSL_400", "1");
|
||||
}
|
||||
else
|
||||
{
|
||||
gFXAAProgram.addPermutation("FXAA_GLSL_130", "1");
|
||||
}
|
||||
|
||||
gFXAAProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
success = gFXAAProgram.createShader();
|
||||
llassert(success);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gCASProgram.mName = "Contrast Adaptive Sharpening Shader";
|
||||
gCASProgram.mFeatures.hasSrgb = true;
|
||||
gCASProgram.mShaderFiles.clear();
|
||||
gCASProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER));
|
||||
gCASProgram.mShaderFiles.push_back(make_pair("deferred/CASF.glsl", GL_FRAGMENT_SHADER));
|
||||
gCASProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];
|
||||
gCASProgram.createShader();
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gDeferredPostProgram.mName = "Deferred Post Shader";
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ extern LLGLSLShader gDeferredMultiLightProgram[LL_DEFERRED_MULTI_LIGHT_C
|
|||
extern LLGLSLShader gDeferredSpotLightProgram;
|
||||
extern LLGLSLShader gDeferredMultiSpotLightProgram;
|
||||
extern LLGLSLShader gDeferredSunProgram;
|
||||
extern LLGLSLShader gDeferredSunProbeProgram;
|
||||
extern LLGLSLShader gHazeProgram;
|
||||
extern LLGLSLShader gHazeWaterProgram;
|
||||
extern LLGLSLShader gDeferredBlurLightProgram;
|
||||
|
|
@ -246,6 +247,7 @@ extern LLGLSLShader gDeferredPostProgram;
|
|||
extern LLGLSLShader gDeferredCoFProgram;
|
||||
extern LLGLSLShader gDeferredDoFCombineProgram;
|
||||
extern LLGLSLShader gFXAAProgram;
|
||||
extern LLGLSLShader gCASProgram;
|
||||
extern LLGLSLShader gDeferredPostNoDoFProgram;
|
||||
extern LLGLSLShader gDeferredPostGammaCorrectProgram;
|
||||
extern LLGLSLShader gNoPostGammaCorrectProgram;
|
||||
|
|
|
|||
|
|
@ -6603,7 +6603,6 @@ LLVivoxVoiceClient::voiceFontEntry::voiceFontEntry(LLUUID& id) :
|
|||
mIsNew(false)
|
||||
{
|
||||
mExpiryTimer.stop();
|
||||
mExpiryWarningTimer.stop();
|
||||
}
|
||||
|
||||
LLVivoxVoiceClient::voiceFontEntry::~voiceFontEntry()
|
||||
|
|
@ -6714,20 +6713,6 @@ void LLVivoxVoiceClient::addVoiceFont(const S32 font_index,
|
|||
font->mExpiryTimer.start();
|
||||
font->mExpiryTimer.setExpiryAt(expiration_date.secondsSinceEpoch() - VOICE_FONT_EXPIRY_INTERVAL);
|
||||
|
||||
// Set the warning timer to some interval before actual expiry.
|
||||
S32 warning_time = gSavedSettings.getS32("VoiceEffectExpiryWarningTime");
|
||||
if (warning_time != 0)
|
||||
{
|
||||
font->mExpiryWarningTimer.start();
|
||||
F64 expiry_time = (expiration_date.secondsSinceEpoch() - (F64)warning_time);
|
||||
font->mExpiryWarningTimer.setExpiryAt(expiry_time - VOICE_FONT_EXPIRY_INTERVAL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable the warning timer.
|
||||
font->mExpiryWarningTimer.stop();
|
||||
}
|
||||
|
||||
// Only flag new session fonts after the first time we have fetched the list.
|
||||
if (mVoiceFontsReceived)
|
||||
{
|
||||
|
|
@ -6769,7 +6754,6 @@ void LLVivoxVoiceClient::expireVoiceFonts()
|
|||
// than checking each font individually.
|
||||
|
||||
bool have_expired = false;
|
||||
bool will_expire = false;
|
||||
bool expired_in_use = false;
|
||||
|
||||
LLUUID current_effect = LLVoiceClient::instance().getVoiceEffectDefault();
|
||||
|
|
@ -6779,7 +6763,6 @@ void LLVivoxVoiceClient::expireVoiceFonts()
|
|||
{
|
||||
voiceFontEntry* voice_font = iter->second;
|
||||
LLFrameTimer& expiry_timer = voice_font->mExpiryTimer;
|
||||
LLFrameTimer& warning_timer = voice_font->mExpiryWarningTimer;
|
||||
|
||||
// Check for expired voice fonts
|
||||
if (expiry_timer.getStarted() && expiry_timer.hasExpired())
|
||||
|
|
@ -6796,14 +6779,6 @@ void LLVivoxVoiceClient::expireVoiceFonts()
|
|||
deleteVoiceFont(voice_font->mID);
|
||||
have_expired = true;
|
||||
}
|
||||
|
||||
// Check for voice fonts that will expire in less that the warning time
|
||||
if (warning_timer.getStarted() && warning_timer.hasExpired())
|
||||
{
|
||||
LL_DEBUGS("VoiceFont") << "Voice Font " << voice_font->mName << " will expire soon." << LL_ENDL;
|
||||
will_expire = true;
|
||||
warning_timer.stop();
|
||||
}
|
||||
}
|
||||
|
||||
LLSD args;
|
||||
|
|
@ -6825,15 +6800,6 @@ void LLVivoxVoiceClient::expireVoiceFonts()
|
|||
// Refresh voice font lists in the UI.
|
||||
notifyVoiceFontObservers();
|
||||
}
|
||||
|
||||
// Give a warning notification if any voice fonts are due to expire.
|
||||
if (will_expire)
|
||||
{
|
||||
S32Seconds seconds(gSavedSettings.getS32("VoiceEffectExpiryWarningTime"));
|
||||
args["INTERVAL"] = llformat("%d", LLUnit<S32, LLUnits::Days>(seconds).value());
|
||||
|
||||
LLNotificationsUtil::add("VoiceEffectsWillExpire", args);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVivoxVoiceClient::deleteVoiceFont(const LLUUID& id)
|
||||
|
|
|
|||
|
|
@ -881,7 +881,6 @@ private:
|
|||
bool mIsNew;
|
||||
|
||||
LLFrameTimer mExpiryTimer;
|
||||
LLFrameTimer mExpiryWarningTimer;
|
||||
};
|
||||
|
||||
bool mVoiceFontsReceived;
|
||||
|
|
|
|||
|
|
@ -124,6 +124,17 @@
|
|||
#include "llenvironment.h"
|
||||
#include "llsettingsvo.h"
|
||||
|
||||
#ifndef LL_WINDOWS
|
||||
#define A_GCC 1
|
||||
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
||||
#if LL_LINUX
|
||||
#pragma GCC diagnostic ignored "-Wrestrict"
|
||||
#endif
|
||||
#endif
|
||||
#define A_CPU 1
|
||||
#include "app_settings/shaders/class1/deferred/CASF.glsl" // This is also C++
|
||||
|
||||
extern bool gSnapshot;
|
||||
bool gShiftFrame = false;
|
||||
|
||||
|
|
@ -7289,6 +7300,51 @@ void LLPipeline::generateGlow(LLRenderTarget* src)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPipeline::applyCAS(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
static LLCachedControl<F32> cas_sharpness(gSavedSettings, "RenderCASSharpness", 0.4f);
|
||||
if (cas_sharpness == 0.0f)
|
||||
{
|
||||
gPipeline.copyRenderTarget(src, dst);
|
||||
return;
|
||||
}
|
||||
|
||||
LLGLSLShader* sharpen_shader = &gCASProgram;
|
||||
|
||||
// Bind setup:
|
||||
dst->bindTarget();
|
||||
|
||||
sharpen_shader->bind();
|
||||
|
||||
{
|
||||
static LLStaticHashedString cas_param_0("cas_param_0");
|
||||
static LLStaticHashedString cas_param_1("cas_param_1");
|
||||
static LLStaticHashedString out_screen_res("out_screen_res");
|
||||
|
||||
varAU4(const0);
|
||||
varAU4(const1);
|
||||
CasSetup(const0, const1,
|
||||
cas_sharpness(), // Sharpness tuning knob (0.0 to 1.0).
|
||||
(AF1)src->getWidth(), (AF1)src->getHeight(), // Input size.
|
||||
(AF1)dst->getWidth(), (AF1)dst->getHeight()); // Output size.
|
||||
|
||||
sharpen_shader->uniform4uiv(cas_param_0, 1, const0);
|
||||
sharpen_shader->uniform4uiv(cas_param_1, 1, const1);
|
||||
|
||||
sharpen_shader->uniform2f(out_screen_res, (AF1)dst->getWidth(), (AF1)dst->getHeight());
|
||||
}
|
||||
|
||||
sharpen_shader->bindTexture(LLShaderMgr::DEFERRED_DIFFUSE, src, false, LLTexUnit::TFO_POINT);
|
||||
|
||||
// Draw
|
||||
gPipeline.mScreenTriangleVB->setBuffer();
|
||||
gPipeline.mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
|
||||
sharpen_shader->unbind();
|
||||
|
||||
dst->flush();
|
||||
}
|
||||
|
||||
void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
{
|
||||
|
|
@ -7456,6 +7512,7 @@ void LLPipeline::renderVignette(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
{
|
||||
|
|
@ -7716,12 +7773,15 @@ void LLPipeline::renderFinalize()
|
|||
gGLViewport[3] = gViewerWindow->getWorldViewRectRaw().getHeight();
|
||||
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
|
||||
|
||||
renderDoF(&mRT->screen, &mPostMap);
|
||||
applyFXAA(&mPostMap, &mRT->screen);
|
||||
applyCAS(&mRT->screen, &mPostMap);
|
||||
|
||||
renderDoF(&mPostMap, &mRT->screen);
|
||||
|
||||
applyFXAA(&mRT->screen, &mPostMap);
|
||||
// <FS:Beq> Restore shader post proc for Vignette
|
||||
// LLRenderTarget* finalBuffer = &mRT->screen;
|
||||
LLRenderTarget* activeBuffer = &mRT->screen;
|
||||
LLRenderTarget* targetBuffer = &mPostMap;
|
||||
// LLRenderTarget* finalBuffer = &mPostMap;
|
||||
LLRenderTarget* activeBuffer = &mPostMap;
|
||||
LLRenderTarget* targetBuffer = &mRT->screen;
|
||||
// [RLVa:KB] - @setsphere
|
||||
if (RlvActions::hasBehaviour(RLV_BHVR_SETSPHERE))
|
||||
{
|
||||
|
|
@ -7737,7 +7797,9 @@ void LLPipeline::renderFinalize()
|
|||
// </FS:Beq>
|
||||
if (RenderBufferVisualization > -1)
|
||||
{
|
||||
finalBuffer = &mPostMap;
|
||||
// <FS:Ansariel> Vignette / Vision sphere: Need to write to the previous source buffer again
|
||||
//finalBuffer = &mRT->screen;
|
||||
finalBuffer = activeBuffer;
|
||||
switch (RenderBufferVisualization)
|
||||
{
|
||||
case 0:
|
||||
|
|
@ -8159,13 +8221,15 @@ void LLPipeline::renderDeferredLighting()
|
|||
mat.mult_matrix_vec(tc_moon);
|
||||
mTransformedMoonDir.set(tc_moon.v);
|
||||
|
||||
if (RenderDeferredSSAO || RenderShadowDetail > 0)
|
||||
if ((RenderDeferredSSAO && !gCubeSnapshot) || RenderShadowDetail > 0)
|
||||
{
|
||||
LL_PROFILE_GPU_ZONE("sun program");
|
||||
deferred_light_target->bindTarget();
|
||||
{ // paint shadow/SSAO light map (direct lighting lightmap)
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("renderDeferredLighting - sun shadow");
|
||||
bindDeferredShader(gDeferredSunProgram, deferred_light_target);
|
||||
|
||||
LLGLSLShader& sun_shader = gCubeSnapshot ? gDeferredSunProbeProgram : gDeferredSunProgram;
|
||||
bindDeferredShader(sun_shader, deferred_light_target);
|
||||
mScreenTriangleVB->setBuffer();
|
||||
glClearColor(1, 1, 1, 1);
|
||||
deferred_light_target->clear(GL_COLOR_BUFFER_BIT);
|
||||
|
|
@ -8190,8 +8254,8 @@ void LLPipeline::renderDeferredLighting()
|
|||
}
|
||||
}
|
||||
|
||||
gDeferredSunProgram.uniform3fv(sOffset, slice, offset);
|
||||
gDeferredSunProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES,
|
||||
sun_shader.uniform3fv(sOffset, slice, offset);
|
||||
sun_shader.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES,
|
||||
(GLfloat)deferred_light_target->getWidth(),
|
||||
(GLfloat)deferred_light_target->getHeight());
|
||||
|
||||
|
|
@ -8201,12 +8265,12 @@ void LLPipeline::renderDeferredLighting()
|
|||
mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
}
|
||||
|
||||
unbindDeferredShader(gDeferredSunProgram);
|
||||
unbindDeferredShader(sun_shader);
|
||||
}
|
||||
deferred_light_target->flush();
|
||||
}
|
||||
|
||||
if (RenderDeferredSSAO)
|
||||
if (RenderDeferredSSAO && !gCubeSnapshot)
|
||||
{
|
||||
// soften direct lighting lightmap
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("renderDeferredLighting - soften shadow");
|
||||
|
|
|
|||
|
|
@ -157,6 +157,7 @@ public:
|
|||
void generateExposure(LLRenderTarget* src, LLRenderTarget* dst, bool use_history = true);
|
||||
void gammaCorrect(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
void generateGlow(LLRenderTarget* src);
|
||||
void applyCAS(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
void applyFXAA(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
void renderDoF(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
void copyRenderTarget(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
|
|
|
|||
|
|
@ -3485,12 +3485,6 @@ Abunəliyi yeniləmək üçün [[URL] buraya basın].
|
|||
Animasiyalı səs dəyişdiricisinin müddəti bitdi, normal səs seçimləriniz qüvvədədir.
|
||||
Abunəliyi yeniləmək üçün [[URL] buraya basın].
|
||||
|
||||
Əgər siz premium hesab sahibisinizsə, zəhmət olmasa animasiyalı səs dəyişikliyinin hüququnu almaq üçün [[PREMIUM_URL] bura basın].
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Animasiyalı səs dəyişdiricisinin bir və ya daha çox növlərinin müddəti [INTERVAL] gün və ya daha az müddətdə başa çatacaq.
|
||||
Abunəliyi yeniləmək üçün [[URL] buraya basın].
|
||||
|
||||
Əgər siz premium hesab sahibisinizsə, zəhmət olmasa animasiyalı səs dəyişikliyinin hüququnu almaq üçün [[PREMIUM_URL] bura basın].
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -1595,10 +1595,6 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p
|
|||
</notification>
|
||||
<notification name="VoiceEffectsExpiredInUse">
|
||||
Den aktive stemme "morph" er udløbet og din normale stemme opsætning er genaktiveret.
|
||||
[[URL] Click here] for at forny dit abbonnement.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
En eller flere af dine stemme "morphs" vil udløbe om mindre end [INTERVAL] dage.
|
||||
[[URL] Click here] for at forny dit abbonnement.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3630,12 +3630,6 @@ Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice
|
|||
Das aktive Voice-Morph-Abo ist abgelaufen. Ihre normalen Voice-Einstellungen werden angewendet.
|
||||
[[URL] Klicken Sie hier], um Ihr Abo zu erneuern.
|
||||
|
||||
Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Ein oder mehrere Ihrer Voice-Morph-Abos laufen in weniger als [INTERVAL] Tagen ab.
|
||||
[[URL] Klicken Sie hier], um Ihr Abo zu erneuern.
|
||||
|
||||
Wenn Sie Premium-Mitglied sind, [[PREMIUM_URL] klicken Sie hier], um Ihren Voice-Morphing-Vorteil zu nutzen.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -211,6 +211,7 @@
|
|||
</text>
|
||||
<slider label="Schattenqualität" tool_tip="Qualität der Schattendarstellung (Standard: 1)" name="ShadowResolution"/>
|
||||
<slider label="Skalierung der Bodentexturen (Erfordert Neustart)" name="RenderTerrainScale" tool_tip="Setzt die Skalierung der Bodentexturen - niedriger bedeutet höhere Kompression"/>
|
||||
<slider label="Schärfung" name="RenderSharpness"/>
|
||||
</panel>
|
||||
|
||||
<panel label="Schärfentiefe" name="DOF panel">
|
||||
|
|
|
|||
|
|
@ -881,7 +881,26 @@
|
|||
value="1"/>
|
||||
</combo_box>
|
||||
<!-- End of mirror settings -->
|
||||
|
||||
<!-- Sharpening Settings -->
|
||||
<slider
|
||||
control_name="RenderCASSharpness"
|
||||
decimal_digits="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.1"
|
||||
initial_value="160"
|
||||
label="Sharpening:"
|
||||
label_width="145"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
min_val="0.0"
|
||||
max_val="1.0"
|
||||
name="RenderSharpness"
|
||||
show_text="true"
|
||||
top_delta="24"
|
||||
width="260">
|
||||
</slider>
|
||||
<!-- End of Sharpening Settings-->
|
||||
<!-- End of Advanced Settings block -->
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
|
|
|
|||
|
|
@ -9515,21 +9515,6 @@ If you are a Premium Member, [[PREMIUM_URL] click here] to receive your voice mo
|
|||
<tag>voice</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="VoiceEffectsWillExpire"
|
||||
sound="UISndAlert"
|
||||
persist="true"
|
||||
type="notify">
|
||||
<unique/>
|
||||
One or more of your Voice Morphs will expire in less than [INTERVAL] days.
|
||||
[[URL] Click here] to renew your subscription.
|
||||
|
||||
If you are a Premium Member, [[PREMIUM_URL] click here] to receive your voice morphing perk.
|
||||
<tag>fail</tag>
|
||||
<tag>voice</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="VoiceEffectsNew"
|
||||
|
|
|
|||
|
|
@ -1425,6 +1425,26 @@ If you do not understand the distinction then leave this control alone."
|
|||
tool_tip="Determines scale of terrain textures - lower is more compressed (requires viewer restart)"
|
||||
top_pad="3"
|
||||
width="405" />
|
||||
<!-- Sharpening Settings -->
|
||||
<slider
|
||||
control_name="RenderCASSharpness"
|
||||
decimal_digits="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.1"
|
||||
label="Sharpening:"
|
||||
label_width="300"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
min_val="0.0"
|
||||
max_val="1.0"
|
||||
name="RenderSharpness"
|
||||
show_text="true"
|
||||
top_pad="3"
|
||||
width="405">
|
||||
</slider>
|
||||
<!-- End of Sharpening Settings-->
|
||||
|
||||
</panel>
|
||||
|
||||
<!--Depth of Field-->
|
||||
|
|
|
|||
|
|
@ -3387,12 +3387,6 @@ Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio
|
|||
La transformación de voz activa ha caducado y se ha aplicado tu configuración de voz normal.
|
||||
[[URL] Pulsa aquí] para renovar la suscripción.
|
||||
|
||||
Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Una o más de tus transformaciones de voz caducarán en menos de [INTERVAL] días.
|
||||
[[URL] Pulsa aquí] para renovar la suscripción
|
||||
|
||||
Si eres un miembro Premium [[PREMIUM_URL] pulsa aquí] para recibir tu beneficio de transformación de voz.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3645,12 +3645,6 @@ Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votr
|
|||
[[URL] Cliquez ici] pour renouveler votre abonnement.
|
||||
|
||||
Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Au moins l'un de vos effets de voix expirera dans moins de [INTERVAL] jours.
|
||||
[[URL] Cliquez ici] pour renouveler votre abonnement.
|
||||
|
||||
Si vous êtes un membre Premium, [[PREMIUM_URL] cliquez ici] pour recevoir votre effet de voix.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
De nouveaux effets de voix sont disponibles !
|
||||
|
|
|
|||
|
|
@ -3420,12 +3420,6 @@ Se sei un utente Premium, [[PREMIUM_URL] clic qui] per ricevere la tua offerta d
|
|||
Poiché la manipolazione vocale attiva è scaduta, sono state applicate le tue impostazioni normali.
|
||||
[[URL] Fai clic qui] per rinnovare l'abbonamento.
|
||||
|
||||
Se sei un utente Premium, [[PREMIUM_URL] clic qui] per ricevere la tua offerta di manipolazioni vocali.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Almeno una delle tue manipolazioni vocali scadrà tra meno di [INTERVAL] giorni.
|
||||
[[URL] Fai clic qui] per rinnovare l'abbonamento.
|
||||
|
||||
Se sei un utente Premium, [[PREMIUM_URL] clic qui] per ricevere la tua offerta di manipolazioni vocali.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3657,12 +3657,6 @@ M キーを押して変更します。
|
|||
ボイスモーフィング効果の有効期限が終了したため、あなたの通常のボイス設定が適用されました。
|
||||
期限を延長・更新するには [[URL] Click here] をクリックしてください。
|
||||
|
||||
プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
ボイスモーフィング効果の1つまたは複数の有効期限が [INTERVAL] 日以内に終了します。
|
||||
期限を延長・更新するには [[URL] Click here] をクリックしてください。
|
||||
|
||||
プレミアム会員の方は、 [[PREMIUM_URL] click here] をクリックしてボイスモーフィング特典をお受け取りください。
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3507,11 +3507,6 @@ Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrz
|
|||
<notification name="VoiceEffectsExpiredInUse">
|
||||
Czas aktywności Przekształcenia Głosu wygasł, normalne ustawienia Twojego głosu zostały zastosowane.
|
||||
[[URL] Kliknij tutaj] aby odnowić subskrypcję.
|
||||
Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Jedno lub więcej z Twoich Przekształceń Głosu wygaśnie za mniej niż [INTERVAL] dni.
|
||||
[[URL] Kliknij tutaj] aby odnowić subskrypcję.
|
||||
Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3178,12 +3178,6 @@ Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu ap
|
|||
A Distorção de voz ativa expirou. Suas configurações de voz padrão foram ativadas.
|
||||
[[URL] Clique aqui] para renovar o serviço.
|
||||
|
||||
Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Uma ou mais das suas distorções de voz tem vencimento em menos de [INTERVAL] dias.
|
||||
[[URL] Clique aqui] para renovar o serviço.
|
||||
|
||||
Se você é um Membro Premium, [[PREMIUM_URL] clique aqui] para receber o seu app de distorção de voz.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3629,12 +3629,6 @@ URL: [AUDIOURL]
|
|||
Истек срок действия анимационного изменения голоса, действуют настройки вашего обычного голоса.
|
||||
[[URL] Щелкните здесь], чтобы обновить подписку.
|
||||
|
||||
Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Срок действия одного или нескольких ваших типов анимационного изменения голоса истекает через [INTERVAL] дней или раньше.
|
||||
[[URL] Щелкните здесь], чтобы обновить подписку.
|
||||
|
||||
Если вы - владелец премиум-аккаунта, [[PREMIUM_URL] щелкните здесь], чтобы получить право на анимационное изменение голоса.
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3275,12 +3275,6 @@ Aboneliğinizi yenilemek için [[URL] buraya tıklayın].
|
|||
Etkin Ses Dönüşümünün süresi dolmuş, normal ses ayarlarınız uygulandı.
|
||||
Aboneliğinizi yenilemek için [[URL] buraya tıklayın].
|
||||
|
||||
Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın].
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
Ses Dönüşümlerinizden birinin ya da daha fazlasının süresi [INTERVAL] günden daha az bir zamanda dolacak.
|
||||
Aboneliğinizi yenilemek için [[URL] buraya tıklayın].
|
||||
|
||||
Özel Üye iseniz, ses dönüştürme özelliğini almak için [[PREMIUM_URL] buraya tıklayın].
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
|
|
@ -3164,12 +3164,6 @@ SHA1 指紋:[MD5_DIGEST]
|
|||
使用中的變聲效果已經過期,已用你平時的聲音設定取代。
|
||||
[[URL] 點按這裡]繼續訂用。
|
||||
|
||||
付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。
|
||||
</notification>
|
||||
<notification name="VoiceEffectsWillExpire">
|
||||
至少一個你訂用的變聲效果將在 [INTERVAL] 天後到期。
|
||||
[[URL] 點按這裡]繼續訂用。
|
||||
|
||||
付費用戶請[[PREMIUM_URL] 點按這裡]領取免費變聲工具。
|
||||
</notification>
|
||||
<notification name="VoiceEffectsNew">
|
||||
|
|
|
|||
Loading…
Reference in New Issue