merge viewer/viewer_1-21 94170-94770 -> release
merge viewer/viewer_1-21-0 94830-95157 -> release Includes: QAR-786 Sandbox buildme for viewer + server Release Notes on the wiki! QAR-797 teleport failures (DEV-6198 / SVC-972) mergememaster
parent
ac4766d435
commit
4a6bacea0f
|
|
@ -1,5 +1,5 @@
|
|||
For full release notes, see:
|
||||
indra/newview/releasenotes.txt
|
||||
|
||||
This is the same asset sourced by the viewer for displaying release notes.
|
||||
http://wiki.secondlife.com/wiki/Release_Notes
|
||||
|
||||
For a log of viewer changes, see:
|
||||
doc/viewer-changes.txt
|
||||
|
|
|
|||
|
|
@ -93,3 +93,10 @@ if (SERVER)
|
|||
endif (NOT LINUX)
|
||||
include(${SERVER_PREFIX}Server.cmake)
|
||||
endif (SERVER)
|
||||
|
||||
# Windows builds include tools like VFS tool
|
||||
if (SERVER)
|
||||
if (WINDOWS)
|
||||
add_subdirectory(${SERVER_PREFIX}tools)
|
||||
endif (WINDOWS)
|
||||
endif (SERVER)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ if (WINDOWS)
|
|||
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MT"
|
||||
CACHE STRING "C++ compiler release-with-debug options" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /MT"
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MT"
|
||||
CACHE STRING "C++ compiler release options" FORCE)
|
||||
|
||||
add_definitions(
|
||||
|
|
@ -45,6 +45,7 @@ if (WINDOWS)
|
|||
/c
|
||||
/Zc:forScope
|
||||
/nologo
|
||||
/Oy-
|
||||
)
|
||||
|
||||
if(MSVC80 OR MSVC90)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ if (NOT STANDALONE)
|
|||
if (VIEWER)
|
||||
set(ARCH_PREBUILT_DIRS
|
||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
|
||||
set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
|
||||
set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
|
||||
else (VIEWER)
|
||||
set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
|
||||
endif (VIEWER)
|
||||
|
|
|
|||
|
|
@ -83,5 +83,5 @@ const std::string LSL_DOC_URL (
|
|||
const std::string SL_KB_URL (
|
||||
"http://secondlife.com/knowledgebase/");
|
||||
|
||||
const std::string RELEASE_NOTES ( "releasenotes.txt");
|
||||
|
||||
const std::string RELEASE_NOTES_BASE_URL (
|
||||
"http://secondlife.com/app/releasenotes/");
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ extern const std::string LSL_DOC_URL;
|
|||
// SL KnowledgeBase page
|
||||
extern const std::string SL_KB_URL;
|
||||
|
||||
// Local Url Release Notes
|
||||
extern const std::string RELEASE_NOTES;
|
||||
// Release Notes Redirect URL for Server and Viewer
|
||||
extern const std::string RELEASE_NOTES_BASE_URL;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3533,7 +3533,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
|
|||
|
||||
for (S32 i = start_face; i <= end_face; i++)
|
||||
{
|
||||
LLVolumeFace face = getVolumeFace((U32)i);
|
||||
const LLVolumeFace &face = getVolumeFace((U32)i);
|
||||
|
||||
LLVector3 box_center = (face.mExtents[0] + face.mExtents[1]) / 2.f;
|
||||
LLVector3 box_size = face.mExtents[1] - face.mExtents[0];
|
||||
|
|
|
|||
|
|
@ -1004,6 +1004,9 @@ void LLGLState::initClass()
|
|||
//make sure multisample defaults to disabled
|
||||
sStateMap[GL_MULTISAMPLE_ARB] = GL_FALSE;
|
||||
glDisable(GL_MULTISAMPLE_ARB);
|
||||
|
||||
//default vertex arrays to enabled.
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
@ -1039,7 +1042,7 @@ void LLGLState::dumpStates()
|
|||
}
|
||||
}
|
||||
|
||||
void LLGLState::checkStates()
|
||||
void LLGLState::checkStates(const std::string& msg)
|
||||
{
|
||||
if (!gDebugGL)
|
||||
{
|
||||
|
|
@ -1063,7 +1066,7 @@ void LLGLState::checkStates()
|
|||
|
||||
if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA)
|
||||
{
|
||||
LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << LL_ENDL;
|
||||
LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << " " << msg << LL_ENDL;
|
||||
}
|
||||
|
||||
for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
|
||||
|
|
@ -1082,7 +1085,7 @@ void LLGLState::checkStates()
|
|||
stop_glerror();
|
||||
}
|
||||
|
||||
void LLGLState::checkTextureChannels()
|
||||
void LLGLState::checkTextureChannels(const std::string& msg)
|
||||
{
|
||||
if (!gDebugGL)
|
||||
{
|
||||
|
|
@ -1183,11 +1186,11 @@ void LLGLState::checkTextureChannels()
|
|||
|
||||
if (error)
|
||||
{
|
||||
LL_GL_ERRS << "GL texture state corruption detected." << LL_ENDL;
|
||||
LL_GL_ERRS << "GL texture state corruption detected. " << msg << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLGLState::checkClientArrays(U32 data_mask)
|
||||
void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
|
||||
{
|
||||
if (!gDebugGL)
|
||||
{
|
||||
|
|
@ -1299,7 +1302,7 @@ void LLGLState::checkClientArrays(U32 data_mask)
|
|||
|
||||
if (error)
|
||||
{
|
||||
LL_GL_ERRS << "GL client array corruption detected." << LL_ENDL;
|
||||
LL_GL_ERRS << "GL client array corruption detected. " << msg << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -223,9 +223,9 @@ public:
|
|||
|
||||
static void resetTextureStates();
|
||||
static void dumpStates();
|
||||
static void checkStates();
|
||||
static void checkTextureChannels();
|
||||
static void checkClientArrays(U32 data_mask = 0x0001);
|
||||
static void checkStates(const std::string& msg = "");
|
||||
static void checkTextureChannels(const std::string& msg = "");
|
||||
static void checkClientArrays(const std::string& msg = "", U32 data_mask = 0x0001);
|
||||
|
||||
protected:
|
||||
static std::map<LLGLenum, LLGLboolean> sStateMap;
|
||||
|
|
|
|||
|
|
@ -99,11 +99,16 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32
|
|||
|
||||
glGenFramebuffersEXT(1, (GLuint *) &mFBO);
|
||||
|
||||
stop_glerror();
|
||||
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);
|
||||
|
||||
stop_glerror();
|
||||
|
||||
if (mDepth)
|
||||
{
|
||||
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, mUsage, mDepth, 0);
|
||||
stop_glerror();
|
||||
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, mUsage, mDepth, 0);
|
||||
stop_glerror();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2937,7 +2937,7 @@ void LLTextEditor::drawText()
|
|||
const LLWString ltext = utf8str_to_wstring(llformat("%*d", UI_TEXTEDITOR_LINE_NUMBER_DIGITS, cur_line_num ));
|
||||
BOOL is_cur_line = getCurrentLine() == cur_line_num;
|
||||
const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
|
||||
const LLColor4 fg_color = is_cur_line ? LLColor4::black : LLColor4::grey4;
|
||||
const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
|
||||
num_font->render(
|
||||
ltext, // string to draw
|
||||
0, // begin offset
|
||||
|
|
|
|||
|
|
@ -1996,26 +1996,25 @@ std::string get_extension(LLAssetType::EType type)
|
|||
std::string extension;
|
||||
switch(type)
|
||||
{
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
extension = ".j2c";
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
extension = ".jp2"; // formerly ".j2c"
|
||||
break;
|
||||
case LLAssetType::AT_SOUND:
|
||||
case LLAssetType::AT_SOUND:
|
||||
extension = ".ogg";
|
||||
break;
|
||||
case LLAssetType::AT_SOUND_WAV:
|
||||
case LLAssetType::AT_SOUND_WAV:
|
||||
extension = ".wav";
|
||||
break;
|
||||
case LLAssetType::AT_TEXTURE_TGA:
|
||||
case LLAssetType::AT_TEXTURE_TGA:
|
||||
extension = ".tga";
|
||||
break;
|
||||
case LLAssetType::AT_IMAGE_JPEG:
|
||||
extension = ".jpeg";
|
||||
break;
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
extension = ".lla";
|
||||
break;
|
||||
default:
|
||||
extension = ".data";
|
||||
default:
|
||||
// Just use the asset server filename extension in most cases
|
||||
extension += ".";
|
||||
extension += LLAssetType::lookup(type);
|
||||
break;
|
||||
}
|
||||
return extension;
|
||||
|
|
@ -2050,6 +2049,7 @@ void LLVFS::dumpFiles()
|
|||
{
|
||||
lockData();
|
||||
|
||||
S32 files_extracted = 0;
|
||||
for (fileblock_map::iterator it = mFileBlocks.begin(); it != mFileBlocks.end(); ++it)
|
||||
{
|
||||
LLVFSFileSpecifier file_spec = it->first;
|
||||
|
|
@ -2073,10 +2073,13 @@ void LLVFS::dumpFiles()
|
|||
ll_apr_file_write(file, buffer, size);
|
||||
apr_file_close(file);
|
||||
delete[] buffer;
|
||||
files_extracted++;
|
||||
}
|
||||
}
|
||||
|
||||
unlockData();
|
||||
|
||||
llinfos << "Extracted " << files_extracted << " files out of " << mFileBlocks.size() << llendl;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
|
|
|||
|
|
@ -264,6 +264,7 @@ LLWindowMacOSX::LLWindowMacOSX(const std::string& title, const std::string& name
|
|||
mWindowTitle[0] = title.length();
|
||||
|
||||
mEventHandlerUPP = NewEventHandlerUPP(staticEventHandler);
|
||||
mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator);
|
||||
mGlobalHandlerRef = NULL;
|
||||
mWindowHandlerRef = NULL;
|
||||
|
||||
|
|
@ -1487,6 +1488,7 @@ void LLWindowMacOSX::adjustCursorDecouple(bool warpingMouse)
|
|||
// llinfos << "adjustCursorDecouple: decoupling cursor" << llendl;
|
||||
CGAssociateMouseAndMouseCursorPosition(false);
|
||||
mCursorDecoupled = true;
|
||||
FlushSpecificEventsFromQueue(GetCurrentEventQueue(), mMoveEventCampartorUPP, NULL);
|
||||
mCursorIgnoreNextDelta = TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1914,6 +1916,23 @@ void LLWindowMacOSX::setupFailure(const std::string& text, const std::string& ca
|
|||
OSMessageBox(text, caption, type);
|
||||
}
|
||||
|
||||
pascal Boolean LLWindowMacOSX::staticMoveEventComparator( EventRef event, void* data)
|
||||
{
|
||||
UInt32 evtClass = GetEventClass (event);
|
||||
UInt32 evtKind = GetEventKind (event);
|
||||
|
||||
if ((evtClass == kEventClassMouse) && ((evtKind == kEventMouseDragged) || (evtKind == kEventMouseMoved)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pascal OSStatus LLWindowMacOSX::staticEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData)
|
||||
{
|
||||
LLWindowMacOSX *self = (LLWindowMacOSX*)userData;
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@ protected:
|
|||
void destroyContext();
|
||||
void setupFailure(const std::string& text, const std::string& caption, U32 type);
|
||||
static pascal OSStatus staticEventHandler (EventHandlerCallRef myHandler, EventRef event, void* userData);
|
||||
static pascal Boolean staticMoveEventComparator( EventRef event, void* data);
|
||||
OSStatus eventHandler (EventHandlerCallRef myHandler, EventRef event);
|
||||
void adjustCursorDecouple(bool warpingMouse = false);
|
||||
void fixWindowSize(void);
|
||||
|
|
@ -170,6 +171,8 @@ protected:
|
|||
EventHandlerUPP mEventHandlerUPP;
|
||||
EventHandlerRef mGlobalHandlerRef;
|
||||
EventHandlerRef mWindowHandlerRef;
|
||||
EventComparatorUPP mMoveEventCampartorUPP;
|
||||
|
||||
Rect mOldMouseClip; // Screen rect to which the mouse cursor was globally constrained before we changed it in clipMouse()
|
||||
Str255 mWindowTitle;
|
||||
double mOriginalAspectRatio;
|
||||
|
|
|
|||
|
|
@ -1387,10 +1387,20 @@ BOOL LLWindowWin32::setCursorPosition(const LLCoordWindow position)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// Inform the application of the new mouse position (needed for per-frame
|
||||
// hover/picking to function).
|
||||
LLCoordGL gl_pos;
|
||||
convertCoords(position, &gl_pos);
|
||||
mCallbacks->handleMouseMove(this, gl_pos, (MASK)0);
|
||||
|
||||
// DEV-18951 VWR-8524 Camera moves wildly when alt-clicking.
|
||||
// Because we have preemptively notified the application of the new
|
||||
// mouse position via handleMouseMove() above, we need to clear out
|
||||
// any stale mouse move events. RN/JC
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE))
|
||||
{ }
|
||||
|
||||
return SetCursorPos(screen_pos.mX, screen_pos.mY);
|
||||
}
|
||||
|
||||
|
|
@ -1943,6 +1953,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleMouseDown(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -1970,6 +1982,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleDoubleClick(window_imp, gl_coord, mask) )
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -2000,6 +2014,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleMouseUp(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -2016,7 +2032,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->interruptLanguageTextInput();
|
||||
}
|
||||
|
||||
// Because we move the cursor position in tllviewerhe app, we need to query
|
||||
// Because we move the cursor position in the llviewerapp, we need to query
|
||||
// to find out where the cursor at the time the event is handled.
|
||||
// If we don't do this, many clicks could get buffered up, and if the
|
||||
// first click changes the cursor position, all subsequent clicks
|
||||
|
|
@ -2032,6 +2048,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleRightMouseDown(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -2058,6 +2076,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleRightMouseUp(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -2090,6 +2110,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleMiddleMouseDown(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -2116,6 +2138,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
window_imp->convertCoords(window_coord, &gl_coord);
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
if (window_imp->mCallbacks->handleMiddleMouseUp(window_imp, gl_coord, mask))
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -171,7 +171,6 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterpreference.cpp
|
||||
llfloaterproperties.cpp
|
||||
llfloaterregioninfo.cpp
|
||||
llfloaterreleasemsg.cpp
|
||||
llfloaterreporter.cpp
|
||||
llfloaterscriptdebug.cpp
|
||||
llfloatersellland.cpp
|
||||
|
|
@ -562,7 +561,6 @@ set(viewer_HEADER_FILES
|
|||
llfloaterpreference.h
|
||||
llfloaterproperties.h
|
||||
llfloaterregioninfo.h
|
||||
llfloaterreleasemsg.h
|
||||
llfloaterreporter.h
|
||||
llfloaterscriptdebug.h
|
||||
llfloatersellland.h
|
||||
|
|
|
|||
|
|
@ -7193,7 +7193,18 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ShowVoiceChannelPopup</key>
|
||||
<key>ShowTutorial</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show tutorial window on login</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ShowVoiceChannelPopup</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Controls visibility of the current voice channel popup above the voice tab</string>
|
||||
|
|
@ -10050,7 +10061,7 @@
|
|||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>WaterEditPresets</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -342,6 +342,8 @@ Disregard96DefaultDrawDistance 1 0
|
|||
|
||||
list NVIDIA_GeForce_8600
|
||||
RenderTextureMemoryMultiple 1 0.375
|
||||
RenderUseImpostors 0 0
|
||||
UseOcclusion 0 0
|
||||
|
||||
/// tweaked ATI to 96 Draw distance
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ ATI All-in-Wonder Radeon .*ATI.*All-in-Wonder Radeon.* 0 1
|
|||
ATI ASUS A9xxx .*ATI.*ASUS.*A9.* 1 1
|
||||
ATI ASUS AH24xx .*ATI.*ASUS.*AH24.* 1 1
|
||||
ATI ASUS AH26xx .*ATI.*ASUS.*AH26.* 3 1
|
||||
ATI ASUS AH36xx .*ATI.*ASUS.*AH36.* 3 1
|
||||
ATI ASUS AX3xx .*ATI.*ASUS.*AX3.* 1 1
|
||||
ATI ASUS AX5xx .*ATI.*ASUS.*AX5.* 1 1
|
||||
ATI ASUS AX8xx .*ATI.*ASUS.*AX8.* 2 1
|
||||
|
|
@ -43,8 +44,13 @@ ATI ASUS EAH26xx .*ATI.*ASUS.*EAH26.* 3 1
|
|||
ATI ASUS EAH34xx .*ATI.*ASUS.*EAH34.* 1 1
|
||||
ATI ASUS EAH36xx .*ATI.*ASUS.*EAH36.* 3 1
|
||||
ATI ASUS EAH38xx .*ATI.*ASUS.*EAH38.* 3 1
|
||||
ATI ASUS EAH48xx .*ATI.*ASUS.*EAH48.* 3 1
|
||||
ATI ASUS X1xxx .*ATI.*ASUS.*X1.* 2 1
|
||||
ATI ASUS X7xx .*ATI.*ASUS.*X7.* 1 1
|
||||
ATI Diamond X550 .*ATI.*Diamond X550.* 1 1
|
||||
ATI Diamond X13xx .*ATI.*Diamond X13.* 1 1
|
||||
ATI Diamond X16xx .*ATI.*Diamond X16.* 1 1
|
||||
ATI Diamond X19xx .*ATI.*Diamond X19.* 1 1
|
||||
ATI FireGL 5200 .*ATI.*FireGL V52.* 0 1
|
||||
ATI FireGL 5xxx .*ATI.*FireGL V5.* 1 1
|
||||
ATI FireGL .*ATI.*Fire.*GL.* 0 1
|
||||
|
|
@ -61,22 +67,24 @@ ATI Mobility Radeon 8xxx .*ATI.*Mobility.*Radeon 8.* 0 1
|
|||
ATI Mobility Radeon 9800 .*ATI.*Mobility.*98.* 1 1
|
||||
ATI Mobility Radeon 9700 .*ATI.*Mobility.*97.* 1 1
|
||||
ATI Mobility Radeon 9600 .*ATI.*Mobility.*96.* 0 1
|
||||
ATI Mobility Radeon X1xxx .*ATI.*Mobility.*X1.* 1 1
|
||||
ATI Mobility Radeon X2xxx .*ATI.*Mobility.*X2.* 1 1
|
||||
ATI Mobility Radeon X1xxx .*ATI.*Mobility.*X1.* 0 1
|
||||
ATI Mobility Radeon X2xxx .*ATI.*Mobility.*X2.* 0 1
|
||||
ATI Mobility Radeon X3xx .*ATI.*Mobility.*X3.* 1 1
|
||||
ATI Mobility Radeon X6xx .*ATI.*Mobility.*X6.* 1 1
|
||||
ATI Mobility Radeon X7xx .*ATI.*Mobility.*X7.* 1 1
|
||||
ATI Mobility Radeon Xxxx .*ATI.*Mobility.*X.* 1 1
|
||||
ATI Mobility Radeon Xxxx .*ATI.*Mobility.*X.* 0 1
|
||||
ATI Mobility Radeon .*ATI.*Mobility.* 0 1
|
||||
ATI Radeon HD 2300 .*ATI.*Radeon HD 23.* 1 1
|
||||
ATI Radeon HD 2300 .*ATI.*Radeon HD 23.* 0 1
|
||||
ATI Radeon HD 2400 .*ATI.*Radeon HD.*24.* 1 1
|
||||
ATI Radeon HD 2600 .*ATI.*Radeon HD 26.* 2 1
|
||||
ATI Radeon HD 2900 .*ATI.*Radeon HD 29.* 3 1
|
||||
ATI Radeon HD 3400 .*ATI.*Radeon HD 34.* 1 1
|
||||
ATI Radeon HD 3600 .*ATI.*Radeon HD 36.* 3 1
|
||||
ATI Radeon HD 3800 .*ATI.*Radeon HD 38.* 3 1
|
||||
ATI Radeon HD 4800 .*ATI.*Radeon HD 48.* 3 1
|
||||
ATI Radeon HD 3400 .*ATI.*Radeon HD.*34.* 1 1
|
||||
ATI Radeon HD 3600 .*ATI.*Radeon HD.*36.* 3 1
|
||||
ATI Radeon HD 3800 .*ATI.*Radeon HD.*38.* 3 1
|
||||
ATI Radeon HD 4800 .*ATI.*Radeon HD.*48.* 3 1
|
||||
ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0
|
||||
ATI Radeon 2100 .*ATI.*Radeon 21.* 0 1
|
||||
ATI Radeon 3100 .*ATI.*Radeon 31.* 1 1
|
||||
ATI Radeon 7xxx .*ATI.*Radeon 7.* 0 1
|
||||
ATI Radeon 8xxx .*ATI.*Radeon 8.* 0 1
|
||||
ATI Radeon 9000 .*ATI.*Radeon 90.* 0 1
|
||||
|
|
@ -100,9 +108,9 @@ ATI Radeon X1600 .*ATI.*Radeon X16.* 1 1
|
|||
ATI Radeon X1700 .*ATI.*Radeon X17.* 1 1
|
||||
ATI Radeon X1800 .*ATI.*Radeon X18.* 3 1
|
||||
ATI Radeon X1900 .*ATI.*Radeon X19.* 3 1
|
||||
ATI Radeon X300 .*ATI.*Radeon *X3.* 1 1
|
||||
ATI Radeon X400 .*ATI.*Radeon X4.* 1 1
|
||||
ATI Radeon X500 .*ATI.*Radeon X5.* 1 1
|
||||
ATI Radeon X300 .*ATI.*Radeon *X3.* 0 1
|
||||
ATI Radeon X400 .*ATI.*Radeon X4.* 0 1
|
||||
ATI Radeon X500 .*ATI.*Radeon X5.* 0 1
|
||||
ATI Radeon X600 .*ATI.*Radeon X6.* 1 1
|
||||
ATI Radeon X700 .*ATI.*Radeon X7.* 1 1
|
||||
ATI Radeon X800 .*ATI.*Radeon X8.* 2 1
|
||||
|
|
@ -112,7 +120,7 @@ ATI Rage 128 .*ATI.*Rage 128.* 0 1
|
|||
ATI RV250 .*ATI.*RV250.* 0 1
|
||||
ATI RV530 .*ATI.*RV530.* 1 1
|
||||
ATI RX700 .*ATI.*RX700.* 1 1
|
||||
Intel X3100 .*Intel.*X3100.* 1 1
|
||||
Intel X3100 .*Intel.*X3100.* 0 1
|
||||
Intel 830M .*Intel.*830M 0 0
|
||||
Intel 845G .*Intel.*845G 0 0
|
||||
Intel 855GM .*Intel.*855GM 0 0
|
||||
|
|
@ -132,6 +140,8 @@ Intel Montara .*Intel.*Montara.* 0 0
|
|||
Intel Springdale .*Intel.*Springdale.* 0 0
|
||||
Matrox .*Matrox.* 0 0
|
||||
Mesa .*Mesa.* 0 0
|
||||
NVIDIA GTX 260 .*NVIDIA.*GeForce.*GTX.*260.* 3 1
|
||||
NVIDIA GTX 280 .*NVIDIA.*GeForce.*GTX.*280.* 3 1
|
||||
NVIDIA G72 .*NVIDIA.*G72.* 1 1
|
||||
NVIDIA G73 .*NVIDIA.*G73.* 1 1
|
||||
NVIDIA GeForce .*GeForce 256.* 0 0
|
||||
|
|
@ -142,7 +152,7 @@ NVIDIA GeForce 4 MX .*NVIDIA.*GeForce4 MX.* 0 1
|
|||
NVIDIA GeForce 4 Ti .*NVIDIA.*GeForce4 Ti.* 0 1
|
||||
NVIDIA GeForce 6100 .*NVIDIA.*GeForce 61.* 0 1
|
||||
NVIDIA GeForce 6200 .*NVIDIA.*GeForce 62.* 0 1
|
||||
NVIDIA GeForce 6500 .*NVIDIA.*GeForce 65.* 1 1
|
||||
NVIDIA GeForce 6500 .*NVIDIA.*GeForce 65.* 0 1
|
||||
NVIDIA GeForce 6600 .*NVIDIA.*GeForce 66.* 1 1
|
||||
NVIDIA GeForce 6700 .*NVIDIA.*GeForce 67.* 2 1
|
||||
NVIDIA GeForce 6800 .*NVIDIA.*GeForce 68.* 2 1
|
||||
|
|
@ -154,6 +164,7 @@ NVIDIA GeForce 7500 .*NVIDIA.*GeForce 75.* 1 1
|
|||
NVIDIA GeForce 7600 .*NVIDIA.*GeForce 76.* 2 1
|
||||
NVIDIA GeForce 7800 .*NVIDIA.*GeForce 78.* 2 1
|
||||
NVIDIA GeForce 7900 .*NVIDIA.*GeForce 79.* 2 1
|
||||
NVIDIA GeForce 8200 .*NVIDIA.*GeForce 82.* 1 1
|
||||
NVIDIA GeForce 8300 .*NVIDIA.*GeForce 83.* 1 1
|
||||
NVIDIA GeForce 8400 .*NVIDIA.*GeForce 84.* 1 1
|
||||
NVIDIA GeForce 8500 .*NVIDIA.*GeForce 85.* 3 1
|
||||
|
|
@ -167,7 +178,7 @@ NVIDIA GeForce 9800 .*NVIDIA.*GeForce 98.* 3 1
|
|||
NVIDIA GeForce FX 5100 .*NVIDIA.*GeForce FX 51.* 0 1
|
||||
NVIDIA GeForce FX 5200 .*NVIDIA.*GeForce FX 52.* 0 1
|
||||
NVIDIA GeForce FX 5500 .*NVIDIA.*GeForce FX 55.* 0 1
|
||||
NVIDIA GeForce FX 5600 .*NVIDIA.*GeForce FX 56.* 1 1
|
||||
NVIDIA GeForce FX 5600 .*NVIDIA.*GeForce FX 56.* 0 1
|
||||
NVIDIA GeForce FX 5700 .*NVIDIA.*GeForce FX 57.* 1 1
|
||||
NVIDIA GeForce FX 5800 .*NVIDIA.*GeForce FX 58.* 1 1
|
||||
NVIDIA GeForce FX 5900 .*NVIDIA.*GeForce FX 59.* 1 1
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
|
|
@ -114,6 +114,10 @@ Call RemoveOldShaders
|
|||
;;; Need to clean out old XUI files that predate skinning
|
||||
Call RemoveOldXUI
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; Clear out old releasenotes.txt files. These are now on the public wiki.
|
||||
Call RemoveOldReleaseNotes
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; Files
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
@ -146,8 +150,6 @@ WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Trial Account.url" \
|
|||
WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
|
||||
"InternetShortcut" "URL" \
|
||||
"http://www.secondlife.com/account/"
|
||||
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk" \
|
||||
"$INSTDIR\releasenotes.txt"
|
||||
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \
|
||||
"$INSTDIR\lsl_guide.html"
|
||||
CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
|
||||
|
|
@ -508,6 +510,22 @@ Delete "$INSTDIR\skins\*.txt"
|
|||
|
||||
FunctionEnd
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; Remove any releasenotes files.
|
||||
;;; We are no longer including release notes with the viewer. This will delete
|
||||
;;; any that were left behind by an older installer. Delete will not fail if
|
||||
;;; the files do not exist
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
Function RemoveOldReleaseNotes
|
||||
|
||||
;; remove releasenotes.txt file from application directory, and the shortcut
|
||||
;; from the start menu.
|
||||
Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
|
||||
Delete "$INSTDIR\releasenotes.txt"
|
||||
|
||||
FunctionEnd
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Delete files in Documents and Settings\<user>\SecondLife
|
||||
; Delete files in Documents and Settings\All Users\SecondLife
|
||||
|
|
|
|||
|
|
@ -337,6 +337,7 @@ LLAgent::LLAgent()
|
|||
mTrackFocusObject(TRUE),
|
||||
mCameraSmoothingLastPositionGlobal(),
|
||||
mCameraSmoothingLastPositionAgent(),
|
||||
mCameraSmoothingStop(FALSE),
|
||||
|
||||
mFrameAgent(),
|
||||
|
||||
|
|
@ -1950,9 +1951,8 @@ void LLAgent::cameraPanLeft(F32 meters)
|
|||
mFocusTargetGlobal += meters * left_axis;
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
|
||||
// effectively disable smoothing for camera pan, which causes some residents unhappiness
|
||||
mCameraSmoothingLastPositionGlobal += meters * left_axis;
|
||||
mCameraSmoothingLastPositionAgent += meters * left_axis;
|
||||
// disable smoothing for camera pan, which causes some residents unhappiness
|
||||
mCameraSmoothingStop = TRUE;
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
updateFocusOffset();
|
||||
|
|
@ -1969,9 +1969,8 @@ void LLAgent::cameraPanUp(F32 meters)
|
|||
mFocusTargetGlobal += meters * up_axis;
|
||||
mFocusGlobal = mFocusTargetGlobal;
|
||||
|
||||
// effectively disable smoothing for camera pan, which causes some residents unhappiness
|
||||
mCameraSmoothingLastPositionGlobal += meters * up_axis;
|
||||
mCameraSmoothingLastPositionAgent += meters * up_axis;
|
||||
// disable smoothing for camera pan, which causes some residents unhappiness
|
||||
mCameraSmoothingStop = TRUE;
|
||||
|
||||
cameraZoomIn(1.f);
|
||||
updateFocusOffset();
|
||||
|
|
@ -3231,7 +3230,7 @@ void LLAgent::updateCamera()
|
|||
LLVector3d agent_pos = getPositionGlobal();
|
||||
LLVector3d camera_pos_agent = camera_pos_global - agent_pos;
|
||||
|
||||
if (cameraThirdPerson()) // only smooth in third person mode
|
||||
if (cameraThirdPerson() && !mCameraSmoothingStop) // only smooth in third person mode
|
||||
{
|
||||
const F32 SMOOTHING_HALF_LIFE = 0.02f;
|
||||
|
||||
|
|
@ -3261,6 +3260,7 @@ void LLAgent::updateCamera()
|
|||
|
||||
mCameraSmoothingLastPositionGlobal = camera_pos_global;
|
||||
mCameraSmoothingLastPositionAgent = camera_pos_agent;
|
||||
mCameraSmoothingStop = FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -792,7 +792,8 @@ private:
|
|||
LLVector3 mSitCameraPos; // root relative camera pos when sitting
|
||||
LLVector3 mSitCameraFocus; // root relative camera target when sitting
|
||||
LLVector3d mCameraSmoothingLastPositionGlobal;
|
||||
LLVector3d mCameraSmoothingLastPositionAgent;
|
||||
LLVector3d mCameraSmoothingLastPositionAgent;
|
||||
BOOL mCameraSmoothingStop;
|
||||
|
||||
|
||||
//Ventrella
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llversionviewer.h"
|
||||
#include "llfeaturemanager.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "lltexteditor.h"
|
||||
#include "llalertdialog.h"
|
||||
#include "llerrorcontrol.h"
|
||||
#include "llviewerimagelist.h"
|
||||
|
|
@ -199,7 +200,6 @@ extern void init_apple_menu(const char* product);
|
|||
extern OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn);
|
||||
extern OSErr AEQuitHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn);
|
||||
extern OSStatus simpleDialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata);
|
||||
extern OSStatus DisplayReleaseNotes(void);
|
||||
#include <boost/tokenizer.hpp>
|
||||
#endif // LL_DARWIN
|
||||
|
||||
|
|
@ -221,9 +221,9 @@ std::string gDisabledMessage; // Set in LLAppViewer::initConfiguration used in i
|
|||
|
||||
BOOL gHideLinks = FALSE; // Set in LLAppViewer::initConfiguration, used externally
|
||||
|
||||
BOOL gAllowIdleAFK = TRUE;
|
||||
BOOL gAllowTapTapHoldRun = TRUE;
|
||||
BOOL gShowObjectUpdates = FALSE;
|
||||
BOOL gAllowIdleAFK = TRUE;
|
||||
BOOL gAllowTapTapHoldRun = TRUE;
|
||||
BOOL gShowObjectUpdates = FALSE;
|
||||
BOOL gUseQuickTime = TRUE;
|
||||
|
||||
BOOL gAcceptTOS = FALSE;
|
||||
|
|
@ -235,22 +235,24 @@ LLSD gDebugInfo;
|
|||
|
||||
U32 gFrameCount = 0;
|
||||
U32 gForegroundFrameCount = 0; // number of frames that app window was in foreground
|
||||
LLPumpIO* gServicePump = NULL;
|
||||
LLPumpIO* gServicePump = NULL;
|
||||
|
||||
BOOL gPacificDaylightTime = FALSE;
|
||||
|
||||
U64 gFrameTime = 0;
|
||||
F32 gFrameTimeSeconds = 0.f;
|
||||
F32 gFrameIntervalSeconds = 0.f;
|
||||
F32 gFPSClamped = 10.f; // Pretend we start at target rate.
|
||||
F32 gFrameDTClamped = 0.f; // Time between adjacent checks to network for packets
|
||||
F32 gFPSClamped = 10.f; // Pretend we start at target rate.
|
||||
F32 gFrameDTClamped = 0.f; // Time between adjacent checks to network for packets
|
||||
U64 gStartTime = 0; // gStartTime is "private", used only to calculate gFrameTimeSeconds
|
||||
U32 gFrameStalls = 0;
|
||||
const F64 FRAME_STALL_THRESHOLD = 5.0;
|
||||
|
||||
LLTimer gRenderStartTime;
|
||||
LLFrameTimer gForegroundTime;
|
||||
LLTimer gLogoutTimer;
|
||||
static const F32 LOGOUT_REQUEST_TIME = 6.f; // this will be cut short by the LogoutReply msg.
|
||||
F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
|
||||
LLTimer gLogoutTimer;
|
||||
static const F32 LOGOUT_REQUEST_TIME = 6.f; // this will be cut short by the LogoutReply msg.
|
||||
F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
|
||||
|
||||
LLUUID gInventoryLibraryOwner;
|
||||
LLUUID gInventoryLibraryRoot;
|
||||
|
|
@ -686,6 +688,10 @@ bool LLAppViewer::init()
|
|||
&LLUI::sGLScaleFactor);
|
||||
|
||||
LLWeb::initClass(); // do this after LLUI
|
||||
LLTextEditor::setURLCallbacks(&LLWeb::loadURL,
|
||||
&LLURLDispatcher::dispatchFromTextEditor,
|
||||
&LLURLDispatcher::dispatchFromTextEditor);
|
||||
|
||||
LLUICtrlFactory::getInstance()->setupPaths(); // update paths with correct language set
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
|
|
@ -932,20 +938,23 @@ bool LLAppViewer::mainLoop()
|
|||
gKeyboard->scanKeyboard();
|
||||
}
|
||||
|
||||
pingMainloopTimeout("Main:Messages");
|
||||
|
||||
// Update state based on messages, user input, object idle.
|
||||
{
|
||||
pauseMainloopTimeout(); // *TODO: Remove. Messages shouldn't be stalling for 20+ seconds!
|
||||
|
||||
LLFastTimer t3(LLFastTimer::FTM_IDLE);
|
||||
idle();
|
||||
|
||||
{
|
||||
pingMainloopTimeout("Main:ServicePump");
|
||||
LLFastTimer t4(LLFastTimer::FTM_PUMP);
|
||||
gAres->process();
|
||||
// this pump is necessary to make the login screen show up
|
||||
gServicePump->pump();
|
||||
gServicePump->callback();
|
||||
}
|
||||
|
||||
resumeMainloopTimeout();
|
||||
}
|
||||
|
||||
if (gDoDisconnect && (LLStartUp::getStartupState() == STATE_STARTED))
|
||||
|
|
@ -1047,6 +1056,11 @@ bool LLAppViewer::mainLoop()
|
|||
break;
|
||||
}
|
||||
}
|
||||
if ((LLStartUp::getStartupState() >= STATE_CLEANUP) &&
|
||||
(frameTimer.getElapsedTimeF64() > FRAME_STALL_THRESHOLD))
|
||||
{
|
||||
gFrameStalls++;
|
||||
}
|
||||
frameTimer.reset();
|
||||
|
||||
// Prevent the worker threads from running while rendering.
|
||||
|
|
@ -1209,8 +1223,18 @@ bool LLAppViewer::cleanup()
|
|||
ms_sleep(100);
|
||||
}
|
||||
llinfos << "Shutting down." << llendflush;
|
||||
|
||||
// Destroy the UI
|
||||
gViewerWindow->shutdownViews();
|
||||
|
||||
// Clean up selection managers after UI is destroyed, as UI may be observing them.
|
||||
// Clean up before GL is shut down because we might be holding on to objects with texture references
|
||||
LLSelectMgr::cleanupGlobals();
|
||||
|
||||
// Shut down OpenGL
|
||||
gViewerWindow->shutdownGL();
|
||||
|
||||
// Destroy Windows(R) window, and make sure we're not fullscreen
|
||||
// Destroy window, and make sure we're not fullscreen
|
||||
// This may generate window reshape and activation events.
|
||||
// Therefore must do this before destroying the message system.
|
||||
delete gViewerWindow;
|
||||
|
|
@ -1221,10 +1245,6 @@ bool LLAppViewer::cleanup()
|
|||
delete gKeyboard;
|
||||
gKeyboard = NULL;
|
||||
|
||||
// Clean up selection managers after UI is destroyed, as UI
|
||||
// may be observing them.
|
||||
LLSelectMgr::cleanupGlobals();
|
||||
|
||||
LLViewerObject::cleanupVOClasses();
|
||||
|
||||
LLWaterParamManager::cleanupClass();
|
||||
|
|
@ -3012,6 +3032,8 @@ public:
|
|||
///////////////////////////////////////////////////////
|
||||
void LLAppViewer::idle()
|
||||
{
|
||||
pingMainloopTimeout("Main:Idle");
|
||||
|
||||
// Update frame timers
|
||||
static LLTimer idle_timer;
|
||||
|
||||
|
|
|
|||
|
|
@ -257,9 +257,10 @@ extern BOOL gPacificDaylightTime;
|
|||
extern U64 gFrameTime; // The timestamp of the most-recently-processed frame
|
||||
extern F32 gFrameTimeSeconds; // Loses msec precision after ~4.5 hours...
|
||||
extern F32 gFrameIntervalSeconds; // Elapsed time between current and previous gFrameTimeSeconds
|
||||
extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame
|
||||
extern F32 gFPSClamped; // Frames per second, smoothed, weighted toward last frame
|
||||
extern F32 gFrameDTClamped;
|
||||
extern U64 gStartTime;
|
||||
extern U32 gFrameStalls;
|
||||
|
||||
extern LLTimer gRenderStartTime;
|
||||
extern LLFrameTimer gForegroundTime;
|
||||
|
|
|
|||
|
|
@ -309,121 +309,6 @@ OSStatus simpleDialogHandler(EventHandlerCallRef handler, EventRef event, void *
|
|||
return(result);
|
||||
}
|
||||
|
||||
OSStatus DisplayReleaseNotes(void)
|
||||
{
|
||||
OSStatus err;
|
||||
IBNibRef nib = NULL;
|
||||
WindowRef window = NULL;
|
||||
|
||||
err = CreateNibReference(CFSTR("SecondLife"), &nib);
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
CreateWindowFromNib(nib, CFSTR("Release Notes"), &window);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// Get the text view control
|
||||
HIViewRef textView;
|
||||
ControlID id;
|
||||
|
||||
id.signature = 'text';
|
||||
id.id = 0;
|
||||
|
||||
std::string releaseNotesText;
|
||||
|
||||
_read_file_into_string(releaseNotesText, "releasenotes.txt"); // Flawfinder: ignore
|
||||
|
||||
err = HIViewFindByID(HIViewGetRoot(window), id, &textView);
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// Convert from the encoding used in the release notes.
|
||||
CFStringRef str = CFStringCreateWithBytes(
|
||||
NULL,
|
||||
(const UInt8*)releaseNotesText.c_str(),
|
||||
releaseNotesText.size(),
|
||||
kCFStringEncodingWindowsLatin1, // This matches the way the Windows version displays the release notes.
|
||||
FALSE);
|
||||
|
||||
if(str != NULL)
|
||||
{
|
||||
int size = CFStringGetLength(str);
|
||||
|
||||
if(size > 0)
|
||||
{
|
||||
UniChar *chars = new UniChar[size + 1];
|
||||
CFStringGetCharacters(str, CFRangeMake(0, size), chars);
|
||||
|
||||
err = TXNSetData(HITextViewGetTXNObject(textView), kTXNUnicodeTextData, chars, size * sizeof(UniChar), kTXNStartOffset, kTXNStartOffset);
|
||||
|
||||
delete[] chars;
|
||||
}
|
||||
|
||||
CFRelease(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Creating the string failed. Probably an encoding problem. Display SOMETHING...
|
||||
err = TXNSetData(HITextViewGetTXNObject(textView), kTXNTextData, releaseNotesText.c_str(), releaseNotesText.size(), kTXNStartOffset, kTXNStartOffset);
|
||||
}
|
||||
}
|
||||
|
||||
// Set the selection to the beginning of the text and scroll it into view.
|
||||
if(err == noErr)
|
||||
{
|
||||
err = TXNSetSelection(HITextViewGetTXNObject(textView), kTXNStartOffset, kTXNStartOffset);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// This function returns void.
|
||||
TXNShowSelection(HITextViewGetTXNObject(textView), false);
|
||||
}
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
ShowWindow(window);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
// Set up an event handler for the window.
|
||||
EventHandlerRef handler = NULL;
|
||||
EventTypeSpec handlerEvents[] =
|
||||
{
|
||||
{ kEventClassCommand, kEventCommandProcess }
|
||||
};
|
||||
|
||||
InstallWindowEventHandler(
|
||||
window,
|
||||
NewEventHandlerUPP(simpleDialogHandler),
|
||||
GetEventTypeCount (handlerEvents),
|
||||
handlerEvents,
|
||||
(void*)window,
|
||||
&handler);
|
||||
}
|
||||
|
||||
if(err == noErr)
|
||||
{
|
||||
RunAppModalLoopForWindow(window);
|
||||
}
|
||||
|
||||
if(window != NULL)
|
||||
{
|
||||
DisposeWindow(window);
|
||||
}
|
||||
|
||||
if(nib != NULL)
|
||||
{
|
||||
DisposeNibReference(nib);
|
||||
}
|
||||
|
||||
return(err);
|
||||
}
|
||||
|
||||
void init_apple_menu(const char* product)
|
||||
{
|
||||
// Load up a proper menu bar.
|
||||
|
|
|
|||
|
|
@ -443,6 +443,7 @@ void LLDrawPoolBump::endShiny(bool invisible)
|
|||
}
|
||||
}
|
||||
|
||||
gGL.getTexUnit(0)->activate();
|
||||
LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
|
||||
gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
|
||||
|
||||
|
|
|
|||
|
|
@ -372,7 +372,7 @@ void LLFace::renderForSelect(U32 data_mask)
|
|||
|
||||
mVertexBuffer->setBuffer(data_mask);
|
||||
#if !LL_RELEASE_FOR_DOWNLOAD
|
||||
LLGLState::checkClientArrays(data_mask);
|
||||
LLGLState::checkClientArrays("", data_mask);
|
||||
#endif
|
||||
if (mTEOffset != -1)
|
||||
{
|
||||
|
|
@ -435,7 +435,7 @@ void LLFace::renderSelected(LLImageGL *imagep, const LLColor4& color)
|
|||
|
||||
mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD);
|
||||
#if !LL_RELEASE_FOR_DOWNLOAD
|
||||
LLGLState::checkClientArrays(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD);
|
||||
LLGLState::checkClientArrays("", LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD);
|
||||
#endif
|
||||
mVertexBuffer->draw(LLVertexBuffer::TRIANGLES, mIndicesCount, mIndicesIndex);
|
||||
|
||||
|
|
@ -696,20 +696,23 @@ LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, LLVector3 position,
|
|||
{
|
||||
LLVector3 center = mDrawablep->getVOVolume()->getVolume()->getVolumeFace(mTEOffset).mCenter;
|
||||
|
||||
LLVector3 scale = (mDrawablep->getVOVolume()->isVolumeGlobal()) ? LLVector3(1,1,1) : mVObjp->getScale();
|
||||
LLVector3 vec = position;
|
||||
vec.scaleVec(scale);
|
||||
|
||||
LLVector3 scale = (mDrawablep->getVOVolume()->isVolumeGlobal()) ? LLVector3(1,1,1) : mVObjp->getScale();
|
||||
LLVector3 volume_position = mDrawablep->getVOVolume()->agentPositionToVolume(position);
|
||||
volume_position.scaleVec(scale);
|
||||
|
||||
LLVector3 volume_normal = mDrawablep->getVOVolume()->agentDirectionToVolume(normal);
|
||||
volume_normal.normalize();
|
||||
|
||||
switch (texgen)
|
||||
{
|
||||
case LLTextureEntry::TEX_GEN_PLANAR:
|
||||
planarProjection(tc, normal, center, vec);
|
||||
planarProjection(tc, volume_normal, center, volume_position);
|
||||
break;
|
||||
case LLTextureEntry::TEX_GEN_SPHERICAL:
|
||||
sphericalProjection(tc, normal, center, vec);
|
||||
sphericalProjection(tc, volume_normal, center, volume_position);
|
||||
break;
|
||||
case LLTextureEntry::TEX_GEN_CYLINDRICAL:
|
||||
cylindricalProjection(tc, normal, center, vec);
|
||||
cylindricalProjection(tc, volume_normal, center, volume_position);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -50,6 +50,10 @@
|
|||
#include "llversionviewer.h"
|
||||
#include "llviewerbuild.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "lluri.h"
|
||||
#include "llweb.h"
|
||||
#include "llsecondlifeurls.h"
|
||||
#include "lltrans.h"
|
||||
#include "llappviewer.h"
|
||||
#include "llglheaders.h"
|
||||
#include "llmediamanager.h"
|
||||
|
|
@ -65,6 +69,8 @@ extern U32 gPacketsIn;
|
|||
|
||||
LLFloaterAbout* LLFloaterAbout::sInstance = NULL;
|
||||
|
||||
static std::string get_viewer_release_notes_url();
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Class LLFloaterAbout
|
||||
///----------------------------------------------------------------------------
|
||||
|
|
@ -80,21 +86,50 @@ LLFloaterAbout::LLFloaterAbout()
|
|||
title += LLAppViewer::instance()->getSecondLifeTitle();
|
||||
setTitle(title);
|
||||
|
||||
std::string support;
|
||||
LLViewerTextEditor *support_widget =
|
||||
getChild<LLViewerTextEditor>("support_editor", true);
|
||||
|
||||
LLViewerTextEditor *credits_widget =
|
||||
getChild<LLViewerTextEditor>("credits_editor", true);
|
||||
|
||||
|
||||
if (!support_widget || !credits_widget)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// For some reason, adding style doesn't work unless this is true.
|
||||
support_widget->setParseHTML(TRUE);
|
||||
|
||||
// Text styles for release notes hyperlinks
|
||||
LLStyleSP viewer_link_style(new LLStyle);
|
||||
viewer_link_style->setVisible(true);
|
||||
viewer_link_style->setFontName(LLStringUtil::null);
|
||||
viewer_link_style->setLinkHREF(get_viewer_release_notes_url());
|
||||
viewer_link_style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
|
||||
|
||||
// Version string
|
||||
std::string version = LLAppViewer::instance()->getSecondLifeTitle()
|
||||
+ llformat(" %d.%d.%d (%d) %s %s (%s)",
|
||||
+ llformat(" %d.%d.%d (%d) %s %s (%s)\n",
|
||||
LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
|
||||
__DATE__, __TIME__,
|
||||
gSavedSettings.getString("VersionChannelName").c_str());
|
||||
support.append(version);
|
||||
support_widget->appendColoredText(version, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor"));
|
||||
support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), FALSE, FALSE, &viewer_link_style);
|
||||
|
||||
std::string support;
|
||||
support.append("\n\n");
|
||||
|
||||
// Position
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (region)
|
||||
{
|
||||
LLStyleSP server_link_style(new LLStyle);
|
||||
server_link_style->setVisible(true);
|
||||
server_link_style->setFontName(LLStringUtil::null);
|
||||
server_link_style->setLinkHREF(region->getCapability("ServerReleaseNotes"));
|
||||
server_link_style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
|
||||
|
||||
const LLVector3d &pos = gAgent.getPositionGlobal();
|
||||
LLUIString pos_text = getUIString("you_are_at");
|
||||
pos_text.setArg("[POSITION]",
|
||||
|
|
@ -113,7 +148,12 @@ LLFloaterAbout::LLFloaterAbout()
|
|||
support.append(buffer);
|
||||
support.append(")\n");
|
||||
support.append(gLastVersionChannel);
|
||||
support.append("\n\n");
|
||||
support.append("\n");
|
||||
|
||||
support_widget->appendColoredText(support, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor"));
|
||||
support_widget->appendStyledText(LLTrans::getString("ReleaseNotes"), FALSE, FALSE, &server_link_style);
|
||||
|
||||
support = "\n\n";
|
||||
}
|
||||
|
||||
// *NOTE: Do not translate text like GPU, Graphics Card, etc -
|
||||
|
|
@ -180,17 +220,18 @@ LLFloaterAbout::LLFloaterAbout()
|
|||
support.append("\n");
|
||||
}
|
||||
|
||||
// Fix views
|
||||
childDisable("credits_editor");
|
||||
support_widget->appendColoredText(support, FALSE, FALSE, gColors.getColor("TextFgReadOnlyColor"));
|
||||
|
||||
LLTextEditor * support_widget = getChild<LLTextEditor>("support_editor", true);
|
||||
if (support_widget)
|
||||
{
|
||||
support_widget->setEnabled( FALSE );
|
||||
support_widget->setTakesFocus( TRUE );
|
||||
support_widget->setText( support );
|
||||
support_widget->setHandleEditKeysDirectly( TRUE );
|
||||
}
|
||||
// Fix views
|
||||
support_widget->setCursorPos(0);
|
||||
support_widget->setEnabled(FALSE);
|
||||
support_widget->setTakesFocus(TRUE);
|
||||
support_widget->setHandleEditKeysDirectly(TRUE);
|
||||
|
||||
credits_widget->setCursorPos(0);
|
||||
credits_widget->setEnabled(FALSE);
|
||||
credits_widget->setTakesFocus(TRUE);
|
||||
credits_widget->setHandleEditKeysDirectly(TRUE);
|
||||
|
||||
center();
|
||||
|
||||
|
|
@ -213,3 +254,22 @@ void LLFloaterAbout::show(void*)
|
|||
|
||||
sInstance->open(); /*Flawfinder: ignore*/
|
||||
}
|
||||
|
||||
|
||||
static std::string get_viewer_release_notes_url()
|
||||
{
|
||||
std::ostringstream version;
|
||||
version << LL_VERSION_MAJOR << "."
|
||||
<< LL_VERSION_MINOR << "."
|
||||
<< LL_VERSION_PATCH << "."
|
||||
<< LL_VERSION_BUILD;
|
||||
|
||||
LLSD query;
|
||||
query["channel"] = gSavedSettings.getString("VersionChannelName");
|
||||
query["version"] = version.str();
|
||||
|
||||
std::ostringstream url;
|
||||
url << RELEASE_NOTES_BASE_URL << LLURI::mapToQueryString(query);
|
||||
|
||||
return url.str();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,11 +10,15 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloaterhud.h"
|
||||
|
||||
// Viewer libs
|
||||
#include "llviewercontrol.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llwebbrowserctrl.h"
|
||||
#include "llalertdialog.h"
|
||||
|
||||
// Linden libs
|
||||
#include "lluictrlfactory.h"
|
||||
|
||||
// statics
|
||||
LLFloaterHUD* LLFloaterHUD::sInstance = 0;
|
||||
|
||||
|
|
@ -113,7 +117,12 @@ void LLFloaterHUD::showHUD()
|
|||
hud->setFrontmost(FALSE);
|
||||
}
|
||||
|
||||
void LLFloaterHUD::closeHUD()
|
||||
// Save our visibility state on close in case the user accidentally
|
||||
// quit the application while the tutorial was visible.
|
||||
// virtual
|
||||
void LLFloaterHUD::onClose(bool app_quitting)
|
||||
{
|
||||
if (sInstance) sInstance->close();
|
||||
bool stay_visible = app_quitting;
|
||||
gSavedSettings.setBOOL("ShowTutorial", stay_visible);
|
||||
destroy();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
* @file llfloaterhud.h
|
||||
* @brief The HUD floater
|
||||
* @brief A floater showing the HUD tutorial
|
||||
*
|
||||
* $LicenseInfo:firstyear=2008&license=viewergpl$
|
||||
* Copyright (c) 2008, Linden Research, Inc.
|
||||
|
|
@ -14,28 +14,23 @@
|
|||
|
||||
class LLWebBrowserCtrl;
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// CLASS LLFloaterHUD
|
||||
|
||||
class LLFloaterHUD : public LLFloater
|
||||
|
||||
/*! @brief A floater showing the HUD tutorial
|
||||
*/
|
||||
{
|
||||
public:
|
||||
static LLFloaterHUD* getInstance(); ///< get instance creating if necessary
|
||||
virtual ~LLFloaterHUD(); ///< virtual destructor
|
||||
|
||||
static void showHUD(); ///< show the HUD
|
||||
static void closeHUD(); ///< close the HUD (destroys floater)
|
||||
|
||||
protected:
|
||||
LLWebBrowserCtrl* mWebBrowser; ///< the actual web browser control
|
||||
|
||||
LLFloaterHUD(); ///< default constructor
|
||||
// Save our visibility state during close
|
||||
/*virtual*/ void onClose(bool app_quitting);
|
||||
|
||||
private:
|
||||
// Handles its own construction and destruction, so private.
|
||||
LLFloaterHUD();
|
||||
/*virtual*/ ~LLFloaterHUD();
|
||||
|
||||
private:
|
||||
LLWebBrowserCtrl* mWebBrowser; ///< the actual web browser control
|
||||
static LLFloaterHUD* sInstance;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@
|
|||
#include "llviewerwindow.h"
|
||||
#include "llvlcomposition.h"
|
||||
|
||||
#define ELAR_ENABLED 0 // Enable when server support is implemented
|
||||
|
||||
const S32 TERRAIN_TEXTURE_COUNT = 4;
|
||||
const S32 CORNER_COUNT = 4;
|
||||
|
||||
|
|
@ -269,9 +271,7 @@ void LLFloaterRegionInfo::processEstateOwnerRequest(LLMessageSystem* msg,void**)
|
|||
dispatch.dispatch(request, invoice, strings);
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
|
||||
panel->setCtrlsEnabled(allow_modify);
|
||||
|
||||
panel->updateControls(region);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -532,12 +532,6 @@ void LLPanelRegionInfo::initCtrl(const std::string& name)
|
|||
childSetCommitCallback(name, onChangeAnything, this);
|
||||
}
|
||||
|
||||
void LLPanelRegionInfo::initTextCtrl(const std::string& name)
|
||||
{
|
||||
childSetCommitCallback(name, onChangeAnything, this);
|
||||
childSetKeystrokeCallback("abuse_email_address", onChangeText, this);
|
||||
}
|
||||
|
||||
void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert)
|
||||
{
|
||||
childSetAction(name, onClickHelp, new std::string(xml_alert));
|
||||
|
|
@ -1973,8 +1967,7 @@ void LLPanelEstateInfo::sendEstateAccessDelta(U32 flags, const LLUUID& agent_or_
|
|||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
|
||||
bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
|
||||
void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
|
||||
{
|
||||
BOOL god = gAgent.isGodlike();
|
||||
BOOL owner = (region && (region->getOwner() == gAgent.getID()));
|
||||
|
|
@ -1990,13 +1983,22 @@ bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
|
|||
childSetEnabled("remove_banned_avatar_btn", god || owner || manager);
|
||||
childSetEnabled("message_estate_btn", god || owner || manager);
|
||||
childSetEnabled("kick_user_from_estate_btn", god || owner || manager);
|
||||
#if ELAR_ENABLED
|
||||
childSetEnabled("abuse_email_address", god || owner || manager);
|
||||
#else
|
||||
childSetEnabled("abuse_email_address", false);
|
||||
#endif
|
||||
|
||||
// estate managers can't add estate managers
|
||||
childSetEnabled("add_estate_manager_btn", god || owner);
|
||||
childSetEnabled("remove_estate_manager_btn", god || owner);
|
||||
childSetEnabled("estate_manager_name_list", god || owner);
|
||||
}
|
||||
|
||||
bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
|
||||
{
|
||||
updateControls(region);
|
||||
|
||||
// let the parent class handle the general data collection.
|
||||
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
|
||||
|
||||
|
|
@ -2051,7 +2053,8 @@ BOOL LLPanelEstateInfo::postBuild()
|
|||
initCtrl("limit_payment");
|
||||
initCtrl("limit_age_verified");
|
||||
initCtrl("voice_chat_check");
|
||||
initTextCtrl("abuse_email_address");
|
||||
childSetCommitCallback("abuse_email_address", onChangeAnything, this);
|
||||
childSetKeystrokeCallback("abuse_email_address", onChangeText, this);
|
||||
|
||||
initHelpBtn("estate_manager_help", "HelpEstateEstateManager");
|
||||
initHelpBtn("use_global_time_help", "HelpEstateUseGlobalTime");
|
||||
|
|
@ -2966,15 +2969,17 @@ bool LLDispatchEstateUpdateInfo::operator()(
|
|||
// it draws with a weird character at the end of the string.
|
||||
std::string estate_name = strings[0].c_str(); // preserve c_str() call!
|
||||
panel->setEstateName(estate_name);
|
||||
|
||||
|
||||
#if ELAR_ENABLED
|
||||
if (strings.size() > 9)
|
||||
{
|
||||
std::string abuse_email = strings[9].c_str(); // preserve c_str() call!
|
||||
panel->setAbuseEmailAddress(abuse_email);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
panel->setAbuseEmailAddress("@ Old Server @");
|
||||
panel->setAbuseEmailAddress(panel->getString("email_unsupported"));
|
||||
}
|
||||
|
||||
LLViewerRegion* regionp = gAgent.getRegion();
|
||||
|
|
|
|||
|
|
@ -119,7 +119,6 @@ public:
|
|||
|
||||
protected:
|
||||
void initCtrl(const std::string& name);
|
||||
void initTextCtrl(const std::string& name);
|
||||
void initHelpBtn(const std::string& name, const std::string& xml_alert);
|
||||
|
||||
// Callback for all help buttons, data is name of XML alert to show.
|
||||
|
|
@ -295,6 +294,8 @@ public:
|
|||
LLPanelEstateInfo();
|
||||
~LLPanelEstateInfo() {}
|
||||
|
||||
void updateControls(LLViewerRegion* region);
|
||||
|
||||
virtual bool refreshFromRegion(LLViewerRegion* region);
|
||||
virtual bool estateUpdate(LLMessageSystem* msg);
|
||||
|
||||
|
|
|
|||
|
|
@ -778,8 +778,8 @@ void LLFloaterTools::onOpen()
|
|||
mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
|
||||
mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
|
||||
|
||||
gMenuBarView->setItemVisible(std::string("Tools"), TRUE);
|
||||
gMenuBarView->arrange();
|
||||
// gMenuBarView->setItemVisible(std::string("Tools"), TRUE);
|
||||
// gMenuBarView->arrange();
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
@ -812,8 +812,8 @@ void LLFloaterTools::onClose(bool app_quitting)
|
|||
// so manually reset tool to default (pie menu tool)
|
||||
LLToolMgr::getInstance()->getCurrentToolset()->selectFirstTool();
|
||||
|
||||
gMenuBarView->setItemVisible(std::string("Tools"), FALSE);
|
||||
gMenuBarView->arrange();
|
||||
// gMenuBarView->setItemVisible(std::string("Tools"), FALSE);
|
||||
// gMenuBarView->arrange();
|
||||
}
|
||||
|
||||
void LLFloaterTools::showMore(BOOL show_more)
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
std::string name_buf;
|
||||
std::string owner_buf;
|
||||
F32 mono_score = 0.f;
|
||||
bool have_extended_data = false;
|
||||
|
||||
msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block);
|
||||
msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block);
|
||||
|
|
@ -182,7 +183,9 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
msg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block);
|
||||
if(msg->getNumberOfBlocks("DataExtended"))
|
||||
{
|
||||
have_extended_data = true;
|
||||
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
|
||||
msg->getF32(_PREHASH_ReportData, "MonoScore", mono_score, block);
|
||||
}
|
||||
|
||||
LLSD element;
|
||||
|
|
@ -207,10 +210,9 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
element["columns"][3]["value"] = formatted_time((time_t)time_stamp);
|
||||
element["columns"][3]["font"] = "SANSSERIF";
|
||||
|
||||
if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS)
|
||||
if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS
|
||||
&& have_extended_data)
|
||||
{
|
||||
// Not in the message template, needs to be checked against number of blocks
|
||||
//msg->getF32Fast(_PREHASH_ReportData, "MonoScore", mono_score, block);
|
||||
element["columns"][4]["column"] = "Mono Time";
|
||||
element["columns"][4]["value"] = llformat("%0.3f", mono_score);
|
||||
element["columns"][4]["font"] = "SANSSERIF";
|
||||
|
|
|
|||
|
|
@ -146,6 +146,10 @@ void LLLoginHandler::parse(const LLSD& queryMap)
|
|||
{
|
||||
grid_choice = GRID_INFO_SIVA;
|
||||
}
|
||||
else if (queryMap["grid"].asString() == "damballah")
|
||||
{
|
||||
grid_choice = GRID_INFO_DAMBALLAH;
|
||||
}
|
||||
else if (queryMap["grid"].asString() == "durga")
|
||||
{
|
||||
grid_choice = GRID_INFO_DURGA;
|
||||
|
|
|
|||
|
|
@ -855,9 +855,6 @@ bool idle_startup()
|
|||
|
||||
//For HTML parsing in text boxes.
|
||||
LLTextEditor::setLinkColor( gSavedSettings.getColor4("HTMLLinkColor") );
|
||||
LLTextEditor::setURLCallbacks ( &LLWeb::loadURL,
|
||||
&LLURLDispatcher::dispatchFromTextEditor,
|
||||
&LLURLDispatcher::dispatchFromTextEditor );
|
||||
|
||||
// Load URL History File
|
||||
LLURLHistory::loadFile("url_history.xml");
|
||||
|
|
@ -1964,6 +1961,7 @@ bool idle_startup()
|
|||
}
|
||||
}
|
||||
options.clear();
|
||||
bool show_hud = false;
|
||||
if(LLUserAuth::getInstance()->getOptions("tutorial_setting", options))
|
||||
{
|
||||
LLUserAuth::options_t::iterator it = options.begin();
|
||||
|
|
@ -1982,11 +1980,19 @@ bool idle_startup()
|
|||
{
|
||||
if (option_it->second == "true")
|
||||
{
|
||||
LLFloaterHUD::showHUD();
|
||||
show_hud = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Either we want to show tutorial because this is the first login
|
||||
// to a Linden Help Island or the user quit with the tutorial
|
||||
// visible. JC
|
||||
if (show_hud
|
||||
|| gSavedSettings.getBOOL("ShowTutorial"))
|
||||
{
|
||||
LLFloaterHUD::showHUD();
|
||||
}
|
||||
|
||||
options.clear();
|
||||
if(LLUserAuth::getInstance()->getOptions("event_categories", options))
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ BOOL LLToolGrab::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
if (!gAgent.leftButtonGrabbed())
|
||||
{
|
||||
// can grab transparent objects (how touch event propagates, scripters rely on this)
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback, TRUE);
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback, TRUE, TRUE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1027,8 +1027,8 @@ void LLToolGrab::stopGrab()
|
|||
msg->nextBlockFast(_PREHASH_ObjectData);
|
||||
msg->addU32Fast(_PREHASH_LocalID, objectp->mLocalID);
|
||||
msg->nextBlock("SurfaceInfo");
|
||||
msg->addVector3("UVCoord", LLVector3(mGrabPick.mUVCoords));
|
||||
msg->addVector3("STCoord", LLVector3(mGrabPick.mSTCoords));
|
||||
msg->addVector3("UVCoord", LLVector3(pick.mUVCoords));
|
||||
msg->addVector3("STCoord", LLVector3(pick.mSTCoords));
|
||||
msg->addS32Fast(_PREHASH_FaceIndex, pick.mObjectFace);
|
||||
msg->addVector3("Position", pick.mIntersection);
|
||||
msg->addVector3("Normal", pick.mNormal);
|
||||
|
|
|
|||
|
|
@ -241,6 +241,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
gFrameStats.start(LLFrameStats::REBUILD);
|
||||
gPipeline.rebuildPools();
|
||||
}
|
||||
|
||||
gViewerWindow->returnEmptyPicks();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -702,7 +702,7 @@ void init_menus()
|
|||
gMenuBarView->setRect(LLRect(0, top, 0, top - MENU_BAR_HEIGHT));
|
||||
gMenuBarView->setBackgroundColor( color );
|
||||
|
||||
gMenuBarView->setItemVisible("Tools", FALSE);
|
||||
// gMenuBarView->setItemVisible("Tools", FALSE);
|
||||
gMenuBarView->arrange();
|
||||
|
||||
gMenuHolder->addChild(gMenuBarView);
|
||||
|
|
@ -2055,8 +2055,18 @@ class LLEnableEdit : public view_listener_t
|
|||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
bool new_value = gAgent.isGodlike() || !gAgent.inPrelude();
|
||||
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
|
||||
// *HACK: The new "prelude" Help Islands have a build sandbox area,
|
||||
// so users need the Edit and Create pie menu options when they are
|
||||
// there. Eventually this needs to be replaced with code that only
|
||||
// lets you edit objects if you have permission to do so (edit perms,
|
||||
// group edit, god). See also lltoolbar.cpp. JC
|
||||
bool enable = true;
|
||||
if (gAgent.inPrelude())
|
||||
{
|
||||
enable = LLViewerParcelMgr::getInstance()->agentCanBuild()
|
||||
|| LLSelectMgr::getInstance()->getSelection()->isAttachment();
|
||||
}
|
||||
gMenuHolder->findControl(userdata["control"].asString())->setValue(enable);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -4480,13 +4490,12 @@ class LLToolsStopAllAnimations : public view_listener_t
|
|||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLVOAvatar* avatarp = gAgent.getAvatarObject();
|
||||
|
||||
if (!avatarp) return true;
|
||||
|
||||
avatarp->deactivateAllMotions();
|
||||
|
||||
avatarp->processAnimationStateChanges();
|
||||
LLVOAvatar* avatarp = gAgent.getAvatarObject();
|
||||
if (avatarp)
|
||||
{
|
||||
avatarp->deactivateAllMotions();
|
||||
avatarp->startDefaultMotions();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
/**
|
||||
* @file llviewermessage.cpp
|
||||
* @brief Dumping ground for viewer-side message system callbacks.
|
||||
|
|
@ -48,7 +49,6 @@
|
|||
#include "llfilepicker.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llfollowcamparams.h"
|
||||
#include "llfloaterreleasemsg.h"
|
||||
#include "llinstantmessage.h"
|
||||
#include "llquantize.h"
|
||||
#include "llregionflags.h"
|
||||
|
|
@ -85,7 +85,6 @@
|
|||
#include "llfloatermute.h"
|
||||
#include "llfloaterpostcard.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreleasemsg.h"
|
||||
#include "llfollowcam.h"
|
||||
#include "llgroupnotify.h"
|
||||
#include "llhudeffect.h"
|
||||
|
|
@ -1438,7 +1437,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
// now store incoming IM in chat history
|
||||
|
||||
buffer = name + separator_string + message.substr(message_offset);
|
||||
buffer = separator_string + message.substr(message_offset);
|
||||
|
||||
LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
|
||||
|
||||
|
|
@ -2651,11 +2650,9 @@ void process_avatar_init_complete(LLMessageSystem* msg, void**)
|
|||
}
|
||||
*/
|
||||
|
||||
static void display_release_message(S32, void* data)
|
||||
static void display_release_notes(S32, void* data)
|
||||
{
|
||||
std::string* msg = (std::string*)data;
|
||||
LLFloaterReleaseMsg::displayMessage(*msg);
|
||||
delete msg;
|
||||
gAgent.getRegion()->showReleaseNotes();
|
||||
}
|
||||
|
||||
void process_agent_movement_complete(LLMessageSystem* msg, void**)
|
||||
|
|
@ -2820,10 +2817,20 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
|
|||
// send walk-vs-run status
|
||||
gAgent.sendWalkRun(gAgent.getRunning() || gAgent.getAlwaysRun());
|
||||
|
||||
if (LLFloaterReleaseMsg::checkVersion(version_channel))
|
||||
// If the server version has changed, display an info box and offer
|
||||
// to display the release notes, unless this is the initial log in.
|
||||
if (gLastVersionChannel == version_channel)
|
||||
{
|
||||
LLNotifyBox::showXml("ServerVersionChanged", display_release_message, new std::string(version_channel) );
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gLastVersionChannel.empty())
|
||||
{
|
||||
LLNotifyBox::showXml(
|
||||
"ServerVersionChanged", display_release_notes, NULL);
|
||||
}
|
||||
|
||||
gLastVersionChannel = version_channel;
|
||||
}
|
||||
|
||||
void process_crossed_region(LLMessageSystem* msg, void**)
|
||||
|
|
|
|||
|
|
@ -58,6 +58,10 @@ static LLGridData gGridInfo[GRID_INFO_COUNT] =
|
|||
"util.aruna.lindenlab.com",
|
||||
"https://login.aruna.lindenlab.com/cgi-bin/login.cgi",
|
||||
"http://aruna-secondlife.webdev.lindenlab.com/helpers/" },
|
||||
{ "Damballah",
|
||||
"util.damballah.lindenlab.com",
|
||||
"https://login.damballah.lindenlab.com/cgi-bin/login.cgi",
|
||||
"http://damballah-secondlife.webdev.lindenlab.com/helpers/" },
|
||||
{ "Durga",
|
||||
"util.durga.lindenlab.com",
|
||||
"https://login.durga.lindenlab.com/cgi-bin/login.cgi",
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ enum EGridInfo
|
|||
GRID_INFO_ADITI,
|
||||
GRID_INFO_AGNI,
|
||||
GRID_INFO_ARUNA,
|
||||
GRID_INFO_DAMBALLAH,
|
||||
GRID_INFO_DURGA,
|
||||
GRID_INFO_GANGA,
|
||||
GRID_INFO_MITRA,
|
||||
|
|
|
|||
|
|
@ -1216,8 +1216,13 @@ void LLViewerObjectList::renderPickList(const LLRect& screen_rect, BOOL pick_par
|
|||
gGL.color4f(1,1,1,1);
|
||||
gViewerWindow->renderSelections( TRUE, pick_parcel_wall, FALSE );
|
||||
|
||||
// render pickable ui elements, like names, etc.
|
||||
LLHUDObject::renderAllForSelect();
|
||||
//fix for DEV-19335. Don't pick hud objects when customizing avatar (camera mode doesn't play nice with nametags).
|
||||
if (!gAgent.cameraCustomizeAvatar())
|
||||
{
|
||||
// render pickable ui elements, like names, etc.
|
||||
LLHUDObject::renderAllForSelect();
|
||||
}
|
||||
|
||||
gGL.flush();
|
||||
LLVertexBuffer::unbind();
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@
|
|||
#include "lldir.h"
|
||||
#include "lleventpoll.h"
|
||||
#include "llfloatergodtools.h"
|
||||
#include "llfloaterreleasemsg.h"
|
||||
#include "llfloaterreporter.h"
|
||||
#include "llfloaterregioninfo.h"
|
||||
#include "llhttpnode.h"
|
||||
|
|
@ -121,10 +120,9 @@ public:
|
|||
<< iter->first << LL_ENDL;
|
||||
|
||||
/* HACK we're waiting for the ServerReleaseNotes */
|
||||
if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
|
||||
if (iter->first == "ServerReleaseNotes" && mRegion->getReleaseNotesRequested())
|
||||
{
|
||||
LLFloaterReleaseMsg::show();
|
||||
LLFloaterReleaseMsg::sDisplayMessage = false;
|
||||
mRegion->showReleaseNotes();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +165,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
|
|||
mCacheLoaded(FALSE),
|
||||
mCacheEntriesCount(0),
|
||||
mCacheID(),
|
||||
mEventPoll(NULL)
|
||||
mEventPoll(NULL),
|
||||
mReleaseNotesRequested(FALSE)
|
||||
{
|
||||
mWidth = region_width_meters;
|
||||
mOriginGlobal = from_region_handle(handle);
|
||||
|
|
@ -1480,3 +1479,17 @@ LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void LLViewerRegion::showReleaseNotes()
|
||||
{
|
||||
std::string url = this->getCapability("ServerReleaseNotes");
|
||||
|
||||
if (url.empty()) {
|
||||
// HACK haven't received the capability yet, we'll wait until
|
||||
// it arives.
|
||||
mReleaseNotesRequested = TRUE;
|
||||
return;
|
||||
}
|
||||
|
||||
LLWeb::loadURL(url);
|
||||
mReleaseNotesRequested = FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "lluuid.h"
|
||||
#include "lldatapacker.h"
|
||||
#include "llvocache.h"
|
||||
#include "llweb.h"
|
||||
|
||||
// Surface id's
|
||||
#define LAND 1
|
||||
|
|
@ -122,6 +123,7 @@ public:
|
|||
inline BOOL isPrelude() const;
|
||||
inline BOOL getAllowTerraform() const;
|
||||
inline BOOL getRestrictPushObject() const;
|
||||
inline BOOL getReleaseNotesRequested() const;
|
||||
|
||||
bool isAlive(); // can become false if circuit disconnects
|
||||
|
||||
|
|
@ -277,7 +279,9 @@ public:
|
|||
return lhs->mCameraDistanceSquared < rhs->mCameraDistanceSquared;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void showReleaseNotes();
|
||||
|
||||
protected:
|
||||
void disconnectAllNeighbors();
|
||||
void initStats();
|
||||
|
|
@ -381,6 +385,8 @@ private:
|
|||
std::vector<LLSpatialPartition*> mObjectPartition;
|
||||
|
||||
LLHTTPClient::ResponderPtr mHttpResponderPtr ;
|
||||
|
||||
BOOL mReleaseNotesRequested;
|
||||
};
|
||||
|
||||
inline BOOL LLViewerRegion::getAllowDamage() const
|
||||
|
|
@ -433,6 +439,11 @@ inline BOOL LLViewerRegion::getRestrictPushObject() const
|
|||
return ((mRegionFlags & REGION_FLAGS_RESTRICT_PUSHOBJECT) != 0);
|
||||
}
|
||||
|
||||
inline BOOL LLViewerRegion::getReleaseNotesRequested() const
|
||||
{
|
||||
return mReleaseNotesRequested;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -755,10 +755,14 @@ void send_stats()
|
|||
|
||||
S32 window_width = gViewerWindow->getWindowDisplayWidth();
|
||||
S32 window_height = gViewerWindow->getWindowDisplayHeight();
|
||||
S32 window_size = (window_width * window_height) / 1024;
|
||||
misc["string_1"] = llformat("%d", window_size);
|
||||
misc["string_1"] = llformat("%.dx%d", window_width, window_height);
|
||||
// misc["string_2"] =
|
||||
misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
|
||||
misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
|
||||
// misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
|
||||
// misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
|
||||
misc["int_1"] = LLSD::Integer(gSavedSettings.getU32("RenderQualityPerformance")); // Steve: 1.21
|
||||
misc["int_2"] = LLSD::Integer(gFrameStalls); // Steve: 1.21
|
||||
|
||||
LLViewerStats::getInstance()->addToMessage(body);
|
||||
|
||||
|
|
|
|||
|
|
@ -1036,6 +1036,7 @@ BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// WARNING: this is potentially called multiple times per frame
|
||||
void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask)
|
||||
{
|
||||
S32 x = pos.mX;
|
||||
|
|
@ -1772,12 +1773,15 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window)
|
|||
|
||||
// slightly off center to be left of the avatar.
|
||||
r = gSavedSettings.getRect("FloaterHUDRect2");
|
||||
r.setOriginAndSize(
|
||||
window.getWidth()/3 - r.getWidth()/2,
|
||||
window.getHeight()/2 - r.getHeight()/2,
|
||||
r.getWidth(),
|
||||
r.getHeight());
|
||||
gSavedSettings.setRect("FloaterHUDRect2", r);
|
||||
if (r.mLeft == 0 && r.mBottom == 0)
|
||||
{
|
||||
r.setOriginAndSize(
|
||||
window.getWidth()/3 - r.getWidth()/2,
|
||||
window.getHeight()/2 - r.getHeight()/2,
|
||||
r.getWidth(),
|
||||
r.getHeight());
|
||||
gSavedSettings.setRect("FloaterHUDRect2", r);
|
||||
}
|
||||
}
|
||||
|
||||
//Rectangles need to be adjusted after the window is constructed
|
||||
|
|
@ -1871,10 +1875,11 @@ void LLViewerWindow::initWorldUI()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
LLViewerWindow::~LLViewerWindow()
|
||||
// Destroy the UI
|
||||
void LLViewerWindow::shutdownViews()
|
||||
{
|
||||
delete mDebugText;
|
||||
mDebugText = NULL;
|
||||
|
||||
gSavedSettings.setS32("FloaterViewBottom", gFloaterView->getRect().mBottom);
|
||||
|
||||
|
|
@ -1904,7 +1909,10 @@ LLViewerWindow::~LLViewerWindow()
|
|||
|
||||
delete mToolTip;
|
||||
mToolTip = NULL;
|
||||
|
||||
}
|
||||
|
||||
void LLViewerWindow::shutdownGL()
|
||||
{
|
||||
//--------------------------------------------------------
|
||||
// Shutdown GL cleanly. Order is very important here.
|
||||
//--------------------------------------------------------
|
||||
|
|
@ -1940,8 +1948,11 @@ LLViewerWindow::~LLViewerWindow()
|
|||
stopGL(FALSE);
|
||||
stop_glerror();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// shutdownViews() and shutdownGL() need to be called first
|
||||
LLViewerWindow::~LLViewerWindow()
|
||||
{
|
||||
llinfos << "Destroying Window" << llendl;
|
||||
destroyWindow();
|
||||
}
|
||||
|
|
@ -3323,6 +3334,16 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
|
|||
|
||||
void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
|
||||
{
|
||||
if (mPicks.size() >= 1024 || mWindow->getMinimized())
|
||||
{ //something went wrong, picks are being scheduled but not processed
|
||||
|
||||
if (pick_info.mPickCallback)
|
||||
{
|
||||
pick_info.mPickCallback(pick_info);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
llassert_always(pick_info.mScreenRegion.notNull());
|
||||
mPicks.push_back(pick_info);
|
||||
|
||||
|
|
@ -3381,7 +3402,8 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
|
|||
// Draw the objects so the user can select them.
|
||||
// The starting ID is 1, since land is zero.
|
||||
LLRect pick_region;
|
||||
pick_region.setOriginAndSize(scaled_x - PICK_HALF_WIDTH, scaled_y - PICK_HALF_WIDTH, PICK_DIAMETER, PICK_DIAMETER);
|
||||
pick_region.setOriginAndSize(pick_info.mMousePt.mX - PICK_HALF_WIDTH,
|
||||
pick_info.mMousePt.mY - PICK_HALF_WIDTH, PICK_DIAMETER, PICK_DIAMETER);
|
||||
gObjectList.renderObjectsForSelect(pick_camera, pick_region, FALSE, pick_info.mPickTransparent);
|
||||
|
||||
stop_glerror();
|
||||
|
|
@ -3419,7 +3441,21 @@ void LLViewerWindow::performPick()
|
|||
mLastPick = mPicks.back();
|
||||
mPicks.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerWindow::returnEmptyPicks()
|
||||
{
|
||||
std::vector<LLPickInfo>::iterator pick_it;
|
||||
for (pick_it = mPicks.begin(); pick_it != mPicks.end(); ++pick_it)
|
||||
{
|
||||
mLastPick = *pick_it;
|
||||
// just trigger callback with empty results
|
||||
if (pick_it->mPickCallback)
|
||||
{
|
||||
pick_it->mPickCallback(*pick_it);
|
||||
}
|
||||
}
|
||||
mPicks.clear();
|
||||
}
|
||||
|
||||
// Performs the GL object/land pick.
|
||||
|
|
@ -4069,7 +4105,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
|
|||
window_width = snapshot_width;
|
||||
window_height = snapshot_height;
|
||||
scale_factor = 1.f;
|
||||
mWindowRect.set(0, 0, snapshot_width, snapshot_height);
|
||||
mWindowRect.set(0, snapshot_height, snapshot_width, 0);
|
||||
target.bindTarget();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -134,6 +134,9 @@ public:
|
|||
LLViewerWindow(const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height, BOOL fullscreen, BOOL ignore_pixel_depth);
|
||||
virtual ~LLViewerWindow();
|
||||
|
||||
void shutdownViews();
|
||||
void shutdownGL();
|
||||
|
||||
void initGLDefaults();
|
||||
void initBase();
|
||||
void adjustRectanglesForFirstUse(const LLRect& window);
|
||||
|
|
@ -295,6 +298,8 @@ public:
|
|||
// draws selection boxes around selected objects, must call displayObjects first
|
||||
void renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls, BOOL for_hud );
|
||||
void performPick();
|
||||
void returnEmptyPicks();
|
||||
|
||||
|
||||
void pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info),
|
||||
BOOL pick_transparent = FALSE, BOOL get_surface_info = FALSE);
|
||||
|
|
|
|||
|
|
@ -1736,6 +1736,27 @@ BOOL LLVOAvatar::buildSkeleton(LLVOAvatarSkeletonInfo *info)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLVOAvatar::startDefaultMotions()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLVOAvatar::startDefaultMotions()
|
||||
{
|
||||
//-------------------------------------------------------------------------
|
||||
// start default motions
|
||||
//-------------------------------------------------------------------------
|
||||
startMotion( ANIM_AGENT_HEAD_ROT );
|
||||
startMotion( ANIM_AGENT_EYE );
|
||||
startMotion( ANIM_AGENT_BODY_NOISE );
|
||||
startMotion( ANIM_AGENT_BREATHE_ROT );
|
||||
startMotion( ANIM_AGENT_HAND_MOTION );
|
||||
startMotion( ANIM_AGENT_PELVIS_FIX );
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// restart any currently active motions
|
||||
//-------------------------------------------------------------------------
|
||||
processAnimationStateChanges();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLVOAvatar::buildCharacter()
|
||||
// Deferred initialization and rebuild of the avatar.
|
||||
|
|
@ -1905,21 +1926,8 @@ void LLVOAvatar::buildCharacter()
|
|||
mAahMorph = getVisualParam( "Express_Open_Mouth" );
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// start default motions
|
||||
//-------------------------------------------------------------------------
|
||||
startMotion( ANIM_AGENT_HEAD_ROT );
|
||||
startMotion( ANIM_AGENT_EYE );
|
||||
startMotion( ANIM_AGENT_BODY_NOISE );
|
||||
startMotion( ANIM_AGENT_BREATHE_ROT );
|
||||
startMotion( ANIM_AGENT_HAND_MOTION );
|
||||
startMotion( ANIM_AGENT_PELVIS_FIX );
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// restart any currently active motions
|
||||
//-------------------------------------------------------------------------
|
||||
processAnimationStateChanges();
|
||||
|
||||
startDefaultMotions();
|
||||
|
||||
mIsBuilt = TRUE;
|
||||
stop_glerror();
|
||||
|
||||
|
|
|
|||
|
|
@ -462,7 +462,8 @@ public:
|
|||
// internal (pseudo-private) functions
|
||||
//--------------------------------------------------------------------
|
||||
F32 getPelvisToFoot() { return mPelvisToFoot; }
|
||||
|
||||
|
||||
void startDefaultMotions();
|
||||
void buildCharacter();
|
||||
void releaseMeshData();
|
||||
void restoreMeshData();
|
||||
|
|
|
|||
|
|
@ -139,6 +139,24 @@ const LLMatrix4* gGLLastMatrix = NULL;
|
|||
|
||||
//----------------------------------------
|
||||
|
||||
std::string gPoolNames[] =
|
||||
{
|
||||
// Correspond to LLDrawpool enum render type
|
||||
"NONE",
|
||||
"POOL_SIMPLE",
|
||||
"POOL_TERRAIN",
|
||||
"POOL_TREE",
|
||||
"POOL_SKY",
|
||||
"POOL_WL_SKY",
|
||||
"POOL_GROUND",
|
||||
"POOL_BUMP",
|
||||
"POOL_INVISIBLE",
|
||||
"POOL_AVATAR",
|
||||
"POOL_WATER",
|
||||
"POOL_GLOW",
|
||||
"POOL_ALPHA",
|
||||
};
|
||||
|
||||
U32 nhpo2(U32 v)
|
||||
{
|
||||
U32 r = 1;
|
||||
|
|
@ -553,7 +571,6 @@ void LLPipeline::createGLBuffers()
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
stop_glerror();
|
||||
|
||||
if (LLPipeline::sRenderGlow)
|
||||
|
|
@ -565,12 +582,12 @@ void LLPipeline::createGLBuffers()
|
|||
{
|
||||
mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE);
|
||||
}
|
||||
|
||||
GLuint resX = gViewerWindow->getWindowDisplayWidth();
|
||||
GLuint resY = gViewerWindow->getWindowDisplayHeight();
|
||||
|
||||
mScreen.allocate(resX, resY, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB);
|
||||
}
|
||||
|
||||
GLuint resX = gViewerWindow->getWindowDisplayWidth();
|
||||
GLuint resY = gViewerWindow->getWindowDisplayHeight();
|
||||
|
||||
mScreen.allocate(resX, resY, GL_RGBA, TRUE, GL_TEXTURE_RECTANGLE_ARB);
|
||||
}
|
||||
|
||||
void LLPipeline::restoreGL()
|
||||
|
|
@ -2434,9 +2451,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
|
|||
{
|
||||
llerrs << "GL matrix stack corrupted!" << llendl;
|
||||
}
|
||||
LLGLState::checkStates();
|
||||
LLGLState::checkTextureChannels();
|
||||
LLGLState::checkClientArrays();
|
||||
std::string msg = llformat("%s pass %d", gPoolNames[cur_type].c_str(), i);
|
||||
LLGLState::checkStates(msg);
|
||||
LLGLState::checkTextureChannels(msg);
|
||||
LLGLState::checkClientArrays(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -43,9 +43,6 @@
|
|||
<check_box label="Verweigern - keine archivierte Zahlungsinfo" name="deny_anonymous" />
|
||||
<check_box label="Verweigern - Zahlungsinfo archiviert" name="deny_identified" />
|
||||
<check_box label="Verweigern - Zahlungsinfo verwendet" name="deny_transacted" />
|
||||
<text name="abuse_email_text">
|
||||
[Abuse E-mail Beta]
|
||||
</text>
|
||||
<button label="Übernehmen" name="apply_btn" />
|
||||
<text name="estate_manager_label">
|
||||
Grundstücksverwalter:
|
||||
|
|
|
|||
|
|
@ -46,9 +46,6 @@
|
|||
<check_box label="支払情報登録がないものを拒否" name="deny_anonymous" />
|
||||
<check_box label="支払情報登録があるものを拒否" name="deny_identified" />
|
||||
<check_box label="使用されている支払情報を拒否" name="deny_transacted" />
|
||||
<text name="abuse_email_text">
|
||||
[Abuse E-mail Beta]
|
||||
</text>
|
||||
<button label="適用" name="apply_btn" />
|
||||
<text name="allow_resident_label">
|
||||
許可された住人:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<check_box label="Informações de pagamento" name="deny_identified" />
|
||||
<check_box label="Informações de pagtos realizados" name="deny_transacted" />
|
||||
<text name="abuse_email_text">
|
||||
[E-mail do abuso Beta]
|
||||
E-mail do abuso:
|
||||
</text>
|
||||
<button label="Aplicar" name="apply_btn" />
|
||||
<text name="allow_resident_label">
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ class ViewerManifest(LLManifest):
|
|||
self.path("*/*/*.gif")
|
||||
self.end_prefix("*/html")
|
||||
self.end_prefix("skins")
|
||||
self.path("releasenotes.txt")
|
||||
self.path("lsl_guide.html")
|
||||
self.path("gpu_table.txt")
|
||||
|
||||
|
|
@ -400,8 +399,14 @@ class DarwinManifest(ViewerManifest):
|
|||
|
||||
self.path("licenses-mac.txt", dst="licenses.txt")
|
||||
self.path("featuretable_mac.txt")
|
||||
self.path("secondlife.icns")
|
||||
self.path("SecondLife.nib")
|
||||
|
||||
# If we are not using the default channel, use the 'Firstlook
|
||||
# icon' to show that it isn't a stable release.
|
||||
if self.default_channel() and self.default_grid():
|
||||
self.path("secondlife.icns")
|
||||
else:
|
||||
self.path("secondlife_firstlook.icns", "secondlife.icns")
|
||||
|
||||
# Translations
|
||||
self.path("English.lproj")
|
||||
|
|
@ -450,6 +455,12 @@ class DarwinManifest(ViewerManifest):
|
|||
channel_standin = self.channel()
|
||||
|
||||
imagename="SecondLife_" + '_'.join(self.args['version'])
|
||||
|
||||
# MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning.
|
||||
# If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick.
|
||||
|
||||
volname="Second Life Installer" # DO NOT CHANGE without understanding comment above
|
||||
|
||||
if self.default_channel():
|
||||
if not self.default_grid():
|
||||
# beta case
|
||||
|
|
@ -463,9 +474,9 @@ class DarwinManifest(ViewerManifest):
|
|||
# make sure we don't have stale files laying about
|
||||
self.remove(sparsename, finalname)
|
||||
|
||||
self.run_command('hdiutil create "%(sparse)s" -volname "%(channel)s" -fs HFS+ -type SPARSE -megabytes 300 -layout SPUD' % {
|
||||
self.run_command('hdiutil create "%(sparse)s" -volname "%(vol)s" -fs HFS+ -type SPARSE -megabytes 300 -layout SPUD' % {
|
||||
'sparse':sparsename,
|
||||
'channel':channel_standin})
|
||||
'vol':volname})
|
||||
|
||||
# mount the image and get the name of the mount point and device node
|
||||
hdi_output = self.run_command('hdiutil attach -private "' + sparsename + '"')
|
||||
|
|
@ -473,20 +484,51 @@ class DarwinManifest(ViewerManifest):
|
|||
volpath = re.search('HFS\s+(.+)', hdi_output).group(1).strip()
|
||||
|
||||
# Copy everything in to the mounted .dmg
|
||||
|
||||
if self.default_channel() and not self.default_grid():
|
||||
app_name = "Second Life " + self.args['grid']
|
||||
else:
|
||||
app_name = channel_standin.strip()
|
||||
|
||||
# Hack:
|
||||
# Because there is no easy way to coerce the Finder into positioning
|
||||
# the app bundle in the same place with different app names, we are
|
||||
# adding multiple .DS_Store files to svn. There is one for release,
|
||||
# one for release candidate and one for first look. Any other channels
|
||||
# will use the release .DS_Store, and will look broken.
|
||||
# - Ambroff 2008-08-20
|
||||
dmg_template = os.path.join(
|
||||
'installers',
|
||||
'darwin',
|
||||
'%s-dmg' % "".join(self.channel_unique().split()).lower())
|
||||
|
||||
if not os.path.exists (self.src_path_of(dmg_template)):
|
||||
dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
|
||||
|
||||
# To reinstate the linden scripting guide, add this to the list below:
|
||||
# "lsl_guide.html":"Linden Scripting Language Guide.html",
|
||||
|
||||
for s,d in {self.get_dst_prefix():app_name + ".app",
|
||||
"lsl_guide.html":"Linden Scripting Language Guide.html",
|
||||
"releasenotes.txt":"Release Notes.txt",
|
||||
"installers/darwin/mac_image_hidden":".hidden",
|
||||
"installers/darwin/mac_image_background.tga":"background.tga",
|
||||
"installers/darwin/mac_image_DS_Store":".DS_Store"}.items():
|
||||
os.path.join(dmg_template, "_VolumeIcon.icns"): ".VolumeIcon.icns",
|
||||
os.path.join(dmg_template, "background.jpg"): "background.jpg",
|
||||
os.path.join(dmg_template, "_DS_Store"): ".DS_Store"}.items():
|
||||
print "Copying to dmg", s, d
|
||||
self.copy_action(self.src_path_of(s), os.path.join(volpath, d))
|
||||
|
||||
# Hide the background image, DS_Store file, and volume icon file (set their "visible" bit)
|
||||
self.run_command('SetFile -a V "' + os.path.join(volpath, ".VolumeIcon.icns") + '"')
|
||||
self.run_command('SetFile -a V "' + os.path.join(volpath, "background.jpg") + '"')
|
||||
self.run_command('SetFile -a V "' + os.path.join(volpath, ".DS_Store") + '"')
|
||||
|
||||
# Create the alias file (which is a resource file) from the .r
|
||||
self.run_command('rez "' + self.src_path_of("installers/darwin/release-dmg/Applications-alias.r") + '" -o "' + os.path.join(volpath, "Applications") + '"')
|
||||
|
||||
# Set the alias file's alias and custom icon bits
|
||||
self.run_command('SetFile -a AC "' + os.path.join(volpath, "Applications") + '"')
|
||||
|
||||
# Set the disk image root's custom icon bit
|
||||
self.run_command('SetFile -a C "' + volpath + '"')
|
||||
|
||||
# Unmount the image
|
||||
self.run_command('hdiutil detach -force "' + devfile + '"')
|
||||
|
||||
|
|
|
|||
|
|
@ -111,16 +111,16 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>0a49a6ec1f2db3693d81f4a32e0bdc2c</string>
|
||||
<string>d9ce3ace9235249b7edf6f564de83395</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-darwin-20080812.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.4.0-darwin-20080731b.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>29dc8946944acd44459bdff03359314c</string>
|
||||
<string>aa111fae0ac550bba5e280275eb25904</string>
|
||||
<key>url</key>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-linux-20080812.tar.bz2</uri>
|
||||
<uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.4.0-linux-20080729.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
|
|
|
|||
Loading…
Reference in New Issue