automated merge mesh-development -> mesh-development

meow-7.2.2
Loren Shih 2011-05-19 12:53:18 -04:00
commit 1c65b8fa44
10 changed files with 131 additions and 110 deletions

View File

@ -111,3 +111,6 @@ d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
11d5d8080e67c3955914caf98f2eb116af30e55a 2.6.9-start
e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start

View File

@ -991,6 +991,9 @@ void LLModel::normalizeVolumeFaces()
scale.splat(1.f);
scale.div(size);
LLVector4a inv_scale(1.f);
inv_scale.div(scale);
for (U32 i = 0; i < mVolumeFaces.size(); ++i)
{
LLVolumeFace& face = mVolumeFaces[i];
@ -1007,10 +1010,14 @@ void LLModel::normalizeVolumeFaces()
// For all the positions, we scale
// the positions to fit within the unit cube.
LLVector4a* pos = (LLVector4a*) face.mPositions;
LLVector4a* norm = (LLVector4a*) face.mNormals;
for (U32 j = 0; j < face.mNumVertices; ++j)
{
pos[j].add(trans);
pos[j].mul(scale);
norm[j].mul(inv_scale);
norm[j].normalize3();
}
}

View File

@ -3982,17 +3982,6 @@
<key>Value</key>
<string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
</map>
<key>SearchURLBeta</key>
<map>
<key>Comment</key>
<string>URL for Search website, displayed in the Find floater</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://beta.search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
</map>
<key>WebProfileURL</key>
<map>
<key>Comment</key>

View File

@ -394,7 +394,9 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
LLVector3 object_extents;
const LLVector4a* oe4 = object->mDrawable->getSpatialExtents();
object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] );
LLVector4a size;
size.setSub(oe4[1], oe4[0]);
object_extents.set( size[0], size[1], size[2] );
// make sure they object extents are non-zero
object_extents.clamp(0.001f, F32_MAX);

View File

@ -131,7 +131,7 @@ void LLFirstUse::notMoving(bool enable)
// static
void LLFirstUse::viewPopup(bool enable)
{
firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right"));
// firstUseNotification("FirstViewPopup", enable, "HintView", LLSD(), LLSD().with("target", "view_popup").with("direction", "right"));
}
// static

View File

