Optimization. Skip binding for rigged face types that have no faces to display.

This commit is contained in:
Shyotl
2011-09-12 15:30:42 -05:00
parent 3ba4861a3b
commit 1fb1ba05ce
3 changed files with 51 additions and 8 deletions

View File

@@ -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: