From d5217ec883e298e3cee4149cfb46f952391e83d1 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Fri, 28 Jun 2024 13:41:44 +0200 Subject: fps limiter setting in app_settings.xml MaxFPS settings type and description changed --- indra/newview/app_settings/settings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'indra') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index a07396b5b1..00c7eae9bc 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2468,7 +2468,7 @@ Value 0 - DoubleClickTeleport + DoubleClickTeleport Comment Enable double-click to teleport where allowed (afects minimap and people panel) @@ -8898,7 +8898,7 @@ Value 1 - + RenderReflectionDetail Comment @@ -8965,7 +8965,7 @@ Value 1 - + RenderReflectionProbeDrawDistance Comment @@ -9153,7 +9153,7 @@ Value 0.7 - + RenderReflectionProbeMaxLocalLightAmbiance Comment @@ -10589,7 +10589,7 @@ Boolean Value 0 - + NearbyListShowMap Comment @@ -13477,13 +13477,13 @@ MaxFPS Comment - OBSOLETE UNUSED setting. + FPS Limiter. Persist 1 Type - F32 + U32 Value - -1.0 + 0 ZoomDirect @@ -15384,7 +15384,7 @@ Type Boolean Value - 1 + 1 UpdateAppWindowTitleBar -- cgit v1.2.3 From 5d578f69df6ad00e51d1c2902a1f304f4d942e61 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Fri, 28 Jun 2024 13:43:29 +0200 Subject: Faster Zoom in avatars Adjusted value for MAX_ANIM_SECONDS in llagentcamera.cpp --- indra/newview/llagentcamera.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra') 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 ); -- cgit v1.2.3 From 714038e0f35329b614d12cf467230f9cb6eea017 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Sat, 29 Jun 2024 22:48:41 +0200 Subject: Apple GPU Detection and Apple GPU performance optimisations This commit adds a mIsApple member to the gl manager and refines the buffers optimisations for Apple GPU in llvertexbuffer.cpp --- indra/llrender/llgl.cpp | 7 +++++++ indra/llrender/llgl.h | 1 + 2 files changed, 8 insertions(+) (limited to 'indra') 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 -- cgit v1.2.3 From 20b54d6c7ed671dd7a6e5b2518d338d67e81a543 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Sat, 29 Jun 2024 22:50:42 +0200 Subject: Reworked fps limiter code This improves the realiability of the fps limiter --- indra/newview/llappviewer.cpp | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) (limited to 'indra') diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2d65c725b5..0f1b5a789b 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 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 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 yield_time(gSavedSettings, "YieldTime", -1); if(yield_time >= 0) -- cgit v1.2.3 From 2e16d1b365e465c0c3e505770e213200ec25fc12 Mon Sep 17 00:00:00 2001 From: mobserveur Date: Sat, 29 Jun 2024 22:57:51 +0200 Subject: vertex buffer optimisations for Apple GPU The vertex buffer will use the original mapping for non Apple GPUs and the new optimized mapping for Apple GPUs. It needs the Apple gpu detection in the gl manager --- indra/llrender/llvertexbuffer.cpp | 42 ++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'indra') 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); -- cgit v1.2.3 From 721c63ff6e1df8e4f4a57a27842e05b24f4fd6f9 Mon Sep 17 00:00:00 2001 From: fowlerdm Date: Fri, 28 Jun 2024 22:06:02 -0600 Subject: Window_Background/Foreground adjustment Make outline slightly less transparent --- .../default/textures/windows/Window_Background.png | Bin 6567 -> 6780 bytes .../default/textures/windows/Window_Foreground.png | Bin 6677 -> 6900 bytes 2 files changed, 0 insertions(+), 0 deletions(-) (limited to 'indra') 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 Binary files a/indra/newview/skins/default/textures/windows/Window_Background.png and b/indra/newview/skins/default/textures/windows/Window_Background.png 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 Binary files a/indra/newview/skins/default/textures/windows/Window_Foreground.png and b/indra/newview/skins/default/textures/windows/Window_Foreground.png differ -- cgit v1.2.3 From 3e97d66065e78c0711cd1ec544d3a4ef03200aca Mon Sep 17 00:00:00 2001 From: fowlerdm Date: Sat, 29 Jun 2024 01:06:13 -0600 Subject: first_login_image.jpg tweak add pirate theme! --- .../default/textures/windows/first_login_image.jpg | Bin 104529 -> 398853 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'indra') 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 Binary files a/indra/newview/skins/default/textures/windows/first_login_image.jpg and b/indra/newview/skins/default/textures/windows/first_login_image.jpg differ -- cgit v1.2.3 From 550db5044648a4a6b7d7fa884d542824ffd7c798 Mon Sep 17 00:00:00 2001 From: fowlerdm Date: Sat, 29 Jun 2024 01:06:40 -0600 Subject: Linden_Dollar_Background.png tweak Less ugly alternative --- .../textures/widgets/Linden_Dollar_Background.png | Bin 153649 -> 130294 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'indra') 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..f3b3d796f6 100644 Binary files a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png and b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png differ -- cgit v1.2.3 From facf3ce0c8554896e2183e4a4e4588b81e5100d5 Mon Sep 17 00:00:00 2001 From: fowlerdm Date: Sat, 29 Jun 2024 23:35:19 -0600 Subject: Linden_Dollar_Background.png More transparency --- .../textures/widgets/Linden_Dollar_Background.png | Bin 130294 -> 130520 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'indra') 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 f3b3d796f6..6e71ef7b72 100644 Binary files a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png and b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png differ -- cgit v1.2.3 From 1478ec8e9c50eba8b3a64fb9c2fc54a3a328510b Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Sat, 29 Jun 2024 09:43:08 +0800 Subject: Fast timer view had a maybe uninitialised variable that GCC did't like. Adding a compile flag to the file didn't help somehow. So we're just initialising it with float 0.0. --- indra/newview/llfasttimerview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra') 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: -- cgit v1.2.3 From 532ebcd2d1e722e73aa09a49e77ebaa79cc05e3e Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 08:58:07 +0800 Subject: `make install` on macOS copies resources to bundle Except for SLPlugin since there's already a custom command for it. --- indra/cmake/UnixInstall.cmake | 88 +++++++++++++++++++++---------- indra/llplugin/slplugin/CMakeLists.txt | 2 +- indra/media_plugins/cef/CMakeLists.txt | 20 +++---- indra/media_plugins/libvlc/CMakeLists.txt | 20 +++---- indra/newview/ViewerInstall.cmake | 52 ++++++++++++++++++ 5 files changed, 135 insertions(+), 47 deletions(-) (limited to '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..cdf77187c3 100644 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -65,7 +65,7 @@ if (BUILD_SHARED_LIBS) "${LINK_FLAGS_RELEASE} -Wl,--allow-shlib-undefined") endif () -if (INSTALL) +if (INSTALL AND NOT DARWIN) install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME}) endif () 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/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake index e648d8cc47..3ae148e91d 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -1,3 +1,53 @@ +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 + ) + +else (DARWIN) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME} DESTINATION bin ) @@ -80,3 +130,5 @@ install(FILES ${SCRIPTS_DIR}/messages/message_template.msg install(FILES linux_tools/${VIEWER_BINARY_NAME}.desktop DESTINATION share/applications ) + +endif (DARWIN) -- cgit v1.2.3 From 0f5410384fab6742325601c2acab053438810e08 Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 09:05:33 +0800 Subject: CPack packages licenses-linux.txt as licences.txt plus some reindentations. --- indra/newview/ViewerInstall.cmake | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake index 3ae148e91d..944b71feec 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -115,10 +115,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} ) -- cgit v1.2.3 From 046915bcef544f8e1e80059080b6ecc4491feb2e Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 09:10:06 +0800 Subject: Reindentations & tabs to spaces to conversions --- indra/newview/ViewerInstall.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake index 944b71feec..9926410152 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -73,8 +73,8 @@ if (LINUX) 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 @@ -133,7 +133,7 @@ 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 ) -- cgit v1.2.3 From 765a0ceb6b1ab3123a9f2782fb8e73fb3c2e7732 Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 09:11:38 +0800 Subject: libfmod.so files installed only if USE_FMODSTUDIO --- indra/newview/ViewerInstall.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake index 9926410152..6c782592c9 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -66,10 +66,14 @@ 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} -- cgit v1.2.3 From 0627bb28339ffc678ca93e823d844407134d8aa1 Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 11:00:42 +0800 Subject: macOS viewer_manifest.py not run if INSTALL is ON `make install` instead should do the job. Some generations haven't been reimplemented, including build_data.json, contributors.txt, and settings_install.xml. --- indra/newview/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8070cd0796..4b0c9b1886 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2167,6 +2167,7 @@ if (DARWIN) "${VIEWER_APP_BUNDLE}/Contents/Info.plist" ) + if (NOT INSTALL) add_custom_command( TARGET ${VIEWER_BINARY_NAME} POST_BUILD COMMAND ${PYTHON_EXECUTABLE} @@ -2191,6 +2192,7 @@ if (DARWIN) ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) + endif (NOT INSTALL) if (ENABLE_MEDIA_PLUGINS) if (DARWIN OR LINUX) -- cgit v1.2.3 From 2775a604a0432132e251a74067d06a30f864523c Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 12:00:15 +0800 Subject: `make install` on macOS installs SLPlugin app Turns out the custom command was only for bundling it, not necessarily installing it. --- indra/llplugin/slplugin/CMakeLists.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'indra') diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt index cdf77187c3..c3752a4705 100644 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -65,9 +65,14 @@ if (BUILD_SHARED_LIBS) "${LINK_FLAGS_RELEASE} -Wl,--allow-shlib-undefined") endif () -if (INSTALL AND NOT DARWIN) - install(TARGETS ${PROJECT_NAME} DESTINATION libexec/${VIEWER_BINARY_NAME}) -endif () +if (INSTALL) + 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) -- cgit v1.2.3 From 1ed01f5134fa2e62fa447e9eb8c1745143b3779f Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 16:15:33 +0800 Subject: `make install` on macOS copies dep libs to bundle I couldn't get CEF & Dullahan copied using this function. fixup_bundle on SLPlugin.app was considered invalid, however, SLPlugin itself gets install_name_tool changed but pointing to a non-existent Frameworks directory that would be in the SLPlugin.app bundle. We will have to create and fill such directory with links to the upper (the root viewer app bundle Frameworks') library copies ourselves. We wouldn't want fixup_bundle to successfully fill SLPlugin's Frameworks with copies instead of links anyway. See: `man cmake-modules` https://cmake.org/cmake/help/book/mastering-cmake/chapter/Install.html --- indra/newview/FixBundle.cmake.in | 7 +++++++ indra/newview/ViewerInstall.cmake | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 indra/newview/FixBundle.cmake.in (limited to 'indra') 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 6c782592c9..7d9f160467 100644 --- a/indra/newview/ViewerInstall.cmake +++ b/indra/newview/ViewerInstall.cmake @@ -46,6 +46,12 @@ if (DARWIN) 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} -- cgit v1.2.3 From 6369047dcb74323b248de59bc8187db0d315548a Mon Sep 17 00:00:00 2001 From: Erik Kundiman Date: Fri, 5 Jul 2024 20:24:10 +0800 Subject: Temporary Cocoa U16 vs. SDL2 U32 key types Even when maint-b is merged to main, webrtc-voice will very likely still have to wait until it's merged with main to get maint-b's changes. I'll worry about the conflicts later, just so any branch would build on SDL2 or not without any patches. --- indra/llwindow/llkeyboard.cpp | 12 ++++++++++++ indra/llwindow/llkeyboard.h | 15 +++++++++++++++ indra/llwindow/llkeyboardheadless.cpp | 8 ++++++++ indra/llwindow/llkeyboardheadless.h | 5 +++++ 4 files changed, 40 insertions(+) (limited to 'indra') 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::iterator iter; +#else BOOL LLKeyboard::translateKey(const U16 os_key, KEY *out_key) { std::map::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::iterator iter; +#else U16 LLKeyboard::inverseTranslateKey(const KEY translated_key) { std::map::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 mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs + std::map mInvTranslateKeyMap; // Map of translations from Linden KEYs to OS keys +#else std::map mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs std::map 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(); -- cgit v1.2.3