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) mergeme
master
Steven Bennetts 2008-08-28 23:57:41 +00:00
parent ac4766d435
commit 4a6bacea0f
74 changed files with 28593 additions and 347 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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/");

View File

@ -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

View File

@ -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];

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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();
}

View File

@ -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

View File

@ -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;
}
//============================================================================

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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.

After

Width:  |  Height:  |  Size: 73 KiB

File diff suppressed because it is too large Load Diff

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.

After

Width:  |  Height:  |  Size: 73 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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.

View File

@ -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);

View File

@ -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;

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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();

View File

@ -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);

View File

@ -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)

View File

@ -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";

View File

@ -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;

View File

@ -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))

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}
};

View File

@ -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**)

View File

@ -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",

View File

@ -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,

View File

@ -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();

View File

@ -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;
}

View File

@ -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

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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);

View File

@ -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();

View File

@ -462,7 +462,8 @@ public:
// internal (pseudo-private) functions
//--------------------------------------------------------------------
F32 getPelvisToFoot() { return mPelvisToFoot; }
void startDefaultMotions();
void buildCharacter();
void releaseMeshData();
void restoreMeshData();

View File

@ -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.

View File

@ -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:

View File

@ -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">
許可された住人:

View File

@ -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">

View File

@ -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 + '"')

View File

@ -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>