Added pass_post_bump for fullbright bump faces.

This commit is contained in:
Shyotl
2011-04-25 18:18:36 -05:00
parent 5954e0d71c
commit 80db7f58c7
6 changed files with 63 additions and 21 deletions

View File

@@ -129,6 +129,7 @@ public:
PASS_FULLBRIGHT_SHINY, PASS_FULLBRIGHT_SHINY,
PASS_SHINY, PASS_SHINY,
PASS_BUMP, PASS_BUMP,
PASS_POST_BUMP,
PASS_GLOW, PASS_GLOW,
PASS_ALPHA, PASS_ALPHA,
PASS_ALPHA_MASK, PASS_ALPHA_MASK,

View File

@@ -637,9 +637,9 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params, S32 channel)
} }
//static //static
void LLDrawPoolBump::beginBump() void LLDrawPoolBump::beginBump(U32 pass)
{ {
if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP)) if (!gPipeline.hasRenderBatches(pass))
{ {
return; return;
} }
@@ -682,9 +682,9 @@ void LLDrawPoolBump::beginBump()
} }
//static //static
void LLDrawPoolBump::renderBump() void LLDrawPoolBump::renderBump(U32 pass)
{ {
if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP)) if (!gPipeline.hasRenderBatches(pass))
{ {
return; return;
} }
@@ -697,13 +697,13 @@ void LLDrawPoolBump::renderBump()
/// Get rid of z-fighting with non-bump pass. /// Get rid of z-fighting with non-bump pass.
LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL); LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(-1.0f, -1.0f); glPolygonOffset(-1.0f, -1.0f);
renderBump(LLRenderPass::PASS_BUMP, sVertexMask); renderBump(pass, sVertexMask);
} }
//static //static
void LLDrawPoolBump::endBump() void LLDrawPoolBump::endBump(U32 pass)
{ {
if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP)) if (!gPipeline.hasRenderBatches(pass))
{ {
return; return;
} }
@@ -720,6 +720,12 @@ void LLDrawPoolBump::endBump()
gGL.setSceneBlendType(LLRender::BT_ALPHA); gGL.setSceneBlendType(LLRender::BT_ALPHA);
} }
S32 LLDrawPoolBump::getNumDeferredPasses()
{
static const LLCachedControl<bool> render_object_bump("RenderObjectBump",false);
return render_object_bump ? 1 : 0;
}
void LLDrawPoolBump::beginDeferredPass(S32 pass) void LLDrawPoolBump::beginDeferredPass(S32 pass)
{ {
if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP)) if (!gPipeline.hasRenderBatches(LLRenderPass::PASS_BUMP))
@@ -774,17 +780,41 @@ void LLDrawPoolBump::renderDeferred(S32 pass)
void LLDrawPoolBump::beginPostDeferredPass(S32 pass) void LLDrawPoolBump::beginPostDeferredPass(S32 pass)
{ {
beginFullbrightShiny(); switch (pass)
{
case 0:
beginFullbrightShiny();
break;
case 1:
beginBump(LLRenderPass::PASS_POST_BUMP);
break;
}
} }
void LLDrawPoolBump::endPostDeferredPass(S32 pass) void LLDrawPoolBump::endPostDeferredPass(S32 pass)
{ {
endFullbrightShiny(); switch (pass)
{
case 0:
endFullbrightShiny();
break;
case 1:
endBump(LLRenderPass::PASS_POST_BUMP);
break;
}
} }
void LLDrawPoolBump::renderPostDeferred(S32 pass) void LLDrawPoolBump::renderPostDeferred(S32 pass)
{ {
renderFullbrightShiny(); switch (pass)
{
case 0:
renderFullbrightShiny();
break;
case 1:
renderBump(LLRenderPass::PASS_POST_BUMP);
break;
}
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////

View File

@@ -75,16 +75,16 @@ public:
void renderFullbrightShiny(); void renderFullbrightShiny();
void endFullbrightShiny(); void endFullbrightShiny();
void beginBump(); void beginBump(U32 pass = LLRenderPass::PASS_BUMP);
void renderBump(); void renderBump(U32 pass = LLRenderPass::PASS_BUMP);
void endBump(); void endBump(U32 pass = LLRenderPass::PASS_BUMP);
virtual S32 getNumDeferredPasses() { return 1; } virtual S32 getNumDeferredPasses();
/*virtual*/ void beginDeferredPass(S32 pass); /*virtual*/ void beginDeferredPass(S32 pass);
/*virtual*/ void endDeferredPass(S32 pass); /*virtual*/ void endDeferredPass(S32 pass);
/*virtual*/ void renderDeferred(S32 pass); /*virtual*/ void renderDeferred(S32 pass);
virtual S32 getNumPostDeferredPasses() { return 1; } virtual S32 getNumPostDeferredPasses() { return 2; }
/*virtual*/ void beginPostDeferredPass(S32 pass); /*virtual*/ void beginPostDeferredPass(S32 pass);
/*virtual*/ void endPostDeferredPass(S32 pass); /*virtual*/ void endPostDeferredPass(S32 pass);
/*virtual*/ void renderPostDeferred(S32 pass); /*virtual*/ void renderPostDeferred(S32 pass);

View File

@@ -2224,7 +2224,8 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
model_mat = &(drawable->getRegion()->mRenderMatrix); model_mat = &(drawable->getRegion()->mRenderMatrix);
} }
U8 bump = (type == LLRenderPass::PASS_BUMP ? facep->getTextureEntry()->getBumpmap() : 0);
U8 bump = (type == LLRenderPass::PASS_BUMP || type == LLRenderPass::PASS_POST_BUMP) ? facep->getTextureEntry()->getBumpmap() : 0;
LLViewerTexture* tex = facep->getTexture(); LLViewerTexture* tex = facep->getTexture();
@@ -2801,13 +2802,17 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
} }
else if (LLPipeline::sRenderDeferred) else if (LLPipeline::sRenderDeferred)
{ //deferred rendering { //deferred rendering
if (te->getBumpmap()) if (te->getFullbright())
{ //register in deferred bump pass
registerFace(group, facep, LLRenderPass::PASS_BUMP);
}
else if (te->getFullbright())
{ //register in post deferred fullbright shiny pass { //register in post deferred fullbright shiny pass
registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_SHINY); registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_SHINY);
if (te->getBumpmap())
{ //register in post deferred bump pass
registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
}
}
else if (te->getBumpmap())
{ //register in deferred bump pass
registerFace(group, facep, LLRenderPass::PASS_BUMP);
} }
else else
{ //register in deferred simple pass (deferred simple includes shiny) { //register in deferred simple pass (deferred simple includes shiny)
@@ -2833,6 +2838,10 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
else if (fullbright) else if (fullbright)
{ //fullbright { //fullbright
registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT); registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap())
{ //if this is the deferred render and a bump map is present, register in post deferred bump
registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
}
} }
else else
{ {

View File

@@ -6169,6 +6169,7 @@ void LLPipeline::renderDeferredLighting()
LLPipeline::RENDER_TYPE_PASS_ALPHA, LLPipeline::RENDER_TYPE_PASS_ALPHA,
LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK, LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK,
LLPipeline::RENDER_TYPE_PASS_BUMP, LLPipeline::RENDER_TYPE_PASS_BUMP,
LLPipeline::RENDER_TYPE_PASS_POST_BUMP,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT, LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK, LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY, LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,

View File

@@ -345,6 +345,7 @@ public:
RENDER_TYPE_PASS_FULLBRIGHT_SHINY = LLRenderPass::PASS_FULLBRIGHT_SHINY, RENDER_TYPE_PASS_FULLBRIGHT_SHINY = LLRenderPass::PASS_FULLBRIGHT_SHINY,
RENDER_TYPE_PASS_SHINY = LLRenderPass::PASS_SHINY, RENDER_TYPE_PASS_SHINY = LLRenderPass::PASS_SHINY,
RENDER_TYPE_PASS_BUMP = LLRenderPass::PASS_BUMP, RENDER_TYPE_PASS_BUMP = LLRenderPass::PASS_BUMP,
RENDER_TYPE_PASS_POST_BUMP = LLRenderPass::PASS_POST_BUMP,
RENDER_TYPE_PASS_GLOW = LLRenderPass::PASS_GLOW, RENDER_TYPE_PASS_GLOW = LLRenderPass::PASS_GLOW,
RENDER_TYPE_PASS_ALPHA = LLRenderPass::PASS_ALPHA, RENDER_TYPE_PASS_ALPHA = LLRenderPass::PASS_ALPHA,
RENDER_TYPE_PASS_ALPHA_MASK = LLRenderPass::PASS_ALPHA_MASK, RENDER_TYPE_PASS_ALPHA_MASK = LLRenderPass::PASS_ALPHA_MASK,