diff options
author | Steven Bennetts <steve@lindenlab.com> | 2008-06-06 22:43:38 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2008-06-06 22:43:38 +0000 |
commit | ad332810078a0bbb8fa08fcbfdf3d756de6914f6 (patch) | |
tree | 1608b2db5d620d323673607ea7ddadfba9d58bda /indra/newview/lldrawpoolbump.cpp | |
parent | a7d9a543e587ffe84b355db7a2e8193bfe6c68b6 (diff) |
QAR-650 - Viewer RC 9 merge -> release (post cmake)
merge release@88802 Branch_1-20-Viewer-2-merge-1@89178 -> release
Diffstat (limited to 'indra/newview/lldrawpoolbump.cpp')
-rw-r--r-- | indra/newview/lldrawpoolbump.cpp | 121 |
1 files changed, 57 insertions, 64 deletions
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 3f52021711..1dfaf6569e 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -41,7 +41,7 @@ #include "m4math.h" #include "v4math.h" #include "llglheaders.h" -#include "llglimmediate.h" +#include "llrender.h" #include "llagent.h" #include "llcubemap.h" @@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible) cube_map->setMatrix(0); cube_map->bind(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - - //use RGB from texture - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - // use alpha from color - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA); } } } @@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible) } shader->unbind(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); } - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + if (cube_channel >= 0) + { + gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT); + } } LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); diffuse_channel = -1; cube_channel = 0; @@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny() { shader->disableTexture(LLShaderMgr::DIFFUSE_MAP); } - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glEnable(GL_TEXTURE_2D); shader->unbind(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); } LLImageGL::unbindTexture(0, GL_TEXTURE_2D); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); diffuse_channel = -1; cube_channel = 0; @@ -614,6 +607,10 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params) if( tex ) { bump = gBumpImageList.getBrightnessDarknessImage( tex, bump_code ); + //------------------------------------------ + //error check to make sure bump is valid + llassert_always(!bump || bump->getNumRefs() == 1) ; + //------------------------------------------ } break; @@ -628,6 +625,11 @@ BOOL LLDrawPoolBump::bindBumpMap(LLDrawInfo& params) if (bump) { + //------------------------------------------ + //error check to make sure bump is valid + llassert_always(bump->getNumRefs() > 0 && bump->getNumRefs() < 100000) ; + //------------------------------------------ + bump->bind(1); bump->bind(0); return TRUE; @@ -650,37 +652,18 @@ void LLDrawPoolBump::beginBump() // TEXTURE UNIT 0 // Output.rgb = texture at texture coord 0 - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA); - - // Don't care about alpha output - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); + gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // TEXTURE UNIT 1 - glActiveTextureARB(GL_TEXTURE1_ARB); - + gGL.getTexUnit(1)->activate(); + glEnable(GL_TEXTURE_2D); // Texture unit 1 - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); - - // Don't care about alpha output - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); - glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); + gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA); + gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA); // src = tex0 + (1 - tex1) - 0.5 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 @@ -692,9 +675,8 @@ void LLDrawPoolBump::beginBump() // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] // = (1 + bump0 - bump1) * dst.rgb // = dst.rgb + dst.rgb * (bump0 - bump1) - gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR); -// gGL.blendFunc(GL_ONE, GL_ZERO); // temp - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.setSceneBlendType(LLRender::BT_MULT_X2); + gGL.getTexUnit(0)->activate(); stop_glerror(); LLViewerImage::unbindTexture(1, GL_TEXTURE_2D); @@ -728,15 +710,15 @@ void LLDrawPoolBump::endBump() } // Disable texture unit 1 - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glDisable(GL_TEXTURE_2D); // Texture unit 1 - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT); // Disable texture unit 0 - glActiveTextureARB(GL_TEXTURE0_ARB); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + gGL.getTexUnit(0)->activate(); + gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT); - gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } //////////////////////////////////////////////////////////////// @@ -890,9 +872,15 @@ LLImageGL* LLBumpImageList::getBrightnessDarknessImage(LLViewerImage* src_image, { LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,1); raw->clear(0x77, 0x77, 0x77, 0xFF); + + //------------------------------ bump = new LLImageGL( raw, TRUE); - bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); + //immediately assign bump to a global smart pointer in case some local smart pointer + //accidently releases it. (*entries_list)[src_image->getID()] = bump; + //------------------------------ + + bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); // Note: this may create an LLImageGL immediately src_image->setLoadedCallback( callback_func, 0, TRUE, new LLUUID(src_image->getID()) ); @@ -1047,10 +1035,15 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerImage *src_vi, LLIma } } + //--------------------------------------------------- LLImageGL* bump = new LLImageGL( TRUE); - bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); - bump->createGLTexture(0, dst_image); + //immediately assign bump to a global smart pointer in case some local smart pointer + //accidently releases it. iter->second = bump; // derefs (and deletes) old image + //--------------------------------------------------- + + bump->setExplicitFormat(GL_ALPHA8, GL_ALPHA); + bump->createGLTexture(0, dst_image); } else { @@ -1101,16 +1094,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (mShiny) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); glMatrixMode(GL_TEXTURE); } else { - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glMatrixMode(GL_TEXTURE); glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); gPipeline.mTextureMatrixOps++; - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); @@ -1153,13 +1146,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture) { if (mShiny) { - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } else { - glActiveTextureARB(GL_TEXTURE1_ARB); + gGL.getTexUnit(1)->activate(); glLoadIdentity(); - glActiveTextureARB(GL_TEXTURE0_ARB); + gGL.getTexUnit(0)->activate(); } glLoadIdentity(); glMatrixMode(GL_MODELVIEW); @@ -1172,9 +1165,9 @@ void LLDrawPoolInvisible::render(S32 pass) U32 invisi_mask = LLVertexBuffer::MAP_VERTEX; glStencilMask(0); - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + gGL.setColorMask(false, false); pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE); - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); + gGL.setColorMask(true, false); glStencilMask(0xFFFFFFFF); if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) |