diff options
author | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
---|---|---|
committer | Ansariel <ansariel.hiller@phoenixviewer.com> | 2024-05-22 19:04:52 +0200 |
commit | 1b67dd855c41f5a0cda7ec2a68d98071986ca703 (patch) | |
tree | ab243607f74f78200787bba5b9b88f07ef1b966f /indra/newview/lltoolmorph.cpp | |
parent | 6d6eabca44d08d5b97bfe3e941d2b9687c2246ea (diff) | |
parent | e1623bb276f83a43ce7a197e388720c05bdefe61 (diff) |
Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A
# Conflicts:
# autobuild.xml
# indra/cmake/CMakeLists.txt
# indra/cmake/GoogleMock.cmake
# indra/llaudio/llaudioengine_fmodstudio.cpp
# indra/llaudio/llaudioengine_fmodstudio.h
# indra/llaudio/lllistener_fmodstudio.cpp
# indra/llaudio/lllistener_fmodstudio.h
# indra/llaudio/llstreamingaudio_fmodstudio.cpp
# indra/llaudio/llstreamingaudio_fmodstudio.h
# indra/llcharacter/llmultigesture.cpp
# indra/llcharacter/llmultigesture.h
# indra/llimage/llimage.cpp
# indra/llimage/llimagepng.cpp
# indra/llimage/llimageworker.cpp
# indra/llimage/tests/llimageworker_test.cpp
# indra/llmessage/tests/llmockhttpclient.h
# indra/llprimitive/llgltfmaterial.h
# indra/llrender/llfontfreetype.cpp
# indra/llui/llcombobox.cpp
# indra/llui/llfolderview.cpp
# indra/llui/llfolderviewmodel.h
# indra/llui/lllineeditor.cpp
# indra/llui/lllineeditor.h
# indra/llui/lltextbase.cpp
# indra/llui/lltextbase.h
# indra/llui/lltexteditor.cpp
# indra/llui/lltextvalidate.cpp
# indra/llui/lltextvalidate.h
# indra/llui/lluictrl.h
# indra/llui/llview.cpp
# indra/llwindow/llwindowmacosx.cpp
# indra/newview/app_settings/settings.xml
# indra/newview/llappearancemgr.cpp
# indra/newview/llappearancemgr.h
# indra/newview/llavatarpropertiesprocessor.cpp
# indra/newview/llavatarpropertiesprocessor.h
# indra/newview/llbreadcrumbview.cpp
# indra/newview/llbreadcrumbview.h
# indra/newview/llbreastmotion.cpp
# indra/newview/llbreastmotion.h
# indra/newview/llconversationmodel.h
# indra/newview/lldensityctrl.cpp
# indra/newview/lldensityctrl.h
# indra/newview/llface.inl
# indra/newview/llfloatereditsky.cpp
# indra/newview/llfloatereditwater.cpp
# indra/newview/llfloateremojipicker.h
# indra/newview/llfloaterimsessiontab.cpp
# indra/newview/llfloaterprofiletexture.cpp
# indra/newview/llfloaterprofiletexture.h
# indra/newview/llgesturemgr.cpp
# indra/newview/llgesturemgr.h
# indra/newview/llimpanel.cpp
# indra/newview/llimpanel.h
# indra/newview/llinventorybridge.cpp
# indra/newview/llinventorybridge.h
# indra/newview/llinventoryclipboard.cpp
# indra/newview/llinventoryclipboard.h
# indra/newview/llinventoryfunctions.cpp
# indra/newview/llinventoryfunctions.h
# indra/newview/llinventorygallery.cpp
# indra/newview/lllistbrowser.cpp
# indra/newview/lllistbrowser.h
# indra/newview/llpanelobjectinventory.cpp
# indra/newview/llpanelprofile.cpp
# indra/newview/llpanelprofile.h
# indra/newview/llpreviewgesture.cpp
# indra/newview/llsavedsettingsglue.cpp
# indra/newview/llsavedsettingsglue.h
# indra/newview/lltooldraganddrop.cpp
# indra/newview/llurllineeditorctrl.cpp
# indra/newview/llvectorperfoptions.cpp
# indra/newview/llvectorperfoptions.h
# indra/newview/llviewerparceloverlay.cpp
# indra/newview/llviewertexlayer.cpp
# indra/newview/llviewertexturelist.cpp
# indra/newview/macmain.h
# indra/test/test.cpp
Diffstat (limited to 'indra/newview/lltoolmorph.cpp')
-rw-r--r-- | indra/newview/lltoolmorph.cpp | 655 |
1 files changed, 331 insertions, 324 deletions
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index 35b2076ede..f76566e50a 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -1,324 +1,331 @@ -/** - * @file lltoolmorph.cpp - * @brief A tool to manipulate faces.. - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 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" - -// File includes -#include "lltoolmorph.h" -#include "llrender.h" - -// Library includes -#include "llaudioengine.h" -#include "llviewercontrol.h" -#include "llfontgl.h" -#include "llwearable.h" -#include "sound_ids.h" -#include "v3math.h" -#include "v3color.h" - -// Viewer includes -#include "llagent.h" -#include "lldrawable.h" -#include "lldrawpoolavatar.h" -#include "llface.h" -#include "llmorphview.h" -#include "llresmgr.h" -#include "llselectmgr.h" -#include "llsky.h" -#include "lltexlayer.h" -#include "lltoolmgr.h" -#include "llui.h" -#include "llviewercamera.h" -#include "llviewertexturelist.h" -#include "llviewerobject.h" -#include "llviewerwearable.h" -#include "llviewerwindow.h" -#include "llvoavatarself.h" -#include "pipeline.h" - - -//static -LLVisualParamHint::instance_list_t LLVisualParamHint::sInstances; -bool LLVisualParamReset::sDirty = false; - -//----------------------------------------------------------------------------- -// LLVisualParamHint() -//----------------------------------------------------------------------------- - -// static -LLVisualParamHint::LLVisualParamHint( - S32 pos_x, S32 pos_y, - S32 width, S32 height, - LLViewerJointMesh *mesh, - LLViewerVisualParam *param, - LLWearable *wearable, - F32 param_weight, - LLJoint* jointp) - : - LLViewerDynamicTexture(width, height, 3, LLViewerDynamicTexture::ORDER_MIDDLE, true ), - mNeedsUpdate( true ), - mIsVisible( false ), - mJointMesh( mesh ), - mVisualParam( param ), - mWearablePtr( wearable ), - mVisualParamWeight( param_weight ), - mAllowsUpdates( true ), - mDelayFrames( 0 ), - mRect( pos_x, pos_y + height, pos_x + width, pos_y ), - mLastParamWeight(0.f), - mCamTargetJoint(jointp) -{ - LLVisualParamHint::sInstances.insert( this ); - mBackgroundp = LLUI::getUIImage("avatar_thumb_bkgrnd.png"); - - llassert(width != 0); - llassert(height != 0); -} - -//----------------------------------------------------------------------------- -// ~LLVisualParamHint() -//----------------------------------------------------------------------------- -LLVisualParamHint::~LLVisualParamHint() -{ - LLVisualParamHint::sInstances.erase( this ); -} - -//virtual -S8 LLVisualParamHint::getType() const -{ - return LLViewerDynamicTexture::LL_VISUAL_PARAM_HINT ; -} - -//----------------------------------------------------------------------------- -// static -// requestHintUpdates() -// Requests updates for all instances (excluding two possible exceptions) Grungy but efficient. -//----------------------------------------------------------------------------- -void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVisualParamHint* exception2 ) -{ - S32 delay_frames = 0; - for (instance_list_t::iterator iter = sInstances.begin(); - iter != sInstances.end(); ++iter) - { - LLVisualParamHint* instance = *iter; - if( (instance != exception1) && (instance != exception2) ) - { - if( instance->mAllowsUpdates ) - { - instance->mNeedsUpdate = true; - instance->mDelayFrames = delay_frames; - delay_frames++; - } - else - { - instance->mNeedsUpdate = true; - instance->mDelayFrames = 0; - } - } - } -} - -bool LLVisualParamHint::needsRender() -{ - return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->getIsAppearanceAnimating() && mAllowsUpdates; -} - -void LLVisualParamHint::preRender(bool clear_depth) -{ - LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr; - if (wearable) - { - wearable->setVolatile(true); - } - mLastParamWeight = mVisualParam->getWeight(); - mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight); - gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight); - gAgentAvatarp->setVisualParamWeight("Blink_Left", 0.f); - gAgentAvatarp->setVisualParamWeight("Blink_Right", 0.f); - gAgentAvatarp->updateComposites(); - // Calling LLCharacter version, as we don't want position/height changes to cause the avatar to jump - // up and down when we're doing preview renders. -Nyx - gAgentAvatarp->LLCharacter::updateVisualParams(); - - if (gAgentAvatarp->mDrawable.notNull()) - { - gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable); - gAgentAvatarp->updateLOD(); - } - else - { - LL_WARNS() << "Attempting to update avatar's geometry, but drawable doesn't exist yet" << LL_ENDL; - } - - LLViewerDynamicTexture::preRender(clear_depth); -} - -//----------------------------------------------------------------------------- -// render() -//----------------------------------------------------------------------------- -bool LLVisualParamHint::render() -{ - LLVisualParamReset::sDirty = true; - - gGL.pushUIMatrix(); - gGL.loadUIIdentity(); - - gGL.matrixMode(LLRender::MM_PROJECTION); - gGL.pushMatrix(); - gGL.loadIdentity(); - gGL.ortho(0.0f, mFullWidth, 0.0f, mFullHeight, -1.0f, 1.0f); - - gGL.matrixMode(LLRender::MM_MODELVIEW); - gGL.pushMatrix(); - gGL.loadIdentity(); - - gUIProgram.bind(); - - LLGLSUIDefault gls_ui; - //LLGLState::verify(true); - mBackgroundp->draw(0, 0, mFullWidth, mFullHeight); - - gGL.matrixMode(LLRender::MM_PROJECTION); - gGL.popMatrix(); - - gGL.matrixMode(LLRender::MM_MODELVIEW); - gGL.popMatrix(); - - mNeedsUpdate = false; - mIsVisible = true; - - LLQuaternion avatar_rotation; - LLJoint* root_joint = gAgentAvatarp->getRootJoint(); - if( root_joint ) - { - avatar_rotation = root_joint->getWorldRotation(); - } - - LLVector3 target_joint_pos = mCamTargetJoint->getWorldPosition(); - - LLVector3 target_offset( 0, 0, mVisualParam->getCameraElevation() ); - LLVector3 target_pos = target_joint_pos + (target_offset * avatar_rotation); - - F32 cam_angle_radians = mVisualParam->getCameraAngle() * DEG_TO_RAD; - LLVector3 camera_snapshot_offset( - mVisualParam->getCameraDistance() * cosf( cam_angle_radians ), - mVisualParam->getCameraDistance() * sinf( cam_angle_radians ), - mVisualParam->getCameraElevation() ); - LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation); - - gGL.flush(); - - LLViewerCamera::getInstance()->setAspect((F32)mFullWidth / (F32)mFullHeight); - LLViewerCamera::getInstance()->setOriginAndLookAt( - camera_pos, // camera - LLVector3::z_axis, // up - target_pos ); // point of interest - - LLViewerCamera::getInstance()->setPerspective(false, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, false); - - if (gAgentAvatarp->mDrawable.notNull()) - { - LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE); - gGL.flush(); - gGL.setSceneBlendType(LLRender::BT_REPLACE); - gPipeline.generateImpostor(gAgentAvatarp, true); - gGL.setSceneBlendType(LLRender::BT_ALPHA); - gGL.flush(); - } - - gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); - mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); - LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr; - if (wearable) - { - wearable->setVolatile(false); - } - - gAgentAvatarp->updateVisualParams(); - gGL.color4f(1,1,1,1); - mGLTexturep->setGLTextureCreated(true); - gGL.popUIMatrix(); - - return true; -} - - -//----------------------------------------------------------------------------- -// draw() -//----------------------------------------------------------------------------- -void LLVisualParamHint::draw(F32 alpha) -{ - if (!mIsVisible) return; - - gGL.getTexUnit(0)->bind(this); - - gGL.color4f(1.f, 1.f, 1.f, alpha); - - LLGLSUIDefault gls_ui; - gGL.begin(LLRender::QUADS); - { - gGL.texCoord2i(0, 1); - gGL.vertex2i(0, mFullHeight); - gGL.texCoord2i(0, 0); - gGL.vertex2i(0, 0); - gGL.texCoord2i(1, 0); - gGL.vertex2i(mFullWidth, 0); - gGL.texCoord2i(1, 1); - gGL.vertex2i(mFullWidth, mFullHeight); - } - gGL.end(); - - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -} - -//----------------------------------------------------------------------------- -// LLVisualParamReset() -//----------------------------------------------------------------------------- -LLVisualParamReset::LLVisualParamReset() : LLViewerDynamicTexture(1, 1, 1, ORDER_RESET, false) -{ -} - -//virtual -S8 LLVisualParamReset::getType() const -{ - return LLViewerDynamicTexture::LL_VISUAL_PARAM_RESET ; -} - -//----------------------------------------------------------------------------- -// render() -//----------------------------------------------------------------------------- -bool LLVisualParamReset::render() -{ - if (sDirty) - { - gAgentAvatarp->updateComposites(); - gAgentAvatarp->updateVisualParams(); - gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable); - sDirty = false; - } - - return false; -} +/**
+ * @file lltoolmorph.cpp
+ * @brief A tool to manipulate faces..
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 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"
+
+// File includes
+#include "lltoolmorph.h"
+#include "llrender.h"
+
+// Library includes
+#include "llaudioengine.h"
+#include "llviewercontrol.h"
+#include "llfontgl.h"
+#include "llwearable.h"
+#include "sound_ids.h"
+#include "v3math.h"
+#include "v3color.h"
+
+// Viewer includes
+#include "llagent.h"
+#include "lldrawable.h"
+#include "lldrawpoolavatar.h"
+#include "llface.h"
+#include "llmorphview.h"
+#include "llresmgr.h"
+#include "llselectmgr.h"
+#include "llsky.h"
+#include "lltexlayer.h"
+#include "lltoolmgr.h"
+#include "llui.h"
+#include "llviewercamera.h"
+#include "llviewertexturelist.h"
+#include "llviewerobject.h"
+#include "llviewerwearable.h"
+#include "llviewerwindow.h"
+#include "llvoavatarself.h"
+#include "pipeline.h"
+
+
+//static
+LLVisualParamHint::instance_list_t LLVisualParamHint::sInstances;
+bool LLVisualParamReset::sDirty = false;
+
+//-----------------------------------------------------------------------------
+// LLVisualParamHint()
+//-----------------------------------------------------------------------------
+
+// static
+LLVisualParamHint::LLVisualParamHint(
+ S32 pos_x, S32 pos_y,
+ S32 width, S32 height,
+ LLViewerJointMesh *mesh,
+ LLViewerVisualParam *param,
+ LLWearable *wearable,
+ F32 param_weight,
+ LLJoint* jointp)
+ :
+ LLViewerDynamicTexture(width, height, 3, LLViewerDynamicTexture::ORDER_MIDDLE, true ),
+ mNeedsUpdate( true ),
+ mIsVisible( false ),
+ mJointMesh( mesh ),
+ mVisualParam( param ),
+ mWearablePtr( wearable ),
+ mVisualParamWeight( param_weight ),
+ mAllowsUpdates( true ),
+ mDelayFrames( 0 ),
+ mRect( pos_x, pos_y + height, pos_x + width, pos_y ),
+ mLastParamWeight(0.f),
+ mCamTargetJoint(jointp)
+{
+ LLVisualParamHint::sInstances.insert( this );
+ mBackgroundp = LLUI::getUIImage("avatar_thumb_bkgrnd.png");
+
+ llassert(width != 0);
+ llassert(height != 0);
+}
+
+//-----------------------------------------------------------------------------
+// ~LLVisualParamHint()
+//-----------------------------------------------------------------------------
+LLVisualParamHint::~LLVisualParamHint()
+{
+ LLVisualParamHint::sInstances.erase( this );
+}
+
+//virtual
+S8 LLVisualParamHint::getType() const
+{
+ return LLViewerDynamicTexture::LL_VISUAL_PARAM_HINT ;
+}
+
+//-----------------------------------------------------------------------------
+// static
+// requestHintUpdates()
+// Requests updates for all instances (excluding two possible exceptions) Grungy but efficient.
+//-----------------------------------------------------------------------------
+void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVisualParamHint* exception2 )
+{
+ S32 delay_frames = 0;
+ for (instance_list_t::iterator iter = sInstances.begin();
+ iter != sInstances.end(); ++iter)
+ {
+ LLVisualParamHint* instance = *iter;
+ if( (instance != exception1) && (instance != exception2) )
+ {
+ if( instance->mAllowsUpdates )
+ {
+ instance->mNeedsUpdate = true;
+ instance->mDelayFrames = delay_frames;
+ delay_frames++;
+ }
+ else
+ {
+ instance->mNeedsUpdate = true;
+ instance->mDelayFrames = 0;
+ }
+ }
+ }
+}
+
+bool LLVisualParamHint::needsRender()
+{
+ return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatarp->getIsAppearanceAnimating() && mAllowsUpdates;
+}
+
+void LLVisualParamHint::preRender(bool clear_depth)
+{
+ LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr;
+ if (wearable)
+ {
+ wearable->setVolatile(true);
+ }
+ mLastParamWeight = mVisualParam->getWeight();
+ mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight);
+ gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight);
+ gAgentAvatarp->setVisualParamWeight("Blink_Left", 0.f);
+ gAgentAvatarp->setVisualParamWeight("Blink_Right", 0.f);
+ gAgentAvatarp->updateComposites();
+ // Calling LLCharacter version, as we don't want position/height changes to cause the avatar to jump
+ // up and down when we're doing preview renders. -Nyx
+ gAgentAvatarp->LLCharacter::updateVisualParams();
+
+ if (gAgentAvatarp->mDrawable.notNull())
+ {
+ gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
+ gAgentAvatarp->updateLOD();
+ }
+ else
+ {
+ LL_WARNS() << "Attempting to update avatar's geometry, but drawable doesn't exist yet" << LL_ENDL;
+ }
+
+ LLViewerDynamicTexture::preRender(clear_depth);
+}
+
+//-----------------------------------------------------------------------------
+// render()
+//-----------------------------------------------------------------------------
+bool LLVisualParamHint::render()
+{
+ LLVisualParamReset::sDirty = true;
+
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
+
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+ gGL.ortho(0.0f, mFullWidth, 0.0f, mFullHeight, -1.0f, 1.0f);
+
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
+
+ gUIProgram.bind();
+
+ LLGLSUIDefault gls_ui;
+ //LLGLState::verify(true);
+ mBackgroundp->draw(0, 0, mFullWidth, mFullHeight);
+
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.popMatrix();
+
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.popMatrix();
+
+ mNeedsUpdate = false;
+ mIsVisible = true;
+
+ LLQuaternion avatar_rotation;
+ LLJoint* root_joint = gAgentAvatarp->getRootJoint();
+ if( root_joint )
+ {
+ avatar_rotation = root_joint->getWorldRotation();
+ }
+
+ LLVector3 target_joint_pos = mCamTargetJoint->getWorldPosition();
+
+ LLVector3 target_offset( 0, 0, mVisualParam->getCameraElevation() );
+ LLVector3 target_pos = target_joint_pos + (target_offset * avatar_rotation);
+
+ F32 cam_angle_radians = mVisualParam->getCameraAngle() * DEG_TO_RAD;
+
+ static LLCachedControl<bool> auto_camera_position(gSavedSettings, "AppearanceCameraMovement");
+ if (!auto_camera_position)
+ {
+ cam_angle_radians += F_PI;
+ }
+
+ LLVector3 camera_snapshot_offset(
+ mVisualParam->getCameraDistance() * cosf( cam_angle_radians ),
+ mVisualParam->getCameraDistance() * sinf( cam_angle_radians ),
+ mVisualParam->getCameraElevation() );
+ LLVector3 camera_pos = target_joint_pos + (camera_snapshot_offset * avatar_rotation);
+
+ gGL.flush();
+
+ LLViewerCamera::getInstance()->setAspect((F32)mFullWidth / (F32)mFullHeight);
+ LLViewerCamera::getInstance()->setOriginAndLookAt(
+ camera_pos, // camera
+ LLVector3::z_axis, // up
+ target_pos ); // point of interest
+
+ LLViewerCamera::getInstance()->setPerspective(false, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, false);
+
+ if (gAgentAvatarp->mDrawable.notNull())
+ {
+ LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);
+ gGL.flush();
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
+ gPipeline.generateImpostor(gAgentAvatarp, true);
+ gGL.setSceneBlendType(LLRender::BT_ALPHA);
+ gGL.flush();
+ }
+
+ gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
+ mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
+ LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr;
+ if (wearable)
+ {
+ wearable->setVolatile(false);
+ }
+
+ gAgentAvatarp->updateVisualParams();
+ gGL.color4f(1,1,1,1);
+ mGLTexturep->setGLTextureCreated(true);
+ gGL.popUIMatrix();
+
+ return true;
+}
+
+
+//-----------------------------------------------------------------------------
+// draw()
+//-----------------------------------------------------------------------------
+void LLVisualParamHint::draw(F32 alpha)
+{
+ if (!mIsVisible) return;
+
+ gGL.getTexUnit(0)->bind(this);
+
+ gGL.color4f(1.f, 1.f, 1.f, alpha);
+
+ LLGLSUIDefault gls_ui;
+ gGL.begin(LLRender::QUADS);
+ {
+ gGL.texCoord2i(0, 1);
+ gGL.vertex2i(0, mFullHeight);
+ gGL.texCoord2i(0, 0);
+ gGL.vertex2i(0, 0);
+ gGL.texCoord2i(1, 0);
+ gGL.vertex2i(mFullWidth, 0);
+ gGL.texCoord2i(1, 1);
+ gGL.vertex2i(mFullWidth, mFullHeight);
+ }
+ gGL.end();
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+}
+
+//-----------------------------------------------------------------------------
+// LLVisualParamReset()
+//-----------------------------------------------------------------------------
+LLVisualParamReset::LLVisualParamReset() : LLViewerDynamicTexture(1, 1, 1, ORDER_RESET, false)
+{
+}
+
+//virtual
+S8 LLVisualParamReset::getType() const
+{
+ return LLViewerDynamicTexture::LL_VISUAL_PARAM_RESET ;
+}
+
+//-----------------------------------------------------------------------------
+// render()
+//-----------------------------------------------------------------------------
+bool LLVisualParamReset::render()
+{
+ if (sDirty)
+ {
+ gAgentAvatarp->updateComposites();
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
+ sDirty = false;
+ }
+
+ return false;
+}
|