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
|
#if MESH_ENABLED
|
||||||
static bool is_deferred_render = false;
|
static bool is_deferred_render = false;
|
||||||
|
static bool is_skipped_pass = false;
|
||||||
#endif //MESH_ENABLED
|
#endif //MESH_ENABLED
|
||||||
|
|
||||||
extern BOOL gUseGLPick;
|
extern BOOL gUseGLPick;
|
||||||
@@ -162,9 +163,6 @@ LLMatrix4& LLDrawPoolAvatar::getModelView()
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// render()
|
// render()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
|
void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
|
||||||
{
|
{
|
||||||
sSkipTransparent = TRUE;
|
sSkipTransparent = TRUE;
|
||||||
@@ -177,6 +175,12 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
|
|||||||
pass += 2;
|
pass += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(pass >= 3 && mRiggedFace[pass + 4].empty())
|
||||||
|
{
|
||||||
|
is_skipped_pass = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -212,6 +216,12 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass)
|
|||||||
pass += 2;
|
pass += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(is_skipped_pass)
|
||||||
|
{
|
||||||
|
is_skipped_pass = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -251,6 +261,12 @@ S32 LLDrawPoolAvatar::getNumPostDeferredPasses()
|
|||||||
|
|
||||||
void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass)
|
void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass)
|
||||||
{
|
{
|
||||||
|
if(pass >= 1 && mRiggedFace[pass + (S32)(pass != 1)].empty())
|
||||||
|
{
|
||||||
|
is_skipped_pass = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -310,6 +326,12 @@ void LLDrawPoolAvatar::endDeferredRiggedAlpha()
|
|||||||
#endif //MESH_ENABLED
|
#endif //MESH_ENABLED
|
||||||
void LLDrawPoolAvatar::endPostDeferredPass(S32 pass)
|
void LLDrawPoolAvatar::endPostDeferredPass(S32 pass)
|
||||||
{
|
{
|
||||||
|
if(is_skipped_pass)
|
||||||
|
{
|
||||||
|
is_skipped_pass = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -518,9 +540,13 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()
|
|||||||
#endif //!MESH_ENABLED
|
#endif //!MESH_ENABLED
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLDrawPoolAvatar::render(S32 pass)
|
void LLDrawPoolAvatar::render(S32 pass)
|
||||||
{
|
{
|
||||||
LLFastTimer t(LLFastTimer::FTM_RENDER_CHARACTERS);
|
LLFastTimer t(LLFastTimer::FTM_RENDER_CHARACTERS);
|
||||||
|
if(is_skipped_pass)
|
||||||
|
return;
|
||||||
|
|
||||||
if (LLPipeline::sImpostorRender)
|
if (LLPipeline::sImpostorRender)
|
||||||
{
|
{
|
||||||
renderAvatars(NULL, pass+2);
|
renderAvatars(NULL, pass+2);
|
||||||
@@ -546,6 +572,12 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass)
|
|||||||
pass += 2;
|
pass += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(pass >= 3 && mRiggedFace[pass - 3].empty())
|
||||||
|
{
|
||||||
|
is_skipped_pass = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -592,6 +624,12 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass)
|
|||||||
pass += 2;
|
pass += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(is_skipped_pass)
|
||||||
|
{
|
||||||
|
is_skipped_pass = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
@@ -153,18 +153,20 @@ public:
|
|||||||
void renderDeferredRiggedSimple(LLVOAvatar* avatar);
|
void renderDeferredRiggedSimple(LLVOAvatar* avatar);
|
||||||
void renderDeferredRiggedBump(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
|
typedef enum
|
||||||
{
|
{
|
||||||
RIGGED_SIMPLE = 0,
|
RIGGED_SIMPLE = 0,
|
||||||
RIGGED_FULLBRIGHT,
|
RIGGED_FULLBRIGHT,
|
||||||
RIGGED_SHINY,
|
RIGGED_SHINY,
|
||||||
RIGGED_FULLBRIGHT_SHINY,
|
RIGGED_FULLBRIGHT_SHINY,
|
||||||
RIGGED_GLOW,
|
//RIGGED_GLOW,
|
||||||
RIGGED_ALPHA,
|
RIGGED_ALPHA,
|
||||||
RIGGED_FULLBRIGHT_ALPHA,
|
RIGGED_FULLBRIGHT_ALPHA,
|
||||||
RIGGED_DEFERRED_BUMP,
|
RIGGED_GLOW,
|
||||||
|
//RIGGED_DEFERRED_BUMP,
|
||||||
RIGGED_DEFERRED_SIMPLE,
|
RIGGED_DEFERRED_SIMPLE,
|
||||||
|
RIGGED_DEFERRED_BUMP,
|
||||||
NUM_RIGGED_PASSES,
|
NUM_RIGGED_PASSES,
|
||||||
RIGGED_UNKNOWN,
|
RIGGED_UNKNOWN,
|
||||||
} eRiggedPass;
|
} eRiggedPass;
|
||||||
|
|||||||
@@ -2064,6 +2064,7 @@ void LLFace::clearVertexBuffer()
|
|||||||
|
|
||||||
#if MESH_ENABLED
|
#if MESH_ENABLED
|
||||||
//static
|
//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)
|
U32 LLFace::getRiggedDataMask(U32 type)
|
||||||
{
|
{
|
||||||
static const U32 rigged_data_mask[] = {
|
static const U32 rigged_data_mask[] = {
|
||||||
@@ -2071,11 +2072,13 @@ U32 LLFace::getRiggedDataMask(U32 type)
|
|||||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK,
|
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK,
|
||||||
LLDrawPoolAvatar::RIGGED_SHINY_MASK,
|
LLDrawPoolAvatar::RIGGED_SHINY_MASK,
|
||||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY_MASK,
|
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY_MASK,
|
||||||
LLDrawPoolAvatar::RIGGED_GLOW_MASK,
|
//LLDrawPoolAvatar::RIGGED_GLOW_MASK,
|
||||||
LLDrawPoolAvatar::RIGGED_ALPHA_MASK,
|
LLDrawPoolAvatar::RIGGED_ALPHA_MASK,
|
||||||
LLDrawPoolAvatar::RIGGED_FULLBRIGHT_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_SIMPLE_MASK,
|
||||||
|
LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP_MASK,
|
||||||
};
|
};
|
||||||
|
|
||||||
llassert(type < sizeof(rigged_data_mask)/sizeof(U32));
|
llassert(type < sizeof(rigged_data_mask)/sizeof(U32));
|
||||||
|
|||||||
Reference in New Issue
Block a user