LLTexLayer now using shaders if applicable. Also added misc tidbits missed earlier.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<bool> 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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user