From b07ab02f54f908648e808552a0ea3d19c66da4f1 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sat, 30 Mar 2013 01:26:07 -0500 Subject: [PATCH] Added blendfunc checks when RenderDebugGL is TRUE. --- indra/llrender/llrender.cpp | 13 +++++++++++++ indra/llui/llview.cpp | 5 +++++ indra/newview/llviewerdisplay.cpp | 3 +++ indra/newview/llviewerwindow.cpp | 5 +++++ indra/newview/pipeline.cpp | 4 +++- 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index b35b2dd51..88cb7209c 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -1023,6 +1023,7 @@ void LLLightState::setSpotDirection(const LLVector3& direction) } } +LLRender::eBlendFactor blendfunc_debug[4]={LLRender::BF_UNDEF}; LLRender::LLRender() : mDirty(false), mCount(0), @@ -1683,6 +1684,14 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value) } } +void check_blend_funcs() +{ + llassert_always(blendfunc_debug[0] == LLRender::BF_SOURCE_ALPHA ); + llassert_always(blendfunc_debug[1] == LLRender::BF_SOURCE_ALPHA ); + llassert_always(blendfunc_debug[2] == LLRender::BF_ONE_MINUS_SOURCE_ALPHA ); + llassert_always(blendfunc_debug[3] == LLRender::BF_ONE_MINUS_SOURCE_ALPHA ); +} + void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor) { llassert(sfactor < BF_UNDEF); @@ -1694,6 +1703,8 @@ void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor) mCurrBlendAlphaSFactor = sfactor; mCurrBlendColorDFactor = dfactor; mCurrBlendAlphaDFactor = dfactor; + blendfunc_debug[0]=blendfunc_debug[1]=sfactor; + blendfunc_debug[2]=blendfunc_debug[3]=dfactor; flush(); glBlendFunc(sGLBlendFactor[sfactor], sGLBlendFactor[dfactor]); } @@ -1719,6 +1730,8 @@ void LLRender::blendFunc(eBlendFactor color_sfactor, eBlendFactor color_dfactor, mCurrBlendAlphaSFactor = alpha_sfactor; mCurrBlendColorDFactor = color_dfactor; mCurrBlendAlphaDFactor = alpha_dfactor; + blendfunc_debug[0]=blendfunc_debug[2]=color_sfactor; + blendfunc_debug[1]=blendfunc_debug[3]=alpha_sfactor; flush(); glBlendFuncSeparateEXT(sGLBlendFactor[color_sfactor], sGLBlendFactor[color_dfactor], sGLBlendFactor[alpha_sfactor], sGLBlendFactor[alpha_dfactor]); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index e3edbcc6f..3674d0f04 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1152,6 +1152,7 @@ void LLView::draw() drawChildren(); } +extern void check_blend_funcs(); void LLView::drawChildren() { @@ -1186,7 +1187,9 @@ void LLView::drawChildren() LLUI::translate((F32)viewp->getRect().mLeft, (F32)viewp->getRect().mBottom, 0.f); // flag the fact we are in draw here, in case overridden draw() method attempts to remove this widget viewp->mInDraw = true; + if(gDebugGL)check_blend_funcs(); viewp->draw(); + if(gDebugGL)check_blend_funcs(); viewp->mInDraw = false; if (sDebugRects) @@ -1293,7 +1296,9 @@ void LLView::drawChild(LLView* childp, S32 x_offset, S32 y_offset, BOOL force_dr LLUI::pushMatrix(); { LLUI::translate((F32)childp->getRect().mLeft + x_offset, (F32)childp->getRect().mBottom + y_offset, 0.f); + if(gDebugGL)check_blend_funcs(); childp->draw(); + if(gDebugGL)check_blend_funcs(); } LLUI::popMatrix(); } diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 232c4d8fa..811db8a36 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1516,6 +1516,7 @@ void render_ui_3d() stop_glerror(); } +extern void check_blend_funcs(); void render_ui_2d() { LLGLSUIDefault gls_ui; @@ -1561,7 +1562,9 @@ void render_ui_2d() gGL.popMatrix(); stop_glerror(); } + if(gDebugGL)check_blend_funcs(); gViewerWindow->draw(); + if(gDebugGL)check_blend_funcs(); // reset current origin for font rendering, in case of tiling render LLFontGL::sCurOrigin.set(0, 0); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index ab6f13752..5750d4839 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2334,6 +2334,7 @@ void LLViewerWindow::drawDebugText() } } +extern void check_blend_funcs(); void LLViewerWindow::draw() { @@ -2411,7 +2412,9 @@ void LLViewerWindow::draw() // Draw all nested UI views. // No translation needed, this view is glued to 0,0 + if(gDebugGL)check_blend_funcs(); mRootView->draw(); + if(gDebugGL)check_blend_funcs(); // Draw optional on-top-of-everyone view LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl(); @@ -2423,7 +2426,9 @@ void LLViewerWindow::draw() gGL.matrixMode(LLRender::MM_MODELVIEW); LLUI::pushMatrix(); LLUI::translate( (F32) screen_x, (F32) screen_y, 0.f); + if(gDebugGL)check_blend_funcs(); top_ctrl->draw(); + if(gDebugGL)check_blend_funcs(); LLUI::popMatrix(); } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c79b20a19..044765ba0 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3743,6 +3743,7 @@ void LLPipeline::renderHighlights() //debug use U32 LLPipeline::sCurRenderPoolType = 0 ; +extern void check_blend_funcs(); void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) { LLFastTimer t(FTM_RENDER_GEOMETRY); @@ -3879,6 +3880,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) for( S32 i = 0; i < poolp->getNumPasses(); i++ ) { LLVertexBuffer::unbind(); + if(gDebugGL)check_blend_funcs(); poolp->beginRenderPass(i); for (iter2 = iter1; iter2 != mPools.end(); iter2++) { @@ -3887,10 +3889,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) { break; } - p->render(i); } poolp->endRenderPass(i); + if(gDebugGL)check_blend_funcs(); LLVertexBuffer::unbind(); if (gDebugGL) {