diff options
Diffstat (limited to 'indra/newview/llhudobject.cpp')
| -rw-r--r-- | indra/newview/llhudobject.cpp | 662 | 
1 files changed, 331 insertions, 331 deletions
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp index 7fe313e3b0..e914caa601 100644 --- a/indra/newview/llhudobject.cpp +++ b/indra/newview/llhudobject.cpp @@ -1,331 +1,331 @@ -/**  - * @file llhudobject.cpp - * @brief LLHUDObject class implementation - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2002-2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llhudobject.h" -#include "llviewerobject.h" - -#include "llhudtext.h" -#include "llhudicon.h" -#include "llhudeffectbeam.h" -#include "llhudeffectblob.h" -#include "llhudeffecttrail.h" -#include "llhudeffectlookat.h" -#include "llhudeffectpointat.h" -#include "llhudnametag.h" -#include "llvoicevisualizer.h" - -#include "llagent.h" - -// statics -std::list<LLPointer<LLHUDObject> > LLHUDObject::sHUDObjects; - -struct hud_object_further_away -{ -	bool operator()(const LLPointer<LLHUDObject>& lhs, const LLPointer<LLHUDObject>& rhs) const; -}; - - -bool hud_object_further_away::operator()(const LLPointer<LLHUDObject>& lhs, const LLPointer<LLHUDObject>& rhs) const -{ -	return lhs->getDistance() > rhs->getDistance(); -} - - -LLHUDObject::LLHUDObject(const U8 type) : -	mPositionGlobal(), -	mSourceObject(NULL), -	mTargetObject(NULL) -{ -	mVisible = true; -	mType = type; -	mDead = false; -} - -LLHUDObject::~LLHUDObject() -{ -} - -void LLHUDObject::markDead() -{ -	mVisible = false; -	mDead = true; -	mSourceObject = NULL; -	mTargetObject = NULL; -} - -F32 LLHUDObject::getDistance() const -{ -	return 0.f; -} - -void LLHUDObject::setSourceObject(LLViewerObject* objectp) -{ -	if (objectp == mSourceObject) -	{ -		return; -	} - -	mSourceObject = objectp; -} - -void LLHUDObject::setTargetObject(LLViewerObject* objectp) -{ -	if (objectp == mTargetObject) -	{ -		return; -	} - -	mTargetObject = objectp; -} - -void LLHUDObject::setPositionGlobal(const LLVector3d &position_global) -{ -	mPositionGlobal = position_global; -} - -void LLHUDObject::setPositionAgent(const LLVector3 &position_agent) -{ -	mPositionGlobal = gAgent.getPosGlobalFromAgent(position_agent); -} - -// static -void LLHUDObject::cleanupHUDObjects() -{ -	LLHUDIcon::cleanupDeadIcons(); -	hud_object_list_t::iterator object_it; -	for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); ++object_it) -	{ -		(*object_it)->markDead(); -		if ((*object_it)->getNumRefs() > 1) -		{ -			LL_INFOS() << "LLHUDObject " << (LLHUDObject *)(*object_it) << " type " << (S32)(*object_it)->getType() << " has " << (*object_it)->getNumRefs() << " refs!" << LL_ENDL;			 -		} -	} -	sHUDObjects.clear(); -} - -// static -LLHUDObject *LLHUDObject::addHUDObject(const U8 type) -{ -	LLHUDObject *hud_objectp = NULL; -	 -	switch (type) -	{ -	case LL_HUD_TEXT: -		hud_objectp = new LLHUDText(type); -		break; -	case LL_HUD_ICON: -		hud_objectp = new LLHUDIcon(type); -		break; -	case LL_HUD_NAME_TAG: -		hud_objectp = new LLHUDNameTag(type); -		break; -	default: -		LL_WARNS() << "Unknown type of hud object:" << (U32) type << LL_ENDL; -	} -	if (hud_objectp) -	{ -		sHUDObjects.push_back(hud_objectp); -	} -	return hud_objectp; -} - -LLHUDEffect *LLHUDObject::addHUDEffect(const U8 type) -{ -	LLHUDEffect *hud_objectp = NULL; -	 -	switch (type) -	{ -	case LL_HUD_EFFECT_BEAM: -		hud_objectp = new LLHUDEffectSpiral(type); -		((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.7f); -		((LLHUDEffectSpiral *)hud_objectp)->setVMag(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.2f); -		((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.05f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.02f); -		((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); -		break; -	case LL_HUD_EFFECT_GLOW: -		// deprecated -		break; -	case LL_HUD_EFFECT_POINT: -		hud_objectp = new LLHUDEffectSpiral(type); -		((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setVMag(1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); -		break; -	case LL_HUD_EFFECT_SPHERE: -		hud_objectp = new LLHUDEffectSpiral(type); -		((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setVMag(1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(20.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); -		break; -	case LL_HUD_EFFECT_SPIRAL: -		hud_objectp = new LLHUDEffectSpiral(type); -		((LLHUDEffectSpiral *)hud_objectp)->setDuration(2.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVMag(-2.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(20.f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.02f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.02f); -		((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); -		break; -	case LL_HUD_EFFECT_EDIT: -		hud_objectp = new LLHUDEffectSpiral(type); -		((LLHUDEffectSpiral *)hud_objectp)->setDuration(2.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVMag(2.f); -		((LLHUDEffectSpiral *)hud_objectp)->setVOffset(-1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(1.5f); -		((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(1.f); -		((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(4.f); -		((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(200.f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f); -		((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255)); -		break; -	case LL_HUD_EFFECT_LOOKAT: -		hud_objectp = new LLHUDEffectLookAt(type); -		break; -	case LL_HUD_EFFECT_VOICE_VISUALIZER: -		hud_objectp = new LLVoiceVisualizer(type); -		break; -	case LL_HUD_EFFECT_POINTAT: -		hud_objectp = new LLHUDEffectPointAt(type); -		break; -	case LL_HUD_EFFECT_BLOB: -		hud_objectp = new LLHUDEffectBlob(type); -		break; -	default: -		LL_WARNS() << "Unknown type of hud effect:" << (U32) type << LL_ENDL; -	} - -	if (hud_objectp) -	{ -		sHUDObjects.push_back(hud_objectp); -	} -	return hud_objectp; -} - -static LLTrace::BlockTimerStatHandle FTM_HUD_UPDATE("Update Hud"); - -// static -void LLHUDObject::updateAll() -{ -	LL_RECORD_BLOCK_TIME(FTM_HUD_UPDATE); -	LLHUDText::updateAll(); -	LLHUDIcon::updateAll(); -	LLHUDNameTag::updateAll(); -	sortObjects(); -} - -// static -void LLHUDObject::renderAll() -{ -    LLGLSUIDefault gls_ui; - -    gUIProgram.bind(); -    gGL.color4f(1, 1, 1, 1); - -    LLGLDepthTest depth(GL_FALSE, GL_FALSE); - -	LLHUDObject *hud_objp; -	 -	hud_object_list_t::iterator object_it; -	for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); ) -	{ -		hud_object_list_t::iterator cur_it = object_it++; -		hud_objp = (*cur_it); -		if (hud_objp->getNumRefs() == 1) -		{ -			sHUDObjects.erase(cur_it); -		} -		else if (hud_objp->isVisible()) -		{ -			hud_objp->render(); -		} -	} - -	LLVertexBuffer::unbind(); -    gUIProgram.unbind(); -} - -// static -void LLHUDObject::renderAllForTimer() -{ -	LLHUDObject *hud_objp; -	 -	hud_object_list_t::iterator object_it; -	for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); ) -	{ -		hud_object_list_t::iterator cur_it = object_it++; -		hud_objp = (*cur_it); -		if (hud_objp->getNumRefs() == 1) -		{ -			sHUDObjects.erase(cur_it); -		} -		else if (hud_objp->isVisible()) -		{ -			hud_objp->renderForTimer(); -		} -	} -} - -// static -void LLHUDObject::reshapeAll() -{ -	// only hud objects that use fonts care about window size/scale changes -	LLHUDText::reshape(); -	LLHUDNameTag::reshape(); -} - -// static -void LLHUDObject::sortObjects() -{ -	sHUDObjects.sort(hud_object_further_away());	 -} +/**
 + * @file llhudobject.cpp
 + * @brief LLHUDObject class implementation
 + *
 + * $LicenseInfo:firstyear=2002&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2002-2010, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "llviewerprecompiledheaders.h"
 +
 +#include "llhudobject.h"
 +#include "llviewerobject.h"
 +
 +#include "llhudtext.h"
 +#include "llhudicon.h"
 +#include "llhudeffectbeam.h"
 +#include "llhudeffectblob.h"
 +#include "llhudeffecttrail.h"
 +#include "llhudeffectlookat.h"
 +#include "llhudeffectpointat.h"
 +#include "llhudnametag.h"
 +#include "llvoicevisualizer.h"
 +
 +#include "llagent.h"
 +
 +// statics
 +std::list<LLPointer<LLHUDObject> > LLHUDObject::sHUDObjects;
 +
 +struct hud_object_further_away
 +{
 +    bool operator()(const LLPointer<LLHUDObject>& lhs, const LLPointer<LLHUDObject>& rhs) const;
 +};
 +
 +
 +bool hud_object_further_away::operator()(const LLPointer<LLHUDObject>& lhs, const LLPointer<LLHUDObject>& rhs) const
 +{
 +    return lhs->getDistance() > rhs->getDistance();
 +}
 +
 +
 +LLHUDObject::LLHUDObject(const U8 type) :
 +    mPositionGlobal(),
 +    mSourceObject(NULL),
 +    mTargetObject(NULL)
 +{
 +    mVisible = true;
 +    mType = type;
 +    mDead = false;
 +}
 +
 +LLHUDObject::~LLHUDObject()
 +{
 +}
 +
 +void LLHUDObject::markDead()
 +{
 +    mVisible = false;
 +    mDead = true;
 +    mSourceObject = NULL;
 +    mTargetObject = NULL;
 +}
 +
 +F32 LLHUDObject::getDistance() const
 +{
 +    return 0.f;
 +}
 +
 +void LLHUDObject::setSourceObject(LLViewerObject* objectp)
 +{
 +    if (objectp == mSourceObject)
 +    {
 +        return;
 +    }
 +
 +    mSourceObject = objectp;
 +}
 +
 +void LLHUDObject::setTargetObject(LLViewerObject* objectp)
 +{
 +    if (objectp == mTargetObject)
 +    {
 +        return;
 +    }
 +
 +    mTargetObject = objectp;
 +}
 +
 +void LLHUDObject::setPositionGlobal(const LLVector3d &position_global)
 +{
 +    mPositionGlobal = position_global;
 +}
 +
 +void LLHUDObject::setPositionAgent(const LLVector3 &position_agent)
 +{
 +    mPositionGlobal = gAgent.getPosGlobalFromAgent(position_agent);
 +}
 +
 +// static
 +void LLHUDObject::cleanupHUDObjects()
 +{
 +    LLHUDIcon::cleanupDeadIcons();
 +    hud_object_list_t::iterator object_it;
 +    for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); ++object_it)
 +    {
 +        (*object_it)->markDead();
 +        if ((*object_it)->getNumRefs() > 1)
 +        {
 +            LL_INFOS() << "LLHUDObject " << (LLHUDObject *)(*object_it) << " type " << (S32)(*object_it)->getType() << " has " << (*object_it)->getNumRefs() << " refs!" << LL_ENDL;
 +        }
 +    }
 +    sHUDObjects.clear();
 +}
 +
 +// static
 +LLHUDObject *LLHUDObject::addHUDObject(const U8 type)
 +{
 +    LLHUDObject *hud_objectp = NULL;
 +
 +    switch (type)
 +    {
 +    case LL_HUD_TEXT:
 +        hud_objectp = new LLHUDText(type);
 +        break;
 +    case LL_HUD_ICON:
 +        hud_objectp = new LLHUDIcon(type);
 +        break;
 +    case LL_HUD_NAME_TAG:
 +        hud_objectp = new LLHUDNameTag(type);
 +        break;
 +    default:
 +        LL_WARNS() << "Unknown type of hud object:" << (U32) type << LL_ENDL;
 +    }
 +    if (hud_objectp)
 +    {
 +        sHUDObjects.push_back(hud_objectp);
 +    }
 +    return hud_objectp;
 +}
 +
 +LLHUDEffect *LLHUDObject::addHUDEffect(const U8 type)
 +{
 +    LLHUDEffect *hud_objectp = NULL;
 +
 +    switch (type)
 +    {
 +    case LL_HUD_EFFECT_BEAM:
 +        hud_objectp = new LLHUDEffectSpiral(type);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.7f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVMag(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.2f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.05f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.02f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255));
 +        break;
 +    case LL_HUD_EFFECT_GLOW:
 +        // deprecated
 +        break;
 +    case LL_HUD_EFFECT_POINT:
 +        hud_objectp = new LLHUDEffectSpiral(type);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVMag(1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255));
 +        break;
 +    case LL_HUD_EFFECT_SPHERE:
 +        hud_objectp = new LLHUDEffectSpiral(type);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setDuration(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVMag(1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(20.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(0.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255));
 +        break;
 +    case LL_HUD_EFFECT_SPIRAL:
 +        hud_objectp = new LLHUDEffectSpiral(type);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setDuration(2.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVMag(-2.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVOffset(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(0.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(10.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(20.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.02f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.02f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255));
 +        break;
 +    case LL_HUD_EFFECT_EDIT:
 +        hud_objectp = new LLHUDEffectSpiral(type);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setDuration(2.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVMag(2.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setVOffset(-1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setInitialRadius(1.5f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFinalRadius(1.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setSpinRate(4.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setFlickerRate(200.f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleBase(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setScaleVar(0.1f);
 +        ((LLHUDEffectSpiral *)hud_objectp)->setColor(LLColor4U(255, 255, 255, 255));
 +        break;
 +    case LL_HUD_EFFECT_LOOKAT:
 +        hud_objectp = new LLHUDEffectLookAt(type);
 +        break;
 +    case LL_HUD_EFFECT_VOICE_VISUALIZER:
 +        hud_objectp = new LLVoiceVisualizer(type);
 +        break;
 +    case LL_HUD_EFFECT_POINTAT:
 +        hud_objectp = new LLHUDEffectPointAt(type);
 +        break;
 +    case LL_HUD_EFFECT_BLOB:
 +        hud_objectp = new LLHUDEffectBlob(type);
 +        break;
 +    default:
 +        LL_WARNS() << "Unknown type of hud effect:" << (U32) type << LL_ENDL;
 +    }
 +
 +    if (hud_objectp)
 +    {
 +        sHUDObjects.push_back(hud_objectp);
 +    }
 +    return hud_objectp;
 +}
 +
 +static LLTrace::BlockTimerStatHandle FTM_HUD_UPDATE("Update Hud");
 +
 +// static
 +void LLHUDObject::updateAll()
 +{
 +    LL_RECORD_BLOCK_TIME(FTM_HUD_UPDATE);
 +    LLHUDText::updateAll();
 +    LLHUDIcon::updateAll();
 +    LLHUDNameTag::updateAll();
 +    sortObjects();
 +}
 +
 +// static
 +void LLHUDObject::renderAll()
 +{
 +    LLGLSUIDefault gls_ui;
 +
 +    gUIProgram.bind();
 +    gGL.color4f(1, 1, 1, 1);
 +
 +    LLGLDepthTest depth(GL_FALSE, GL_FALSE);
 +
 +    LLHUDObject *hud_objp;
 +
 +    hud_object_list_t::iterator object_it;
 +    for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
 +    {
 +        hud_object_list_t::iterator cur_it = object_it++;
 +        hud_objp = (*cur_it);
 +        if (hud_objp->getNumRefs() == 1)
 +        {
 +            sHUDObjects.erase(cur_it);
 +        }
 +        else if (hud_objp->isVisible())
 +        {
 +            hud_objp->render();
 +        }
 +    }
 +
 +    LLVertexBuffer::unbind();
 +    gUIProgram.unbind();
 +}
 +
 +// static
 +void LLHUDObject::renderAllForTimer()
 +{
 +    LLHUDObject *hud_objp;
 +
 +    hud_object_list_t::iterator object_it;
 +    for (object_it = sHUDObjects.begin(); object_it != sHUDObjects.end(); )
 +    {
 +        hud_object_list_t::iterator cur_it = object_it++;
 +        hud_objp = (*cur_it);
 +        if (hud_objp->getNumRefs() == 1)
 +        {
 +            sHUDObjects.erase(cur_it);
 +        }
 +        else if (hud_objp->isVisible())
 +        {
 +            hud_objp->renderForTimer();
 +        }
 +    }
 +}
 +
 +// static
 +void LLHUDObject::reshapeAll()
 +{
 +    // only hud objects that use fonts care about window size/scale changes
 +    LLHUDText::reshape();
 +    LLHUDNameTag::reshape();
 +}
 +
 +// static
 +void LLHUDObject::sortObjects()
 +{
 +    sHUDObjects.sort(hud_object_further_away());
 +}
  | 
