Pull and merge from https://bitbucket.org/lindenlab/viewer-development.
commit
8f9da8b37d
25
.hgtags
25
.hgtags
|
|
@ -69,6 +69,7 @@ b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
|
|||
4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start
|
||||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
|
||||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
|
||||
461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
|
||||
42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
|
||||
|
|
@ -274,7 +275,6 @@ cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174
|
|||
eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177
|
||||
a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3
|
||||
888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
|
||||
4ad8a3afe40e0200309e3ada68932c4295ac2795 DRTVWR-179
|
||||
4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180
|
||||
5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183
|
||||
6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4
|
||||
|
|
@ -311,3 +311,26 @@ de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202
|
|||
7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206
|
||||
8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207
|
||||
351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3
|
||||
af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212
|
||||
015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213
|
||||
62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6
|
||||
ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215
|
||||
733ceac77583874f3626ef7a15c105b83ef0f5bb 3.4.0-beta7
|
||||
97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release
|
||||
5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1
|
||||
b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a
|
||||
b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219
|
||||
2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220
|
||||
0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221
|
||||
e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3
|
||||
f00068a66a2e2f72acbe3f690b98b323e740b289 DRTVWR-222
|
||||
305950187c628a5d6743ee9ea711cc5b9177a18e 3.4.1-beta4
|
||||
dd23d4da3bcb2ffda58569e759feb7c119982973 DRTVWR-224
|
||||
0bd3744ff060452aa13ff4992eafb381df7b1012 3.4.1-beta5
|
||||
29075f8c1abed53dcf195a59f61744e27a91108f DRTVWR-226
|
||||
fba99f381b8d4ad1b7b42fa4993b29998d95be18 DRTVWR-179
|
||||
49ed253c80bed7410e238eeab35a9f14cb034364 3.4.1-beta6
|
||||
468ca3268229011a59df99229b24315844b33d34 DRTVWR-227
|
||||
524da902713e8b60322640b9825101add4a7c497 3.4.1-beta7
|
||||
173c2809f9873499c4b9d6bc044ec941c954d3fb DRTVWR-228
|
||||
1dc94555582f52718834081e7659e973ae4521f7 3.4.1-beta8
|
||||
|
|
|
|||
|
|
@ -1770,9 +1770,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>dde928cb24d22a267004a8c17669ba65</string>
|
||||
<string>8aedfdcf670348c18a9991ae1b384a61</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226426/arch/Linux/installer/google_perftools-1.7-linux-20110412.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
|
|
@ -1782,9 +1782,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8308f7bd68bb7083655753b7abe7225f</string>
|
||||
<string>f62841804acb91e1309603a84f3f0ce8</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/226287/arch/CYGWIN/installer/google_perftools-1.7-windows-20110411.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
|
|||
2
build.sh
2
build.sh
|
|
@ -78,7 +78,7 @@ pre_build()
|
|||
|
||||
check_for "After 'autobuild configure'" ${build_dir}/packages/dictionaries
|
||||
|
||||
end_section "Pre$variant"
|
||||
end_section "Pre$variant"
|
||||
}
|
||||
|
||||
package_llphysicsextensions_tpv()
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ include(Prebuilt)
|
|||
|
||||
# If you want to enable or disable TCMALLOC in viewer builds, this is the place.
|
||||
# set ON or OFF as desired.
|
||||
set (USE_TCMALLOC ON)
|
||||
set (USE_TCMALLOC OFF)
|
||||
|
||||
if (STANDALONE)
|
||||
include(FindGooglePerfTools)
|
||||
|
|
|
|||
|
|
@ -289,6 +289,7 @@ void LLApp::setupErrorHandling()
|
|||
// occasionally checks to see if the app is in an error state, and sees if it needs to be run.
|
||||
|
||||
#if LL_WINDOWS
|
||||
#if LL_SEND_CRASH_REPORTS
|
||||
// This sets a callback to handle w32 signals to the console window.
|
||||
// The viewer shouldn't be affected, sicne its a windowed app.
|
||||
SetConsoleCtrlHandler( (PHANDLER_ROUTINE) ConsoleCtrlHandler, TRUE);
|
||||
|
|
@ -300,7 +301,7 @@ void LLApp::setupErrorHandling()
|
|||
mExceptionHandler = new google_breakpad::ExceptionHandler(
|
||||
L"C:\\Temp\\", 0, windows_post_minidump_callback, 0, google_breakpad::ExceptionHandler::HANDLER_ALL);
|
||||
}
|
||||
|
||||
#endif
|
||||
#else
|
||||
//
|
||||
// Start up signal handling.
|
||||
|
|
|
|||
|
|
@ -252,21 +252,6 @@ U32 LLMemory::getAllocatedMemKB()
|
|||
return sAllocatedMemInKB ;
|
||||
}
|
||||
|
||||
void* ll_allocate (size_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
{
|
||||
llwarns << "Null allocation" << llendl;
|
||||
}
|
||||
void *p = malloc(size);
|
||||
if (p == NULL)
|
||||
{
|
||||
LLMemory::freeReserve();
|
||||
llerrs << "Out of memory Error" << llendl;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#if defined(LL_WINDOWS)
|
||||
|
|
@ -1365,7 +1350,7 @@ char* LLPrivateMemoryPool::allocate(U32 size)
|
|||
//if the asked size larger than MAX_BLOCK_SIZE, fetch from heap directly, the pool does not manage it
|
||||
if(size >= CHUNK_SIZE)
|
||||
{
|
||||
return (char*)malloc(size) ;
|
||||
return (char*)ll_aligned_malloc_16(size) ;
|
||||
}
|
||||
|
||||
char* p = NULL ;
|
||||
|
|
@ -1422,7 +1407,7 @@ char* LLPrivateMemoryPool::allocate(U32 size)
|
|||
to_log = false ;
|
||||
}
|
||||
|
||||
return (char*)malloc(size) ;
|
||||
return (char*)ll_aligned_malloc_16(size) ;
|
||||
}
|
||||
|
||||
return p ;
|
||||
|
|
@ -1441,7 +1426,7 @@ void LLPrivateMemoryPool::freeMem(void* addr)
|
|||
|
||||
if(!chunk)
|
||||
{
|
||||
free(addr) ; //release from heap
|
||||
ll_aligned_free_16(addr) ; //release from heap
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1565,7 +1550,7 @@ LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::addChunk(S32 chunk_inde
|
|||
|
||||
mReservedPoolSize += preferred_size + overhead ;
|
||||
|
||||
char* buffer = (char*)malloc(preferred_size + overhead) ;
|
||||
char* buffer = (char*)ll_aligned_malloc_16(preferred_size + overhead) ;
|
||||
if(!buffer)
|
||||
{
|
||||
return NULL ;
|
||||
|
|
@ -1633,7 +1618,7 @@ void LLPrivateMemoryPool::removeChunk(LLMemoryChunk* chunk)
|
|||
mReservedPoolSize -= chunk->getBufferSize() ;
|
||||
|
||||
//release memory
|
||||
free(chunk->getBuffer()) ;
|
||||
ll_aligned_free_16(chunk->getBuffer()) ;
|
||||
}
|
||||
|
||||
U16 LLPrivateMemoryPool::findHashKey(const char* addr)
|
||||
|
|
@ -1977,7 +1962,7 @@ char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size,
|
|||
|
||||
if(!poolp)
|
||||
{
|
||||
p = (char*)malloc(size) ;
|
||||
p = (char*)ll_aligned_malloc_16(size) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2006,7 +1991,7 @@ char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size)
|
|||
}
|
||||
else
|
||||
{
|
||||
return (char*)malloc(size) ;
|
||||
return (char*)ll_aligned_malloc_16(size) ;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -2031,7 +2016,7 @@ void LLPrivateMemoryPoolManager::freeMem(LLPrivateMemoryPool* poolp, void* addr
|
|||
{
|
||||
if(!sPrivatePoolEnabled)
|
||||
{
|
||||
free(addr) ; //private pool is disabled.
|
||||
ll_aligned_free_16(addr) ; //private pool is disabled.
|
||||
}
|
||||
else if(!sInstance) //the private memory manager is destroyed, try the dangling list
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,6 +27,13 @@
|
|||
#define LLMEMORY_H
|
||||
|
||||
#include "llmemtype.h"
|
||||
|
||||
#if LL_WINDOWS && LL_DEBUG
|
||||
#define LL_CHECK_MEMORY llassert(_CrtCheckMemory());
|
||||
#else
|
||||
#define LL_CHECK_MEMORY
|
||||
#endif
|
||||
|
||||
inline void* ll_aligned_malloc( size_t size, int align )
|
||||
{
|
||||
void* mem = malloc( size + (align - 1) + sizeof(void*) );
|
||||
|
|
@ -58,17 +65,6 @@ inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed wi
|
|||
#endif
|
||||
}
|
||||
|
||||
inline void* ll_aligned_realloc_16(void* ptr, size_t size) // returned hunk MUST be freed with ll_aligned_free_16().
|
||||
{
|
||||
#if defined(LL_WINDOWS)
|
||||
return _aligned_realloc(ptr, size, 16);
|
||||
#elif defined(LL_DARWIN)
|
||||
return realloc(ptr,size); // default osx malloc is 16 byte aligned.
|
||||
#else
|
||||
return realloc(ptr,size); // FIXME not guaranteed to be aligned.
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void ll_aligned_free_16(void *p)
|
||||
{
|
||||
#if defined(LL_WINDOWS)
|
||||
|
|
@ -79,10 +75,29 @@ inline void ll_aligned_free_16(void *p)
|
|||
free(p); // posix_memalign() is compatible with heap deallocator
|
||||
#endif
|
||||
}
|
||||
|
||||
inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // returned hunk MUST be freed with ll_aligned_free_16().
|
||||
{
|
||||
#if defined(LL_WINDOWS)
|
||||
return _aligned_realloc(ptr, size, 16);
|
||||
#elif defined(LL_DARWIN)
|
||||
return realloc(ptr,size); // default osx malloc is 16 byte aligned.
|
||||
#else
|
||||
//FIXME: memcpy is SLOW
|
||||
void* ret = ll_aligned_malloc_16(size);
|
||||
if (ptr)
|
||||
{
|
||||
memcpy(ret, ptr, old_size);
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
#else // USE_TCMALLOC
|
||||
// ll_aligned_foo_16 are not needed with tcmalloc
|
||||
#define ll_aligned_malloc_16 malloc
|
||||
#define ll_aligned_realloc_16 realloc
|
||||
#define ll_aligned_realloc_16(a,b,c) realloc(a,b)
|
||||
#define ll_aligned_free_16 free
|
||||
#endif // USE_TCMALLOC
|
||||
|
||||
|
|
|
|||
|
|
@ -134,8 +134,8 @@ S32 LLQueuedThread::updateQueue(F32 max_time_ms)
|
|||
pending = getPending();
|
||||
if(pending > 0)
|
||||
{
|
||||
unpause();
|
||||
}
|
||||
unpause();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ LLThread::LLThread(const std::string& name, apr_pool_t *poolp) :
|
|||
apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
|
||||
}
|
||||
mRunCondition = new LLCondition(mAPRPoolp);
|
||||
|
||||
mDataLock = new LLMutex(mAPRPoolp);
|
||||
mLocalAPRFilePoolp = NULL ;
|
||||
}
|
||||
|
||||
|
|
@ -173,7 +173,10 @@ void LLThread::shutdown()
|
|||
}
|
||||
|
||||
delete mRunCondition;
|
||||
mRunCondition = 0;
|
||||
mRunCondition = NULL;
|
||||
|
||||
delete mDataLock;
|
||||
mDataLock = NULL;
|
||||
|
||||
if (mIsLocalPool && mAPRPoolp)
|
||||
{
|
||||
|
|
@ -242,28 +245,30 @@ bool LLThread::runCondition(void)
|
|||
// Stop thread execution if requested until unpaused.
|
||||
void LLThread::checkPause()
|
||||
{
|
||||
mRunCondition->lock();
|
||||
mDataLock->lock();
|
||||
|
||||
// This is in a while loop because the pthread API allows for spurious wakeups.
|
||||
while(shouldSleep())
|
||||
{
|
||||
mDataLock->unlock();
|
||||
mRunCondition->wait(); // unlocks mRunCondition
|
||||
mDataLock->lock();
|
||||
// mRunCondition is locked when the thread wakes up
|
||||
}
|
||||
|
||||
mRunCondition->unlock();
|
||||
mDataLock->unlock();
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
||||
void LLThread::setQuitting()
|
||||
{
|
||||
mRunCondition->lock();
|
||||
mDataLock->lock();
|
||||
if (mStatus == RUNNING)
|
||||
{
|
||||
mStatus = QUITTING;
|
||||
}
|
||||
mRunCondition->unlock();
|
||||
mDataLock->unlock();
|
||||
wake();
|
||||
}
|
||||
|
||||
|
|
@ -285,12 +290,12 @@ void LLThread::yield()
|
|||
|
||||
void LLThread::wake()
|
||||
{
|
||||
mRunCondition->lock();
|
||||
mDataLock->lock();
|
||||
if(!shouldSleep())
|
||||
{
|
||||
mRunCondition->signal();
|
||||
}
|
||||
mRunCondition->unlock();
|
||||
mDataLock->unlock();
|
||||
}
|
||||
|
||||
void LLThread::wakeLocked()
|
||||
|
|
@ -481,6 +486,19 @@ LLThreadSafeRefCount::LLThreadSafeRefCount() :
|
|||
{
|
||||
}
|
||||
|
||||
LLThreadSafeRefCount::LLThreadSafeRefCount(const LLThreadSafeRefCount& src)
|
||||
{
|
||||
if (sMutex)
|
||||
{
|
||||
sMutex->lock();
|
||||
}
|
||||
mRef = 0;
|
||||
if (sMutex)
|
||||
{
|
||||
sMutex->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
LLThreadSafeRefCount::~LLThreadSafeRefCount()
|
||||
{
|
||||
if (mRef != 0)
|
||||
|
|
@ -489,6 +507,7 @@ LLThreadSafeRefCount::~LLThreadSafeRefCount()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//============================================================================
|
||||
|
||||
LLResponder::~LLResponder()
|
||||
|
|
|
|||
|
|
@ -97,6 +97,7 @@ private:
|
|||
protected:
|
||||
std::string mName;
|
||||
LLCondition* mRunCondition;
|
||||
LLMutex* mDataLock;
|
||||
|
||||
apr_thread_t *mAPRThreadp;
|
||||
apr_pool_t *mAPRPoolp;
|
||||
|
|
@ -122,15 +123,15 @@ protected:
|
|||
inline void unlockData();
|
||||
|
||||
// This is the predicate that decides whether the thread should sleep.
|
||||
// It should only be called with mRunCondition locked, since the virtual runCondition() function may need to access
|
||||
// It should only be called with mDataLock locked, since the virtual runCondition() function may need to access
|
||||
// data structures that are thread-unsafe.
|
||||
bool shouldSleep(void) { return (mStatus == RUNNING) && (isPaused() || (!runCondition())); }
|
||||
|
||||
// To avoid spurious signals (and the associated context switches) when the condition may or may not have changed, you can do the following:
|
||||
// mRunCondition->lock();
|
||||
// mDataLock->lock();
|
||||
// if(!shouldSleep())
|
||||
// mRunCondition->signal();
|
||||
// mRunCondition->unlock();
|
||||
// mDataLock->unlock();
|
||||
};
|
||||
|
||||
//============================================================================
|
||||
|
|
@ -205,12 +206,12 @@ private:
|
|||
|
||||
void LLThread::lockData()
|
||||
{
|
||||
mRunCondition->lock();
|
||||
mDataLock->lock();
|
||||
}
|
||||
|
||||
void LLThread::unlockData()
|
||||
{
|
||||
mRunCondition->unlock();
|
||||
mDataLock->unlock();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -227,15 +228,27 @@ public:
|
|||
private:
|
||||
static LLMutex* sMutex;
|
||||
|
||||
private:
|
||||
LLThreadSafeRefCount(const LLThreadSafeRefCount&); // not implemented
|
||||
LLThreadSafeRefCount&operator=(const LLThreadSafeRefCount&); // not implemented
|
||||
|
||||
protected:
|
||||
virtual ~LLThreadSafeRefCount(); // use unref()
|
||||
|
||||
public:
|
||||
LLThreadSafeRefCount();
|
||||
LLThreadSafeRefCount(const LLThreadSafeRefCount&);
|
||||
LLThreadSafeRefCount& operator=(const LLThreadSafeRefCount& ref)
|
||||
{
|
||||
if (sMutex)
|
||||
{
|
||||
sMutex->lock();
|
||||
}
|
||||
mRef = 0;
|
||||
if (sMutex)
|
||||
{
|
||||
sMutex->unlock();
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ref()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
const S32 LL_VERSION_MAJOR = 3;
|
||||
const S32 LL_VERSION_MINOR = 4;
|
||||
const S32 LL_VERSION_PATCH = 1;
|
||||
const S32 LL_VERSION_PATCH = 2;
|
||||
const S32 LL_VERSION_BUILD = 0;
|
||||
|
||||
const char * const LL_CHANNEL = "Second Life Developer";
|
||||
|
|
|
|||
|
|
@ -1665,6 +1665,12 @@ static void avg4_colors2(const U8* a, const U8* b, const U8* c, const U8* d, U8*
|
|||
dst[1] = (U8)(((U32)(a[1]) + b[1] + c[1] + d[1])>>2);
|
||||
}
|
||||
|
||||
void LLImageBase::setDataAndSize(U8 *data, S32 size)
|
||||
{
|
||||
ll_assert_aligned(data, 16);
|
||||
mData = data; mDataSize = size;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLImageBase::generateMip(const U8* indata, U8* mipdata, S32 width, S32 height, S32 nchannels)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ public:
|
|||
|
||||
protected:
|
||||
// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted
|
||||
void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }
|
||||
void setDataAndSize(U8 *data, S32 size);
|
||||
|
||||
public:
|
||||
static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels);
|
||||
|
|
|
|||
|
|
@ -6979,19 +6979,20 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con
|
|||
{
|
||||
S32 new_verts = mNumVertices+1;
|
||||
S32 new_size = new_verts*16;
|
||||
// S32 old_size = mNumVertices*16;
|
||||
S32 old_size = mNumVertices*16;
|
||||
|
||||
//positions
|
||||
mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size);
|
||||
mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_size, old_size);
|
||||
ll_assert_aligned(mPositions,16);
|
||||
|
||||
//normals
|
||||
mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size);
|
||||
mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_size, old_size);
|
||||
ll_assert_aligned(mNormals,16);
|
||||
|
||||
//tex coords
|
||||
new_size = ((new_verts*8)+0xF) & ~0xF;
|
||||
mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size);
|
||||
old_size = ((mNumVertices*8)+0xF) & ~0xF;
|
||||
mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, new_size, old_size);
|
||||
ll_assert_aligned(mTexCoords,16);
|
||||
|
||||
|
||||
|
|
@ -7045,7 +7046,7 @@ void LLVolumeFace::pushIndex(const U16& idx)
|
|||
S32 old_size = ((mNumIndices*2)+0xF) & ~0xF;
|
||||
if (new_size != old_size)
|
||||
{
|
||||
mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size);
|
||||
mIndices = (U16*) ll_aligned_realloc_16(mIndices, new_size, old_size);
|
||||
ll_assert_aligned(mIndices,16);
|
||||
}
|
||||
|
||||
|
|
@ -7087,11 +7088,11 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat
|
|||
}
|
||||
|
||||
//allocate new buffer space
|
||||
mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a));
|
||||
mPositions = (LLVector4a*) ll_aligned_realloc_16(mPositions, new_count*sizeof(LLVector4a), mNumVertices*sizeof(LLVector4a));
|
||||
ll_assert_aligned(mPositions, 16);
|
||||
mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a));
|
||||
mNormals = (LLVector4a*) ll_aligned_realloc_16(mNormals, new_count*sizeof(LLVector4a), mNumVertices*sizeof(LLVector4a));
|
||||
ll_assert_aligned(mNormals, 16);
|
||||
mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF);
|
||||
mTexCoords = (LLVector2*) ll_aligned_realloc_16(mTexCoords, (new_count*sizeof(LLVector2)+0xF) & ~0xF, (mNumVertices*sizeof(LLVector2)+0xF) & ~0xF);
|
||||
ll_assert_aligned(mTexCoords, 16);
|
||||
|
||||
mNumVertices = new_count;
|
||||
|
|
@ -7138,7 +7139,7 @@ void LLVolumeFace::appendFace(const LLVolumeFace& face, LLMatrix4& mat_in, LLMat
|
|||
new_count = mNumIndices + face.mNumIndices;
|
||||
|
||||
//allocate new index buffer
|
||||
mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF);
|
||||
mIndices = (U16*) ll_aligned_realloc_16(mIndices, (new_count*sizeof(U16)+0xF) & ~0xF, (mNumIndices*sizeof(U16)+0xF) & ~0xF);
|
||||
|
||||
//get destination address into new index buffer
|
||||
U16* dst_idx = mIndices+mNumIndices;
|
||||
|
|
|
|||
|
|
@ -34,16 +34,6 @@
|
|||
#include "../llsimdmath.h"
|
||||
#include "../llvector4a.h"
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void *p)
|
||||
{
|
||||
ll_aligned_free_16(p);
|
||||
}
|
||||
|
||||
namespace tut
|
||||
{
|
||||
|
||||
|
|
@ -59,6 +49,27 @@ tut::alignment_test_t tut_alignment_test("LLAlignment");
|
|||
LL_ALIGN_PREFIX(16)
|
||||
class MyVector4a
|
||||
{
|
||||
public:
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void *p)
|
||||
{
|
||||
ll_aligned_free_16(p);
|
||||
}
|
||||
|
||||
void* operator new[](size_t count)
|
||||
{ // try to allocate count bytes for an array
|
||||
return ll_aligned_malloc_16(count);
|
||||
}
|
||||
|
||||
void operator delete[](void *p)
|
||||
{
|
||||
ll_aligned_free_16(p);
|
||||
}
|
||||
|
||||
LLQuad mQ;
|
||||
} LL_ALIGN_POSTFIX(16);
|
||||
|
||||
|
|
@ -78,7 +89,7 @@ void alignment_test_object_t::test<1>()
|
|||
align_ptr = ll_aligned_malloc_16(sizeof(MyVector4a));
|
||||
ensure("ll_aligned_malloc_16 failed", is_aligned(align_ptr,16));
|
||||
|
||||
align_ptr = ll_aligned_realloc_16(align_ptr,2*sizeof(MyVector4a));
|
||||
align_ptr = ll_aligned_realloc_16(align_ptr,2*sizeof(MyVector4a), sizeof(MyVector4a));
|
||||
ensure("ll_aligned_realloc_16 failed", is_aligned(align_ptr,16));
|
||||
|
||||
ll_aligned_free_16(align_ptr);
|
||||
|
|
|
|||
|
|
@ -133,12 +133,12 @@ std::string LLCurl::getVersionString()
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLCurl::Responder::Responder()
|
||||
: mReferenceCount(0)
|
||||
{
|
||||
}
|
||||
|
||||
LLCurl::Responder::~Responder()
|
||||
{
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
@ -202,23 +202,6 @@ void LLCurl::Responder::completedHeader(U32 status, const std::string& reason, c
|
|||
|
||||
}
|
||||
|
||||
namespace boost
|
||||
{
|
||||
void intrusive_ptr_add_ref(LLCurl::Responder* p)
|
||||
{
|
||||
++p->mReferenceCount;
|
||||
}
|
||||
|
||||
void intrusive_ptr_release(LLCurl::Responder* p)
|
||||
{
|
||||
if (p && 0 == --p->mReferenceCount)
|
||||
{
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::set<CURL*> LLCurl::Easy::sFreeHandles;
|
||||
|
|
@ -267,15 +250,18 @@ void LLCurl::Easy::releaseEasyHandle(CURL* handle)
|
|||
LLMutexLock lock(sHandleMutexp) ;
|
||||
if (sActiveHandles.find(handle) != sActiveHandles.end())
|
||||
{
|
||||
LL_CHECK_MEMORY
|
||||
sActiveHandles.erase(handle);
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
if(sFreeHandles.size() < MAX_NUM_FREE_HANDLES)
|
||||
{
|
||||
sFreeHandles.insert(handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
sFreeHandles.insert(handle);
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
else
|
||||
{
|
||||
LLCurl::deleteEasyHandle(handle) ;
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -318,13 +304,15 @@ LLCurl::Easy::~Easy()
|
|||
releaseEasyHandle(mCurlEasyHandle);
|
||||
--gCurlEasyCount;
|
||||
curl_slist_free_all(mHeaders);
|
||||
LL_CHECK_MEMORY
|
||||
for_each(mStrings.begin(), mStrings.end(), DeletePointerArray());
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
if (mResponder && LLCurl::sNotQuitting) //aborted
|
||||
{
|
||||
std::string reason("Request timeout, aborted.") ;
|
||||
mResponder->completedRaw(408, //HTTP_REQUEST_TIME_OUT, timeout, abort
|
||||
reason, mChannels, mOutput);
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
mResponder = NULL;
|
||||
}
|
||||
|
|
@ -599,35 +587,50 @@ void LLCurl::Multi::cleanup(bool deleted)
|
|||
llassert_always(deleted || !mValid) ;
|
||||
|
||||
LLMutexLock lock(mDeletionMutexp);
|
||||
|
||||
|
||||
|
||||
// Clean up active
|
||||
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
|
||||
iter != mEasyActiveList.end(); ++iter)
|
||||
{
|
||||
Easy* easy = *iter;
|
||||
LL_CHECK_MEMORY
|
||||
check_curl_multi_code(curl_multi_remove_handle(mCurlMultiHandle, easy->getCurlHandle()));
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
if(deleted)
|
||||
{
|
||||
easy->mResponder = NULL ; //avoid triggering mResponder.
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
delete easy;
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
mEasyActiveList.clear();
|
||||
mEasyActiveMap.clear();
|
||||
|
||||
// Clean up freed
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
// Clean up freed
|
||||
for_each(mEasyFreeList.begin(), mEasyFreeList.end(), DeletePointer());
|
||||
mEasyFreeList.clear();
|
||||
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
check_curl_multi_code(LLCurl::deleteMultiHandle(mCurlMultiHandle));
|
||||
mCurlMultiHandle = NULL ;
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
delete mMutexp ;
|
||||
mMutexp = NULL ;
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
delete mEasyMutexp ;
|
||||
mEasyMutexp = NULL ;
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
mQueued = 0 ;
|
||||
mState = STATE_COMPLETED;
|
||||
|
||||
|
|
@ -1104,6 +1107,7 @@ bool LLCurlRequest::getByteRange(const std::string& url,
|
|||
S32 offset, S32 length,
|
||||
LLCurl::ResponderPtr responder)
|
||||
{
|
||||
llassert(LLCurl::sNotQuitting);
|
||||
LLCurl::Easy* easy = allocEasy();
|
||||
if (!easy)
|
||||
{
|
||||
|
|
@ -1131,6 +1135,7 @@ bool LLCurlRequest::post(const std::string& url,
|
|||
const LLSD& data,
|
||||
LLCurl::ResponderPtr responder, S32 time_out)
|
||||
{
|
||||
llassert(LLCurl::sNotQuitting);
|
||||
LLCurl::Easy* easy = allocEasy();
|
||||
if (!easy)
|
||||
{
|
||||
|
|
@ -1158,6 +1163,7 @@ bool LLCurlRequest::post(const std::string& url,
|
|||
const std::string& data,
|
||||
LLCurl::ResponderPtr responder, S32 time_out)
|
||||
{
|
||||
llassert(LLCurl::sNotQuitting);
|
||||
LLCurl::Easy* easy = allocEasy();
|
||||
if (!easy)
|
||||
{
|
||||
|
|
@ -1714,29 +1720,42 @@ void LLCurl::cleanupClass()
|
|||
break ;
|
||||
}
|
||||
}
|
||||
LL_CHECK_MEMORY
|
||||
sCurlThread->shutdown() ;
|
||||
LL_CHECK_MEMORY
|
||||
delete sCurlThread ;
|
||||
sCurlThread = NULL ;
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
#if SAFE_SSL
|
||||
CRYPTO_set_locking_callback(NULL);
|
||||
for_each(sSSLMutex.begin(), sSSLMutex.end(), DeletePointer());
|
||||
#endif
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
for (std::set<CURL*>::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter)
|
||||
{
|
||||
CURL* curl = *iter;
|
||||
LLCurl::deleteEasyHandle(curl);
|
||||
}
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
Easy::sFreeHandles.clear();
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
delete Easy::sHandleMutexp ;
|
||||
Easy::sHandleMutexp = NULL ;
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
delete sHandleMutexp ;
|
||||
sHandleMutexp = NULL ;
|
||||
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
// removed as per https://jira.secondlife.com/browse/SH-3115
|
||||
//llassert(Easy::sActiveHandles.empty());
|
||||
}
|
||||
|
|
@ -1744,6 +1763,8 @@ void LLCurl::cleanupClass()
|
|||
//static
|
||||
CURLM* LLCurl::newMultiHandle()
|
||||
{
|
||||
llassert(sNotQuitting);
|
||||
|
||||
LLMutexLock lock(sHandleMutexp) ;
|
||||
|
||||
if(sTotalHandles + 1 > sMaxHandles)
|
||||
|
|
@ -1777,6 +1798,7 @@ CURLMcode LLCurl::deleteMultiHandle(CURLM* handle)
|
|||
//static
|
||||
CURL* LLCurl::newEasyHandle()
|
||||
{
|
||||
llassert(sNotQuitting);
|
||||
LLMutexLock lock(sHandleMutexp) ;
|
||||
|
||||
if(sTotalHandles + 1 > sMaxHandles)
|
||||
|
|
@ -1801,7 +1823,9 @@ void LLCurl::deleteEasyHandle(CURL* handle)
|
|||
if(handle)
|
||||
{
|
||||
LLMutexLock lock(sHandleMutexp) ;
|
||||
LL_CHECK_MEMORY
|
||||
curl_easy_cleanup(handle) ;
|
||||
LL_CHECK_MEMORY
|
||||
sTotalHandles-- ;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@
|
|||
#include "llthread.h"
|
||||
#include "llqueuedthread.h"
|
||||
#include "llframetimer.h"
|
||||
#include "llpointer.h"
|
||||
|
||||
|
||||
class LLMutex;
|
||||
class LLCurlThread;
|
||||
|
|
@ -67,7 +69,7 @@ public:
|
|||
F64 mSpeedDownload;
|
||||
};
|
||||
|
||||
class Responder
|
||||
class Responder : public LLThreadSafeRefCount
|
||||
{
|
||||
//LOG_CLASS(Responder);
|
||||
public:
|
||||
|
|
@ -126,13 +128,10 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
public: /* but not really -- don't touch this */
|
||||
U32 mReferenceCount;
|
||||
|
||||
private:
|
||||
std::string mURL;
|
||||
};
|
||||
typedef boost::intrusive_ptr<Responder> ResponderPtr;
|
||||
typedef LLPointer<Responder> ResponderPtr;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -378,12 +377,6 @@ private:
|
|||
void cleanupMulti(LLCurl::Multi* multi) ;
|
||||
} ;
|
||||
|
||||
namespace boost
|
||||
{
|
||||
void intrusive_ptr_add_ref(LLCurl::Responder* p);
|
||||
void intrusive_ptr_release(LLCurl::Responder* p);
|
||||
};
|
||||
|
||||
|
||||
class LLCurlRequest
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
#include "llcurl.h"
|
||||
|
||||
LLCurl::Responder::Responder()
|
||||
: mReferenceCount(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -77,19 +76,3 @@ void LLCurl::Responder::result(LLSD const&)
|
|||
{
|
||||
}
|
||||
|
||||
namespace boost
|
||||
{
|
||||
void intrusive_ptr_add_ref(LLCurl::Responder* p)
|
||||
{
|
||||
++p->mReferenceCount;
|
||||
}
|
||||
|
||||
void intrusive_ptr_release(LLCurl::Responder* p)
|
||||
{
|
||||
if(p && 0 == --p->mReferenceCount)
|
||||
{
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -189,9 +189,9 @@ namespace tut
|
|||
}
|
||||
|
||||
public:
|
||||
static boost::intrusive_ptr<Result> build(HTTPClientTestData& client)
|
||||
static Result* build(HTTPClientTestData& client)
|
||||
{
|
||||
return boost::intrusive_ptr<Result>(new Result(client));
|
||||
return new Result(client);
|
||||
}
|
||||
|
||||
~Result()
|
||||
|
|
@ -258,7 +258,6 @@ namespace tut
|
|||
void HTTPClientTestObject::test<1>()
|
||||
{
|
||||
LLHTTPClient::get(local_server, newResult());
|
||||
|
||||
runThePump();
|
||||
ensureStatusOK();
|
||||
ensure("result object wasn't destroyed", mResultDeleted);
|
||||
|
|
|
|||
|
|
@ -1074,7 +1074,7 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
|
|||
mAuthURL = message.getValue("url");
|
||||
mAuthRealm = message.getValue("realm");
|
||||
mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST);
|
||||
}
|
||||
}
|
||||
else if(message_name == "debug_message")
|
||||
{
|
||||
mDebugMessageText = message.getValue("message_text");
|
||||
|
|
|
|||
|
|
@ -291,7 +291,6 @@ void LLVBOPool::seedPool()
|
|||
|
||||
|
||||
|
||||
|
||||
void LLVBOPool::cleanup()
|
||||
{
|
||||
U32 size = LL_VBO_BLOCK_SIZE;
|
||||
|
|
|
|||
|
|
@ -1564,6 +1564,7 @@ set(PACKAGE ON CACHE BOOL
|
|||
if (WINDOWS)
|
||||
set_target_properties(${VIEWER_BINARY_NAME}
|
||||
PROPERTIES
|
||||
# *TODO -reenable this once we get server usage sorted out
|
||||
LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS ${TCMALLOC_LINK_FLAGS}"
|
||||
LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
|
||||
LINK_FLAGS_RELEASE "/FORCE:MULTIPLE /MAP\"secondlife-bin.MAP\" /OPT:REF"
|
||||
|
|
|
|||
|
|
@ -1891,8 +1891,17 @@ bool LLAppViewer::cleanup()
|
|||
sTextureFetch->shutDownTextureCacheThread() ;
|
||||
sTextureFetch->shutDownImageDecodeThread() ;
|
||||
|
||||
llinfos << "Shutting down message system" << llendflush;
|
||||
end_messaging_system();
|
||||
|
||||
// *NOTE:Mani - The following call is not thread safe.
|
||||
LL_CHECK_MEMORY
|
||||
LLCurl::cleanupClass();
|
||||
LL_CHECK_MEMORY
|
||||
|
||||
LLFilePickerThread::cleanupClass();
|
||||
|
||||
//MUST happen AFTER LLCurl::cleanupClass
|
||||
delete sTextureCache;
|
||||
sTextureCache = NULL;
|
||||
delete sTextureFetch;
|
||||
|
|
@ -1961,12 +1970,6 @@ bool LLAppViewer::cleanup()
|
|||
|
||||
LLViewerAssetStatsFF::cleanup();
|
||||
|
||||
llinfos << "Shutting down message system" << llendflush;
|
||||
end_messaging_system();
|
||||
|
||||
// *NOTE:Mani - The following call is not thread safe.
|
||||
LLCurl::cleanupClass();
|
||||
|
||||
// If we're exiting to launch an URL, do that here so the screen
|
||||
// is at the right resolution before we launch IE.
|
||||
if (!gLaunchFileOnQuit.empty())
|
||||
|
|
|
|||
|
|
@ -131,7 +131,9 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
|
|||
// Note: This won't work when running from the debugger unless the _NO_DEBUG_HEAP environment variable is set to 1
|
||||
|
||||
// Enable to get mem debugging within visual studio.
|
||||
//_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||
#if LL_DEBUG
|
||||
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
|
||||
#else
|
||||
_CrtSetDbgFlag(0); // default, just making explicit
|
||||
|
||||
ULONG ulEnableLFH = 2;
|
||||
|
|
@ -145,6 +147,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
|
|||
else
|
||||
heap_enable_lfh_error[i] = GetLastError();
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// *FIX: global
|
||||
|
|
|
|||
|
|
@ -919,7 +919,7 @@ public:
|
|||
bool uploadConfirmationCallback(
|
||||
const LLSD& notification,
|
||||
const LLSD& response,
|
||||
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder> responder)
|
||||
LLPointer<LLNewAgentInventoryVariablePriceResponder> responder)
|
||||
{
|
||||
S32 option;
|
||||
std::string confirmation_url;
|
||||
|
|
@ -949,7 +949,7 @@ public:
|
|||
|
||||
void confirmUpload(
|
||||
const std::string& confirmation_url,
|
||||
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder> responder)
|
||||
LLPointer<LLNewAgentInventoryVariablePriceResponder> responder)
|
||||
{
|
||||
if ( getFilename().empty() )
|
||||
{
|
||||
|
|
@ -1124,7 +1124,7 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog(
|
|||
// and cause sadness.
|
||||
mImpl->confirmUpload(
|
||||
confirmation_url,
|
||||
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder>(this));
|
||||
LLPointer<LLNewAgentInventoryVariablePriceResponder>(this));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1157,7 +1157,7 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog(
|
|||
mImpl,
|
||||
_1,
|
||||
_2,
|
||||
boost::intrusive_ptr<LLNewAgentInventoryVariablePriceResponder>(this)));
|
||||
LLPointer<LLNewAgentInventoryVariablePriceResponder>(this)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -952,6 +952,12 @@ LLSpatialGroup* LLDrawable::getSpatialGroup() const
|
|||
|
||||
void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
|
||||
{
|
||||
//precondition: mSpatialGroupp MUST be null or DEAD or mSpatialGroupp MUST NOT contain this
|
||||
llassert(!mSpatialGroupp || mSpatialGroupp->isDead() || !mSpatialGroupp->hasElement(this));
|
||||
|
||||
//precondition: groupp MUST be null or groupp MUST contain this
|
||||
llassert(!groupp || groupp->hasElement(this));
|
||||
|
||||
/*if (mSpatialGroupp && (groupp != mSpatialGroupp))
|
||||
{
|
||||
mSpatialGroupp->setState(LLSpatialGroup::GEOM_DIRTY);
|
||||
|
|
@ -971,9 +977,12 @@ void LLDrawable::setSpatialGroup(LLSpatialGroup *groupp)
|
|||
}
|
||||
}
|
||||
|
||||
mSpatialGroupp = groupp;
|
||||
//postcondition: if next group is NULL, previous group must be dead OR NULL OR binIndex must be -1
|
||||
//postcondition: if next group is NOT NULL, binIndex must not be -1
|
||||
llassert(groupp == NULL ? (mSpatialGroupp == NULL || mSpatialGroupp->isDead()) || getBinIndex() == -1 :
|
||||
getBinIndex() != -1);
|
||||
|
||||
llassert((mSpatialGroupp == NULL) ? getBinIndex() == -1 : getBinIndex() != -1);
|
||||
mSpatialGroupp = groupp;
|
||||
}
|
||||
|
||||
LLSpatialPartition* LLDrawable::getSpatialPartition()
|
||||
|
|
@ -1401,7 +1410,7 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
|
|||
markDead();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (gShiftFrame)
|
||||
{
|
||||
return;
|
||||
|
|
@ -1484,13 +1493,11 @@ void LLSpatialBridge::cleanupReferences()
|
|||
LLDrawable::cleanupReferences();
|
||||
if (mDrawable)
|
||||
{
|
||||
LLSpatialGroup* group = mDrawable->getSpatialGroup();
|
||||
if (group)
|
||||
{
|
||||
group->mOctreeNode->remove(mDrawable);
|
||||
mDrawable->setSpatialGroup(NULL);
|
||||
}
|
||||
/*
|
||||
|
||||
DON'T DO THIS -- this should happen through octree destruction
|
||||
|
||||
mDrawable->setSpatialGroup(NULL);
|
||||
if (mDrawable->getVObj())
|
||||
{
|
||||
LLViewerObject::const_child_list_t& child_list = mDrawable->getVObj()->getChildren();
|
||||
|
|
@ -1501,15 +1508,10 @@ void LLSpatialBridge::cleanupReferences()
|
|||
LLDrawable* drawable = child->mDrawable;
|
||||
if (drawable)
|
||||
{
|
||||
LLSpatialGroup* group = drawable->getSpatialGroup();
|
||||
if (group)
|
||||
{
|
||||
group->mOctreeNode->remove(drawable);
|
||||
drawable->setSpatialGroup(NULL);
|
||||
}
|
||||
drawable->setSpatialGroup(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
LLDrawable* drawablep = mDrawable;
|
||||
mDrawable = NULL;
|
||||
|
|
|
|||
|
|
@ -411,12 +411,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((params.mVertexBuffer->getTypeMask() & mask) != mask)
|
||||
{ //FIXME!
|
||||
llwarns << "Missing required components, skipping render batch." << llendl;
|
||||
continue;
|
||||
}
|
||||
|
||||
LLRenderPass::applyModelMatrix(params);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,16 @@ public:
|
|||
LLDriverParam(LLWearable *wearablep);
|
||||
~LLDriverParam();
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
|
||||
// Special: These functions are overridden by child classes
|
||||
LLDriverParamInfo* getInfo() const { return (LLDriverParamInfo*)mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace
|
|||
|
||||
class LLEventPollEventTimer : public LLEventTimer
|
||||
{
|
||||
typedef boost::intrusive_ptr<LLEventPollResponder> EventPollResponderPtr;
|
||||
typedef LLPointer<LLEventPollResponder> EventPollResponderPtr;
|
||||
|
||||
public:
|
||||
LLEventPollEventTimer(F32 period, EventPollResponderPtr responder)
|
||||
|
|
|
|||
|
|
@ -166,7 +166,8 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
|
|||
|
||||
//special value to indicate uninitialized position
|
||||
mIndicesIndex = 0xFFFFFFFF;
|
||||
|
||||
|
||||
mIndexInTex = 0;
|
||||
mTexture = NULL;
|
||||
mTEOffset = -1;
|
||||
mTextureIndex = 255;
|
||||
|
|
|
|||
|
|
@ -211,8 +211,8 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
|
|||
|
||||
BOOL item_is_multi = FALSE;
|
||||
if ((inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_LANDMARK_VISITED
|
||||
|| inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
|
||||
&& !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK))
|
||||
|| inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
|
||||
&& !(inv_item->getFlags() & LLInventoryItemFlags::II_FLAGS_WEARABLES_MASK))
|
||||
{
|
||||
item_is_multi = TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,11 @@ LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)
|
|||
mLabelSuggestedUseD(NULL),
|
||||
mEditD(NULL),
|
||||
mApplyEditsButton(NULL),
|
||||
mBeaconColor()
|
||||
mBeaconColor(),
|
||||
mPreviousValueA(LLPathfindingLinkset::MAX_WALKABILITY_VALUE),
|
||||
mPreviousValueB(LLPathfindingLinkset::MAX_WALKABILITY_VALUE),
|
||||
mPreviousValueC(LLPathfindingLinkset::MAX_WALKABILITY_VALUE),
|
||||
mPreviousValueD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -168,7 +172,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
|
|||
mEditA = findChild<LLLineEditor>("edit_a_value");
|
||||
llassert(mEditA != NULL);
|
||||
mEditA->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1));
|
||||
mEditA->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueA));
|
||||
|
||||
mLabelEditB = findChild<LLTextBase>("edit_b_label");
|
||||
llassert(mLabelEditB != NULL);
|
||||
|
|
@ -179,7 +183,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
|
|||
mEditB = findChild<LLLineEditor>("edit_b_value");
|
||||
llassert(mEditB != NULL);
|
||||
mEditB->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1));
|
||||
mEditB->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueB));
|
||||
|
||||
mLabelEditC = findChild<LLTextBase>("edit_c_label");
|
||||
llassert(mLabelEditC != NULL);
|
||||
|
|
@ -190,7 +194,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
|
|||
mEditC = findChild<LLLineEditor>("edit_c_value");
|
||||
llassert(mEditC != NULL);
|
||||
mEditC->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1));
|
||||
mEditC->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueC));
|
||||
|
||||
mLabelEditD = findChild<LLTextBase>("edit_d_label");
|
||||
llassert(mLabelEditD != NULL);
|
||||
|
|
@ -201,7 +205,7 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
|
|||
mEditD = findChild<LLLineEditor>("edit_d_value");
|
||||
llassert(mEditD != NULL);
|
||||
mEditD->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1));
|
||||
mEditD->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered, this, _1, mPreviousValueD));
|
||||
|
||||
mApplyEditsButton = findChild<LLButton>("apply_edit_values");
|
||||
llassert(mApplyEditsButton != NULL);
|
||||
|
|
@ -323,26 +327,38 @@ void LLFloaterPathfindingLinksets::onClearFiltersClicked()
|
|||
rebuildObjectsScrollList();
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl)
|
||||
void LLFloaterPathfindingLinksets::onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue)
|
||||
{
|
||||
LLLineEditor *pLineEditor = static_cast<LLLineEditor *>(pUICtrl);
|
||||
llassert(pLineEditor != NULL);
|
||||
|
||||
const std::string &valueString = pLineEditor->getText();
|
||||
S32 value;
|
||||
|
||||
if (LLStringUtil::convertToS32(valueString, value))
|
||||
S32 intValue;
|
||||
LLSD value;
|
||||
bool doResetValue = false;
|
||||
|
||||
if (valueString.empty())
|
||||
{
|
||||
if ((value < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (value > LLPathfindingLinkset::MAX_WALKABILITY_VALUE))
|
||||
{
|
||||
value = llclamp(value, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE);
|
||||
pLineEditor->setValue(LLSD(value));
|
||||
}
|
||||
value = pPreviousValue;
|
||||
doResetValue = true;
|
||||
}
|
||||
else if (LLStringUtil::convertToS32(valueString, intValue))
|
||||
{
|
||||
doResetValue = ((intValue < LLPathfindingLinkset::MIN_WALKABILITY_VALUE) || (intValue > LLPathfindingLinkset::MAX_WALKABILITY_VALUE));
|
||||
value = LLSD(llclamp(intValue, LLPathfindingLinkset::MIN_WALKABILITY_VALUE, LLPathfindingLinkset::MAX_WALKABILITY_VALUE));
|
||||
}
|
||||
else
|
||||
{
|
||||
pLineEditor->setValue(LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE));
|
||||
value = LLSD(LLPathfindingLinkset::MAX_WALKABILITY_VALUE);
|
||||
doResetValue = true;
|
||||
}
|
||||
|
||||
if (doResetValue)
|
||||
{
|
||||
pLineEditor->setValue(value);
|
||||
}
|
||||
pPreviousValue = value;
|
||||
}
|
||||
|
||||
void LLFloaterPathfindingLinksets::onApplyChangesClicked()
|
||||
|
|
@ -376,10 +392,14 @@ void LLFloaterPathfindingLinksets::updateEditFieldValues()
|
|||
const LLPathfindingLinkset *linkset = dynamic_cast<const LLPathfindingLinkset *>(firstSelectedObjectPtr.get());
|
||||
|
||||
setEditLinksetUse(linkset->getLinksetUse());
|
||||
mEditA->setValue(LLSD(linkset->getWalkabilityCoefficientA()));
|
||||
mEditB->setValue(LLSD(linkset->getWalkabilityCoefficientB()));
|
||||
mEditC->setValue(LLSD(linkset->getWalkabilityCoefficientC()));
|
||||
mEditD->setValue(LLSD(linkset->getWalkabilityCoefficientD()));
|
||||
mPreviousValueA = LLSD(linkset->getWalkabilityCoefficientA());
|
||||
mPreviousValueB = LLSD(linkset->getWalkabilityCoefficientB());
|
||||
mPreviousValueC = LLSD(linkset->getWalkabilityCoefficientC());
|
||||
mPreviousValueD = LLSD(linkset->getWalkabilityCoefficientD());
|
||||
mEditA->setValue(mPreviousValueA);
|
||||
mEditB->setValue(mPreviousValueB);
|
||||
mEditC->setValue(mPreviousValueC);
|
||||
mEditD->setValue(mPreviousValueD);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ private:
|
|||
|
||||
void onApplyAllFilters();
|
||||
void onClearFiltersClicked();
|
||||
void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl);
|
||||
void onWalkabilityCoefficientEntered(LLUICtrl *pUICtrl, LLSD &pPreviousValue);
|
||||
void onApplyChangesClicked();
|
||||
|
||||
void clearFilters();
|
||||
|
|
@ -132,6 +132,11 @@ private:
|
|||
LLButton *mApplyEditsButton;
|
||||
|
||||
LLColor4 mBeaconColor;
|
||||
|
||||
LLSD mPreviousValueA;
|
||||
LLSD mPreviousValueB;
|
||||
LLSD mPreviousValueC;
|
||||
LLSD mPreviousValueD;
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERPATHFINDINGLINKSETS_H
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ class LLIamHere : public LLHTTPClient::Responder
|
|||
|
||||
public:
|
||||
|
||||
static boost::intrusive_ptr< LLIamHere > build( LLFloaterTOS* parent )
|
||||
static LLIamHere* build( LLFloaterTOS* parent )
|
||||
{
|
||||
return boost::intrusive_ptr< LLIamHere >( new LLIamHere( parent ) );
|
||||
return new LLIamHere( parent );
|
||||
};
|
||||
|
||||
virtual void setParent( LLFloaterTOS* parentIn )
|
||||
|
|
@ -102,7 +102,7 @@ class LLIamHere : public LLHTTPClient::Responder
|
|||
|
||||
// this is global and not a class member to keep crud out of the header file
|
||||
namespace {
|
||||
boost::intrusive_ptr< LLIamHere > gResponsePtr = 0;
|
||||
LLPointer< LLIamHere > gResponsePtr = 0;
|
||||
};
|
||||
|
||||
BOOL LLFloaterTOS::postBuild()
|
||||
|
|
|
|||
|
|
@ -2234,12 +2234,11 @@ void LLFolderView::doIdle()
|
|||
mDebugFilters = debug_filters;
|
||||
arrangeAll();
|
||||
}
|
||||
|
||||
BOOL filter_modified_and_active = mFilter->isModified() && mFilter->isNotDefault();
|
||||
mNeedsAutoSelect = filter_modified_and_active &&
|
||||
!(gFocusMgr.childHasKeyboardFocus(this) || gFocusMgr.getMouseCapture());
|
||||
mFilter->clearModified();
|
||||
|
||||
|
||||
// filter to determine visibility before arranging
|
||||
filterFromRoot();
|
||||
|
||||
|
|
|
|||
|
|
@ -115,8 +115,8 @@ void LLPanelMarketplaceInbox::onFocusReceived()
|
|||
if (sidepanel_inventory)
|
||||
{
|
||||
sidepanel_inventory->clearSelections(true, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected());
|
||||
}
|
||||
|
||||
|
|
@ -168,8 +168,8 @@ U32 LLPanelMarketplaceInbox::getFreshItemCount() const
|
|||
if (inbox_item_view && inbox_item_view->isFresh())
|
||||
{
|
||||
fresh_item_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -241,7 +241,7 @@ BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
|
|||
mBaseNormals[i].clear();
|
||||
mBaseBinormals[i].clear();
|
||||
mTexCoords[i].clear();
|
||||
mWeights[i] = 0.f;
|
||||
mWeights[i] = 0.f;
|
||||
}
|
||||
mNumVertices = numVertices;
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -406,6 +406,16 @@ public:
|
|||
LLPolySkeletalDistortion(LLVOAvatar *avatarp);
|
||||
~LLPolySkeletalDistortion();
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
|
||||
// Special: These functions are overridden by child classes
|
||||
LLPolySkeletalDistortionInfo* getInfo() const { return (LLPolySkeletalDistortionInfo*)mInfo; }
|
||||
// This sets mInfo and calls initialization functions
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@ LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :
|
|||
{
|
||||
const S32 numVertices = mNumIndices;
|
||||
|
||||
mCoords = new LLVector4a[numVertices];
|
||||
mNormals = new LLVector4a[numVertices];
|
||||
mBinormals = new LLVector4a[numVertices];
|
||||
mCoords = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mNormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mBinormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mTexCoords = new LLVector2[numVertices];
|
||||
mVertexIndices = new U32[numVertices];
|
||||
|
||||
|
|
@ -89,17 +89,12 @@ LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// ~LLPolyMorphData()
|
||||
//-----------------------------------------------------------------------------
|
||||
LLPolyMorphData::~LLPolyMorphData()
|
||||
{
|
||||
delete [] mVertexIndices;
|
||||
delete [] mCoords;
|
||||
delete [] mNormals;
|
||||
delete [] mBinormals;
|
||||
delete [] mTexCoords;
|
||||
freeData();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -118,12 +113,17 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// free any existing data
|
||||
//-------------------------------------------------------------------------
|
||||
freeData();
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// allocate vertices
|
||||
//-------------------------------------------------------------------------
|
||||
mCoords = new LLVector4a[numVertices];
|
||||
mNormals = new LLVector4a[numVertices];
|
||||
mBinormals = new LLVector4a[numVertices];
|
||||
mCoords = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mNormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mBinormals = static_cast<LLVector4a*>(ll_aligned_malloc_16(numVertices * sizeof(LLVector4a)));
|
||||
mTexCoords = new LLVector2[numVertices];
|
||||
// Actually, we are allocating more space than we need for the skiplist
|
||||
mVertexIndices = new U32[numVertices];
|
||||
|
|
@ -206,6 +206,42 @@ BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// freeData()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLPolyMorphData::freeData()
|
||||
{
|
||||
if (mCoords != NULL)
|
||||
{
|
||||
ll_aligned_free_16(mCoords);
|
||||
mCoords = NULL;
|
||||
}
|
||||
|
||||
if (mNormals != NULL)
|
||||
{
|
||||
ll_aligned_free_16(mNormals);
|
||||
mNormals = NULL;
|
||||
}
|
||||
|
||||
if (mBinormals != NULL)
|
||||
{
|
||||
ll_aligned_free_16(mBinormals);
|
||||
mBinormals = NULL;
|
||||
}
|
||||
|
||||
if (mTexCoords != NULL)
|
||||
{
|
||||
delete [] mTexCoords;
|
||||
mTexCoords = NULL;
|
||||
}
|
||||
|
||||
if (mVertexIndices != NULL)
|
||||
{
|
||||
delete [] mVertexIndices;
|
||||
mVertexIndices = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLPolyMorphTargetInfo()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -48,6 +48,16 @@ public:
|
|||
~LLPolyMorphData();
|
||||
LLPolyMorphData(const LLPolyMorphData &rhs);
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
|
||||
BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
|
||||
const std::string& getName() { return mName; }
|
||||
|
||||
|
|
@ -67,6 +77,9 @@ public:
|
|||
F32 mMaxDistortion; // maximum single vertex distortion in a given morph
|
||||
LLVector4a mAvgDistortion; // average vertex distortion, to infer directionality of the morph
|
||||
LLPolyMeshSharedData* mMesh;
|
||||
|
||||
private:
|
||||
void freeData();
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1859,6 +1859,8 @@ BOOL LLSpatialPartition::remove(LLDrawable *drawablep, LLSpatialGroup *curp)
|
|||
drawablep->setSpatialGroup(NULL);
|
||||
}
|
||||
|
||||
drawablep->setSpatialGroup(NULL);
|
||||
|
||||
assert_octree_valid(mOctree);
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -4194,7 +4196,7 @@ public:
|
|||
{
|
||||
if (index < 255)
|
||||
{
|
||||
if (facep->mDrawInfo->mTextureList.size()<= index)
|
||||
if (facep->mDrawInfo->mTextureList.size() <= index)
|
||||
{
|
||||
llerrs << "Face texture index out of bounds." << llendl;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -350,6 +350,8 @@ public:
|
|||
element_list& getData() { return mOctreeNode->getData(); }
|
||||
element_iter getDataBegin() { return mOctreeNode->getDataBegin(); }
|
||||
element_iter getDataEnd() { return mOctreeNode->getDataEnd(); }
|
||||
bool hasElement(LLDrawable* drawablep) { return std::find(mOctreeNode->getDataBegin(), mOctreeNode->getDataEnd(), drawablep) != mOctreeNode->getDataEnd(); }
|
||||
|
||||
U32 getElementCount() const { return mOctreeNode->getElementCount(); }
|
||||
bool isEmpty() const { return mOctreeNode->isEmpty(); }
|
||||
|
||||
|
|
|
|||
|
|
@ -510,7 +510,13 @@ void LLTexLayerSetBuffer::doUpload()
|
|||
BOOL valid = FALSE;
|
||||
LLPointer<LLImageJ2C> integrity_test = new LLImageJ2C;
|
||||
S32 file_size = 0;
|
||||
U8* data = LLVFile::readFile(gVFS, asset_id, LLAssetType::AT_TEXTURE, &file_size);
|
||||
|
||||
//data buffer MUST be allocated using LLImageBase
|
||||
LLVFile file(gVFS, asset_id, LLAssetType::AT_TEXTURE);
|
||||
file_size = file.getSize();
|
||||
U8* data = integrity_test->allocateData(file_size);
|
||||
file.read(data, file_size);
|
||||
|
||||
if (data)
|
||||
{
|
||||
valid = integrity_test->validate(data, file_size); // integrity_test will delete 'data'
|
||||
|
|
|
|||
|
|
@ -67,6 +67,16 @@ public:
|
|||
|
||||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
|
||||
/*virtual*/ void apply( ESex avatar_sex ) {}
|
||||
|
|
@ -143,6 +153,16 @@ public:
|
|||
LLTexLayerParamColor( LLVOAvatar* avatar );
|
||||
/* virtual */ ~LLTexLayerParamColor();
|
||||
|
||||
void* operator new(size_t size)
|
||||
{
|
||||
return ll_aligned_malloc_16(size);
|
||||
}
|
||||
|
||||
void operator delete(void* ptr)
|
||||
{
|
||||
ll_aligned_free_16(ptr);
|
||||
}
|
||||
|
||||
/*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable = NULL) const;
|
||||
|
||||
// LLVisualParam Virtual functions
|
||||
|
|
|
|||
|
|
@ -2977,7 +2977,9 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)
|
|||
|
||||
~lcl_responder()
|
||||
{
|
||||
LL_CHECK_MEMORY
|
||||
mFetcher->decrCurlPOSTCount();
|
||||
LL_CHECK_MEMORY
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
|
|||
|
|
@ -263,8 +263,8 @@ public :
|
|||
EService mService;
|
||||
};
|
||||
|
||||
typedef boost::intrusive_ptr<TranslationReceiver> TranslationReceiverPtr;
|
||||
typedef boost::intrusive_ptr<KeyVerificationReceiver> KeyVerificationReceiverPtr;
|
||||
typedef LLPointer<TranslationReceiver> TranslationReceiverPtr;
|
||||
typedef LLPointer<KeyVerificationReceiver> KeyVerificationReceiverPtr;
|
||||
|
||||
/**
|
||||
* Translate given text.
|
||||
|
|
|
|||
|
|
@ -5134,12 +5134,6 @@ class LLEditDelete : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
bool enable_object_return()
|
||||
{
|
||||
return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() &&
|
||||
(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER)));
|
||||
}
|
||||
|
||||
void handle_spellcheck_replace_with_suggestion(const LLUICtrl* ctrl, const LLSD& param)
|
||||
{
|
||||
const LLContextMenu* menu = dynamic_cast<const LLContextMenu*>(ctrl->getParent());
|
||||
|
|
@ -5212,6 +5206,12 @@ bool enable_spellcheck_add_to_ignore(const LLUICtrl* ctrl)
|
|||
return (spellcheck_handler) && (spellcheck_handler->canAddToIgnore());
|
||||
}
|
||||
|
||||
bool enable_object_return()
|
||||
{
|
||||
return (!LLSelectMgr::getInstance()->getSelection()->isEmpty() &&
|
||||
(gAgent.isGodlike() || can_derez(DRD_RETURN_TO_OWNER)));
|
||||
}
|
||||
|
||||
bool enable_object_delete()
|
||||
{
|
||||
bool new_value =
|
||||
|
|
|
|||
|
|
@ -3340,9 +3340,9 @@ public :
|
|||
{
|
||||
}
|
||||
|
||||
static boost::intrusive_ptr<ChatTranslationReceiver> build(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, const LLChat &chat, const LLSD &toast_args)
|
||||
static ChatTranslationReceiver* build(const std::string &from_lang, const std::string &to_lang, const std::string &mesg, const LLChat &chat, const LLSD &toast_args)
|
||||
{
|
||||
return boost::intrusive_ptr<ChatTranslationReceiver>(new ChatTranslationReceiver(from_lang, to_lang, mesg, chat, toast_args));
|
||||
return new ChatTranslationReceiver(from_lang, to_lang, mesg, chat, toast_args);
|
||||
}
|
||||
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -237,6 +237,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
|
|||
mTimeDilation(1.f),
|
||||
mRotTime(0.f),
|
||||
mAngularVelocityRot(),
|
||||
mPreviousRotation(),
|
||||
mState(0),
|
||||
mMedia(NULL),
|
||||
mClickAction(0),
|
||||
|
|
@ -784,7 +785,7 @@ BOOL LLViewerObject::setDrawableParent(LLDrawable* parentp)
|
|||
}
|
||||
LLDrawable* old_parent = mDrawable->mParent;
|
||||
mDrawable->mParent = parentp;
|
||||
|
||||
|
||||
if (parentp && mDrawable->isActive())
|
||||
{
|
||||
parentp->makeActive();
|
||||
|
|
@ -1410,9 +1411,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
#else
|
||||
val = (U16 *) &data[count];
|
||||
#endif
|
||||
setAngularVelocity( U16_to_F32(val[VX], -size, size),
|
||||
new_angv.set(U16_to_F32(val[VX], -size, size),
|
||||
U16_to_F32(val[VY], -size, size),
|
||||
U16_to_F32(val[VZ], -size, size));
|
||||
setAngularVelocity(new_angv);
|
||||
break;
|
||||
|
||||
case 16:
|
||||
|
|
@ -1436,9 +1438,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
new_rot.mQ[VZ] = U8_to_F32(data[11], -1.f, 1.f);
|
||||
new_rot.mQ[VW] = U8_to_F32(data[12], -1.f, 1.f);
|
||||
|
||||
setAngularVelocity( U8_to_F32(data[13], -size, size),
|
||||
new_angv.set(U8_to_F32(data[13], -size, size),
|
||||
U8_to_F32(data[14], -size, size),
|
||||
U8_to_F32(data[15], -size, size) );
|
||||
setAngularVelocity(new_angv);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1510,9 +1513,10 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
dp->unpackU16(val[VX], "AccX");
|
||||
dp->unpackU16(val[VY], "AccY");
|
||||
dp->unpackU16(val[VZ], "AccZ");
|
||||
setAngularVelocity( U16_to_F32(val[VX], -64.f, 64.f),
|
||||
new_angv.set(U16_to_F32(val[VX], -64.f, 64.f),
|
||||
U16_to_F32(val[VY], -64.f, 64.f),
|
||||
U16_to_F32(val[VZ], -64.f, 64.f));
|
||||
setAngularVelocity(new_angv);
|
||||
}
|
||||
break;
|
||||
case OUT_FULL_COMPRESSED:
|
||||
|
|
@ -1556,8 +1560,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
|
||||
if (value & 0x80)
|
||||
{
|
||||
dp->unpackVector3(vec, "Omega");
|
||||
setAngularVelocity(vec);
|
||||
dp->unpackVector3(new_angv, "Omega");
|
||||
setAngularVelocity(new_angv);
|
||||
}
|
||||
|
||||
if (value & 0x20)
|
||||
|
|
@ -2038,12 +2042,16 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
}
|
||||
}
|
||||
|
||||
if (new_rot != getRotation()
|
||||
|| new_angv != old_angv)
|
||||
if ((new_rot != getRotation())
|
||||
|| (new_angv != old_angv))
|
||||
{
|
||||
if (new_angv != old_angv)
|
||||
if (new_rot != mPreviousRotation)
|
||||
{
|
||||
resetRot();
|
||||
}
|
||||
else if (new_angv != old_angv)
|
||||
{
|
||||
if (flagUsePhysics())
|
||||
if (flagUsePhysics() || new_angv.isExactlyZero())
|
||||
{
|
||||
resetRot();
|
||||
}
|
||||
|
|
@ -2053,6 +2061,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
}
|
||||
}
|
||||
|
||||
// Remember the last rotation value
|
||||
mPreviousRotation = new_rot;
|
||||
|
||||
// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega)
|
||||
setRotation(new_rot * mAngularVelocityRot);
|
||||
setChanged(ROTATED | SILHOUETTE);
|
||||
|
|
@ -2159,29 +2170,29 @@ void LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
|||
|
||||
if (!mDead)
|
||||
{
|
||||
// CRO - don't velocity interp linked objects!
|
||||
// Leviathan - but DO velocity interp joints
|
||||
if (!mStatic && sVelocityInterpolate && !isSelected())
|
||||
{
|
||||
// calculate dt from last update
|
||||
F32 dt_raw = (F32)(time - mLastInterpUpdateSecs);
|
||||
F32 dt = mTimeDilation * dt_raw;
|
||||
// CRO - don't velocity interp linked objects!
|
||||
// Leviathan - but DO velocity interp joints
|
||||
if (!mStatic && sVelocityInterpolate && !isSelected())
|
||||
{
|
||||
// calculate dt from last update
|
||||
F32 dt_raw = (F32)(time - mLastInterpUpdateSecs);
|
||||
F32 dt = mTimeDilation * dt_raw;
|
||||
|
||||
applyAngularVelocity(dt);
|
||||
|
||||
if (isAttachment())
|
||||
{
|
||||
mLastInterpUpdateSecs = time;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{ // Move object based on it's velocity and rotation
|
||||
interpolateLinearMotion(time, dt);
|
||||
}
|
||||
}
|
||||
|
||||
updateDrawable(FALSE);
|
||||
if (isAttachment())
|
||||
{
|
||||
mLastInterpUpdateSecs = time;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{ // Move object based on it's velocity and rotation
|
||||
interpolateLinearMotion(time, dt);
|
||||
}
|
||||
}
|
||||
|
||||
updateDrawable(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -5384,9 +5395,9 @@ void LLViewerObject::setPhysicsShapeType(U8 type)
|
|||
mPhysicsShapeUnknown = false;
|
||||
if (type != mPhysicsShapeType)
|
||||
{
|
||||
mPhysicsShapeType = type;
|
||||
mCostStale = true;
|
||||
}
|
||||
mPhysicsShapeType = type;
|
||||
mCostStale = true;
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerObject::setPhysicsGravity(F32 gravity)
|
||||
|
|
|
|||
|
|
@ -725,6 +725,7 @@ protected:
|
|||
F32 mTimeDilation; // Time dilation sent with the object.
|
||||
F32 mRotTime; // Amount (in seconds) that object has rotated according to angular velocity (llSetTargetOmega)
|
||||
LLQuaternion mAngularVelocityRot; // accumulated rotation from the angular velocity computations
|
||||
LLQuaternion mPreviousRotation;
|
||||
|
||||
U8 mState; // legacy
|
||||
LLViewerObjectMedia* mMedia; // NULL if no media associated
|
||||
|
|
|
|||
|
|
@ -255,10 +255,9 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
static boost::intrusive_ptr<BaseCapabilitiesComplete> build( U64 region_handle, S32 id )
|
||||
static BaseCapabilitiesComplete* build( U64 region_handle, S32 id )
|
||||
{
|
||||
return boost::intrusive_ptr<BaseCapabilitiesComplete>(
|
||||
new BaseCapabilitiesComplete(region_handle, id) );
|
||||
return new BaseCapabilitiesComplete(region_handle, id);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -2328,7 +2328,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
|
|||
bound_shader = true;
|
||||
gOcclusionCubeProgram.bind();
|
||||
}
|
||||
|
||||
|
||||
if (sUseOcclusion > 1)
|
||||
{
|
||||
if (mCubeVB.isNull())
|
||||
|
|
@ -2506,7 +2506,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
|
|||
{
|
||||
gOcclusionCubeProgram.bind();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mCubeVB.isNull())
|
||||
{ //cube VB will be used for issuing occlusion queries
|
||||
|
|
@ -2563,11 +2563,6 @@ void LLPipeline::updateGL()
|
|||
glu->mInQ = FALSE;
|
||||
LLGLUpdate::sGLQ.pop_front();
|
||||
}
|
||||
|
||||
{ //seed VBO Pools
|
||||
LLFastTimer t(FTM_SEED_VBO_POOLS);
|
||||
LLVertexBuffer::seedPools();
|
||||
}
|
||||
}
|
||||
|
||||
{ //seed VBO Pools
|
||||
|
|
@ -3376,11 +3371,11 @@ void renderScriptedTouchBeacons(LLDrawable* drawablep)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mHighlightFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void renderPhysicalBeacons(LLDrawable* drawablep)
|
||||
{
|
||||
|
|
@ -3405,11 +3400,11 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mHighlightFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void renderMOAPBeacons(LLDrawable* drawablep)
|
||||
{
|
||||
|
|
@ -3445,11 +3440,11 @@ void renderMOAPBeacons(LLDrawable* drawablep)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mHighlightFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void renderParticleBeacons(LLDrawable* drawablep)
|
||||
{
|
||||
|
|
@ -3474,11 +3469,11 @@ void renderParticleBeacons(LLDrawable* drawablep)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mHighlightFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void renderSoundHighlights(LLDrawable* drawablep)
|
||||
{
|
||||
|
|
@ -3496,11 +3491,11 @@ void renderSoundHighlights(LLDrawable* drawablep)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mHighlightFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPipeline::postSort(LLCamera& camera)
|
||||
{
|
||||
|
|
@ -3713,7 +3708,7 @@ void LLPipeline::postSort(LLCamera& camera)
|
|||
if (facep)
|
||||
{
|
||||
gPipeline.mSelectedFaces.push_back(facep);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
<menu_item_call label="Beschäftigt" name="Set Busy"/>
|
||||
</menu>
|
||||
<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
|
||||
<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
|
||||
<menu_item_call label="Kontoübersicht..." name="Manage My Account">
|
||||
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
|
||||
</menu_item_call>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
height="395"
|
||||
width="1075"
|
||||
min_height="395"
|
||||
min_width="1075"
|
||||
min_width="990"
|
||||
layout="topleft"
|
||||
name="floater_pathfinding_linksets"
|
||||
help_topic="floater_pathfinding_linksets"
|
||||
|
|
@ -524,7 +524,7 @@
|
|||
tool_tip="Walkability for characters of type D. Example character type is other."
|
||||
width="45" />
|
||||
<button
|
||||
follows="right|bottom"
|
||||
follows="left|bottom"
|
||||
height="21"
|
||||
label="Apply changes"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -134,16 +134,6 @@
|
|||
top_delta="-25"
|
||||
name="Pipette"
|
||||
width="28" />
|
||||
<check_box
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
initial_value="true"
|
||||
label="Live Preview"
|
||||
layout="topleft"
|
||||
left="4"
|
||||
name="apply_immediate_check"
|
||||
top="262"
|
||||
width="120" />
|
||||
<text
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
|
|
|
|||
|
|
@ -7567,18 +7567,6 @@ You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME]
|
|||
name="LivePreviewUnavailable"
|
||||
type="alert">
|
||||
|
||||
We cannot display a preview of this texture because it is no-copy and/or no-transfer.
|
||||
<usetemplate
|
||||
ignoretext="Warn me that Live Preview mode is not available for no-copy and/or no-transfer textures"
|
||||
name="okignore"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LivePreviewUnavailable"
|
||||
type="alert">
|
||||
|
||||
We cannot display a preview of this texture because it is no-copy and/or no-transfer.
|
||||
<usetemplate
|
||||
ignoretext="Warn me that Live Preview mode is not available for no-copy and/or no-transfer textures"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -299,11 +299,6 @@ LLControlGroup::LLControlGroup(const std::string& name) : LLInstanceTracker<LLCo
|
|||
std::string LLControlGroup::getString(const std::string& name) { return "dummy"; }
|
||||
LLControlGroup::~LLControlGroup() {}
|
||||
|
||||
namespace boost {
|
||||
void intrusive_ptr_add_ref(LLCurl::Responder*) {}
|
||||
void intrusive_ptr_release(LLCurl::Responder*) {}
|
||||
}
|
||||
|
||||
LLCurl::Responder::Responder() {}
|
||||
void LLCurl::Responder::completedHeader(U32, std::string const&, LLSD const&) {}
|
||||
void LLCurl::Responder::completedRaw(U32, const std::string&, const LLChannelDescriptors&, const LLIOPipe::buffer_ptr_t& buffer) {}
|
||||
|
|
@ -314,7 +309,7 @@ void LLCurl::Responder::result(LLSD const&) {}
|
|||
LLCurl::Responder::~Responder() {}
|
||||
|
||||
void LLHTTPClient::get(const std::string&, const LLSD&, ResponderPtr, const LLSD&, const F32) {}
|
||||
void LLHTTPClient::get(const std::string&, boost::intrusive_ptr<LLCurl::Responder>, const LLSD&, const F32) {}
|
||||
void LLHTTPClient::get(const std::string&, LLPointer<LLCurl::Responder>, const LLSD&, const F32) {}
|
||||
|
||||
LLBufferStream::LLBufferStream(const LLChannelDescriptors& channels, LLBufferArray* buffer)
|
||||
: std::iostream(&mStreamBuf), mStreamBuf(channels, buffer) {}
|
||||
|
|
|
|||
|
|
@ -537,6 +537,7 @@ class WindowsManifest(ViewerManifest):
|
|||
result += 'File ' + pkg_file + '\n'
|
||||
else:
|
||||
result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
|
||||
|
||||
# at the end of a delete, just rmdir all the directories
|
||||
if not install:
|
||||
deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list]
|
||||
|
|
@ -1086,7 +1087,6 @@ class Linux_i686Manifest(LinuxManifest):
|
|||
self.path("libalut.so")
|
||||
self.path("libopenal.so", "libopenal.so.1")
|
||||
self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname
|
||||
|
||||
# KLUDGE: As of 2012-04-11, the 'fontconfig' package installs
|
||||
# libfontconfig.so.1.4.4, along with symlinks libfontconfig.so.1
|
||||
# and libfontconfig.so. Before we added support for library-file
|
||||
|
|
@ -1105,7 +1105,13 @@ class Linux_i686Manifest(LinuxManifest):
|
|||
# previous call did, without having to explicitly state the
|
||||
# version number.
|
||||
self.path("libfontconfig.so.*.*")
|
||||
self.path("libtcmalloc.so*") #formerly called google perf tools
|
||||
try:
|
||||
self.path("libtcmalloc.so*") #formerly called google perf tools
|
||||
pass
|
||||
except:
|
||||
print "tcmalloc files not found, skipping"
|
||||
pass
|
||||
|
||||
try:
|
||||
self.path("libfmod-3.75.so")
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -51,37 +51,6 @@ public:
|
|||
};
|
||||
|
||||
|
||||
class LLUpdateChecker::Implementation:
|
||||
public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
Implementation(Client & client);
|
||||
~Implementation();
|
||||
void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,
|
||||
std::string const & servicePath, std::string channel, std::string version);
|
||||
|
||||
// Responder:
|
||||
virtual void completed(U32 status,
|
||||
const std::string & reason,
|
||||
const LLSD& content);
|
||||
virtual void error(U32 status, const std::string & reason);
|
||||
|
||||
private:
|
||||
static const char * sProtocolVersion;
|
||||
|
||||
Client & mClient;
|
||||
LLHTTPClient mHttpClient;
|
||||
bool mInProgress;
|
||||
std::string mVersion;
|
||||
|
||||
std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
|
||||
std::string const & servicePath, std::string channel, std::string version);
|
||||
|
||||
LOG_CLASS(LLUpdateChecker::Implementation);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// LLUpdateChecker
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -134,13 +103,7 @@ void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolV
|
|||
std::string checkUrl = buildUrl(protocolVersion, hostUrl, servicePath, channel, version);
|
||||
LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl;
|
||||
|
||||
// The HTTP client will wrap a raw pointer in a boost::intrusive_ptr causing the
|
||||
// passed object to be silently and automatically deleted. We pass a self-
|
||||
// referential intrusive pointer to which we add a reference to keep the
|
||||
// client from deleting the update checker implementation instance.
|
||||
LLHTTPClient::ResponderPtr temporaryPtr(this);
|
||||
boost::intrusive_ptr_add_ref(temporaryPtr.get());
|
||||
mHttpClient.get(checkUrl, temporaryPtr);
|
||||
mHttpClient.get(checkUrl, this);
|
||||
}
|
||||
|
||||
void LLUpdateChecker::Implementation::completed(U32 status,
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
#include "llhttpclient.h"
|
||||
|
||||
//
|
||||
// Implements asynchronous checking for updates.
|
||||
|
|
@ -36,7 +37,36 @@
|
|||
class LLUpdateChecker {
|
||||
public:
|
||||
class Client;
|
||||
class Implementation;
|
||||
class Implementation:
|
||||
|
||||
public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
Implementation(Client & client);
|
||||
~Implementation();
|
||||
void checkVersion(std::string const & protocolVersion, std::string const & hostUrl,
|
||||
std::string const & servicePath, std::string channel, std::string version);
|
||||
|
||||
// Responder:
|
||||
virtual void completed(U32 status,
|
||||
const std::string & reason,
|
||||
const LLSD& content);
|
||||
virtual void error(U32 status, const std::string & reason);
|
||||
|
||||
private:
|
||||
static const char * sProtocolVersion;
|
||||
|
||||
Client & mClient;
|
||||
LLHTTPClient mHttpClient;
|
||||
bool mInProgress;
|
||||
std::string mVersion;
|
||||
|
||||
std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
|
||||
std::string const & servicePath, std::string channel, std::string version);
|
||||
|
||||
LOG_CLASS(LLUpdateChecker::Implementation);
|
||||
};
|
||||
|
||||
|
||||
// An exception that may be raised on check errors.
|
||||
class CheckError;
|
||||
|
|
@ -48,7 +78,7 @@ public:
|
|||
std::string const & servicePath, std::string channel, std::string version);
|
||||
|
||||
private:
|
||||
boost::shared_ptr<Implementation> mImplementation;
|
||||
LLPointer<Implementation> mImplementation;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue