From d26bf4cbd2eabd11ae9043f15a8ca51b4aad9318 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Wed, 26 Mar 2025 03:02:48 +1000 Subject: [PATCH 01/11] Fixes exporting textures getting downscaled and compressed, and a minor comment fix. --- indra/newview/daeexport.cpp | 2 ++ indra/newview/llagentbenefits.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/indra/newview/daeexport.cpp b/indra/newview/daeexport.cpp index 4f29268e11..bb2562b1ff 100644 --- a/indra/newview/daeexport.cpp +++ b/indra/newview/daeexport.cpp @@ -428,6 +428,8 @@ void ColladaExportFloater::CacheReadResponder::completed(bool success) // For other formats we need to decode first if (mFormattedImage->updateData() && ( (mFormattedImage->getWidth() * mFormattedImage->getHeight() * mFormattedImage->getComponents()) != 0 ) ) { + mFormattedImage->setDiscardLevel(0); // [FIRE-35292] Fix for textures getting downscaled and compressed + LLPointer raw = new LLImageRaw; raw->resize(mFormattedImage->getWidth(), mFormattedImage->getHeight(), mFormattedImage->getComponents()); diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp index 5b737e35f3..01a701094d 100644 --- a/indra/newview/llagentbenefits.cpp +++ b/indra/newview/llagentbenefits.cpp @@ -220,7 +220,7 @@ S32 LLAgentBenefits::getPicksLimit() const } else { - constexpr S32 MAX_OPENSIM_PICKS_FALLBACK = 20; // [FIRE-35276] Freeze on OpenSim (default agreed with Ubit Umarov) (originally by Haklezz) + constexpr S32 MAX_OPENSIM_PICKS_FALLBACK = 20; // [FIRE-35276] Freeze on OpenSim (default agreed with Ubit Umarov) (originally by Hecklezz) S32 max_profile_picks = MAX_OPENSIM_PICKS_FALLBACK; @@ -234,7 +234,7 @@ S32 LLAgentBenefits::getPicksLimit() const } } return max_profile_picks; - } + } // } From 9ccd8f107c3a7feaa7ccf51b899b1d3c7d0c1e13 Mon Sep 17 00:00:00 2001 From: minerjr Date: Wed, 26 Mar 2025 12:14:10 -0300 Subject: [PATCH 02/11] [FIRE-35292] Fix for textures getting downscaled and compressed (J2C save fix) Added fix for not reading enough LLImageJ2K data from the cache to save to file. Issue is caused by hard coded data size of 999,999 used for the amount of data to read from the cache. Used the LLImageJ2C::calcDataSizeJ2C to properly calculate the amount of data to read from the cache. --- indra/newview/daeexport.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/indra/newview/daeexport.cpp b/indra/newview/daeexport.cpp index bb2562b1ff..c9de9a8c32 100644 --- a/indra/newview/daeexport.cpp +++ b/indra/newview/daeexport.cpp @@ -505,7 +505,15 @@ void ColladaExportFloater::CacheReadResponder::saveTexturesWorker(void* data) std::string name = gDirUtilp->getDirName(me->mFilename); name += gDirUtilp->getDirDelimiter() + me->mTexturesToSave[id]; CacheReadResponder* responder = new CacheReadResponder(id, img, name, img_type); - LLAppViewer::getTextureCache()->readFromCache(id, 0, 999999, responder); + // [FIRE-35292] Fix for textures getting downscaled and compressed + //LLAppViewer::getTextureCache()->readFromCache(id, 0, 999999, responder); + // The above line hard coded the size of data to read from the cached version of the texture as 999999, + // where now we will calcuate the correct value based upon the texture's full width, height and # of components (3=RGB, 4=RGBA) and + // the discard level (0)). There is a choice to change the rate, but we seem to use the value of 1/8 compression level + S32 texture_size = LLImageJ2C::calcDataSizeJ2C(imagep->getFullWidth(), imagep->getFullHeight(), imagep->getComponents(), 0);// , F32 rate) rate = const F32 DEFAULT_COMPRESSION_RATE = 1.f/8.f; + // Use calculated texture_size (from LLTextureFetch::createRequest see "else if (w*h*c > 0)" statement for more info) + LLAppViewer::getTextureCache()->readFromCache(id, 0, texture_size, responder); + // [FIRE-35292] me->mTexturesToSave.erase(id); me->updateTitleProgress(); me->mTimer.reset(); From a7292082108a3861fb75be3463ca8891794716f0 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Thu, 27 Mar 2025 03:12:02 +1000 Subject: [PATCH 03/11] Fix textures getting downscaled when saving from the floater export menu. --- indra/newview/daeexport.cpp | 4 ++-- indra/newview/fsfloaterexport.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/indra/newview/daeexport.cpp b/indra/newview/daeexport.cpp index c9de9a8c32..4fa44bac23 100644 --- a/indra/newview/daeexport.cpp +++ b/indra/newview/daeexport.cpp @@ -505,14 +505,14 @@ void ColladaExportFloater::CacheReadResponder::saveTexturesWorker(void* data) std::string name = gDirUtilp->getDirName(me->mFilename); name += gDirUtilp->getDirDelimiter() + me->mTexturesToSave[id]; CacheReadResponder* responder = new CacheReadResponder(id, img, name, img_type); - // [FIRE-35292] Fix for textures getting downscaled and compressed + // [FIRE-35292] Fix for textures getting downscaled and compressed //LLAppViewer::getTextureCache()->readFromCache(id, 0, 999999, responder); // The above line hard coded the size of data to read from the cached version of the texture as 999999, // where now we will calcuate the correct value based upon the texture's full width, height and # of components (3=RGB, 4=RGBA) and // the discard level (0)). There is a choice to change the rate, but we seem to use the value of 1/8 compression level S32 texture_size = LLImageJ2C::calcDataSizeJ2C(imagep->getFullWidth(), imagep->getFullHeight(), imagep->getComponents(), 0);// , F32 rate) rate = const F32 DEFAULT_COMPRESSION_RATE = 1.f/8.f; // Use calculated texture_size (from LLTextureFetch::createRequest see "else if (w*h*c > 0)" statement for more info) - LLAppViewer::getTextureCache()->readFromCache(id, 0, texture_size, responder); + LLAppViewer::getTextureCache()->readFromCache(id, 0, texture_size, responder); // [FIRE-35292] me->mTexturesToSave.erase(id); me->updateTitleProgress(); diff --git a/indra/newview/fsfloaterexport.cpp b/indra/newview/fsfloaterexport.cpp index 0b60e8b00b..a8f81eccaa 100644 --- a/indra/newview/fsfloaterexport.cpp +++ b/indra/newview/fsfloaterexport.cpp @@ -690,7 +690,14 @@ void FSFloaterObjectExport::fetchTextureFromCache(LLViewerFetchedTexture* src_vi const LLUUID& texture_id = src_vi->getID(); LLImageJ2C* mFormattedImage = new LLImageJ2C; FSFloaterObjectExport::FSExportCacheReadResponder* responder = new FSFloaterObjectExport::FSExportCacheReadResponder(texture_id, mFormattedImage, this); - LLAppViewer::getTextureCache()->readFromCache(texture_id, 0, 999999, responder); + // [FIRE-35292] Fix for textures getting downscaled and compressed + //LLAppViewer::getTextureCache()->readFromCache(id, 0, 999999, responder); + // The above line hard coded the size of data to read from the cached version of the texture as 999999, + // where now we will calcuate the correct value based upon the texture's full width, height and # of components (3=RGB, 4=RGBA) and + // the discard level (0)). There is a choice to change the rate, but we seem to use the value of 1/8 compression level + S32 texture_size = LLImageJ2C::calcDataSizeJ2C(src_vi->getFullWidth(), src_vi->getFullHeight(), src_vi->getComponents(), 0);// , F32 rate) rate = const F32 DEFAULT_COMPRESSION_RATE = 1.f/8.f; + // Use calculated texture_size (from LLTextureFetch::createRequest see "else if (w*h*c > 0)" statement for more info) + LLAppViewer::getTextureCache()->readFromCache(texture_id, 0, texture_size, responder); LL_DEBUGS("export") << "Fetching " << texture_id << " from the TextureCache" << LL_ENDL; } From 50089ec0549b8f1c2de34b90d07d1d1c8c2ce03d Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Thu, 27 Mar 2025 22:58:27 +1000 Subject: [PATCH 04/11] Fixes the minimap in OpenSim for regions larger than 256x256. Also fixes the minimap not correctly rendering when you swap grid. --- indra/newview/llnetmap.cpp | 88 +++++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 16 deletions(-) diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 4eeab0d8d3..3cc34e2516 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -91,6 +91,8 @@ #include "fscommon.h" #include "llstartup.h" +#include "llviewernetwork.h" // Access to GridManager + static LLDefaultChildRegistry::Register r1("net_map"); constexpr F32 LLNetMap::MAP_SCALE_MIN = 32; @@ -454,26 +456,80 @@ void LLNetMap::draw() gGL.color4f(1.f, 0.5f, 0.5f, 1.f); } - // Draw using texture. - gGL.getTexUnit(0)->bind(regionp->getLand().getSTexture()); - gGL.begin(LLRender::TRIANGLES); + // [FIRE-35147] OpenSim regions can be greater than 256x256 and need to be accounted for + if (!LLGridManager::getInstance()->isInSecondLife()) { - gGL.texCoord2f(0.f, 1.f); - gGL.vertex2f(left, top); - gGL.texCoord2f(0.f, 0.f); - gGL.vertex2f(left, bottom); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex2f(right, bottom); + // Fixes OpenSim race condition on grid change not having updated Grid Info yet + bool isAgentTeleporting = gAgent.getTeleportState() != LLAgent::TELEPORT_NONE; + if (!isAgentTeleporting) + { + const LLViewerRegion::tex_matrix_t& tiles(regionp->getWorldMapTiles()); + for (S32 i(0), scaled_width((S32)(real_width / region_width)), square_width(scaled_width * scaled_width); + i < square_width; ++i) + { + const F32 y = (F32)(i / scaled_width); + const F32 x = (F32)(i - y * scaled_width); + const F32 local_left(left + x * mScale); + const F32 local_right(local_left + mScale); + const F32 local_bottom(bottom + y * mScale); + const F32 local_top(local_bottom + mScale); + LLPointer pRegionImage = tiles[(U64)(x * scaled_width + y)]; + if (pRegionImage.isNull()) + continue; - gGL.texCoord2f(0.f, 1.f); - gGL.vertex2f(left, top); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex2f(right, bottom); - gGL.texCoord2f(1.f, 1.f); - gGL.vertex2f(right, top); + if (!pRegionImage->hasGLTexture()) + { + // Workaround that eventually forces the image to load if it has no GLTexture (such as when changing grid) + // I'm not exactly sure why this works, but at least it fixes the minimap when you go to a new grid. + pRegionImage->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE); + continue; + } + + gGL.getTexUnit(0)->bind(pRegionImage); + gGL.begin(LLRender::TRIANGLES); + { + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(local_left, local_top); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex2f(local_left, local_bottom); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(local_right, local_bottom); + + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(local_left, local_top); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(local_right, local_bottom); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex2f(local_right, local_top); + } + gGL.end(); + pRegionImage->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE); + } + } } - gGL.end(); + // + else + { + // Draw using texture. + gGL.getTexUnit(0)->bind(regionp->getLand().getSTexture()); + gGL.begin(LLRender::TRIANGLES); + { + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(left, top); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex2f(left, bottom); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(right, bottom); + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(left, top); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(right, bottom); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex2f(right, top); + } + gGL.end(); + } gGL.flush(); } From 48e7ff4e53d2d32993c9c3dc114756bc5712af2f Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Fri, 28 Mar 2025 08:20:48 +1000 Subject: [PATCH 05/11] Refactored minimap opensim rendering fix --- indra/newview/llnetmap.cpp | 41 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 3cc34e2516..3de843627f 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -477,32 +477,27 @@ void LLNetMap::draw() if (pRegionImage.isNull()) continue; - if (!pRegionImage->hasGLTexture()) + if (pRegionImage->hasGLTexture()) { - // Workaround that eventually forces the image to load if it has no GLTexture (such as when changing grid) - // I'm not exactly sure why this works, but at least it fixes the minimap when you go to a new grid. - pRegionImage->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE); - continue; - } + gGL.getTexUnit(0)->bind(pRegionImage); + gGL.begin(LLRender::TRIANGLES); + { + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(local_left, local_top); + gGL.texCoord2f(0.f, 0.f); + gGL.vertex2f(local_left, local_bottom); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(local_right, local_bottom); - gGL.getTexUnit(0)->bind(pRegionImage); - gGL.begin(LLRender::TRIANGLES); - { - gGL.texCoord2f(0.f, 1.f); - gGL.vertex2f(local_left, local_top); - gGL.texCoord2f(0.f, 0.f); - gGL.vertex2f(local_left, local_bottom); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex2f(local_right, local_bottom); - - gGL.texCoord2f(0.f, 1.f); - gGL.vertex2f(local_left, local_top); - gGL.texCoord2f(1.f, 0.f); - gGL.vertex2f(local_right, local_bottom); - gGL.texCoord2f(1.f, 1.f); - gGL.vertex2f(local_right, local_top); + gGL.texCoord2f(0.f, 1.f); + gGL.vertex2f(local_left, local_top); + gGL.texCoord2f(1.f, 0.f); + gGL.vertex2f(local_right, local_bottom); + gGL.texCoord2f(1.f, 1.f); + gGL.vertex2f(local_right, local_top); + } + gGL.end(); } - gGL.end(); pRegionImage->setBoostLevel(LLViewerTexture::BOOST_MAP_VISIBLE); } } From 9fb2f0f67384308bbc795115e479a50a5fc5d3c5 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Fri, 28 Mar 2025 19:10:32 +0100 Subject: [PATCH 06/11] =?UTF-8?q?FIRE-35295,=20FIRE-35303,=20FIRE-35311,?= =?UTF-8?q?=20FIRE-35309=20Updated=20Chinese=20(=E5=B0=8F=E6=BB=A2=20Zi=20?= =?UTF-8?q?Ying),=20French=20(Laurent=20Bechir),=20Russian=20(Romka=20Swal?= =?UTF-8?q?lowtail),=20Polish=20and=20English=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../default/xui/en/floater_vj_local_mesh.xml | 2 +- .../default/xui/fr/floater_vj_local_mesh.xml | 1 + .../skins/default/xui/fr/menu_hide_navbar.xml | 1 + .../default/xui/pl/floater_vj_local_mesh.xml | 1 + .../skins/default/xui/pl/menu_hide_navbar.xml | 25 ++++++++++--------- .../skins/default/xui/ru/menu_hide_navbar.xml | 1 + .../default/xui/zh/floater_model_preview.xml | 12 ++++----- .../default/xui/zh/floater_phototools.xml | 2 +- .../default/xui/zh/floater_vj_local_mesh.xml | 15 +++++------ .../skins/default/xui/zh/menu_hide_navbar.xml | 3 ++- .../skins/default/xui/zh/notifications.xml | 2 +- .../default/xui/zh/panel_preferences_UI.xml | 2 +- .../skins/default/xui/zh/panel_status_bar.xml | 2 +- 13 files changed, 38 insertions(+), 31 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_vj_local_mesh.xml b/indra/newview/skins/default/xui/en/floater_vj_local_mesh.xml index 1ba0da24a9..0c96154bfc 100644 --- a/indra/newview/skins/default/xui/en/floater_vj_local_mesh.xml +++ b/indra/newview/skins/default/xui/en/floater_vj_local_mesh.xml @@ -114,7 +114,7 @@ width="300" label="Assume scale is in meters." tool_tip="Ignore the cm scale units used by tools such as Maya" /> - + Suffixes LOD : diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml index 567ee88a2d..cf4b35d88e 100644 --- a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml @@ -9,6 +9,7 @@ + diff --git a/indra/newview/skins/default/xui/pl/floater_vj_local_mesh.xml b/indra/newview/skins/default/xui/pl/floater_vj_local_mesh.xml index 327d19e288..2f2008fe79 100644 --- a/indra/newview/skins/default/xui/pl/floater_vj_local_mesh.xml +++ b/indra/newview/skins/default/xui/pl/floater_vj_local_mesh.xml @@ -10,6 +10,7 @@ + Sufiksy LOD: diff --git a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml index 14975e0d6e..fb223e4e14 100644 --- a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml @@ -1,15 +1,16 @@ - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml index 07c5f12172..aaf1c3f7b5 100644 --- a/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml @@ -9,6 +9,7 @@ + diff --git a/indra/newview/skins/default/xui/zh/floater_model_preview.xml b/indra/newview/skins/default/xui/zh/floater_model_preview.xml index f6f5c02a26..9325f3567a 100644 --- a/indra/newview/skins/default/xui/zh/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/zh/floater_model_preview.xml @@ -397,7 +397,7 @@ - 細節層次字尾: + 細節層次後綴: 選擇標準或手動編輯... @@ -408,23 +408,23 @@ 最低: - + 較低: - + 中等: - + 高: - + 物理: - + 使用者自訂物理設定: diff --git a/indra/newview/skins/default/xui/zh/floater_phototools.xml b/indra/newview/skins/default/xui/zh/floater_phototools.xml index d592efeaab..c629ea81ae 100644 --- a/indra/newview/skins/default/xui/zh/floater_phototools.xml +++ b/indra/newview/skins/default/xui/zh/floater_phototools.xml @@ -397,7 +397,7 @@ - + 使用者界面輔助 diff --git a/indra/newview/skins/default/xui/zh/floater_vj_local_mesh.xml b/indra/newview/skins/default/xui/zh/floater_vj_local_mesh.xml index 8b77c683ba..e20b3c6496 100644 --- a/indra/newview/skins/default/xui/zh/floater_vj_local_mesh.xml +++ b/indra/newview/skins/default/xui/zh/floater_vj_local_mesh.xml @@ -12,10 +12,11 @@ + - 細節層次字尾: + 細節層次後綴: - + 當前的 SL標準 遊戲引擎標準 @@ -24,23 +25,23 @@ 最低: - + 較低: - + 中等: - + 較高: - + 物理: - +