commit
8589d8175e
|
|
@ -543,14 +543,13 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb
|
|||
return 0;
|
||||
}
|
||||
|
||||
S32 off;
|
||||
if (offset < 0)
|
||||
off = LLAPRFile::seek(file_handle, APR_END, 0);
|
||||
else
|
||||
off = LLAPRFile::seek(file_handle, APR_SET, offset);
|
||||
llassert(offset >= 0);
|
||||
|
||||
if (offset > 0)
|
||||
offset = LLAPRFile::seek(file_handle, APR_SET, offset);
|
||||
|
||||
apr_size_t bytes_read;
|
||||
if (off < 0)
|
||||
if (offset < 0)
|
||||
{
|
||||
bytes_read = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ typedef LLAtomic32<U32> LLAtomicU32;
|
|||
typedef LLAtomic32<S32> LLAtomicS32;
|
||||
|
||||
// File IO convenience functions.
|
||||
// Returns NULL if the file fails to openm sets *sizep to file size of not NULL
|
||||
// Returns NULL if the file fails to open, sets *sizep to file size if not NULL
|
||||
// abbreviated flags
|
||||
#define LL_APR_R (APR_READ) // "r"
|
||||
#define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
|
||||
|
|
@ -200,7 +200,7 @@ typedef LLAtomic32<S32> LLAtomicS32;
|
|||
// especially do not put some time-costly operations between open() and close().
|
||||
// otherwise it might lock the APRFilePool.
|
||||
//there are two different apr_pools the APRFile can use:
|
||||
// 1, a temperary pool passed to an APRFile function, which is used within this function and only once.
|
||||
// 1, a temporary pool passed to an APRFile function, which is used within this function and only once.
|
||||
// 2, a global pool.
|
||||
//
|
||||
|
||||
|
|
@ -255,12 +255,12 @@ public:
|
|||
|
||||
// Returns bytes read/written, 0 if read/write fails:
|
||||
static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);
|
||||
static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);
|
||||
static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); // offset<0 means append
|
||||
//*******************************************************************************************************************************
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Function which approprately logs error or remains quiet on
|
||||
* @brief Function which appropriately logs error or remains quiet on
|
||||
* APR_SUCCESS.
|
||||
* @return Returns <code>true</code> if status is an error condition.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ class LLVector2
|
|||
void setVec(const LLVector2 &vec); // deprecated
|
||||
void setVec(const F32 *vec); // deprecated
|
||||
|
||||
inline bool isFinite() const; // checks to see if all values of LLVector2 are finite
|
||||
|
||||
F32 length() const; // Returns magnitude of LLVector2
|
||||
F32 lengthSquared() const; // Returns magnitude squared of LLVector2
|
||||
F32 normalize(); // Normalizes and returns the magnitude of LLVector2
|
||||
|
|
@ -215,6 +217,7 @@ inline void LLVector2::setVec(const F32 *vec)
|
|||
mV[VY] = vec[VY];
|
||||
}
|
||||
|
||||
|
||||
// LLVector2 Magnitude and Normalization Functions
|
||||
|
||||
inline F32 LLVector2::length(void) const
|
||||
|
|
@ -247,6 +250,12 @@ inline F32 LLVector2::normalize(void)
|
|||
return (mag);
|
||||
}
|
||||
|
||||
// checker
|
||||
inline bool LLVector2::isFinite() const
|
||||
{
|
||||
return (llfinite(mV[VX]) && llfinite(mV[VY]));
|
||||
}
|
||||
|
||||
// deprecated
|
||||
inline F32 LLVector2::magVec(void) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1738,8 +1738,18 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
|
|||
|
||||
if (mPickMask)
|
||||
{
|
||||
F32 u = tc.mV[0] - floorf(tc.mV[0]);
|
||||
F32 v = tc.mV[1] - floorf(tc.mV[1]);
|
||||
F32 u,v;
|
||||
if (LL_LIKELY(tc.isFinite()))
|
||||
{
|
||||
u = tc.mV[0] - floorf(tc.mV[0]);
|
||||
v = tc.mV[1] - floorf(tc.mV[1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS_ONCE("render") << "Ugh, non-finite u/v in mask pick" << LL_ENDL;
|
||||
u = v = 0.f;
|
||||
llassert(false);
|
||||
}
|
||||
|
||||
if (LL_UNLIKELY(u < 0.f || u > 1.f ||
|
||||
v < 0.f || v > 1.f))
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ bool LLLFSThread::Request::processRequest()
|
|||
if (mOperation == FILE_READ)
|
||||
{
|
||||
llassert(mOffset >= 0);
|
||||
LLAPRFile infile ;
|
||||
LLAPRFile infile ; // auto-closes
|
||||
infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
|
||||
if (!infile.getFileHandle())
|
||||
{
|
||||
|
|
@ -204,7 +204,6 @@ bool LLLFSThread::Request::processRequest()
|
|||
llassert_always(off >= 0);
|
||||
mBytesRead = infile.read(mBuffer, mBytes );
|
||||
complete = true;
|
||||
infile.close() ;
|
||||
// llinfos << "LLLFSThread::READ:" << mFileName << " Bytes: " << mBytesRead << llendl;
|
||||
}
|
||||
else if (mOperation == FILE_WRITE)
|
||||
|
|
@ -212,7 +211,7 @@ bool LLLFSThread::Request::processRequest()
|
|||
apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
|
||||
if (mOffset < 0)
|
||||
flags |= APR_APPEND;
|
||||
LLAPRFile outfile ;
|
||||
LLAPRFile outfile ; // auto-closes
|
||||
outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
|
||||
if (!outfile.getFileHandle())
|
||||
{
|
||||
|
|
@ -232,7 +231,6 @@ bool LLLFSThread::Request::processRequest()
|
|||
}
|
||||
mBytesRead = outfile.write(mBuffer, mBytes );
|
||||
complete = true;
|
||||
|
||||
// llinfos << "LLLFSThread::WRITE:" << mFileName << " Bytes: " << mBytesRead << "/" << mBytes << " Offset:" << mOffset << llendl;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -116,6 +116,11 @@
|
|||
|
||||
#include "llnotificationmanager.h" //
|
||||
|
||||
#if LL_MSVC
|
||||
// disable boost::lexical_cast warning
|
||||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
|
|
|
|||
|
|
@ -656,6 +656,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
|
|||
mNameMute(FALSE),
|
||||
mRenderGroupTitles(sRenderGroupTitles),
|
||||
mNameAppearance(FALSE),
|
||||
mNameCloud(FALSE),
|
||||
mFirstTEMessageReceived( FALSE ),
|
||||
mFirstAppearanceMessageReceived( FALSE ),
|
||||
mCulled( FALSE ),
|
||||
|
|
@ -2764,25 +2765,20 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
|
|||
|
||||
if (mNameText.notNull() && firstname && lastname)
|
||||
{
|
||||
BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end();
|
||||
BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end();
|
||||
BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end();
|
||||
BOOL is_muted;
|
||||
if (isSelf())
|
||||
{
|
||||
is_muted = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
is_muted = LLMuteList::getInstance()->isMuted(getID());
|
||||
}
|
||||
const BOOL is_away = mSignaledAnimations.find(ANIM_AGENT_AWAY) != mSignaledAnimations.end();
|
||||
const BOOL is_busy = mSignaledAnimations.find(ANIM_AGENT_BUSY) != mSignaledAnimations.end();
|
||||
const BOOL is_appearance = mSignaledAnimations.find(ANIM_AGENT_CUSTOMIZE) != mSignaledAnimations.end();
|
||||
const BOOL is_muted = isSelf() ? FALSE : LLMuteList::getInstance()->isMuted(getID());
|
||||
const BOOL is_cloud = getIsCloud();
|
||||
|
||||
if (mNameString.empty() ||
|
||||
new_name ||
|
||||
(!title && !mTitle.empty()) ||
|
||||
(title && mTitle != title->getString()) ||
|
||||
(is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute)
|
||||
|| is_appearance != mNameAppearance)
|
||||
|| is_appearance != mNameAppearance
|
||||
|| is_cloud != mNameCloud
|
||||
)
|
||||
{
|
||||
std::string line;
|
||||
if (!sRenderGroupTitles)
|
||||
|
|
@ -2836,7 +2832,12 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
|
|||
}
|
||||
line += ")";
|
||||
}
|
||||
if (is_appearance)
|
||||
if (is_cloud)
|
||||
{
|
||||
line += "\n";
|
||||
line += "(" + LLTrans::getString("LoadingData") + ")";
|
||||
}
|
||||
else if (is_appearance)
|
||||
{
|
||||
line += "\n";
|
||||
line += LLTrans::getString("AvatarEditingAppearance");
|
||||
|
|
@ -2845,6 +2846,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
|
|||
mNameBusy = is_busy;
|
||||
mNameMute = is_muted;
|
||||
mNameAppearance = is_appearance;
|
||||
mNameCloud = is_cloud;
|
||||
mTitle = title ? title->getString() : "";
|
||||
LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
|
||||
mNameString = utf8str_to_wstring(line);
|
||||
|
|
@ -5812,27 +5814,29 @@ BOOL LLVOAvatar::isVisible() const
|
|||
&& (mDrawable->isVisible() || mIsDummy);
|
||||
}
|
||||
|
||||
// call periodically to keep isFullyLoaded up to date.
|
||||
// returns true if the value has changed.
|
||||
BOOL LLVOAvatar::updateIsFullyLoaded()
|
||||
// Determine if we have enough avatar data to render
|
||||
BOOL LLVOAvatar::getIsCloud()
|
||||
{
|
||||
// a "heuristic" to determine if we have enough avatar data to render
|
||||
// (to avoid rendering a "Ruth" - DEV-3168)
|
||||
BOOL loading = FALSE;
|
||||
|
||||
// do we have a shape?
|
||||
// Do we have a shape?
|
||||
if (visualParamWeightsAreDefault())
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!isTextureDefined(TEX_LOWER_BAKED) ||
|
||||
!isTextureDefined(TEX_UPPER_BAKED) ||
|
||||
!isTextureDefined(TEX_HEAD_BAKED))
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// call periodically to keep isFullyLoaded up to date.
|
||||
// returns true if the value has changed.
|
||||
BOOL LLVOAvatar::updateIsFullyLoaded()
|
||||
{
|
||||
const BOOL loading = getIsCloud();
|
||||
updateRuthTimer(loading);
|
||||
return processFullyLoadedChange(loading);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -247,7 +247,8 @@ public:
|
|||
public:
|
||||
BOOL isFullyLoaded() const;
|
||||
protected:
|
||||
virtual BOOL updateIsFullyLoaded();
|
||||
virtual BOOL getIsCloud();
|
||||
BOOL updateIsFullyLoaded();
|
||||
BOOL processFullyLoadedChange(bool loading);
|
||||
void updateRuthTimer(bool loading);
|
||||
F32 calcMorphAmount();
|
||||
|
|
@ -828,6 +829,7 @@ private:
|
|||
BOOL mNameBusy;
|
||||
BOOL mNameMute;
|
||||
BOOL mNameAppearance;
|
||||
BOOL mNameCloud;
|
||||
BOOL mRenderGroupTitles;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1697,22 +1697,20 @@ void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
|
|||
llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl;
|
||||
}
|
||||
|
||||
BOOL LLVOAvatarSelf::updateIsFullyLoaded()
|
||||
BOOL LLVOAvatarSelf::getIsCloud()
|
||||
{
|
||||
BOOL loading = FALSE;
|
||||
|
||||
// do we have our body parts?
|
||||
if (gAgentWearables.getWearableCount(WT_SHAPE) == 0 ||
|
||||
gAgentWearables.getWearableCount(WT_HAIR) == 0 ||
|
||||
gAgentWearables.getWearableCount(WT_EYES) == 0 ||
|
||||
gAgentWearables.getWearableCount(WT_SKIN) == 0)
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!isTextureDefined(TEX_HAIR, 0))
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!mPreviousFullyLoaded)
|
||||
|
|
@ -1720,13 +1718,13 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
|
|||
if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_LOWER].mTexLayerSet) &&
|
||||
(!isTextureDefined(TEX_LOWER_BAKED, 0)))
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!isLocalTextureDataAvailable(mBakedTextureDatas[BAKED_UPPER].mTexLayerSet) &&
|
||||
(!isTextureDefined(TEX_UPPER_BAKED, 0)))
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (U32 i = 0; i < mBakedTextureDatas.size(); i++)
|
||||
|
|
@ -1734,23 +1732,23 @@ BOOL LLVOAvatarSelf::updateIsFullyLoaded()
|
|||
if (i == BAKED_SKIRT && !isWearingWearableType(WT_SKIRT))
|
||||
continue;
|
||||
|
||||
BakedTextureData& texture_data = mBakedTextureDatas[i];
|
||||
const BakedTextureData& texture_data = mBakedTextureDatas[i];
|
||||
if (!isTextureDefined(texture_data.mTextureIndex, 0))
|
||||
continue;
|
||||
|
||||
// Check for the case that texture is defined but not sufficiently loaded to display anything.
|
||||
LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
|
||||
const LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
|
||||
if (!baked_img || !baked_img->hasGLTexture())
|
||||
{
|
||||
loading = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return processFullyLoadedChange(loading);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
const LLUUID& LLVOAvatarSelf::grabLocalTexture(ETextureIndex type, U32 index) const
|
||||
{
|
||||
if (canGrabLocalTexture(type, index))
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public:
|
|||
// Loading state
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
/*virtual*/ BOOL updateIsFullyLoaded();
|
||||
/*virtual*/ BOOL getIsCloud();
|
||||
private:
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1725,7 +1725,7 @@ Inventarobjekt(e) verschieben?
|
|||
<notification name="ClickActionNotPayable">
|
||||
Achtung: Die Klickaktion „Objekt bezahlen" wurde eingestellt. Diese funktioniert jedoch nicht, wenn ein Skript mit einer Geldtransaktion () hinzugefügt wird.
|
||||
<form name="form">
|
||||
<ignore name="ignore" text="I habe die Aktion „Objekt bezahlen" eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/>
|
||||
<ignore name="ignore" text="Ich habe die Aktion „Objekt bezahlen" eingestellt, während ich ein Objekt gebaut habe, dass kein Geld()-Skript enthält."/>
|
||||
</form>
|
||||
</notification>
|
||||
<notification name="OpenObjectCannotCopy">
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
[AMT] L$
|
||||
</panel.string>
|
||||
<button label="" label_selected="" name="buycurrency" tool_tip="Mein Kontostand"/>
|
||||
<button label=" " name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
|
||||
<button label="Kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
|
||||
<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
|
||||
24:00 H PST
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -264,7 +264,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s
|
|||
[COUNT]
|
||||
</text>
|
||||
<text left="4" name="Autoreturn" width="412">
|
||||
Devolución automática de objetos de otros (en min., 0 para desactivarla):
|
||||
Devolución automát. de objetos de otros (en min., 0 la desactiva):
|
||||
</text>
|
||||
<line_editor name="clean other time" right="-20"/>
|
||||
<text name="Object Owners:" width="150">
|
||||
|
|
@ -275,7 +275,7 @@ Vaya al menú Mundo > Acerca del terreno o seleccione otra parcela para ver s
|
|||
<name_list name="owner list">
|
||||
<name_list.columns label="Tipo" name="type"/>
|
||||
<name_list.columns label="Nombre" name="name"/>
|
||||
<name_list.columns label="Número" name="count"/>
|
||||
<name_list.columns label="Núm." name="count"/>
|
||||
<name_list.columns label="Más recientes" name="mostrecent"/>
|
||||
</name_list>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -6,23 +6,23 @@
|
|||
<panel.string name="want_apply_text">
|
||||
Vuoi salvare le modifiche?
|
||||
</panel.string>
|
||||
<tab_container height="164" name="roles_tab_container">
|
||||
<panel height="148" label="MEMBRI" name="members_sub_tab" tool_tip="Membri">
|
||||
<tab_container name="roles_tab_container">
|
||||
<panel label="MEMBRI" name="members_sub_tab" tool_tip="Membri">
|
||||
<panel.string name="help_text">
|
||||
Puoi aggiungere o rimuovere i ruoli assegnati ai membri.
|
||||
Seleziona più membri tenendo premuto il tasto Ctrl e
|
||||
cliccando sui loro nomi.
|
||||
</panel.string>
|
||||
<filter_editor label="Filtra Membri" name="filter_input"/>
|
||||
<name_list bottom_delta="-105" height="104" name="member_list">
|
||||
<name_list name="member_list">
|
||||
<name_list.columns label="Socio" name="name"/>
|
||||
<name_list.columns label="Donazioni" name="donated"/>
|
||||
<name_list.columns label="Stato" name="online"/>
|
||||
</name_list>
|
||||
<button label="Invita" name="member_invite" width="165"/>
|
||||
<button label="Invita" name="member_invite"/>
|
||||
<button label="Espelli" name="member_eject"/>
|
||||
</panel>
|
||||
<panel height="148" label="RUOLI" name="roles_sub_tab">
|
||||
<panel label="RUOLI" name="roles_sub_tab">
|
||||
<panel.string name="help_text">
|
||||
I ruoli hanno un titolo con un elenco di abilità permesse
|
||||
che i membri possono eseguire. I membri possono avere
|
||||
|
|
@ -36,7 +36,7 @@ fra cui il ruolo base o "Tutti" e il ruolo del Proprietario, ovvero il
|
|||
Inv_FolderClosed
|
||||
</panel.string>
|
||||
<filter_editor label="Filtra i ruoli" name="filter_input"/>
|
||||
<scroll_list bottom_delta="-104" height="104" name="role_list">
|
||||
<scroll_list name="role_list">
|
||||
<scroll_list.columns label="Ruolo" name="name"/>
|
||||
<scroll_list.columns label="Titolo" name="title"/>
|
||||
<scroll_list.columns label="#" name="members"/>
|
||||
|
|
|
|||
|
|
@ -254,9 +254,9 @@
|
|||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>53e5ab7affff7121a5af2f82b4d58b54</string>
|
||||
<string>78ccac8aaf8ea5bec482dfbcdbeb1651</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20091016.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.19.6-windows-20100414.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -948,9 +948,9 @@ anguage Infrstructure (CLI) international standard</string>
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>7d75751cbd8786ea4d710b50b5931b9b</string>
|
||||
<string>1956228a93537f250b92f2929fa4ea40</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100402.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6+cookies-darwin-20100415.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
|
|
|
|||
Loading…
Reference in New Issue