Merge git://github.com/Shyotl/SingularityViewer

This commit is contained in:
Siana Gearz
2011-06-18 22:44:31 +02:00
21 changed files with 208 additions and 154 deletions

View File

@@ -194,22 +194,30 @@ LLOSInfo::LLOSInfo() :
if(osvi.wProductType == VER_NT_WORKSTATION)
mOSStringSimple = "Microsoft Windows XP x64 Edition ";
else
mOSStringSimple = "Microsoft Windows Server 2003 ";
mOSStringSimple = "Microsoft Windows Server 2003 ";
}
else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 1)
else if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 2)
{
if(osvi.dwMinorVersion == 0)
{
mOSStringSimple = "Microsoft Windows Vista ";
if(osvi.wProductType == VER_NT_WORKSTATION)
mOSStringSimple = "Microsoft Windows Vista ";
else
mOSStringSimple = "Windows Server 2008 ";
}
else if(osvi.dwMinorVersion == 1)
{
mOSStringSimple = "Microsoft Windows 7 ";
if(osvi.wProductType == VER_NT_WORKSTATION)
mOSStringSimple = "Microsoft Windows 7 ";
else
mOSStringSimple = "Windows Server 2008 R2 ";
}
if(osvi.wProductType != VER_NT_WORKSTATION)
else if(osvi.dwMinorVersion == 2)
{
mOSStringSimple += "Server ";
if(osvi.wProductType == VER_NT_WORKSTATION)
mOSStringSimple = "Microsoft Windows 8 ";
else
mOSStringSimple = "Windows Server 2012 ";
}
///get native system info if available..
@@ -314,8 +322,7 @@ LLOSInfo::LLOSInfo() :
std::string compatibility_mode;
if(got_shell32_version)
{
if(osvi.dwMajorVersion != shell32_major
|| osvi.dwMinorVersion != shell32_minor)
if(osvi.dwMajorVersion != shell32_major || osvi.dwMinorVersion != shell32_minor)
{
compatibility_mode = llformat(" compatibility mode. real ver: %d.%d (Build %d)",
shell32_major,

View File

@@ -556,7 +556,7 @@ const U32 LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_EOF] =
// http_request string constants
extern const char* URL_REQUEST_GRANTED;
extern const char* URL_REQUEST_DENIED;
extern const U64 LSL_HTTP_REQUEST_TIMEOUT;
extern const U64 LSL_HTTP_REQUEST_TIMEOUT_USEC;
#endif

View File

@@ -312,7 +312,7 @@ void LLScriptScriptCodeChunk::build(LLFILE *efp, LLFILE *bcfp)
set_register(mCompleteCode, LREG_TM, mTotalSize);
if (fwrite(mCompleteCode, 1, mTotalSize, bcfp) != mTotalSize)
if (fwrite(mCompleteCode, 1, mTotalSize, bcfp) != (size_t)mTotalSize)
{
llwarns << "Short write" << llendl;
}

View File

@@ -631,8 +631,8 @@ static void print_cil_cast(LLFILE* fp, LSCRIPTType srcType, LSCRIPTType targetTy
switch(targetType)
{
case LST_INTEGER:
//fprintf(fp, "call int32 [LslLibrary]LindenLab.SecondLife.LslRunTime::ToInteger(float32)\n");
fprintf(fp, "conv.i4\n"); // TODO replace this line with the above
fprintf(fp, "call int32 [LslLibrary]LindenLab.SecondLife.LslRunTime::ToInteger(float32)\n");
//fprintf(fp, "conv.i4\n"); // TODO replace this line with the above
// we the entire grid is > 1.25.1
break;
case LST_STRING:
@@ -8375,10 +8375,18 @@ void LLScriptStateChange::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTComp
chunk->addInteger(mIdentifier->mScopeEntry->mCount);
}
break;
case LSCP_TYPE:
mReturnType = basetype;
break;
case LSCP_EMIT_CIL_ASSEMBLY:
fprintf(fp, "ldarg.0\n");
fprintf(fp, "ldstr \"%s\"\n", mIdentifier->mName);
fprintf(fp, "call instance void class [LslUserScript]LindenLab.SecondLife.LslUserScript::ChangeState(string)\n");
// We are doing a state change. In the LSL interpreter, this is basically a longjmp. We emulate it
// here using a call to the ChangeState followed by a short cut return of the current method. To
// maintain type safety we need to push an arbitrary variable of the current method's return type
// onto the stack before returning. This will be ignored and discarded.
print_cil_init_variable(fp, mReturnType);
fprintf(fp, "ret\n");
break;
default:
@@ -9799,6 +9807,9 @@ void LLScriptEventHandler::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCom
break;
case LSCP_EMIT_BYTE_CODE:
{
llassert(mEventp);
if (!mEventp) return;
// order for event handler
// set jump table value
S32 jumpoffset;
@@ -9812,13 +9823,11 @@ void LLScriptEventHandler::recurse(LLFILE *fp, S32 tabs, S32 tabsize, LSCRIPTCom
chunk->addBytes(4);
// null terminated event name and null terminated parameters
if (mEventp)
{
LLScriptByteCodeChunk *event = new LLScriptByteCodeChunk(FALSE);
mEventp->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, event, heap, stacksize, entry, entrycount, NULL);
chunk->addBytes(event->mCodeChunk, event->mCurrentOffset);
delete event;
}
LLScriptByteCodeChunk *event = new LLScriptByteCodeChunk(FALSE);
mEventp->recurse(fp, tabs, tabsize, pass, ptype, prunearg, scope, type, basetype, count, event, heap, stacksize, entry, entrycount, NULL);
chunk->addBytes(event->mCodeChunk, event->mCurrentOffset);
delete event;
chunk->addBytes(1);
// now we're at the first opcode
@@ -10620,6 +10629,8 @@ LLScriptScript::LLScriptScript(LLScritpGlobalStorage *globals,
}
temp = temp->mNextp;
}
mClassName[0] = '\0';
}
void LLScriptScript::setBytecodeDest(const char* dst_filename)

View File

@@ -1876,7 +1876,7 @@ class LLScriptStateChange : public LLScriptStatement
{
public:
LLScriptStateChange(S32 line, S32 col, LLScriptIdentifier *identifier)
: LLScriptStatement(line, col, LSSMT_STATE_CHANGE), mIdentifier(identifier)
: LLScriptStatement(line, col, LSSMT_STATE_CHANGE), mIdentifier(identifier), mReturnType(LST_NULL)
{
}
@@ -1888,6 +1888,7 @@ public:
S32 getSize();
LLScriptIdentifier *mIdentifier;
LSCRIPTType mReturnType;
};
class LLScriptJump : public LLScriptStatement
@@ -2209,7 +2210,7 @@ class LLScriptState : public LLScriptFilePosition
{
public:
LLScriptState(S32 line, S32 col, LSCRIPTStateType type, LLScriptIdentifier *identifier, LLScriptEventHandler *event)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mEvent(event), mNextp(NULL)
: LLScriptFilePosition(line, col), mType(type), mIdentifier(identifier), mEvent(event), mNextp(NULL), mStateScope(NULL)
{
}

View File

@@ -36,7 +36,8 @@
#include "lscript_byteconvert.h"
#include "linked_lists.h"
#include "lscript_library.h"
#include "lltimer.h"
class LLTimer;
// Return values for run() methods
const U32 NO_DELETE_FLAG = 0x0000;
@@ -370,8 +371,7 @@ class LLScriptExecute
{
public:
LLScriptExecute();
virtual ~LLScriptExecute() {;}
virtual ~LLScriptExecute() = 0;
virtual S32 getVersion() const = 0;
virtual void deleteAllEvents() = 0;
virtual void addEvent(LLScriptDataCollection* event) = 0;

View File

@@ -41,6 +41,8 @@
#include "lscript_library.h"
#include "lscript_heapruntime.h"
#include "lscript_alloc.h"
#include "llstat.h"
// Static
const S32 DEFAULT_SCRIPT_TIMER_CHECK_SKIP = 4;
@@ -72,12 +74,12 @@ const char* URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";
const char* URL_REQUEST_DENIED = "URL_REQUEST_DENIED";
// HTTP Requests to LSL scripts will time out after 25 seconds.
const U64 LSL_HTTP_REQUEST_TIMEOUT = 25 * USEC_PER_SEC;
const U64 LSL_HTTP_REQUEST_TIMEOUT_USEC = 25 * USEC_PER_SEC;
LLScriptExecuteLSL2::LLScriptExecuteLSL2(LLFILE *fp)
{
U8 sizearray[4];
S32 filesize;
size_t filesize;
S32 pos = 0;
if (fread(&sizearray, 1, 4, fp) != 4)
{
@@ -110,6 +112,7 @@ LLScriptExecuteLSL2::LLScriptExecuteLSL2(const U8* bytecode, U32 bytecode_size)
init();
}
LLScriptExecute::~LLScriptExecute() {}
LLScriptExecuteLSL2::~LLScriptExecuteLSL2()
{
delete[] mBuffer;
@@ -4234,19 +4237,16 @@ S32 lscript_push_variable(LLScriptLibData *data, U8 *buffer)
return 4;
}
BOOL run_calllib(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
// Shared code for run_calllib() and run_calllib_two_byte()
BOOL run_calllib_common(U8 *buffer, S32 &offset, const LLUUID &id, U16 arg)
{
if (b_print)
printf("[0x%X]\tCALLLIB ", offset);
offset++;
U8 arg = safe_instruction_bytestream2byte(buffer, offset);
if (arg >= (U8)gScriptLibrary.mFunctions.size())
if (arg >= gScriptLibrary.mFunctions.size())
{
set_fault(buffer, LSRF_BOUND_CHECK_ERROR);
return FALSE;
}
if (b_print)
printf("%d (%s)\n", (U32)arg, gScriptLibrary.mFunctions[arg].mName);
LLScriptLibraryFunction const & function = gScriptLibrary.mFunctions[arg];
// pull out the arguments and the return values
LLScriptLibData *arguments = NULL;
@@ -4254,14 +4254,14 @@ BOOL run_calllib(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
S32 i, number;
if (gScriptLibrary.mFunctions[arg].mReturnType)
if (function.mReturnType)
{
returnvalue = new LLScriptLibData;
}
if (gScriptLibrary.mFunctions[arg].mArgs)
if (function.mArgs)
{
number = (S32)strlen(gScriptLibrary.mFunctions[arg].mArgs); /*Flawfinder: ignore*/
number = (S32)strlen(function.mArgs); //Flawfinder: ignore
arguments = new LLScriptLibData[number];
}
else
@@ -4271,24 +4271,18 @@ BOOL run_calllib(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
for (i = number - 1; i >= 0; i--)
{
lscript_pop_variable(&arguments[i], buffer, gScriptLibrary.mFunctions[arg].mArgs[i]);
lscript_pop_variable(&arguments[i], buffer, function.mArgs[i]);
}
if (b_print)
{
printf("See LSLTipText_%s in strings.xml for usage\n", gScriptLibrary.mFunctions[arg].mName);
}
// Actually execute the function call
function.mExecFunc(returnvalue, arguments, id);
{
// LLFastTimer time_in_libraries1(LLFastTimer::FTM_TEMP7);
gScriptLibrary.mFunctions[arg].mExecFunc(returnvalue, arguments, id);
}
add_register_fp(buffer, LREG_ESR, -gScriptLibrary.mFunctions[arg].mEnergyUse);
add_register_fp(buffer, LREG_SLR, gScriptLibrary.mFunctions[arg].mSleepTime);
add_register_fp(buffer, LREG_ESR, -(function.mEnergyUse));
add_register_fp(buffer, LREG_SLR, function.mSleepTime);
if (returnvalue)
{
returnvalue->mType = char2type(*gScriptLibrary.mFunctions[arg].mReturnType);
returnvalue->mType = char2type(*function.mReturnType);
lscript_push_return_variable(returnvalue, buffer);
}
@@ -4305,72 +4299,32 @@ BOOL run_calllib(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
}
BOOL run_calllib(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
{
offset++;
U16 arg = (U16) safe_instruction_bytestream2byte(buffer, offset);
if (b_print &&
arg < gScriptLibrary.mFunctions.size())
{
printf("[0x%X]\tCALLLIB ", offset);
LLScriptLibraryFunction const & function = gScriptLibrary.mFunctions[arg];
printf("%d (%s)\n", (U32)arg, function.mName);
//printf("%s\n", function.mDesc);
}
return run_calllib_common(buffer, offset, id, arg);
}
BOOL run_calllib_two_byte(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)
{
if (b_print)
printf("[0x%X]\tCALLLIB ", offset);
offset++;
U16 arg = safe_instruction_bytestream2u16(buffer, offset);
if (arg >= (U16)gScriptLibrary.mFunctions.size())
if (b_print &&
arg < gScriptLibrary.mFunctions.size())
{
set_fault(buffer, LSRF_BOUND_CHECK_ERROR);
return FALSE;
printf("[0x%X]\tCALLLIB ", (offset-1));
LLScriptLibraryFunction const & function = gScriptLibrary.mFunctions[arg];
printf("%d (%s)\n", (U32)arg, function.mName);
//printf("%s\n", function.mDesc);
}
if (b_print)
printf("%d (%s)\n", (U32)arg, gScriptLibrary.mFunctions[arg].mName);
// pull out the arguments and the return values
LLScriptLibData *arguments = NULL;
LLScriptLibData *returnvalue = NULL;
S32 i, number;
if (gScriptLibrary.mFunctions[arg].mReturnType)
{
returnvalue = new LLScriptLibData;
}
if (gScriptLibrary.mFunctions[arg].mArgs)
{
number = (S32)strlen(gScriptLibrary.mFunctions[arg].mArgs); /*Flawfinder: ignore*/
arguments = new LLScriptLibData[number];
}
else
{
number = 0;
}
for (i = number - 1; i >= 0; i--)
{
lscript_pop_variable(&arguments[i], buffer, gScriptLibrary.mFunctions[arg].mArgs[i]);
}
if (b_print)
{
printf("See LSLTipText_%s in strings.xml for usage\n", gScriptLibrary.mFunctions[arg].mName);
}
{
// LLFastTimer time_in_libraries2(LLFastTimer::FTM_TEMP8);
gScriptLibrary.mFunctions[arg].mExecFunc(returnvalue, arguments, id);
}
add_register_fp(buffer, LREG_ESR, -gScriptLibrary.mFunctions[arg].mEnergyUse);
add_register_fp(buffer, LREG_SLR, gScriptLibrary.mFunctions[arg].mSleepTime);
if (returnvalue)
{
returnvalue->mType = char2type(*gScriptLibrary.mFunctions[arg].mReturnType);
lscript_push_return_variable(returnvalue, buffer);
}
delete [] arguments;
delete returnvalue;
// reset the BP after calling the library files
S32 bp = lscript_pop_int(buffer);
set_bp(buffer, bp);
// pop off the spot for the instruction pointer
lscript_poparg(buffer, 4);
return FALSE;
return run_calllib_common(buffer, offset, id, arg);
}

View File

@@ -39,7 +39,7 @@
LLScriptLSOParse::LLScriptLSOParse(LLFILE *fp)
{
U8 sizearray[4];
S32 filesize;
size_t filesize;
S32 pos = 0;
if (fread(&sizearray, 1, 4, fp) != 4)
{

View File

@@ -35,6 +35,6 @@
#include "lscript_library.h"
extern LLScriptLibrary gScriptLibrary;
#endif

View File

@@ -70,7 +70,7 @@ public:
std::vector<LLScriptLibraryFunction> mFunctions;
};
extern LLScriptLibrary gScriptLibrary;
class LLScriptLibData
{
@@ -428,4 +428,6 @@ public:
};
extern LLScriptLibrary gScriptLibrary;
#endif

View File

@@ -449,12 +449,13 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "llReleaseURL", NULL, "s");
addFunction(10.f, 0.f, dummy_func, "llHTTPResponse", NULL, "kis");
addFunction(10.f, 0.f, dummy_func, "llGetHTTPHeader", "s", "ks");
//Lesse if I can crash the sim! -HgB
// Prim media (see lscript_prim_media.h)
addFunction(10.f, 1.0f, dummy_func, "llSetPrimMediaParams", "i", "il");
addFunction(10.f, 1.0f, dummy_func, "llGetPrimMediaParams", "l", "il");
addFunction(10.f, 1.0f, dummy_func, "llClearPrimMedia", "i", "i");
addFunction(10.f, 0.f, dummy_func, "llSetLinkPrimitiveParamsFast", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llGetLinkPrimitiveParams", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llGetLinkPrimitiveParams", "l", "il");
addFunction(10.f, 0.f, dummy_func, "llLinkParticleSystem", NULL, "il");
addFunction(10.f, 0.f, dummy_func, "llSetLinkTextureAnim", NULL, "iiiiifff");
@@ -464,9 +465,12 @@ void LLScriptLibrary::init()
addFunction(10.f, 0.f, dummy_func, "llGetUsername", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestUsername", "k", "k");
addFunction(10.f, 0.f, dummy_func, "llGetDisplayName", "s", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k");
addFunction(10.f, 0.f, dummy_func, "llRequestDisplayName", "k", "k");
// energy, sleep, dummy_func, name, return type, parameters, gods-only
addFunction(10.f, 0.f, dummy_func, "llGetEnv", "s", "s");
addFunction(10.f, 0.f, dummy_func, "llRegionSayTo", NULL, "kis");
// energy, sleep, dummy_func, name, return type, parameters, help text, gods-only
// IF YOU ADD NEW SCRIPT CALLS, YOU MUST PUT THEM AT THE END OF THIS LIST.
// Otherwise the bytecode numbers for each call will be wrong, and all

View File

@@ -1428,6 +1428,7 @@ void LLAgent::stopAutoPilot(BOOL user_cancel)
if (mAutoPilotFinishedCallback)
{
mAutoPilotFinishedCallback(!user_cancel && dist_vec_squared(gAgent.getPositionGlobal(), mAutoPilotTargetGlobal) < (mAutoPilotStopDistance * mAutoPilotStopDistance), mAutoPilotCallbackData);
mAutoPilotFinishedCallback = NULL;
}
mLeaderID = LLUUID::null;

View File

@@ -585,9 +585,10 @@ bool LLAppViewer::init()
// *NOTE:Mani - LLCurl::initClass is not thread safe.
// Called before threads are created.
LLCurl::initClass();
LL_INFOS("InitInfo") << "LLCurl initialized." << LL_ENDL ;
initThreads();
LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ; ;
LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ;
writeSystemInfo();
@@ -700,6 +701,7 @@ bool LLAppViewer::init()
// Early out from user choice.
return false;
}
LL_INFOS("InitInfo") << "Hardware test initialization done." << LL_ENDL ;
// Always fetch the Ethernet MAC address, needed both for login
// and password load.
@@ -2371,6 +2373,7 @@ bool LLAppViewer::initWindow()
gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
gPipeline.init();
LL_INFOS("AppInit") << "gPipeline Initialized" << LL_ENDL;
stop_glerror();
gViewerWindow->initGLDefaults();
@@ -2398,7 +2401,7 @@ bool LLAppViewer::initWindow()
// show viewer window
//gViewerWindow->mWindow->show();
LL_INFOS("AppInit") << "Window initialization done." << LL_ENDL;
return true;
}

View File

@@ -351,26 +351,48 @@ void create_console()
// redirect unbuffered STDOUT to the console
l_std_handle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT);
fp = _fdopen( h_con_handle, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );
if (h_con_handle == -1)
{
llwarns << "create_console() failed to open stdout handle" << llendl;
}
else
{
fp = _fdopen( h_con_handle, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );
}
// redirect unbuffered STDIN to the console
l_std_handle = (long)GetStdHandle(STD_INPUT_HANDLE);
h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT);
fp = _fdopen( h_con_handle, "r" );
*stdin = *fp;
setvbuf( stdin, NULL, _IONBF, 0 );
if (h_con_handle == -1)
{
llwarns << "create_console() failed to open stdin handle" << llendl;
}
else
{
fp = _fdopen( h_con_handle, "r" );
*stdin = *fp;
setvbuf( stdin, NULL, _IONBF, 0 );
}
// redirect unbuffered STDERR to the console
l_std_handle = (long)GetStdHandle(STD_ERROR_HANDLE);
h_con_handle = _open_osfhandle(l_std_handle, _O_TEXT);
fp = _fdopen( h_con_handle, "w" );
*stderr = *fp;
setvbuf( stderr, NULL, _IOFBF, 1024 ); //Assigning a buffer improves speed a LOT, esp on vista/win7
//_IOLBF is borked.
if (h_con_handle == -1)
{
llwarns << "create_console() failed to open stderr handle" << llendl;
}
else
{
fp = _fdopen( h_con_handle, "w" );
*stderr = *fp;
setvbuf( stderr, NULL, _IOFBF, 1024 ); //Assigning a buffer improves speed a LOT, esp on vista/win7
//_IOLBF is borked.
}
}
LLAppViewerWin32::LLAppViewerWin32(const char* cmd_line) :
mCmdLine(cmd_line)
{

View File

@@ -100,6 +100,13 @@ void LLStandardBumpmap::restoreGL()
// static
void LLStandardBumpmap::addstandard()
{
if(!gTextureList.isInitialized())
{
//Note: loading pre-configuration sometimes triggers this call.
//But it is safe to return here because bump images will be reloaded during initialization later.
return ;
}
// can't assert; we destroyGL and restoreGL a lot during *first* startup, which populates this list already, THEN we explicitly init the list as part of *normal* startup. Sigh. So clear the list every time before we (re-)add the standard bumpmaps.
//llassert( LLStandardBumpmap::sStandardBumpmapCount == 0 );
clear();
@@ -891,6 +898,11 @@ void LLBumpImageList::destroyGL()
void LLBumpImageList::restoreGL()
{
if(!gTextureList.isInitialized())
{
//safe to return here because bump images will be reloaded during initialization later.
return ;
}
LLStandardBumpmap::restoreGL();
// Images will be recreated as they are needed.
}

View File

@@ -366,10 +366,8 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
{
LLVolume* volume = mVO->getVolume();
LLPath *path = &volume->getPath();
if ((mSimulateRes == 0 || !mInitialized)) // if its uninitialized but not visible, what then? - Nyx
if ((mSimulateRes == 0 || !mInitialized) && mVO->mDrawable->isVisible())
{
//if(mInitialized && !mVO->mDrawable->isVisible())
// return; //avoiding the assert below...
mVO->markForUpdate(TRUE);
if (!doIdleUpdate(gAgent, *LLWorld::getInstance(), 0.0))
{
@@ -377,7 +375,11 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
}
}
llassert_always(mInitialized);
if(!mInitialized)
{
//the object is not visible
return ;
}
S32 num_sections = 1 << mSimulateRes;

View File

@@ -1385,6 +1385,11 @@ BOOL LLPanelAvatar::postBuild(void)
childSetVisible("csr_btn", FALSE);
childSetEnabled("csr_btn", FALSE);
//This text never changes. We simply toggle visibility.
childSetVisible("online_yes", FALSE);
childSetColor("online_yes",LLColor4::green);
childSetValue("online_yes","Currently Online");
return TRUE;
}
@@ -1443,12 +1448,7 @@ void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status)
online_status = ONLINE_STATUS_YES;
}
if(online_status == ONLINE_STATUS_YES)
{
mPanelSecondLife->childSetVisible("online_yes", TRUE);
mPanelSecondLife->childSetColor("online_yes",LLColor4::green);
mPanelSecondLife->childSetValue("online_yes","Currently Online");
}
mPanelSecondLife->childSetVisible("online_yes", online_status == ONLINE_STATUS_YES);
// Since setOnlineStatus gets called after setAvatarID
// need to make sure that "Offer Teleport" doesn't get set

View File

@@ -87,13 +87,16 @@ LLViewerTextureList::LLViewerTextureList()
: mForceResetTextureStats(FALSE),
mUpdateStats(FALSE),
mMaxResidentTexMemInMegaBytes(0),
mMaxTotalTextureMemInMegaBytes(0)
mMaxTotalTextureMemInMegaBytes(0),
mInitialized(FALSE)
{
}
void LLViewerTextureList::init()
{
mInitialized = TRUE ;
sNumImages = 0;
mUpdateStats = TRUE;
mMaxResidentTexMemInMegaBytes = 0;
mMaxTotalTextureMemInMegaBytes = 0 ;
if (gNoRender)
@@ -102,8 +105,6 @@ void LLViewerTextureList::init()
return;
}
mUpdateStats = TRUE;
// Update how much texture RAM we're allowed to use.
updateMaxResidentTexMem(0); // 0 = use current
@@ -115,6 +116,10 @@ void LLViewerTextureList::doPreloadImages()
{
LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;
llassert_always(mInitialized) ;
llassert_always(mImageList.empty()) ;
llassert_always(mUUIDMap.empty()) ;
// Set the "missing asset" image
LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
@@ -286,6 +291,8 @@ void LLViewerTextureList::shutdown()
mUUIDMap.clear();
mImageList.clear();
mInitialized = FALSE ; //prevent loading textures again.
}
void LLViewerTextureList::dump()
@@ -312,6 +319,7 @@ void LLViewerTextureList::destroyGL(BOOL save_state)
void LLViewerTextureList::restoreGL()
{
llassert_always(mInitialized) ;
LLImageGL::restoreGL();
}
@@ -332,6 +340,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
LLGLenum primary_format,
const LLUUID& force_id)
{
if(!mInitialized)
{
return NULL ;
}
std::string full_path = gDirUtilp->findSkinnedFilename("textures", filename);
if (full_path.empty())
{
@@ -352,6 +365,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
LLGLenum primary_format,
const LLUUID& force_id)
{
if(!mInitialized)
{
return NULL ;
}
if (gNoRender)
{
// Never mind that this ignores image_set_id;
@@ -418,6 +436,11 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
LLGLenum primary_format,
LLHost request_from_host)
{
if(!mInitialized)
{
return NULL ;
}
// Return the image with ID image_id
// If the image is not found, creates new image and
// enqueues a request for transmission
@@ -846,7 +869,7 @@ F32 LLViewerTextureList::updateImagesFetchTextures(F32 max_time)
for (entries_list_t::iterator iter3 = entries.begin();
iter3 != entries.end(); )
{
LLPointer<LLViewerFetchedTexture> imagep = *iter3++;
LLViewerFetchedTexture* imagep = *iter3++;
bool fetching = imagep->updateFetch();
if (fetching)

View File

@@ -90,6 +90,7 @@ public:
void dump();
void destroyGL(BOOL save_state = TRUE);
void restoreGL();
BOOL isInitialized() const {return mInitialized;}
LLViewerFetchedTexture *findImage(const LLUUID &image_id);
@@ -196,6 +197,7 @@ private:
// simply holds on to LLViewerFetchedTexture references to stop them from being purged too soon
std::set<LLPointer<LLViewerFetchedTexture> > mImagePreloads;
BOOL mInitialized ;
BOOL mUpdateStats;
S32 mMaxResidentTexMemInMegaBytes;
S32 mMaxTotalTextureMemInMegaBytes;

View File

@@ -1560,6 +1560,7 @@ LLViewerWindow::LLViewerWindow(
gSavedSettings.setBOOL("RenderVBOEnable", FALSE);
}
LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"), gSavedSettings.getBOOL("RenderVBOMappingDisable"));
LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ;
if (LLFeatureManager::getInstance()->isSafe()
|| (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())

View File

@@ -379,8 +379,7 @@ Returns the rotation of detected object number (returns &lt;0,0,0,1&gt; if numbe
</string>
<string name="LSLTipText_llDetectedGroup">
integer llDetectedGroup(integer number)
Returns an integer that is a boolean representing if the detected object or avatar is in the same group
that the prim containing the script is set to
Returns TRUE if detected object is part of same group as owner
</string>
<string name="LSLTipText_llDetectedLinkNumber">
integer llDetectedLinkNumber(integer number)
@@ -1656,7 +1655,8 @@ Returns the value for header for request_id
</string>
<string name="LSLTipText_llGetPrimMediaParams">
list llGetPrimMediaParams(integer face, list params)
Returns a list of values in the order requested.
Returns the media params for a particular face on an object, given the desired list of names, in the order requested.
(Returns an empty list if no media exists on the face.)
</string>
<string name="LSLTipText_llClearPrimMedia">
integer llClearPrimMedia(integer face)
@@ -1667,12 +1667,13 @@ Returns the value for header for request_id
Set primitive parameters for linknumber based on rules with no built-in script sleep.
</string>
<string name="LSLTipText_llGetLinkPrimitiveParams">
list llGetLinkPrimitiveParams(integer link, list params)
Returns the list of primitive attributes requested in the params list for link.
list llGetLinkPrimitiveParams(integer linknumber,list rules)
Get primitive parameters for linknumber based on rules.
</string>
<string name="LSLTipText_llLinkParticleSystem">
list llLinkParticleSystem(integer link, list rules)
A particle system defined by a list of rules is set for the prim(s) link.
list llLinkParticleSystem(integer linknumber, list rules)
Creates a particle system based on rules. Empty list removes particle system from object.
List format is [ rule1, data1, rule2, data2 . . . rulen, datan ].
</string>
<string name="LSLTipText_llSetLinkTextureAnim">
llSetLinkTextureAnim(integer link, integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate)
@@ -1698,6 +1699,14 @@ Returns the value for header for request_id
key llRequestDisplayName(key id)
Requests name of an avatar. When data is available the dataserver event will be raised.
</string>
<string name="LSLTipText_llRegionSayTo">
llRegionSayTo(key target, integer channel, string msg)
Sends msg on channel (not DEBUG_CHANNEL) directly to prim or avatar target anywhere within the region
</string>
<string name="LSLTipText_llGetEnv">
string llGetEnv(string name)
Returns a string with the requested data about the region
</string>
</strings>