Merge viewer-cat and resolve conflict with alternate self
parent
69133ca4e3
commit
2fd0e6e8f9
|
|
@ -2282,6 +2282,22 @@ void LLRender::diffuseColor4ubv(const U8* c)
|
|||
}
|
||||
}
|
||||
|
||||
void LLRender::diffuseColor4ub(U8 r, U8 g, U8 b, U8 a)
|
||||
{
|
||||
LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr;
|
||||
llassert(!LLGLSLShader::sNoFixedFunction || shader != NULL);
|
||||
|
||||
if (shader)
|
||||
{
|
||||
shader->uniform4f(LLShaderMgr::DIFFUSE_COLOR, r/255.f, g/255.f, b/255.f, a/255.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
glColor4ub(r,g,b,a);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LLRender::debugTexUnits(void)
|
||||
{
|
||||
LL_INFOS("TextureUnit") << "Active TexUnit: " << mCurrTextureUnitIndex << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -388,6 +388,7 @@ public:
|
|||
void diffuseColor4f(F32 r, F32 g, F32 b, F32 a);
|
||||
void diffuseColor4fv(const F32* c);
|
||||
void diffuseColor4ubv(const U8* c);
|
||||
void diffuseColor4ub(U8 r, U8 g, U8 b, U8 a);
|
||||
|
||||
void vertexBatchPreTransformed(LLVector3* verts, S32 vert_count);
|
||||
void vertexBatchPreTransformed(LLVector3* verts, LLVector2* uvs, S32 vert_count);
|
||||
|
|
|
|||
|
|
@ -458,6 +458,12 @@ U32 LLRenderTarget::getTexture(U32 attachment) const
|
|||
return mTex[attachment];
|
||||
}
|
||||
|
||||
U32 LLRenderTarget::getNumTextures() const
|
||||
{
|
||||
return mTex.size();
|
||||
}
|
||||
|
||||
|
||||
void LLRenderTarget::bindTexture(U32 index, S32 channel)
|
||||
{
|
||||
gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index));
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ public:
|
|||
LLTexUnit::eTextureType getUsage(void) const { return mUsage; }
|
||||
|
||||
U32 getTexture(U32 attachment = 0) const;
|
||||
U32 getNumTextures() const;
|
||||
|
||||
U32 getDepth(void) const { return mDepth; }
|
||||
bool hasStencil() const { return mStencil; }
|
||||
|
|
|
|||
|
|
@ -9169,6 +9169,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAutoMuteRenderCostLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum render cost before an avatar is automatically visually muted (0 for no limit).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RenderAutoMuteSurfaceAreaLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ out vec4 frag_data[3];
|
|||
|
||||
uniform sampler2D diffuseMap;
|
||||
|
||||
uniform float minimum_alpha;
|
||||
|
||||
VARYING vec3 vary_normal;
|
||||
VARYING vec2 vary_texcoord0;
|
||||
|
||||
|
|
@ -38,7 +40,7 @@ void main()
|
|||
{
|
||||
vec4 diff = texture2D(diffuseMap, vary_texcoord0.xy);
|
||||
|
||||
if (diff.a < 0.2)
|
||||
if (diff.a < minimum_alpha)
|
||||
{
|
||||
discard;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL;
|
|||
BOOL LLDrawPoolAvatar::sSkipOpaque = FALSE;
|
||||
BOOL LLDrawPoolAvatar::sSkipTransparent = FALSE;
|
||||
S32 LLDrawPoolAvatar::sDiffuseChannel = 0;
|
||||
F32 LLDrawPoolAvatar::sMinimumAlpha = 0.2f;
|
||||
|
||||
|
||||
static bool is_deferred_render = false;
|
||||
|
|
@ -272,7 +273,7 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()
|
|||
|
||||
gPipeline.bindDeferredShader(*sVertexProgram);
|
||||
|
||||
sVertexProgram->setMinimumAlpha(0.2f);
|
||||
sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
|
||||
|
||||
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
|
||||
}
|
||||
|
|
@ -620,7 +621,7 @@ void LLDrawPoolAvatar::beginRigid()
|
|||
if (sVertexProgram != NULL)
|
||||
{ //eyeballs render with the specular shader
|
||||
sVertexProgram->bind();
|
||||
sVertexProgram->setMinimumAlpha(0.2f);
|
||||
sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -671,7 +672,7 @@ void LLDrawPoolAvatar::beginDeferredRigid()
|
|||
sVertexProgram = &gDeferredNonIndexedDiffuseAlphaMaskNoColorProgram;
|
||||
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
|
||||
sVertexProgram->bind();
|
||||
sVertexProgram->setMinimumAlpha(0.2f);
|
||||
sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
|
||||
}
|
||||
|
||||
void LLDrawPoolAvatar::endDeferredRigid()
|
||||
|
|
@ -729,7 +730,7 @@ void LLDrawPoolAvatar::beginSkinned()
|
|||
|
||||
if (LLGLSLShader::sNoFixedFunction)
|
||||
{
|
||||
sVertexProgram->setMinimumAlpha(0.2f);
|
||||
sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1027,7 +1028,7 @@ void LLDrawPoolAvatar::beginDeferredSkinned()
|
|||
sRenderingSkinned = TRUE;
|
||||
|
||||
sVertexProgram->bind();
|
||||
sVertexProgram->setMinimumAlpha(0.2f);
|
||||
sVertexProgram->setMinimumAlpha(LLDrawPoolAvatar::sMinimumAlpha);
|
||||
|
||||
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
|
||||
gGL.getTexUnit(0)->activate();
|
||||
|
|
@ -1138,7 +1139,10 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
|
||||
if (impostor)
|
||||
{
|
||||
if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())
|
||||
if (LLPipeline::sRenderDeferred && //rendering a deferred impostor
|
||||
!LLPipeline::sReflectionRender &&
|
||||
avatarp->mImpostor.isComplete() && //impostor has required data channels
|
||||
avatarp->mImpostor.getNumTextures() >= 3)
|
||||
{
|
||||
if (normal_channel > -1)
|
||||
{
|
||||
|
|
@ -1151,112 +1155,94 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
|
|||
}
|
||||
avatarp->renderImpostor(LLColor4U(255,255,255,255), sDiffuseChannel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted());
|
||||
|
||||
/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview, 3=morph view
|
||||
{
|
||||
gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f));
|
||||
}*/
|
||||
|
||||
if (pass == 1)
|
||||
else if (pass == 1)
|
||||
{
|
||||
// render rigid meshes (eyeballs) first
|
||||
avatarp->renderRigid();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 3)
|
||||
{
|
||||
if (is_deferred_render)
|
||||
else if (pass >= 3 && pass <= 9)
|
||||
{ //render rigged attachments
|
||||
if (!avatarp->isVisuallyMuted())
|
||||
{
|
||||
renderDeferredRiggedSimple(avatarp);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderRiggedSimple(avatarp);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 4)
|
||||
{
|
||||
if (is_deferred_render)
|
||||
{
|
||||
renderDeferredRiggedBump(avatarp);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderRiggedFullbright(avatarp);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 5)
|
||||
{
|
||||
renderRiggedShinySimple(avatarp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 6)
|
||||
{
|
||||
renderRiggedFullbrightShiny(avatarp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass >= 7 && pass < 9)
|
||||
{
|
||||
if (pass == 7)
|
||||
{
|
||||
renderRiggedAlpha(avatarp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pass == 8)
|
||||
{
|
||||
renderRiggedFullbrightAlpha(avatarp);
|
||||
return;
|
||||
if (pass == 3)
|
||||
{
|
||||
if (is_deferred_render)
|
||||
{
|
||||
renderDeferredRiggedSimple(avatarp);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderRiggedSimple(avatarp);
|
||||
}
|
||||
}
|
||||
else if (pass == 4)
|
||||
{
|
||||
if (is_deferred_render)
|
||||
{
|
||||
renderDeferredRiggedBump(avatarp);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderRiggedFullbright(avatarp);
|
||||
}
|
||||
}
|
||||
else if (pass == 5)
|
||||
{
|
||||
renderRiggedShinySimple(avatarp);
|
||||
}
|
||||
else if (pass == 6)
|
||||
{
|
||||
renderRiggedFullbrightShiny(avatarp);
|
||||
}
|
||||
else if (pass >= 7 && pass < 9)
|
||||
{
|
||||
if (pass == 7)
|
||||
{
|
||||
renderRiggedAlpha(avatarp);
|
||||
}
|
||||
else if (pass == 8)
|
||||
{
|
||||
renderRiggedFullbrightAlpha(avatarp);
|
||||
}
|
||||
}
|
||||
else if (pass == 9)
|
||||
{
|
||||
renderRiggedGlow(avatarp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pass == 9)
|
||||
else
|
||||
{
|
||||
renderRiggedGlow(avatarp);
|
||||
if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
|
||||
{
|
||||
LLMatrix4 rot_mat;
|
||||
LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat);
|
||||
LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
|
||||
rot_mat *= cfr;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ((sShaderLevel >= SHADER_LEVEL_CLOTH))
|
||||
{
|
||||
LLMatrix4 rot_mat;
|
||||
LLViewerCamera::getInstance()->getMatrixToLocal(rot_mat);
|
||||
LLMatrix4 cfr(OGL_TO_CFR_ROTATION);
|
||||
rot_mat *= cfr;
|
||||
|
||||
LLVector4 wind;
|
||||
wind.setVec(avatarp->mWindVec);
|
||||
wind.mV[VW] = 0;
|
||||
wind = wind * rot_mat;
|
||||
wind.mV[VW] = avatarp->mWindVec.mV[VW];
|
||||
LLVector4 wind;
|
||||
wind.setVec(avatarp->mWindVec);
|
||||
wind.mV[VW] = 0;
|
||||
wind = wind * rot_mat;
|
||||
wind.mV[VW] = avatarp->mWindVec.mV[VW];
|
||||
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV);
|
||||
F32 phase = -1.f * (avatarp->mRipplePhase);
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_WIND, 1, wind.mV);
|
||||
F32 phase = -1.f * (avatarp->mRipplePhase);
|
||||
|
||||
F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
|
||||
LLVector4 sin_params(freq, freq, freq, phase);
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV);
|
||||
F32 freq = 7.f + (noise1(avatarp->mRipplePhase) * 2.f);
|
||||
LLVector4 sin_params(freq, freq, freq, phase);
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_SINWAVE, 1, sin_params.mV);
|
||||
|
||||
LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
|
||||
gravity = gravity * rot_mat;
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);
|
||||
}
|
||||
LLVector4 gravity(0.f, 0.f, -CLOTHING_GRAVITY_EFFECT, 0.f);
|
||||
gravity = gravity * rot_mat;
|
||||
sVertexProgram->uniform4fv(LLViewerShaderMgr::AVATAR_GRAVITY, 1, gravity.mV);
|
||||
}
|
||||
|
||||
if( !single_avatar || (avatarp == single_avatar) )
|
||||
{
|
||||
avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
|
||||
if( !single_avatar || (avatarp == single_avatar) )
|
||||
{
|
||||
avatarp->renderSkinned(AVATAR_RENDER_PASS_SINGLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1547,7 +1533,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
|
|||
LLDrawPoolBump::bindBumpMap(face, normal_channel);
|
||||
}
|
||||
|
||||
if (face->mTextureMatrix)
|
||||
if (face->mTextureMatrix && vobj->mTexAnimMode)
|
||||
{
|
||||
gGL.matrixMode(LLRender::MM_TEXTURE);
|
||||
gGL.loadMatrix((F32*) face->mTextureMatrix->mMatrix);
|
||||
|
|
|
|||
|
|
@ -209,6 +209,7 @@ public:
|
|||
static BOOL sSkipOpaque;
|
||||
static BOOL sSkipTransparent;
|
||||
static S32 sDiffuseChannel;
|
||||
static F32 sMinimumAlpha;
|
||||
|
||||
static LLGLSLShader* sVertexProgram;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -461,8 +461,8 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
|
|||
}
|
||||
}
|
||||
}
|
||||
// Placed after shader->disableTex(ENV,TT_CUBE_MAP) above to avoid sequencing false alarm when using RenderDebugGL
|
||||
// MAINT-1291
|
||||
// Placed after shader->disableTex(ENV,TT_CUBE_MAP) to avoid sequencing false alarm when using RenderDebugGL
|
||||
// MAINT-755
|
||||
cube_map->disable();
|
||||
cube_map->restoreMatrix();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue