summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Kundiman <erik@megapahit.org>2024-07-05 20:37:39 +0800
committerErik Kundiman <erik@megapahit.org>2024-07-05 20:37:39 +0800
commitbe75d0eba7ff0a29573139aee593debba81cc65d (patch)
tree2545f54e724b38702be6876e3b0ee4948bf64d25
parent6814c077701786f9d69e9f5c0f78ed496a3122cf (diff)
parent6369047dcb74323b248de59bc8187db0d315548a (diff)
Merge branch 'main' into webrtc-voice
-rw-r--r--README.md13
-rw-r--r--indra/cmake/UnixInstall.cmake88
-rw-r--r--indra/llplugin/slplugin/CMakeLists.txt9
-rw-r--r--indra/llrender/llgl.cpp7
-rw-r--r--indra/llrender/llgl.h1
-rw-r--r--indra/llrender/llvertexbuffer.cpp42
-rw-r--r--indra/llwindow/llkeyboard.cpp12
-rw-r--r--indra/llwindow/llkeyboard.h15
-rw-r--r--indra/llwindow/llkeyboardheadless.cpp8
-rw-r--r--indra/llwindow/llkeyboardheadless.h5
-rw-r--r--indra/media_plugins/cef/CMakeLists.txt20
-rw-r--r--indra/media_plugins/libvlc/CMakeLists.txt20
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/FixBundle.cmake.in7
-rw-r--r--indra/newview/ViewerInstall.cmake82
-rw-r--r--indra/newview/app_settings/settings.xml18
-rw-r--r--indra/newview/llagentcamera.cpp4
-rw-r--r--indra/newview/llappviewer.cpp37
-rw-r--r--indra/newview/llfasttimerview.cpp2
-rw-r--r--indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.pngbin153649 -> 130520 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Window_Background.pngbin6567 -> 6780 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/Window_Foreground.pngbin6677 -> 6900 bytes
-rw-r--r--indra/newview/skins/default/textures/windows/first_login_image.jpgbin104529 -> 398853 bytes
23 files changed, 285 insertions, 107 deletions
diff --git a/README.md b/README.md
index 0fa89e674c..60dbf24fed 100644
--- a/README.md
+++ b/README.md
@@ -31,38 +31,39 @@ Third party maintained forks, which include Linux compatible builds, are indexed
### macOS
```
-# port install git cmake pkgconfig apr-util boost collada-dom freealut hunspell jsoncpp libsdl2 openjpeg uriparser
-$ export LL_BUILD="-DLL_DARWIN=1 -DPIC -fPIC -gdwarf-2 -stdlib=libc++ -iwithsysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -std=c++17"
+# port install git cmake pkgconfig freealut +universal apr-util +universal boost +universal collada-dom +universal hunspell +universal jsoncpp +universal openjpeg +universal libsdl2 +universal uriparser +universal
+$ export LL_BUILD="-O3 -gdwarf-2 -stdlib=libc++ -iwithsysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -std=c++17 -fPIC -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG -DPIC -DLL_DARWIN=1 -arch arm64"
```
### Debian/Ubuntu
```
# apt install git cmake pkg-config libalut-dev libaprutil1-dev libboost-fiber-dev libboost-program-options-dev libboost-regex-dev libcollada-dom-dev libcurl4-openssl-dev libexpat1-dev libglu1-mesa-dev libgtk2.0-dev libhunspell-dev libjsoncpp-dev libmeshoptimizer-dev libnanosvg-dev libnghttp2-dev libsdl2-dev libssl-dev liburiparser-dev libvlc-dev libvlccore-dev libvorbis-dev libxmlrpc-epi-dev libxxhash-dev
-$ export LL_BUILD="-DLL_LINUX=1 -fPIC"
+$ export LL_BUILD="-O3 -std=c++17 -fPIC -DLL_LINUX=1"
```
### Fedora
```
# dnf install git cmake gcc-c++ SDL2-devel apr-util-devel boost-devel collada-dom-devel expat-devel freealut-devel gtk2-devel hunspell-devel jsoncpp-devel libcurl-devel libnghttp2-devel libvorbis-devel mesa-libGLU-devel nanosvg-devel openjpeg2-devel openssl-devel uriparser-devel vlc-devel xmlrpc-epi-devel xxhash-devel zstd
-$ export LL_BUILD="-DLL_LINUX=1 -fPIC"
+$ export LL_BUILD="-O3 -std=c++17 -fPIC -DLL_LINUX=1"
```
### FreeBSD
```
# portmaster devel/git devel/cmake devel/pkgconf devel/apr1 devel/collada-dom devel/sdl20 devel/xxhash audio/freealut audio/libvorbis graphics/nanosvg graphics/openjpeg misc/meshoptimizer multimedia/vlc net/uriparser net/xmlrpc-epi textproc/hunspell x11-toolkits/gtk20
-$ setenv LL_BUILD "-fPIC -std=c++17"
+$ setenv LL_BUILD "-O3 -std=c++17 -fPIC"
```
### Common
```
$ cd viewer
-$ git remote add megapahit https://megapahit.org/viewer.git
+$ git remote add megapahit git://megapahit.org/viewer.git
$ git fetch megapahit
$ git checkout megapahit/main
+$ git switch -c megapahit
$ mkdir -p build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE:STRING=Release -DADDRESS_SIZE:INTERNAL=64 -DUSESYSTEMLIBS:BOOL=ON -DUSE_OPENAL:BOOL=ON -DLL_TESTS:BOOL=OFF -DNDOF:BOOL=OFF -DVIEWER_CHANNEL:STRING=Megapahit -DVIEWER_BINARY_NAME:STRING=megapahit -DBUILD_SHARED_LIBS:BOOL=OFF -DPACKAGE:BOOL=OFF -DINSTALL:BOOL=ON ../indra
diff --git a/indra/cmake/UnixInstall.cmake b/indra/cmake/UnixInstall.cmake
index a748237c5b..59620b60b4 100644
--- a/indra/cmake/UnixInstall.cmake
+++ b/indra/cmake/UnixInstall.cmake
@@ -6,32 +6,64 @@ set(INSTALL OFF CACHE BOOL
"Generate install target.")
if (INSTALL)
- set(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH
- "Top-level installation directory.")
-
- if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
- set(_LIB lib/${ARCH}-linux-gnu)
- elseif (EXISTS /lib64)
- set(_LIB lib64)
- else ()
- set(_LIB lib)
- endif ()
-
- set(INSTALL_LIBRARY_DIR ${INSTALL_PREFIX}/${_LIB} CACHE PATH
- "Installation directory for read-only shared files.")
-
- set(INSTALL_SHARE_DIR ${INSTALL_PREFIX}/share CACHE PATH
- "Installation directory for read-only shared files.")
-
- set(APP_BINARY_DIR ${INSTALL_PREFIX}/bin
- CACHE PATH
- "Installation directory for binaries.")
-
- set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}/${VIEWER_BINARY_NAME}
- CACHE PATH
- "Installation directory for read-only data files.")
-
- set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/libexec/${VIEWER_BINARY_NAME}
- CACHE PATH
- "Installation directory for non-manual executables.")
+
+ if (DARWIN)
+
+ set(INSTALL_PREFIX
+ ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents
+ CACHE PATH
+ "Top-level installation directory.")
+
+ set(INSTALL_LIBRARY_DIR ${INSTALL_PREFIX}/Resources
+ CACHE PATH
+ "Installation directory for read-only shared files.")
+
+ set(INSTALL_SHARE_DIR ${INSTALL_LIBRARY_DIR} CACHE PATH
+ "Installation directory for read-only shared files.")
+
+ set(APP_BINARY_DIR ${INSTALL_PREFIX}/MacOS
+ CACHE PATH
+ "Installation directory for binaries.")
+
+ set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}
+ CACHE PATH
+ "Installation directory for read-only data files.")
+
+ set(APP_LIBEXEC_DIR ${INSTALL_LIBRARY_DIR}
+ CACHE PATH
+ "Installation directory for non-manual executables.")
+
+ else (DARWIN)
+
+ set(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH
+ "Top-level installation directory.")
+
+ if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else ()
+ set(_LIB lib)
+ endif ()
+
+ set(INSTALL_LIBRARY_DIR ${INSTALL_PREFIX}/${_LIB} CACHE PATH
+ "Installation directory for read-only shared files.")
+
+ set(INSTALL_SHARE_DIR ${INSTALL_PREFIX}/share CACHE PATH
+ "Installation directory for read-only shared files.")
+
+ set(APP_BINARY_DIR ${INSTALL_PREFIX}/bin
+ CACHE PATH
+ "Installation directory for binaries.")
+
+ set(APP_SHARE_DIR ${INSTALL_SHARE_DIR}/${VIEWER_BINARY_NAME}
+ CACHE PATH
+ "Installation directory for read-only data files.")
+
+ set(APP_LIBEXEC_DIR ${INSTALL_PREFIX}/libexec/${VIEWER_BINARY_NAME}
+ CACHE PATH
+ "Installation directory for non-manual executables.")
+
+ endif (DARWIN)
+
endif (INSTALL)
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index e86ddd8a32..c3752a4705 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -66,8 +66,13 @@ if (BUILD_SHARED_LIBS)
endif ()
if (INSTALL)
- install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME})
-endif ()
+ if (DARWIN)
+ install(TARGETS ${PROJECT_NAME}
+ DESTINATION ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources)
+ else (DARWIN)
+ install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME})
+ endif (DARWIN)
+endif (INSTALL)
if (LL_TESTS)
ll_deploy_sharedlibs_command(SLPlugin)
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index 10920f1de3..9207e6ad73 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -1001,6 +1001,7 @@ LLGLManager::LLGLManager() :
mIsAMD(FALSE),
mIsNVIDIA(FALSE),
mIsIntel(FALSE),
+ mIsApple(FALSE),
#if LL_DARWIN
mIsMobileGF(FALSE),
#endif
@@ -1174,6 +1175,11 @@ bool LLGLManager::initGL()
mGLVendorShort = "INTEL";
mIsIntel = TRUE;
}
+ else if(mGLVendor.find("APPLE") != std::string::npos)
+ {
+ mGLVendorShort = "APPLE";
+ mIsApple = TRUE;
+ }
else
{
mGLVendorShort = "MISC";
@@ -1373,6 +1379,7 @@ void LLGLManager::asLLSD(LLSD& info)
info["is_ati"] = mIsAMD; // note, do not rename is_ati to is_amd without coordinating with DW
info["is_nvidia"] = mIsNVIDIA;
info["is_intel"] = mIsIntel;
+ info["is_apple"] = mIsApple;
info["gl_renderer"] = mGLRenderer;
}
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index 5a7ad943df..e4b106c999 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -100,6 +100,7 @@ public:
BOOL mIsAMD;
BOOL mIsNVIDIA;
BOOL mIsIntel;
+ BOOL mIsApple;
#if LL_DARWIN
// Needed to distinguish problem cards on older Macs that break with Materials
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 783794512c..52fb58187a 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -1155,19 +1155,40 @@ static void flush_vbo(GLenum target, U32 start, U32 end, void* data)
LL_PROFILE_ZONE_NUM(end-start);
U32 size = end-start+1;
+ U32 block_size = 65536;
- //Note (observeur): glBufferSubData() was causing synchronization stalls, specialy on Apple GPUs, possibly to the fact Apple GPU is a tiled gpu, resulting to heavy stutters, and spacialy when called several times per frame on the same buffer.
+ //Note (observeur): The following code is executed on non Apple gpus. Using glMapBufferRange() didn't show obvious benefit on the other tested platforms (intel igpu, amd igpu and nVidia dgpus).
+ if(!gGLManager.mIsApple)
+ {
+ for (U32 i = start; i <= end; i += block_size)
+ {
+ LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("glBufferSubData block");
+ LL_PROFILE_GPU_ZONE("glBufferSubData");
+ U32 tend = llmin(i + block_size, end);
+ U32 size = tend - i + 1;
+ glBufferSubData(target, i, size, (U8*) data + (i-start));
+ }
+
+ return;
+ }
+
+ //Note (observeur): glBufferSubData() was causing synchronization stalls on Apple GPUs resulting to heavy stutters and lower performance in the world and UI rendering. Using glMapBufferRange() benefits Macs with Apple gpus enormously.
- //Note (observeur): I maintained the notion of block_size for testing purpose, but i think it's a bad idea. We don't know the overhead of glMapBufferRange() depending on the driver, so it's better avoiding calling it more than necessary.(0 -> loop is disabled, 8192 -> original value, 524288 -> a resonable value).
- constexpr U32 block_size = 0;
+ //Note (observeur): Other bits such as GL_MAP_INVALIDATE_RANGE_BIT or GL_MAP_UNSYNCHRONIZED_BIT didn't seem to make much of a difference on Apple gpus, so we stick to the simple way.
+ U32 MapBits = GL_MAP_WRITE_BIT;
+ //Note (observeur): Using a block size of 0 will call the following block and map the buffer all in once. It doesn't bother Apple machines, it might actually benefit them a little bit. A larger value is also fine. The largest buffers I observed where around 2mb or 3mb while most of buffers are smaller than 50000 bytes.
+ block_size = 524288;
+
+ //Note (observeur): This is called in case block_size is set to 0 (All in one mapping).
if(block_size == 0)
{
U8 * mptr = NULL;
LL_PROFILE_ZONE_NAMED_CATEGORY_VERTEX("glBufferSubData block");
LL_PROFILE_GPU_ZONE("glBufferSubData");
- mptr = (U8*) glMapBufferRange( target, start, size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
+ mptr = (U8*) glMapBufferRange( target, start, size, MapBits);
+
if(mptr)
{
std::memcpy(mptr, (U8*) data, size);
@@ -1180,11 +1201,13 @@ static void flush_vbo(GLenum target, U32 start, U32 end, void* data)
return;
}
+ //Note (observeur): The following code is executed in case of block_size is superior to 0
+
//Note (observeur): This is for analysis purpose only
- if(size > block_size)
- {
- LL_INFOS() << "Large data range : " << size << LL_ENDL;
- }
+ //if(size > block_size)
+ //{
+ // LL_INFOS() << "Large data range (MB MODE) : " << size << LL_ENDL;
+ //}
U8 * mptr = NULL;
@@ -1195,7 +1218,8 @@ static void flush_vbo(GLenum target, U32 start, U32 end, void* data)
U32 tend = llmin(i + block_size, end);
size = tend - i + 1;
- mptr = (U8*) glMapBufferRange( target, i, size, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
+ mptr = (U8*) glMapBufferRange( target, i, size, MapBits );
+
if(mptr)
{
std::memcpy(mptr, (U8*) data + (i-start), size);
diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp
index b3dcac6222..e93ad28fdf 100644
--- a/indra/llwindow/llkeyboard.cpp
+++ b/indra/llwindow/llkeyboard.cpp
@@ -195,9 +195,15 @@ void LLKeyboard::resetKeys()
}
+#if LL_SDL
+BOOL LLKeyboard::translateKey(const U32 os_key, KEY *out_key)
+{
+ std::map<U32, KEY>::iterator iter;
+#else
BOOL LLKeyboard::translateKey(const U16 os_key, KEY *out_key)
{
std::map<U16, KEY>::iterator iter;
+#endif
// Only translate keys in the map, ignore all other keys for now
iter = mTranslateKeyMap.find(os_key);
@@ -215,9 +221,15 @@ BOOL LLKeyboard::translateKey(const U16 os_key, KEY *out_key)
}
+#if LL_SDL
+U32 LLKeyboard::inverseTranslateKey(const KEY translated_key)
+{
+ std::map<KEY, U32>::iterator iter;
+#else
U16 LLKeyboard::inverseTranslateKey(const KEY translated_key)
{
std::map<KEY, U16>::iterator iter;
+#endif
iter = mInvTranslateKeyMap.find(translated_key);
if (iter == mInvTranslateKeyMap.end())
{
diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h
index e406de347c..89fa840e42 100644
--- a/indra/llwindow/llkeyboard.h
+++ b/indra/llwindow/llkeyboard.h
@@ -67,14 +67,24 @@ public:
BOOL getKeyDown(const KEY key) { return mKeyLevel[key]; }
BOOL getKeyRepeated(const KEY key) { return mKeyRepeated[key]; }
+#if LL_SDL
+ BOOL translateKey(const U32 os_key, KEY *translated_key);
+ U32 inverseTranslateKey(const KEY translated_key);
+#else
BOOL translateKey(const U16 os_key, KEY *translated_key);
U16 inverseTranslateKey(const KEY translated_key);
+#endif
BOOL handleTranslatedKeyUp(KEY translated_key, U32 translated_mask); // Translated into "Linden" keycodes
BOOL handleTranslatedKeyDown(KEY translated_key, U32 translated_mask); // Translated into "Linden" keycodes
+#if LL_SDL
+ virtual BOOL handleKeyUp(const U32 key, MASK mask) = 0;
+ virtual BOOL handleKeyDown(const U32 key, MASK mask) = 0;
+#else
virtual BOOL handleKeyUp(const U16 key, MASK mask) = 0;
virtual BOOL handleKeyDown(const U16 key, MASK mask) = 0;
+#endif
#if defined(LL_DARWIN) && !defined(LL_SDL)
// We only actually use this for OS X.
@@ -111,8 +121,13 @@ protected:
void addKeyName(KEY key, const std::string& name);
protected:
+#if LL_SDL
+ std::map<U32, KEY> mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs
+ std::map<KEY, U32> mInvTranslateKeyMap; // Map of translations from Linden KEYs to OS keys
+#else
std::map<U16, KEY> mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs
std::map<KEY, U16> mInvTranslateKeyMap; // Map of translations from Linden KEYs to OS keys
+#endif
LLWindowCallbacks *mCallbacks;
LLTimer mKeyLevelTimer[KEY_COUNT]; // Time since level was set
diff --git a/indra/llwindow/llkeyboardheadless.cpp b/indra/llwindow/llkeyboardheadless.cpp
index 01ac26261b..a3c86fde2b 100644
--- a/indra/llwindow/llkeyboardheadless.cpp
+++ b/indra/llwindow/llkeyboardheadless.cpp
@@ -35,11 +35,19 @@ void LLKeyboardHeadless::resetMaskKeys()
{ }
+#if LL_SDL
+BOOL LLKeyboardHeadless::handleKeyDown(const U32 key, const U32 mask)
+#else
BOOL LLKeyboardHeadless::handleKeyDown(const U16 key, const U32 mask)
+#endif
{ return FALSE; }
+#if LL_SDL
+BOOL LLKeyboardHeadless::handleKeyUp(const U32 key, const U32 mask)
+#else
BOOL LLKeyboardHeadless::handleKeyUp(const U16 key, const U32 mask)
+#endif
{ return FALSE; }
MASK LLKeyboardHeadless::currentMask(BOOL for_mouse_event)
diff --git a/indra/llwindow/llkeyboardheadless.h b/indra/llwindow/llkeyboardheadless.h
index 8e067e6108..2bb670a53d 100644
--- a/indra/llwindow/llkeyboardheadless.h
+++ b/indra/llwindow/llkeyboardheadless.h
@@ -35,8 +35,13 @@ public:
LLKeyboardHeadless();
/*virtual*/ ~LLKeyboardHeadless() {};
+#if LL_SDL
+ /*virtual*/ BOOL handleKeyUp(const U32 key, MASK mask);
+ /*virtual*/ BOOL handleKeyDown(const U32 key, MASK mask);
+#else
/*virtual*/ BOOL handleKeyUp(const U16 key, MASK mask);
/*virtual*/ BOOL handleKeyDown(const U16 key, MASK mask);
+#endif
/*virtual*/ void resetMaskKeys();
/*virtual*/ MASK currentMask(BOOL for_mouse_event);
/*virtual*/ void scanKeyboard();
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 15b2d71923..5fb0158aa3 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -93,12 +93,14 @@ if (DARWIN)
endif (DARWIN)
if (INSTALL)
- if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
- set(_LIB lib/${ARCH}-linux-gnu)
- elseif (EXISTS /lib64)
- set(_LIB lib64)
- else ()
- set(_LIB lib)
- endif ()
- install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
-endif ()
+ if (DARWIN)
+ set(_LIB ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources/llplugin)
+ elseif (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else (DARWIN)
+ set(_LIB lib)
+ endif (DARWIN)
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+endif (INSTALL)
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index d5d9a5d147..2c70db1141 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -57,12 +57,14 @@ if (DARWIN)
endif (DARWIN)
if (INSTALL)
- if (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
- set(_LIB lib/${ARCH}-linux-gnu)
- elseif (EXISTS /lib64)
- set(_LIB lib64)
- else ()
- set(_LIB lib)
- endif ()
- install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
-endif ()
+ if (DARWIN)
+ set(_LIB ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources/llplugin)
+ elseif (EXISTS ${CMAKE_SYSROOT}/usr/lib/${ARCH}-linux-gnu)
+ set(_LIB lib/${ARCH}-linux-gnu)
+ elseif (EXISTS /lib64)
+ set(_LIB lib64)
+ else (DARWIN)
+ set(_LIB lib)
+ endif (DARWIN)
+ install(TARGETS ${PROJECT_NAME} DESTINATION ${_LIB})
+endif (INSTALL)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 4771dbfa1c..26d60bc947 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2173,6 +2173,7 @@ if (DARWIN)
"${VIEWER_APP_BUNDLE}/Contents/Info.plist"
)
+ if (NOT INSTALL)
add_custom_command(
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
COMMAND ${PYTHON_EXECUTABLE}
@@ -2197,6 +2198,7 @@ if (DARWIN)
${VIEWER_BINARY_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
)
+ endif (NOT INSTALL)
if (ENABLE_MEDIA_PLUGINS)
if (DARWIN OR LINUX)
diff --git a/indra/newview/FixBundle.cmake.in b/indra/newview/FixBundle.cmake.in
new file mode 100644
index 0000000000..73806642e4
--- /dev/null
+++ b/indra/newview/FixBundle.cmake.in
@@ -0,0 +1,7 @@
+include(BundleUtilities)
+
+set(dirs
+ /opt/local/lib
+ )
+
+fixup_bundle(${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app "" "${dirs}")
diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake
index e648d8cc47..7d9f160467 100644
--- a/indra/newview/ViewerInstall.cmake
+++ b/indra/newview/ViewerInstall.cmake
@@ -1,3 +1,59 @@
+if (DARWIN)
+
+ install(DIRECTORY
+ English.lproj
+ German.lproj
+ Japanese.lproj
+ Korean.lproj
+ app_settings
+ character
+ cursors_mac
+ da.lproj
+ es.lproj
+ fonts
+ fr.lproj
+ uk.lproj
+ hu.lproj
+ it.lproj
+ nl.lproj
+ pl.lproj
+ pt.lproj
+ ru.lproj
+ skins
+ tr.lproj
+ zh-Hans.lproj
+ DESTINATION ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources
+ )
+
+ install(FILES
+ SecondLife.nib
+ ${AUTOBUILD_INSTALL_DIR}/ca-bundle.crt
+ cube.dae
+ featuretable_mac.txt
+ secondlife.icns
+ DESTINATION ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources
+ )
+
+ install(FILES
+ licenses-mac.txt
+ RENAME licenses.txt
+ DESTINATION ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources
+ )
+
+ install(FILES
+ ${SCRIPTS_DIR}/messages/message_template.msg
+ ${SCRIPTS_DIR}/../etc/message.xml
+ DESTINATION ${viewer_BINARY_DIR}/${VIEWER_CHANNEL}.app/Contents/Resources/app_settings
+ )
+
+ configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/FixBundle.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake
+ )
+ install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake)
+
+else (DARWIN)
+
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}
DESTINATION bin
)
@@ -16,15 +72,19 @@ if (LINUX)
endif ()
install(FILES
${AUTOBUILD_INSTALL_DIR}/lib/release/libcef.so
+ DESTINATION ${_LIB})
+ if (USE_FMODSTUDIO)
+ install(FILES
${AUTOBUILD_INSTALL_DIR}/lib/release/libfmod.so
${AUTOBUILD_INSTALL_DIR}/lib/release/libfmod.so.13
${AUTOBUILD_INSTALL_DIR}/lib/release/libfmod.so.13.22
- DESTINATION ${_LIB})
+ DESTINATION ${_LIB})
+ endif (USE_FMODSTUDIO)
install(PROGRAMS
${AUTOBUILD_INSTALL_DIR}/bin/release/chrome-sandbox
DESTINATION libexec/${VIEWER_BINARY_NAME}
- #PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE
- #GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+ #PERMISSIONS SETUID OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ #GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
install(PROGRAMS
${AUTOBUILD_INSTALL_DIR}/bin/release/dullahan_host
@@ -65,10 +125,16 @@ else (IS_ARTWORK_PRESENT)
message(STATUS "WARNING: Artwork is not present, and will not be installed")
endif (IS_ARTWORK_PRESENT)
-install(FILES featuretable_linux.txt
- #featuretable_solaris.txt
- licenses.txt
+ install(FILES
${AUTOBUILD_INSTALL_DIR}/ca-bundle.crt
+ featuretable_linux.txt
+ #featuretable_solaris.txt
+ DESTINATION share/${VIEWER_BINARY_NAME}
+ )
+
+ install(FILES
+ licenses-linux.txt
+ RENAME licenses.txt
DESTINATION share/${VIEWER_BINARY_NAME}
)
@@ -77,6 +143,8 @@ install(FILES ${SCRIPTS_DIR}/messages/message_template.msg
DESTINATION share/${VIEWER_BINARY_NAME}/app_settings
)
-install(FILES linux_tools/${VIEWER_BINARY_NAME}.desktop
+ install(FILES linux_tools/${VIEWER_BINARY_NAME}.desktop
DESTINATION share/applications
)
+
+endif (DARWIN)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2e305cc18d..c5e0ae7034 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2468,7 +2468,7 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>DoubleClickTeleport</key>
+ <key>DoubleClickTeleport</key>
<map>
<key>Comment</key>
<string>Enable double-click to teleport where allowed (afects minimap and people panel)</string>
@@ -8898,7 +8898,7 @@
<key>Value</key>
<integer>1</integer>
</map>
-
+
<key>RenderReflectionDetail</key>
<map>
<key>Comment</key>
@@ -8965,7 +8965,7 @@
<key>Value</key>
<real>1</real>
</map>
-
+
<key>RenderReflectionProbeDrawDistance</key>
<map>
<key>Comment</key>
@@ -9153,7 +9153,7 @@
<key>Value</key>
<real>0.7</real>
</map>
-
+
<key>RenderReflectionProbeMaxLocalLightAmbiance</key>
<map>
<key>Comment</key>
@@ -10589,7 +10589,7 @@
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
- </map>
+ </map>
<key>NearbyListShowMap</key>
<map>
<key>Comment</key>
@@ -13510,13 +13510,13 @@
<key>MaxFPS</key>
<map>
<key>Comment</key>
- <string>OBSOLETE UNUSED setting.</string>
+ <string>FPS Limiter.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>-1.0</real>
+ <real>0</real>
</map>
<key>ZoomDirect</key>
<map>
@@ -15417,7 +15417,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>1</integer>
</map>
<key>UpdateAppWindowTitleBar</key>
<map>
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 1912d9d1d5..8e8d7e6c50 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2663,9 +2663,9 @@ void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, con
if (mCameraAnimating)
{
- const F64 ANIM_METERS_PER_SECOND = 10.0;
+ const F64 ANIM_METERS_PER_SECOND = 15.0;
const F64 MIN_ANIM_SECONDS = 0.5;
- const F64 MAX_ANIM_SECONDS = 10.0;
+ const F64 MAX_ANIM_SECONDS = 3.0;
F64 anim_duration = llmax( MIN_ANIM_SECONDS, sqrt(focus_delta_squared) / ANIM_METERS_PER_SECOND );
anim_duration = llmin( anim_duration, MAX_ANIM_SECONDS );
setAnimationDuration( (F32)anim_duration );
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ab87ff6d2c..1b1a47aa0d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -393,7 +393,6 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
-U64 fpsLimitSleepUntil = 0; // fps limiter : time until to render the frame again
//----------------------------------------------------------------------------
@@ -1373,21 +1372,11 @@ bool LLAppViewer::frame()
bool LLAppViewer::doFrame()
{
+ static LLCachedControl<U32> fpsLimitMaxFps(gSavedSettings, "MaxFPS", 0);
- // FPS Limit
-
- U64 fpsLimitNow = LLTrace::BlockTimer::getCPUClockCount64();
- U64 fpsLimitFrameStartTime = fpsLimitNow;
- if(fpsLimitSleepUntil > 0)
- {
- if(fpsLimitSleepUntil > fpsLimitNow) return 0;
- }
- else
- {
- fpsLimitSleepUntil = 0;
- }
-
-
+ U64 fpsLimitSleepFor = 0;
+ U64 fpsLimitFrameStartTime = 0;
+ if(fpsLimitMaxFps > 0) fpsLimitFrameStartTime = LLTrace::BlockTimer::getCPUClockCount64();
LL_RECORD_BLOCK_TIME(FTM_FRAME);
{
@@ -1559,24 +1548,17 @@ bool LLAppViewer::doFrame()
}
}
- // fps limiter
-
- fpsLimitNow = LLTrace::BlockTimer::getCPUClockCount64();
- U64 fpsLimitFrameTime = fpsLimitNow - fpsLimitFrameStartTime;
- static LLCachedControl<U32> fpsLimitMaxFps(gSavedSettings, "MaxFPS", 0);
-
if(fpsLimitMaxFps > 0)
{
+ U64 fpsLimitFrameTime = LLTrace::BlockTimer::getCPUClockCount64() - fpsLimitFrameStartTime;
U64 desired_time_ns = (U32)(1000000.f / fpsLimitMaxFps);
- if(fpsLimitFrameTime < desired_time_ns)
+ if((fpsLimitFrameTime+1000) < desired_time_ns)
{
- U64 fpsLimitSleepUntil_for = desired_time_ns - fpsLimitFrameTime;
- fpsLimitSleepUntil = LLTrace::BlockTimer::getCPUClockCount64() + fpsLimitSleepUntil_for;
+ fpsLimitSleepFor = (desired_time_ns - fpsLimitFrameTime - 1000) * 1.0;
}
}
-
{
LL_PROFILE_ZONE_NAMED_CATEGORY_APP( "df pauseMainloopTimeout" )
pingMainloopTimeout("Main:Sleep");
@@ -1589,6 +1571,11 @@ bool LLAppViewer::doFrame()
//LL_RECORD_BLOCK_TIME(SLEEP2);
LL_PROFILE_ZONE_WARN( "Sleep2" )
+ if(fpsLimitSleepFor)
+ {
+ usleep(fpsLimitSleepFor);
+ }
+
// yield some time to the os based on command line option
static LLCachedControl<S32> yield_time(gSavedSettings, "YieldTime", -1);
if(yield_time >= 0)
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 843bdfa42d..4851f65c48 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1096,7 +1096,7 @@ void LLFastTimerView::drawLineGraph()
cur_max_calls = llmax(cur_max_calls, calls);
}
F32 x = mGraphRect.mRight - j * (F32)(mGraphRect.getWidth())/(mRecording.getNumRecordedPeriods()-1);
- F32 y;
+ F32 y = 0.0;
switch(mDisplayType)
{
case DISPLAY_TIME:
diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
index f80b77aab5..6e71ef7b72 100644
--- a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
+++ b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Window_Background.png b/indra/newview/skins/default/textures/windows/Window_Background.png
index 04d1c05e2e..f19fb0300b 100644
--- a/indra/newview/skins/default/textures/windows/Window_Background.png
+++ b/indra/newview/skins/default/textures/windows/Window_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/Window_Foreground.png b/indra/newview/skins/default/textures/windows/Window_Foreground.png
index d74db0de7e..15d2ff72b6 100644
--- a/indra/newview/skins/default/textures/windows/Window_Foreground.png
+++ b/indra/newview/skins/default/textures/windows/Window_Foreground.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/windows/first_login_image.jpg b/indra/newview/skins/default/textures/windows/first_login_image.jpg
index 30f31341ed..860fed4ac7 100644
--- a/indra/newview/skins/default/textures/windows/first_login_image.jpg
+++ b/indra/newview/skins/default/textures/windows/first_login_image.jpg
Binary files differ