diff --git a/indra/newview/daeexport.cpp b/indra/newview/daeexport.cpp index 4f29268e11..4fa44bac23 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()); @@ -503,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(); 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; } 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; - } + } // } diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 4eeab0d8d3..3de843627f 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,75 @@ 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()) + { + 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(); } diff --git a/indra/newview/skins/default/xui/de/floater_vj_local_mesh.xml b/indra/newview/skins/default/xui/de/floater_vj_local_mesh.xml index 9557b17a71..9602c16041 100644 --- a/indra/newview/skins/default/xui/de/floater_vj_local_mesh.xml +++ b/indra/newview/skins/default/xui/de/floater_vj_local_mesh.xml @@ -11,6 +11,7 @@ + LOD-Suffixe: 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 @@ 最低: - + 較低: - + 中等: - + 較高: - + 物理: - +