@ -98,7 +98,8 @@
#include "llvfile.h"
#include "llvfs.h"
#include "llcallbacklist.h"
#include "llviewerobjectlist.h"
#include "llanimationstates.h"
#include "glod/glod.h"
//static
@ -381,12 +382,6 @@ LLFloaterModelPreview::~LLFloaterModelPreview()
{
sInstance = NULL;
if ( mModelPreview && mModelPreview->getResetJointFlag() )
{
gAgentAvatarp->resetJointPositions();
}
if ( mModelPreview )
{
delete mModelPreview;
@ -1577,7 +1572,7 @@ bool LLModelLoader::doLoadModel()
{
//llinfos<<"joint "<<lookingForJoint.c_str()<<llendl;
LLMatrix4 jointTransform = mJointList[lookingForJoint];
LLJoint* pJoint = gAgentAvatarp->getJoint( lookingForJoint );
LLJoint* pJoint = mPreview->getPreviewAvatar()->getJoint( lookingForJoint );
if ( pJoint )
{
pJoint->storeCurrentXform( jointTransform.getTranslation() );
@ -2657,6 +2652,8 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
mMasterLegacyJointList.push_front("mHipLeft");
mMasterLegacyJointList.push_front("mKneeLeft");
mMasterLegacyJointList.push_front("mFootLeft");
createPreviewAvatar();
}
LLModelPreview::~LLModelPreview()
@ -2710,7 +2707,7 @@ U32 LLModelPreview::calcResourceCost()
if ( mFMP && mFMP->childGetValue("upload_joints").asBoolean() )
{
gAgentAvatarp->setPelvisOffset( mPelvisZOffset );
getPreviewAvatar()->setPelvisOffset( mPelvisZOffset );
}
F32 streaming_cost = 0.f;
@ -3848,6 +3845,18 @@ void LLModelPreview::updateStatusMessages()
}
}
//make sure no hulls have more than 256 points in them
for (U32 i = 0; upload_ok && i < mModel[LLModel::LOD_PHYSICS].size(); ++i)
{
LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i];
for (U32 j = 0; upload_ok && j < mdl->mPhysics.mHull.size(); ++j)
{
upload_ok = upload_ok && mdl->mPhysics.mHull[i].size() <= 256;
}
}
bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;
bool skinAndRigOk = true;
@ -3871,6 +3880,10 @@ void LLModelPreview::updateStatusMessages()
{
mFMP->childEnable("ok_btn");
}
else
{
mFMP->childDisable("ok_btn");
}
//add up physics triangles etc
S32 start = 0;
@ -4277,42 +4290,6 @@ void LLModelPreview::update()
}
//-----------------------------------------------------------------------------
// changeAvatarsJointPositions()
//-----------------------------------------------------------------------------
void LLModelPreview::changeAvatarsJointPositions( LLModel* pModel )
{
if ( mMasterJointList.empty() )
{
return;
}
std::vector<std::string> :: const_iterator jointListItBegin = pModel->mSkinInfo.mJointNames.begin();
std::vector<std::string> :: const_iterator jointListItEnd = pModel->mSkinInfo.mJointNames.end();
S32 index = 0;
for ( ; jointListItBegin!=jointListItEnd; ++jointListItBegin, ++index )
{
std::string elem = *jointListItBegin;
//llinfos<<"joint "<<elem<<llendl;
S32 matrixCnt = pModel->mSkinInfo.mAlternateBindMatrix.size();
if ( matrixCnt < 1 )
{
llinfos<<"Total WTF moment :"<<matrixCnt<<llendl;
}
else
{
LLMatrix4 jointTransform = pModel->mSkinInfo.mAlternateBindMatrix[index];
LLJoint* pJoint = gAgentAvatarp->getJoint( elem );
if ( pJoint )
{
pJoint->storeCurrentXform( jointTransform.getTranslation() );
}
}
}
}
//-----------------------------------------------------------------------------
// getTranslationForJointOffset()
//-----------------------------------------------------------------------------
LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint )
@ -4325,6 +4302,30 @@ LLVector3 LLModelPreview::getTranslationForJointOffset( std::string joint )
}
return LLVector3(0.0f,0.0f,0.0f);
}
//-----------------------------------------------------------------------------
// createPreviewAvatar
//-----------------------------------------------------------------------------
void LLModelPreview::createPreviewAvatar( void )
{
mPreviewAvatar = (LLVOAvatar*)gObjectList.createObjectViewer( LL_PCODE_LEGACY_AVATAR, gAgent.getRegion() );
if ( mPreviewAvatar )
{
mPreviewAvatar->createDrawable( &gPipeline );
mPreviewAvatar->mIsDummy = TRUE;
mPreviewAvatar->mSpecialRenderMode = 1;
mPreviewAvatar->setPositionAgent( LLVector3::zero );
mPreviewAvatar->slamPosition();
mPreviewAvatar->updateJointLODs();
mPreviewAvatar->updateGeometry( mPreviewAvatar->mDrawable );
mPreviewAvatar->startMotion( ANIM_AGENT_STAND );
mPreviewAvatar->hideSkirt();
}
else
{
llinfos<<"Failed to create preview avatar for upload model window"<<llendl;
}
}
//-----------------------------------------------------------------------------
// render()
//-----------------------------------------------------------------------------
@ -4439,25 +4440,6 @@ BOOL LLModelPreview::render()
mFMP->childSetEnabled("upload_joints", upload_skin);
//poke at avatar when we upload custom joints
/*
if ( upload_joints )
{
for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter)
{
for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter)
{
LLModelInstance& instance = *model_iter;
LLModel* model = instance.mModel;
if ( !model->mSkinWeights.empty() )
{
changeAvatarsJointPositions( model );
}
}
}
}
*/
F32 explode = mFMP->childGetValue("physics_explode").asReal();
glClear(GL_DEPTH_BUFFER_BIT);
@ -4477,7 +4459,7 @@ BOOL LLModelPreview::render()
if (skin_weight)
{
target_pos = gAgentAvatarp->getPositionAgent();
target_pos = getPreviewAvatar()->getPositionAgent();
z_near = 0.01f;
z_far = 1024.f;
mCameraDistance = 16.f;
@ -4697,8 +4679,7 @@ BOOL LLModelPreview::render()
}
else
{
LLVOAvatarSelf* avatar = gAgentAvatarp;
target_pos = avatar->getPositionAgent();
target_pos = getPreviewAvatar()->getPositionAgent();
LLViewerCamera::getInstance()->setOriginAndLookAt(
target_pos + ((LLVector3(mCameraDistance, 0.f, 0.f) + offset) * av_rot), // camera
@ -4707,7 +4688,7 @@ BOOL LLModelPreview::render()
if (joint_positions)
{
avatar->renderCollisionVolumes();
getPreviewAvatar()->renderCollisionVolumes();
}
for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter)
@ -4738,7 +4719,7 @@ BOOL LLModelPreview::render()
LLMatrix4 mat[64];
for (U32 j = 0; j < model->mSkinInfo.mJointNames.size(); ++j)
{
LLJoint* joint = avatar->getJoint(model->mSkinInfo.mJointNames[j]);
LLJoint* joint = getPreviewAvatar()->getJoint(model->mSkinInfo.mJointNames[j]);
if (joint)
{
mat[j] = model->mSkinInfo.mInvBindMatrix[j];

View File

@ -341,6 +341,9 @@ public:
LLVector3 getTranslationForJointOffset( std::string joint );
void createPreviewAvatar( void );
LLVOAvatar* getPreviewAvatar( void ) { return mPreviewAvatar; }
protected:
friend class LLModelLoader;
friend class LLFloaterModelPreview;
@ -422,6 +425,7 @@ public:
std::deque<std::string> mMasterLegacyJointList;
std::deque<std::string> mJointsFromNode;
JointTransformMap mJointTransformMap;
LLPointer<LLVOAvatar> mPreviewAvatar;
};
#endif // LL_LLFLOATERMODELPREVIEW_H

View File

@ -38,7 +38,6 @@
#include "llui.h"
#include "llviewercontrol.h"
#include "llweb.h"
#include "llversioninfo.h"
// support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
class LLSearchHandler : public LLCommandHandler
@ -204,15 +203,7 @@ void LLFloaterSearch::search(const LLSD &key)
// get the search URL and expand all of the substitutions
// (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
std::string url;
if (LLVersionInfo::getChannel().find("Beta") != std::string::npos)
{
url = gSavedSettings.getString("SearchURLBeta");
}
else
{
url = gSavedSettings.getString("SearchURL");
}
std::string url = gSavedSettings.getString("SearchURL");
url = LLWeb::expandURLSubstitutions(url, subs);
// and load the URL in the web view

View File

@ -85,6 +85,8 @@ U32 LLMeshRepository::sPeakKbps = 0;
const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5;
void dumpLLSDToFile(const LLSD& content, std::string filename);
std::string header_lod[] =
{
"lowest_lod",
@ -489,15 +491,36 @@ public:
mThread(thread)
{
}
virtual void completedRaw(U32 status, const std::string& reason,
const LLChannelDescriptors& channels,
const LLIOPipe::buffer_ptr_t& buffer)
virtual void completed(U32 status,
const std::string& reason,
const LLSD& content)
{
assert_main_thread();
//assert_main_thread();
llinfos << "completed" << llendl;
mThread->mPendingUploads--;
dumpLLSDToFile(content,"whole_model_response.xml");
mThread->mWholeModelUploadURL = content["uploader"].asString();
}
};
class LLWholeModelUploadResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
public:
LLWholeModelUploadResponder(LLMeshUploadThread* thread):
mThread(thread)
{
}
virtual void completed(U32 status,
const std::string& reason,
const LLSD& content)
{
//assert_main_thread();
llinfos << "upload completed" << llendl;
mThread->mPendingUploads--;
dumpLLSDToFile(content,"whole_model_upload_response.xml");
}
};
LLMeshRepoThread::LLMeshRepoThread()
@ -1261,7 +1284,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset");
mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice");
mWholeModelUploadCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
mOrigin += gAgent.getAtAxis() * scale.magVec();
}
@ -1363,10 +1386,10 @@ void LLMeshUploadThread::run()
}
}
#if 0
void dumpLLSDToFile(LLSD& content, std::string& filename)
#if 1
void dumpLLSDToFile(const LLSD& content, std::string filename)
{
std::ofstream of(filename);
std::ofstream of(filename.c_str());
LLSDSerialize::toPrettyXML(content,of);
}
#endif
@ -1374,9 +1397,10 @@ void dumpLLSDToFile(LLSD& content, std::string& filename)
void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
{
// TODO where do textures go?
LLSD result;
LLSD res;
result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
result["asset_type"] = "mesh";
result["inventory_type"] = "object";
@ -1385,9 +1409,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
// TODO "optional" fields from the spec
LLSD res;
res["mesh_list"] = LLSD::emptyArray();
res["texture_list"] = LLSD::emptyArray();
// TODO Textures
//res["texture_list"] = LLSD::emptyArray();
S32 mesh_num = 0;
S32 texture_num = 0;
@ -1433,10 +1457,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
LLQuaternion rot;
LLMatrix4 transformation = instance.mTransform;
decomposeMeshMatrix(transformation,pos,rot,scale);
#if 0
mesh_entry["childpos"] = ll_sd_from_vector3(pos);
mesh_entry["childrot"] = ll_sd_from_quaternion(rot);
mesh_entry["scale"] = ll_sd_from_vector3(scale);
#endif
mesh_entry["position"] = ll_sd_from_vector3(LLVector3());
mesh_entry["rotation"] = ll_sd_from_quaternion(rot);
mesh_entry["scale"] = ll_sd_from_vector3(scale);
// TODO should be binary.
std::string str = ostr.str();
@ -1480,9 +1509,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
}
result["asset_resources"] = res;
#if 0
std::string name("whole_model.xml");
dumpLLSDToFile(result,name);
#if 1
dumpLLSDToFile(result,"whole_model.xml");
#endif
dest = result;
@ -1541,9 +1569,24 @@ void LLMeshUploadThread::doWholeModelUpload()
mPendingUploads++;
LLCurlRequest::headers_t headers;
mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(),
mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
new LLWholeModelFeeResponder(this));
do
{
mCurlRequest->process();
} while (mCurlRequest->getQueued() > 0);
mCurlRequest->post(mWholeModelUploadURL, headers, model_data["asset_resources"], new LLWholeModelUploadResponder(this));
do
{
mCurlRequest->process();
} while (mCurlRequest->getQueued() > 0);
delete mCurlRequest;
mCurlRequest = NULL;
// Currently a no-op.
mFinished = true;
}

View File

@ -387,7 +387,8 @@ public:
LLHost mHost;
std::string mUploadObjectAssetCapability;
std::string mNewInventoryCapability;
std::string mWholeModelUploadCapability;
std::string mWholeModelFeeCapability;
std::string mWholeModelUploadURL;
std::queue<LLMeshUploadData> mUploadQ;
std::queue<LLMeshUploadData> mConfirmedQ;