meow-7.2.2
Brad Payne (Vir Linden) 2011-05-02 10:39:37 -04:00
commit 8decd5a4e6
4 changed files with 57 additions and 21 deletions

View File

@ -232,27 +232,16 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
domPRef p = tri->getP();
domListOfUInts& idx = p->getValue();
domListOfFloats v;
domListOfFloats tc;
domListOfFloats n;
domListOfFloats dummy ;
domListOfFloats& v = pos_source ? pos_source->getFloat_array()->getValue() : dummy ;
domListOfFloats& tc = tc_source ? tc_source->getFloat_array()->getValue() : dummy ;
domListOfFloats& n = norm_source ? norm_source->getFloat_array()->getValue() : dummy ;
if (pos_source)
{
v = pos_source->getFloat_array()->getValue();
face.mExtents[0].set(v[0], v[1], v[2]);
face.mExtents[1].set(v[0], v[1], v[2]);
}
if (tc_source)
{
tc = tc_source->getFloat_array()->getValue();
}
if (norm_source)
{
n = norm_source->getFloat_array()->getValue();
}
LLVolumeFace::VertexMapData::PointMap point_map;

View File

@ -104,6 +104,7 @@
//static
S32 LLFloaterModelPreview::sUploadAmount = 10;
LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL;
std::list<LLModelLoader*> LLModelLoader::sActiveLoaderList;
const S32 PREVIEW_BORDER_WIDTH = 2;
const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH;
@ -1087,6 +1088,15 @@ LLModelLoader::LLModelLoader( std::string filename, S32 lod, LLModelPreview* pre
{
mTrySLM = false;
}
assert_main_thread();
sActiveLoaderList.push_back(this) ;
}
LLModelLoader::~LLModelLoader()
{
assert_main_thread();
sActiveLoaderList.remove(this);
}
void stretch_extents(LLModel* model, LLMatrix4a& mat, LLVector4a& min, LLVector4a& max, BOOL& first_transform)
@ -1872,8 +1882,24 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
return true;
}
//static
bool LLModelLoader::isAlive(LLModelLoader* loader)
{
if(!loader)
{
return false ;
}
std::list<LLModelLoader*>::iterator iter = sActiveLoaderList.begin() ;
for(; iter != sActiveLoaderList.end() && (*iter) != loader; ++iter) ;
return *iter == loader ;
}
void LLModelLoader::loadModelCallback()
{
assert_main_thread();
if (mPreview)
{
mPreview->loadModelCallback(mLod);
@ -1884,6 +1910,12 @@ void LLModelLoader::loadModelCallback()
apr_sleep(100);
}
//doubel check if "this" is valid before deleting it, in case it is aborted during running.
if(!isAlive(this))
{
return ;
}
//cleanup model loader
if (mPreview)
{
@ -2693,7 +2725,7 @@ LLModelPreview::~LLModelPreview()
if (mModelLoader)
{
delete mModelLoader;
mModelLoader->mPreview = NULL;
mModelLoader = NULL;
}
//*HACK : *TODO : turn this back on when we understand why this crashes
//glodShutdown();

View File

@ -80,7 +80,7 @@ public:
BOOL mFirstTransform;
LLVector3 mExtents[2];
bool mTrySLM;
std::map<daeElement*, LLPointer<LLModel> > mModel;
typedef std::vector<LLPointer<LLModel> > model_list;
@ -99,6 +99,8 @@ public:
LLModelLoader( std::string filename, S32 lod, LLModelPreview* preview, JointTransformMap& jointMap,
std::deque<std::string>& jointsFromNodes );
~LLModelLoader() ;
virtual void run();
bool doLoadModel();
bool loadFromSLM(const std::string& filename);
@ -131,6 +133,10 @@ public:
std::map<std::string, std::string> mJointMap;
JointTransformMap& mJointList;
std::deque<std::string>& mJointsFromNode;
private:
static std::list<LLModelLoader*> sActiveLoaderList;
static bool isAlive(LLModelLoader* loader) ;
};
class LLFloaterModelPreview : public LLFloater
@ -331,8 +337,8 @@ public:
void setLoadState( U32 state ) { mLoadState = state; }
U32 getLoadState() { return mLoadState; }
void setResetJointFlag( bool state ) { mResetJoints = state; }
//setRestJointFlag: If an asset comes through that changes the joints, we want the reset to persist
void setResetJointFlag( bool state ) { if ( !mResetJoints ) mResetJoints = state; }
bool getResetJointFlag( void ) { return mResetJoints; }
LLVector3 getTranslationForJointOffset( std::string joint );

View File

@ -34,6 +34,7 @@
#include "llmd5.h"
#include "llsecondlifeurls.h"
#include "v4color.h"
#include "llversionviewer.h"
#include "llappviewer.h"
#include "llbutton.h"
@ -861,12 +862,20 @@ void LLPanelLogin::loadLoginPage()
LLVersionInfo::getShortVersion().c_str(),
LLVersionInfo::getBuild());
char* curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0);
char* curl_channel ;
char* curl_version = curl_escape(version.c_str(), 0);
if(strcmp(LLVersionInfo::getChannel().c_str(), LL_CHANNEL))
{
curl_channel = curl_escape(LLVersionInfo::getChannel().c_str(), 0);
}
else //if LL_CHANNEL, direct it to "Second Life Beta Viewer".
{
curl_channel = curl_escape("Second Life Beta Viewer", 0);
}
oStr << "&channel=" << curl_channel;
oStr << "&version=" << curl_version;
curl_free(curl_channel);
curl_free(curl_version);