summaryrefslogtreecommitdiff
path: root/indra/newview/lltoolmorph.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lltoolmorph.cpp')
-rw-r--r--indra/newview/lltoolmorph.cpp341
1 files changed, 174 insertions, 167 deletions
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index d99c0ba2a6..fa55c8ed9a 100644
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @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$
*/
@@ -27,7 +27,7 @@
#include "llviewerprecompiledheaders.h"
// File includes
-#include "lltoolmorph.h"
+#include "lltoolmorph.h"
#include "llrender.h"
// Library includes
@@ -70,32 +70,32 @@ BOOL LLVisualParamReset::sDirty = FALSE;
// 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)
+ 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");
+ LLVisualParamHint::sInstances.insert( this );
+ mBackgroundp = LLUI::getUIImage("avatar_thumb_bkgrnd.png");
- llassert(width != 0);
- llassert(height != 0);
+ llassert(width != 0);
+ llassert(height != 0);
}
//-----------------------------------------------------------------------------
@@ -103,13 +103,13 @@ LLVisualParamHint::LLVisualParamHint(
//-----------------------------------------------------------------------------
LLVisualParamHint::~LLVisualParamHint()
{
- LLVisualParamHint::sInstances.erase( this );
+ LLVisualParamHint::sInstances.erase( this );
}
//virtual
S8 LLVisualParamHint::getType() const
{
- return LLViewerDynamicTexture::LL_VISUAL_PARAM_HINT ;
+ return LLViewerDynamicTexture::LL_VISUAL_PARAM_HINT ;
}
//-----------------------------------------------------------------------------
@@ -119,61 +119,61 @@ S8 LLVisualParamHint::getType() const
//-----------------------------------------------------------------------------
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;
- }
- }
- }
+ 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;
+ 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);
+ 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);
}
//-----------------------------------------------------------------------------
@@ -181,63 +181,70 @@ void LLVisualParamHint::preRender(BOOL clear_depth)
//-----------------------------------------------------------------------------
BOOL LLVisualParamHint::render()
{
- LLVisualParamReset::sDirty = TRUE;
+ LLVisualParamReset::sDirty = TRUE;
- gGL.pushUIMatrix();
- gGL.loadUIIdentity();
+ 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_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();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.pushMatrix();
+ gGL.loadIdentity();
- gUIProgram.bind();
+ gUIProgram.bind();
- LLGLSUIDefault gls_ui;
- //LLGLState::verify(TRUE);
- mBackgroundp->draw(0, 0, mFullWidth, mFullHeight);
+ LLGLSUIDefault gls_ui;
+ //LLGLState::verify(TRUE);
+ mBackgroundp->draw(0, 0, mFullWidth, mFullHeight);
- gGL.matrixMode(LLRender::MM_PROJECTION);
- gGL.popMatrix();
+ gGL.matrixMode(LLRender::MM_PROJECTION);
+ gGL.popMatrix();
- gGL.matrixMode(LLRender::MM_MODELVIEW);
- gGL.popMatrix();
+ gGL.matrixMode(LLRender::MM_MODELVIEW);
+ gGL.popMatrix();
- mNeedsUpdate = FALSE;
- mIsVisible = TRUE;
+ mNeedsUpdate = FALSE;
+ mIsVisible = TRUE;
- LLQuaternion avatar_rotation;
- LLJoint* root_joint = gAgentAvatarp->getRootJoint();
- if( root_joint )
- {
- avatar_rotation = root_joint->getWorldRotation();
- }
+ LLQuaternion avatar_rotation;
+ LLJoint* root_joint = gAgentAvatarp->getRootJoint();
+ if( root_joint )
+ {
+ avatar_rotation = root_joint->getWorldRotation();
+ }
- LLVector3 target_joint_pos = mCamTargetJoint->getWorldPosition();
+ LLVector3 target_joint_pos = mCamTargetJoint->getWorldPosition();
- LLVector3 target_offset( 0, 0, mVisualParam->getCameraElevation() );
- LLVector3 target_pos = target_joint_pos + (target_offset * avatar_rotation);
+ 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
+ F32 cam_angle_radians = mVisualParam->getCameraAngle() * DEG_TO_RAD;
- LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, FALSE);
+ 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())
{
@@ -249,20 +256,20 @@ BOOL LLVisualParamHint::render()
gGL.flush();
}
- gAgentAvatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
- mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);
- LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr;
- if (wearable)
- {
- wearable->setVolatile(FALSE);
- }
+ 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();
+ gAgentAvatarp->updateVisualParams();
+ gGL.color4f(1,1,1,1);
+ mGLTexturep->setGLTextureCreated(true);
+ gGL.popUIMatrix();
- return TRUE;
+ return TRUE;
}
@@ -271,40 +278,40 @@ BOOL LLVisualParamHint::render()
//-----------------------------------------------------------------------------
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);
+ 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 ;
+ return LLViewerDynamicTexture::LL_VISUAL_PARAM_RESET ;
}
//-----------------------------------------------------------------------------
@@ -312,13 +319,13 @@ S8 LLVisualParamReset::getType() const
//-----------------------------------------------------------------------------
BOOL LLVisualParamReset::render()
{
- if (sDirty)
- {
- gAgentAvatarp->updateComposites();
- gAgentAvatarp->updateVisualParams();
- gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
- sDirty = FALSE;
- }
-
- return FALSE;
+ if (sDirty)
+ {
+ gAgentAvatarp->updateComposites();
+ gAgentAvatarp->updateVisualParams();
+ gAgentAvatarp->updateGeometry(gAgentAvatarp->mDrawable);
+ sDirty = FALSE;
+ }
+
+ return FALSE;
}