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:
|
||||
|
||||
@@ -153,18 +153,20 @@ public:
|
||||
void renderDeferredRiggedSimple(LLVOAvatar* avatar);
|
||||
void renderDeferredRiggedBump(LLVOAvatar* avatar);
|
||||
|
||||
|
||||
//do NOT screw the the order of these. They are ordered in a way such that they cleanly align with render passes in drawpoolavatar.
|
||||
typedef enum
|
||||
{
|
||||
RIGGED_SIMPLE = 0,
|
||||
RIGGED_FULLBRIGHT,
|
||||
RIGGED_SHINY,
|
||||
RIGGED_FULLBRIGHT_SHINY,
|
||||
RIGGED_GLOW,
|
||||
//RIGGED_GLOW,
|
||||
RIGGED_ALPHA,
|
||||
RIGGED_FULLBRIGHT_ALPHA,
|
||||
RIGGED_DEFERRED_BUMP,
|
||||
RIGGED_GLOW,
|
||||
//RIGGED_DEFERRED_BUMP,
|
||||
RIGGED_DEFERRED_SIMPLE,
|
||||
RIGGED_DEFERRED_BUMP,
|
||||
NUM_RIGGED_PASSES,
|
||||
RIGGED_UNKNOWN,
|
||||
} eRiggedPass;
|
||||
|
||||
@@ -2064,6 +2064,7 @@ void LLFace::clearVertexBuffer()
|
||||
|
||||
#if MESH_ENABLED
|
||||
//static
|
||||
//do NOT screw the the order of these. Must match order of LLDrawPoolAvatar::eRiggedPass. Order differs from LL's.
|
||||
U32 LLFace::getRiggedDataMask(U32 type)
|
||||
{
|
||||
static const U32 rigged_data_mask[] = {
|
||||
@@ -2071,11 +2072,13 @@ U32 LLFace::getRiggedDataMask(U32 type)
|
||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_SHINY_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_GLOW_MASK,
|
||||
//LLDrawPoolAvatar::RIGGED_GLOW_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_ALPHA_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_ALPHA_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_GLOW_MASK,
|
||||
//LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_DEFERRED_SIMPLE_MASK,
|
||||
LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK,
|
||||
};
|
||||
|
||||
llassert(type < sizeof(rigged_data_mask)/sizeof(U32));
|
||||
|
||||
Reference in New Issue
Block a user