diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp index e2eb92e89..a06361d99 100644 --- a/indra/newview/llhudeffectlookat.cpp +++ b/indra/newview/llhudeffectlookat.cpp @@ -339,15 +339,15 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) htonmemcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16); + LLVOAvatar *avatarp = gObjectList.findAvatar(source_id); + if (avatarp) { - LLVOAvatar *avatarp = gObjectList.findAvatar(source_id); - if (avatarp) - setSourceObject(avatarp); - else - { - //llwarns << "Could not find source avatar for lookat effect" << llendl; - return; - } + setSourceObject(avatarp); + } + else + { + //llwarns << "Could not find source avatar for lookat effect" << llendl; + return; } htonmemcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16); diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp index 7bfbcd683..59a9596bc 100644 --- a/indra/newview/llhudeffectpointat.cpp +++ b/indra/newview/llhudeffectpointat.cpp @@ -161,6 +161,7 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) LLHUDEffect::unpackData(mesgsys, blocknum); LLUUID source_id; LLUUID target_id; + U8 pointAtTypeUnpacked = 0; S32 size = mesgsys->getSizeFast(_PREHASH_Effect, blocknum, _PREHASH_TypeData); if (size != PKT_SIZE) { @@ -170,23 +171,22 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum); htonmemcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16); + htonmemcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16); + htonmemcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24); + htonmemcpy(&pointAtTypeUnpacked, &(packed_data[POINTAT_TYPE]), MVT_U8, 1); + LLVOAvatar *avatarp = gObjectList.findAvatar(source_id); + if (avatarp) { - LLVOAvatar *avatarp = gObjectList.findAvatar(source_id); - if (avatarp) - setSourceObject(avatarp); - else - { - //llwarns << "Could not find source avatar for pointat effect" << llendl; - return; - } + setSourceObject(avatarp); + } + else + { + //llwarns << "Could not find source avatar for pointat effect" << llendl; + return; } - htonmemcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16); - - LLViewerObject* objp = gObjectList.findObject(target_id); - - htonmemcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24); + LLViewerObject *objp = gObjectList.findObject(target_id); if (objp) { @@ -197,8 +197,6 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum) setTargetPosGlobal(new_target); } - U8 pointAtTypeUnpacked = 0; - htonmemcpy(&pointAtTypeUnpacked, &(packed_data[POINTAT_TYPE]), MVT_U8, 1); mTargetType = (EPointAtType)pointAtTypeUnpacked; // mKillTime = mTimer.getElapsedTimeF32() + mDuration; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 7b58c3810..795d1433f 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -58,6 +58,7 @@ #include "v4coloru.h" #include "llrender.h" #include "llassetuploadresponders.h" +#include "llviewershadermgr.h" //#include "../tools/imdebug/imdebug.h" @@ -265,20 +266,22 @@ BOOL LLTexLayerSetBuffer::render() // When do we upload the texture if gAgent.mNumPendingQueries is non-zero? BOOL upload_now = needsUploadNow(); BOOL success = TRUE; + + bool use_shaders = LLGLSLShader::sNoFixedFunction; - //hack to use fixed function when updating tex layer sets - bool no_ff = LLGLSLShader::sNoFixedFunction; - static const LLCachedControl force_fixed_functions("ShyotlUseLegacyTextureBaking",true); - if(force_fixed_functions) - LLGLSLShader::sNoFixedFunction = false; + if (use_shaders) + { + gAlphaMaskProgram.bind(); + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } + + LLVertexBuffer::unbind(); // Composite the color data LLGLSUIDefault gls_ui; success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight ); gGL.flush(); - LLGLSLShader::sNoFixedFunction = no_ff; - if( upload_now ) { if (!success) @@ -305,7 +308,13 @@ BOOL LLTexLayerSetBuffer::render() } } } + if (use_shaders) + { + gAlphaMaskProgram.unbind(); + } + LLVertexBuffer::unbind(); + // reset GL state gGL.setColorMask(true, true); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -722,6 +731,7 @@ BOOL LLTexLayerSet::isLocalTextureDataFinal() void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, bool forceClear) { const LLTexLayerSetInfo *info = getInfo(); + bool use_shaders = LLGLSLShader::sNoFixedFunction; gGL.setColorMask(false, true); gGL.setSceneBlendType(LLRender::BT_REPLACE); @@ -729,7 +739,6 @@ void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, // (Optionally) replace alpha with a single component image from a tga file. if (!info->mStaticAlphaFileName.empty()) { - LLGLSNoAlphaTest gls_no_alpha_test; gGL.flush(); { LLViewerTexture* tex = gTexStaticImageList.getTexture(info->mStaticAlphaFileName, TRUE); @@ -748,14 +757,22 @@ void LLTexLayerSet::renderAlphaMaskTextures(S32 x, S32 y, S32 width, S32 height, // Set the alpha channel to one (clean up after previous blending) gGL.flush(); LLGLDisable no_alpha(GL_ALPHA_TEST); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.color4f( 0.f, 0.f, 0.f, 1.f ); - + gl_rect_2d_simple( width, height ); - + gGL.flush(); - } - + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } + } + // (Optional) Mask out part of the baked texture with alpha masks // will still have an effect even if mClearAlpha is set or the alpha component was replaced if (mMaskLayerList.size() > 0) @@ -795,6 +812,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) } } + bool use_shaders = LLGLSLShader::sNoFixedFunction; LLGLSUIDefault gls_ui; LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE); gGL.setColorMask(true, true); @@ -803,12 +821,20 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) { gGL.flush(); LLGLDisable no_alpha(GL_ALPHA_TEST); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.0f); + } gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.color4f( 0.f, 0.f, 0.f, 1.f ); gl_rect_2d_simple( width, height ); gGL.flush(); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } } if (mIsVisible) @@ -835,6 +861,11 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) gGL.setSceneBlendType(LLRender::BT_REPLACE); LLGLDisable no_alpha(GL_ALPHA_TEST); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); gGL.color4f( 0.f, 0.f, 0.f, 0.f ); @@ -842,8 +873,11 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height ) gGL.setSceneBlendType(LLRender::BT_ALPHA); gGL.flush(); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } } - return success; } @@ -1334,6 +1368,8 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) LLGLEnable color_mat(GL_COLOR_MATERIAL); gPipeline.disableLights(); + bool use_shaders = LLGLSLShader::sNoFixedFunction; + LLColor4 net_color; BOOL color_specified = findNetColor(&net_color); @@ -1411,8 +1447,13 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) } if( tex ) { - LLGLDisable alpha_test(getInfo()->mWriteAllChannels ? GL_ALPHA_TEST : 0); - + bool no_alpha_test = getInfo()->mWriteAllChannels; + LLGLDisable alpha_test(no_alpha_test ? GL_ALPHA_TEST : 0); + if (use_shaders && no_alpha_test) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } + LLTexUnit::eTextureAddressMode old_mode = tex->getAddressMode(); gGL.getTexUnit(0)->bind(tex, TRUE); @@ -1422,6 +1463,11 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height ) gGL.getTexUnit(0)->setTextureAddressMode(old_mode); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + if (use_shaders && no_alpha_test) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } + } } } @@ -1482,15 +1528,24 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) gGL.flush(); + bool use_shaders = LLGLSLShader::sNoFixedFunction; if (!getInfo()->mStaticImageFileName.empty()) { LLViewerTexture* tex = gTexStaticImageList.getTexture(getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask); if (tex) { LLGLSNoAlphaTest gls_no_alpha_test; + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } gGL.getTexUnit(0)->bind(tex, TRUE); - gl_rect_2d_simple_tex(width, height); + gl_rect_2d_simple_tex( width, height ); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } } else { @@ -1507,10 +1562,18 @@ BOOL LLTexLayer::blendAlphaTexture(S32 x, S32 y, S32 width, S32 height) if (tex) { LLGLSNoAlphaTest gls_no_alpha_test; + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } gGL.getTexUnit(0)->bind(tex); - gl_rect_2d_simple_tex(width, height); + gl_rect_2d_simple_tex( width, height ); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); success = TRUE; + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } } } } @@ -1613,6 +1676,12 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 llassert( !mParamAlphaList.empty() ); + bool use_shaders = LLGLSLShader::sNoFixedFunction; + + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.f); + } gGL.setColorMask(false, true); alpha_list_t::iterator iter = mParamAlphaList.begin(); @@ -1697,6 +1766,10 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4 gl_rect_2d_simple( width, height ); } + if (use_shaders) + { + gAlphaMaskProgram.setMinimumAlpha(0.004f); + } LLGLSUIDefault gls_ui; diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index f82291dd2..0a799788f 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -356,6 +356,10 @@ void LLWorldMapView::draw() gGL.flush(); LLFontGL* font = LLFontGL::getFontSansSerifSmall(); + + gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); + gGL.setColorMask(true, true); + // Draw the region name in the lower left corner for (LLWorldMap::sim_info_map_t::const_iterator it = LLWorldMap::getInstance()->getRegionMap().begin(); it != LLWorldMap::getInstance()->getRegionMap().end(); ++it) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 232606706..93b7953d1 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -6574,6 +6574,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield, b } + gGL.setSceneBlendType(LLRender::BT_ALPHA); if (LLRenderTarget::sUseFBO) { //copy depth buffer from mScreen to framebuffer LLRenderTarget::copyContentsToFramebuffer(mScreen, 0, 0, mScreen.getWidth(), mScreen.getHeight(),