Optimization. Skip binding for rigged face types that have no faces to display.
This commit is contained in:
@@ -69,6 +69,7 @@ S32 LLDrawPoolAvatar::sDiffuseChannel = 0;
|
||||
|
||||
#if MESH_ENABLED
|
||||
static bool is_deferred_render = false;
|
||||
static bool is_skipped_pass = false;
|
||||
#endif //MESH_ENABLED
|
||||
|
||||
extern BOOL gUseGLPick;
|
||||
@@ -162,9 +163,6 @@ LLMatrix4& LLDrawPoolAvatar::getModelView()
|
||||
//-----------------------------------------------------------------------------
|
||||
// render()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
|
||||
{
|
||||
sSkipTransparent = TRUE;
|
||||
@@ -177,6 +175,12 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
|
||||
pass += 2;
|
||||
}
|
||||
|
||||
if(pass >= 3 && mRiggedFace[pass + 4].empty())
|
||||
{
|
||||
is_skipped_pass = true;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
@@ -212,6 +216,12 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass)
|
||||
pass += 2;
|
||||
}
|
||||
|
||||
if(is_skipped_pass)
|
||||
{
|
||||
is_skipped_pass = false;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
@@ -251,6 +261,12 @@ S32 LLDrawPoolAvatar::getNumPostDeferredPasses()
|
||||
|
||||
void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass)
|
||||
{
|
||||
if(pass >= 1 && mRiggedFace[pass + (S32)(pass != 1)].empty())
|
||||
{
|
||||
is_skipped_pass = true;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
@@ -310,6 +326,12 @@ void LLDrawPoolAvatar::endDeferredRiggedAlpha()
|
||||
#endif //MESH_ENABLED
|
||||
void LLDrawPoolAvatar::endPostDeferredPass(S32 pass)
|
||||
{
|
||||
if(is_skipped_pass)
|
||||
{
|
||||
is_skipped_pass = false;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
@@ -518,9 +540,13 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()
|
||||
#endif //!MESH_ENABLED
|
||||
|
||||
}
|
||||
|
||||
void LLDrawPoolAvatar::render(S32 pass)
|
||||
{
|
||||
LLFastTimer t(LLFastTimer::FTM_RENDER_CHARACTERS);
|
||||
if(is_skipped_pass)
|
||||
return;
|
||||
|
||||
if (LLPipeline::sImpostorRender)
|
||||
{
|
||||
renderAvatars(NULL, pass+2);
|
||||
@@ -546,6 +572,12 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)
|
||||
pass += 2;
|
||||
}
|
||||
|
||||
if(pass >= 3 && mRiggedFace[pass - 3].empty())
|
||||
{
|
||||
is_skipped_pass = true;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
@@ -592,6 +624,12 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass)
|
||||
pass += 2;
|
||||
}
|
||||
|
||||
if(is_skipped_pass)
|
||||
{
|
||||
is_skipped_pass = false;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (pass)
|
||||
{
|
||||
case 0:
|
||||
|
||||
Reference in New Issue
Block a user