# Conflicts:
#	indra/cmake/APR.cmake
#	indra/cmake/LLPhysicsExtensions.cmake
#	indra/newview/llsurface.cpp
#	indra/newview/pipeline.cpp
#	indra/newview/skins/default/xui/en/notifications.xml
#	indra/newview/viewer_manifest.py
master
Ansariel 2025-10-18 13:01:08 +02:00
commit 5c03f284af
18 changed files with 119 additions and 76 deletions

View File

@ -70,7 +70,7 @@ installer_Darwin()
{ {
local package_name="$1" local package_name="$1"
local package_dir="$(build_dir_Darwin)/newview/" local package_dir="$(build_dir_Darwin)/newview/"
local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_x86_64\\.dmg\$" local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_universal\\.dmg\$"
# since the additional packages are built after the base package, # since the additional packages are built after the base package,
# sorting oldest first ensures that the unqualified package is returned # sorting oldest first ensures that the unqualified package is returned
# even if someone makes a qualified name that duplicates the last word of the base name # even if someone makes a qualified name that duplicates the last word of the base name

View File

@ -32,8 +32,7 @@ endif()
target_include_directories(ll::apr SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/apr-1) target_include_directories(ll::apr SYSTEM INTERFACE ${LIBS_PREBUILT_DIR}/include/apr-1)
# <FS:Ansariel> Hotfix incorrect check in APR header # Fix erroneous check for __attribute__ definition introduced with APR 1.7.5, causing lots of "this declaration may not have extern 'C' linkage" errors in VS
file(READ ${LIBS_PREBUILT_DIR}/include/apr-1/apr.h APR_HEADER_CONTENTS) file(READ ${LIBS_PREBUILT_DIR}/include/apr-1/apr.h APR_HEADER_CONTENTS)
string(REPLACE "#if !(defined(__attribute__) || defined(__has_attribute))" "#if !defined(__attribute__)" APR_HEADER_CONTENTS "${APR_HEADER_CONTENTS}") string(REPLACE "#if !(defined(__attribute__) || defined(__has_attribute))" "#if !defined(__attribute__)" APR_HEADER_CONTENTS "${APR_HEADER_CONTENTS}")
file(WRITE ${LIBS_PREBUILT_DIR}/include/apr-1/apr.h "${APR_HEADER_CONTENTS}") file(WRITE ${LIBS_PREBUILT_DIR}/include/apr-1/apr.h "${APR_HEADER_CONTENTS}")
# </FS:Ansariel>

View File

@ -22,6 +22,7 @@ if (HAVOK)
include(Havok) include(Havok)
use_prebuilt_binary(llphysicsextensions_source) use_prebuilt_binary(llphysicsextensions_source)
set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/src) set(LLPHYSICSEXTENSIONS_SRC_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/src)
target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1 )
if(DARWIN) if(DARWIN)
set(LLPHYSICSEXTENSIONS_STUB_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/stub) set(LLPHYSICSEXTENSIONS_STUB_DIR ${LIBS_PREBUILT_DIR}/llphysicsextensions/stub)
# can't set these library dependencies per-arch here, need to do it using XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=*] in newview/CMakeLists.txt # can't set these library dependencies per-arch here, need to do it using XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=*] in newview/CMakeLists.txt
@ -30,7 +31,6 @@ if (HAVOK)
else() else()
target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions) target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions)
endif() endif()
target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1 )
elseif (HAVOK_TPV) elseif (HAVOK_TPV)
use_prebuilt_binary(llphysicsextensions_tpv) use_prebuilt_binary(llphysicsextensions_tpv)
if(WINDOWS) if(WINDOWS)

View File

@ -139,7 +139,17 @@ void LLEmojiHelper::showHelper(LLUICtrl* hostctrl_p, S32 local_x, S32 local_y, c
S32 top = floater_y - HELPER_FLOATER_OFFSET_Y + rect.getHeight(); S32 top = floater_y - HELPER_FLOATER_OFFSET_Y + rect.getHeight();
rect.setLeftTopAndSize(left, top, rect.getWidth(), rect.getHeight()); rect.setLeftTopAndSize(left, top, rect.getWidth(), rect.getHeight());
pHelperFloater->setRect(rect); pHelperFloater->setRect(rect);
// Hack: Trying to open floater, search for a match,
// and hide floater immediately if no match found,
// instead of checking prior to opening
//
// Supress sounds in case floater won't be shown.
// Todo: add some kind of shouldShow(short_code)
U8 sound_flags = pHelperFloater->getSoundFlags();
pHelperFloater->setSoundFlags(LLView::SILENT);
pHelperFloater->openFloater(LLSD().with("hint", short_code)); pHelperFloater->openFloater(LLSD().with("hint", short_code));
pHelperFloater->setSoundFlags(sound_flags);
} }
void LLEmojiHelper::hideHelper(const LLUICtrl* ctrl_p, bool strict) void LLEmojiHelper::hideHelper(const LLUICtrl* ctrl_p, bool strict)

View File

@ -1994,10 +1994,18 @@ void LLFolderViewFolder::updateHasFavorites(bool new_childs_value)
void LLFolderViewFolder::onIdleUpdateFavorites(void* data) void LLFolderViewFolder::onIdleUpdateFavorites(void* data)
{ {
LLFolderViewFolder* self = reinterpret_cast<LLFolderViewFolder*>(data); LLFolderViewFolder* self = reinterpret_cast<LLFolderViewFolder*>(data);
if (self->mFavoritesDirtyFlags == FAVORITE_CLEANUP)
{
// parent or child already processed the update, clean the callback
self->mFavoritesDirtyFlags = 0;
gIdleCallbacks.deleteFunction(&LLFolderViewFolder::onIdleUpdateFavorites, data);
return;
}
if (self->mFavoritesDirtyFlags == 0) if (self->mFavoritesDirtyFlags == 0)
{ {
// already processed either on previous run or by a different callback llassert(false); // should not happen, everything that sets to 0 should clean callback
gIdleCallbacks.deleteFunction(&LLFolderViewFolder::onIdleUpdateFavorites, self); gIdleCallbacks.deleteFunction(&LLFolderViewFolder::onIdleUpdateFavorites, data);
return; return;
} }
@ -2025,7 +2033,7 @@ void LLFolderViewFolder::onIdleUpdateFavorites(void* data)
// Parent will remove onIdleUpdateFavorites later, don't remove now, // Parent will remove onIdleUpdateFavorites later, don't remove now,
// We are inside gIdleCallbacks. Removing 'self' callback is safe, // We are inside gIdleCallbacks. Removing 'self' callback is safe,
// but removing 'parent' can invalidate following iterator // but removing 'parent' can invalidate following iterator
parent->mFavoritesDirtyFlags = 0; parent->mFavoritesDirtyFlags = FAVORITE_CLEANUP;
} }
parent = parent->getParentFolder(); parent = parent->getParentFolder();
} }
@ -2091,7 +2099,7 @@ void LLFolderViewFolder::onIdleUpdateFavorites(void* data)
// Parent will remove onIdleUpdateFavorites later, don't remove now, // Parent will remove onIdleUpdateFavorites later, don't remove now,
// We are inside gIdleCallbacks. Removing 'self' callback is safe, // We are inside gIdleCallbacks. Removing 'self' callback is safe,
// but removing 'parent' can invalidate following iterator // but removing 'parent' can invalidate following iterator
parent->mFavoritesDirtyFlags = 0; parent->mFavoritesDirtyFlags = FAVORITE_CLEANUP;
} }
parent = parent->getParentFolder(); parent = parent->getParentFolder();
} }
@ -2102,7 +2110,7 @@ void LLFolderViewFolder::onIdleUpdateFavorites(void* data)
// Parent will remove onIdleUpdateFavorites later, don't remove now. // Parent will remove onIdleUpdateFavorites later, don't remove now.
// We are inside gIdleCallbacks. Removing 'self' callback is safe, // We are inside gIdleCallbacks. Removing 'self' callback is safe,
// but removing 'parent' can invalidate following iterator // but removing 'parent' can invalidate following iterator
parent->mFavoritesDirtyFlags = 0; parent->mFavoritesDirtyFlags = FAVORITE_CLEANUP;
} }
parent = parent->getParentFolder(); parent = parent->getParentFolder();
} }

View File

@ -436,6 +436,7 @@ private:
constexpr static S32 FAVORITE_ADDED = 1; constexpr static S32 FAVORITE_ADDED = 1;
constexpr static S32 FAVORITE_REMOVED = 2; constexpr static S32 FAVORITE_REMOVED = 2;
constexpr static S32 FAVORITE_CLEANUP = 4;
S32 mFavoritesDirtyFlags { 0 }; S32 mFavoritesDirtyFlags { 0 };
public: public:

View File

@ -1 +1 @@
7.2.2 7.2.3

View File

@ -5365,7 +5365,6 @@ void FSPanelFace::onPasteTexture(LLViewerObject* objectp, S32 te)
if (te_data["te"].has("pbr")) if (te_data["te"].has("pbr"))
{ {
objectp->setRenderMaterialID(te, te_data["te"]["pbr"].asUUID(), false /*managing our own update*/); objectp->setRenderMaterialID(te, te_data["te"]["pbr"].asUUID(), false /*managing our own update*/);
tep->setGLTFRenderMaterial(nullptr);
tep->setGLTFMaterialOverride(nullptr); tep->setGLTFMaterialOverride(nullptr);
LLSD override_data; LLSD override_data;
@ -5387,7 +5386,6 @@ void FSPanelFace::onPasteTexture(LLViewerObject* objectp, S32 te)
else else
{ {
objectp->setRenderMaterialID(te, LLUUID::null, false /*send in bulk later*/ ); objectp->setRenderMaterialID(te, LLUUID::null, false /*send in bulk later*/ );
tep->setGLTFRenderMaterial(nullptr);
tep->setGLTFMaterialOverride(nullptr); tep->setGLTFMaterialOverride(nullptr);
// blank out most override data on the server // blank out most override data on the server

View File

@ -390,6 +390,9 @@ void LLFloaterEmojiPicker::initialize()
{ {
if (!mHint.empty()) if (!mHint.empty())
{ {
// Hack: Trying to open floater, search for a match,
// and hide floater immediately if no match found,
// instead of checking prior to opening
hideFloater(); hideFloater();
return; return;
} }
@ -419,6 +422,12 @@ void LLFloaterEmojiPicker::initialize()
return; return;
} }
if (!mHint.empty() && getSoundFlags() == LLView::SILENT)
{
// Sounds were supressed
make_ui_sound("UISndWindowOpen");
}
mGroups->setVisible(true); mGroups->setVisible(true);
mPreview->setIcon(nullptr); mPreview->setIcon(nullptr);
showPreview(true); showPreview(true);

View File

@ -416,6 +416,14 @@ void LLFloaterImagePreview::onBtnOK()
LLPointer<LLImageJ2C> formatted = new LLImageJ2C; LLPointer<LLImageJ2C> formatted = new LLImageJ2C;
if (mRawImagep->getWidth() * mRawImagep->getHeight() <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF)
{
if (gSavedSettings.getBOOL("LosslessJ2CUpload"))
{
formatted->setReversible(true);
}
}
if (formatted->encode(mRawImagep, 0.0f)) if (formatted->encode(mRawImagep, 0.0f))
{ {
LLFileSystem fmt_file(new_asset_id, LLAssetType::AT_TEXTURE, LLFileSystem::WRITE); LLFileSystem fmt_file(new_asset_id, LLAssetType::AT_TEXTURE, LLFileSystem::WRITE);

View File

@ -4829,7 +4829,6 @@ void LLPanelFace::onPasteTexture(LLViewerObject* objectp, S32 te)
if (allow) if (allow)
{ {
objectp->setRenderMaterialID(te, te_data["te"]["pbr"].asUUID(), false /*managing our own update*/); objectp->setRenderMaterialID(te, te_data["te"]["pbr"].asUUID(), false /*managing our own update*/);
tep->setGLTFRenderMaterial(nullptr);
tep->setGLTFMaterialOverride(nullptr); tep->setGLTFMaterialOverride(nullptr);
if (te_data["te"].has("pbr_override")) if (te_data["te"].has("pbr_override"))
@ -4845,7 +4844,6 @@ void LLPanelFace::onPasteTexture(LLViewerObject* objectp, S32 te)
else else
{ {
objectp->setRenderMaterialID(te, LLUUID::null, false /*send in bulk later*/ ); objectp->setRenderMaterialID(te, LLUUID::null, false /*send in bulk later*/ );
tep->setGLTFRenderMaterial(nullptr);
tep->setGLTFMaterialOverride(nullptr); tep->setGLTFMaterialOverride(nullptr);
// blank out most override data on the server // blank out most override data on the server

View File

@ -586,7 +586,7 @@ void LLPanelVolume::getState( )
bool enable_material = editable && single_volume && material_same; bool enable_material = editable && single_volume && material_same;
LLCachedControl<bool> edit_linked(gSavedSettings, "EditLinkedParts", false); LLCachedControl<bool> edit_linked(gSavedSettings, "EditLinkedParts", false);
if (!enable_material && !edit_linked()) if (!enable_material)
{ {
LLViewerObject* root = selection->getPrimaryObject(); LLViewerObject* root = selection->getPrimaryObject();
while (root && !root->isAvatar() && root->getParent()) while (root && !root->isAvatar() && root->getParent())
@ -596,6 +596,10 @@ void LLPanelVolume::getState( )
{ {
break; break;
} }
if (!parent->isSelected())
{
break;
}
root = parent; root = parent;
} }
if (root) if (root)

View File

@ -28,9 +28,6 @@
#include "llsurface.h" #include "llsurface.h"
#include "llrender.h"
#include "llviewertexturelist.h"
#include "llpatchvertexarray.h" #include "llpatchvertexarray.h"
#include "patch_dct.h" #include "patch_dct.h"
#include "patch_code.h" #include "patch_code.h"
@ -39,28 +36,25 @@
#include "llregionhandle.h" #include "llregionhandle.h"
#include "llagent.h" #include "llagent.h"
#include "llagentcamera.h" #include "llagentcamera.h"
#include "llappviewer.h"
#include "llworld.h" #include "llworld.h"
#include "llviewercontrol.h" #include "llviewercontrol.h"
#include "llviewertexture.h" #include "llviewertexture.h"
#include "llsurfacepatch.h" #include "llsurfacepatch.h"
#include "llvosurfacepatch.h"
#include "llvowater.h" #include "llvowater.h"
#include "pipeline.h" #include "pipeline.h"
#include "llviewerregion.h" #include "llviewerregion.h"
#include "llvlcomposition.h"
#include "noise.h"
#include "llviewercamera.h"
#include "llglheaders.h"
#include "lldrawpoolterrain.h" #include "lldrawpoolterrain.h"
#include "lldrawable.h"
#include "llworldmipmap.h" #include "llworldmipmap.h"
extern LLPipeline gPipeline; extern LLPipeline gPipeline;
extern bool gShiftFrame; extern bool gShiftFrame;
LLColor4U MAX_WATER_COLOR(0, 48, 96, 240); namespace
{
static constexpr float MIN_TEXTURE_REQUEST_INTERVAL = 5.0f;
}
LLColor4U MAX_WATER_COLOR(0, 48, 96, 240);
S32 LLSurface::sTextureSize = 256; S32 LLSurface::sTextureSize = 256;
@ -74,18 +68,18 @@ LLSurface::LLSurface(U32 type, LLViewerRegion *regionp) :
mType(type), mType(type),
mDetailTextureScale(0.f), mDetailTextureScale(0.f),
mOriginGlobal(0.0, 0.0, 0.0), mOriginGlobal(0.0, 0.0, 0.0),
mSTexturep(NULL), mSTexturep(nullptr),
mGridsPerPatchEdge(0), mGridsPerPatchEdge(0),
mMetersPerGrid(1.0f), mMetersPerGrid(1.0f),
mMetersPerEdge(1.0f), mMetersPerEdge(1.0f),
mRegionp(regionp) mRegionp(regionp)
{ {
// Surface data // Surface data
mSurfaceZ = NULL; mSurfaceZ = nullptr;
mNorm = NULL; mNorm = nullptr;
// Patch data // Patch data
mPatchList = NULL; mPatchList = nullptr;
// One of each for each camera // One of each for each camera
mVisiblePatchCount = 0; mVisiblePatchCount = 0;
@ -95,14 +89,14 @@ LLSurface::LLSurface(U32 type, LLViewerRegion *regionp) :
mMinZ = 10000.f; mMinZ = 10000.f;
mMaxZ = -10000.f; mMaxZ = -10000.f;
mWaterObjp = NULL; mWaterObjp = nullptr;
// In here temporarily. // In here temporarily.
mSurfacePatchUpdateCount = 0; mSurfacePatchUpdateCount = 0;
for (S32 i = 0; i < 8; i++) for (S32 i = 0; i < 8; i++)
{ {
mNeighbors[i] = NULL; mNeighbors[i] = nullptr;
} }
} }
@ -110,7 +104,7 @@ LLSurface::LLSurface(U32 type, LLViewerRegion *regionp) :
LLSurface::~LLSurface() LLSurface::~LLSurface()
{ {
delete [] mSurfaceZ; delete [] mSurfaceZ;
mSurfaceZ = NULL; mSurfaceZ = nullptr;
delete [] mNorm; delete [] mNorm;
@ -129,7 +123,7 @@ LLSurface::~LLSurface()
{ {
gPipeline.removePool(poolp); gPipeline.removePool(poolp);
// Don't enable this until we blitz the draw pool for it as well. -- djs // Don't enable this until we blitz the draw pool for it as well. -- djs
mSTexturep = NULL; mSTexturep = nullptr;
} }
else else
{ {
@ -144,7 +138,7 @@ void LLSurface::initClasses()
void LLSurface::setRegion(LLViewerRegion *regionp) void LLSurface::setRegion(LLViewerRegion *regionp)
{ {
mRegionp = regionp; mRegionp = regionp;
mWaterObjp = NULL; // depends on regionp, needs recreating mWaterObjp = nullptr; // depends on regionp, needs recreating
} }
// Assumes that arguments are powers of 2, and that // Assumes that arguments are powers of 2, and that
@ -224,20 +218,30 @@ LLViewerTexture* LLSurface::getSTexture()
void LLSurface::createSTexture() void LLSurface::createSTexture()
{ {
// <FS:Ansariel> Fix for minimap world tiles missing if (mSTexturep.isNull())
//if (!mSTexturep)
if (mSTexturep.isNull() || !mSTexturep->hasGLTexture())
// </FS:Ansariel>
{ {
U64 handle = mRegionp->getHandle(); mTimer.setTimerExpirySec(MIN_TEXTURE_REQUEST_INTERVAL);
}
else if (mSTexturep->hasGLTexture())
{
// Unexpected: createSTexture() called when a valid texture already exists.
// This may indicate a logic error in the caller, as textures should not be recreated unnecessarily.
LL_WARNS() << "Called LLSurface::createSTexture() while we already have a valid texture!" << LL_ENDL;
return;
}
else if (!mTimer.checkExpirationAndReset(MIN_TEXTURE_REQUEST_INTERVAL))
{
// We haven't gotten a valid texture yet, but throttle the number of requests to avoid server flooding
return;
}
U64 handle = mRegionp->getHandle();
U32 grid_x, grid_y; U32 grid_x, grid_y;
grid_from_region_handle(handle, &grid_x, &grid_y); grid_from_region_handle(handle, &grid_x, &grid_y);
mSTexturep = LLWorldMipmap::loadObjectsTile(grid_x, grid_y, 1); mSTexturep = LLWorldMipmap::loadObjectsTile(grid_x, grid_y, 1);
} }
}
void LLSurface::initTextures() void LLSurface::initTextures()
{ {
@ -331,7 +335,7 @@ void LLSurface::getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegio
S32 i; S32 i;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if ( mNeighbors[i] != NULL ) if (mNeighbors[i] != nullptr)
{ {
uniqueRegions.push_back( mNeighbors[i]->getRegion() ); uniqueRegions.push_back( mNeighbors[i]->getRegion() );
} }
@ -344,7 +348,7 @@ void LLSurface::getNeighboringRegionsStatus( std::vector<S32>& regions )
S32 i; S32 i;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if ( mNeighbors[i] != NULL ) if (mNeighbors[i] != nullptr)
{ {
regions.push_back( i ); regions.push_back( i );
} }
@ -684,7 +688,7 @@ void LLSurface::disconnectNeighbor(LLSurface *surfacep)
{ {
if (surfacep == mNeighbors[i]) if (surfacep == mNeighbors[i])
{ {
mNeighbors[i] = NULL; mNeighbors[i] = nullptr;
} }
} }
@ -704,7 +708,7 @@ void LLSurface::disconnectAllNeighbors()
if (mNeighbors[i]) if (mNeighbors[i])
{ {
mNeighbors[i]->disconnectNeighbor(this); mNeighbors[i]->disconnectNeighbor(this);
mNeighbors[i] = NULL; mNeighbors[i] = nullptr;
} }
} }
} }
@ -1111,7 +1115,7 @@ LLSurfacePatch *LLSurface::resolvePatchRegion(const F32 x, const F32 y) const
if(0 == mNumberOfPatches) if(0 == mNumberOfPatches)
{ {
LL_WARNS() << "No patches for current region!" << LL_ENDL; LL_WARNS() << "No patches for current region!" << LL_ENDL;
return NULL; return nullptr;
} }
S32 old_index = index; S32 old_index = index;
index = llclamp(old_index, 0, (mNumberOfPatches - 1)); index = llclamp(old_index, 0, (mNumberOfPatches - 1));
@ -1197,7 +1201,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(EAST, NULL); patchp->setNeighborPatch(EAST, nullptr);
} }
if (j < mPatchesPerEdge-1) if (j < mPatchesPerEdge-1)
@ -1206,7 +1210,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(NORTH, NULL); patchp->setNeighborPatch(NORTH, nullptr);
} }
if (i > 0) if (i > 0)
@ -1215,7 +1219,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(WEST, NULL); patchp->setNeighborPatch(WEST, nullptr);
} }
if (j > 0) if (j > 0)
@ -1224,7 +1228,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(SOUTH, NULL); patchp->setNeighborPatch(SOUTH, nullptr);
} }
if (i < (mPatchesPerEdge-1) && j < (mPatchesPerEdge-1)) if (i < (mPatchesPerEdge-1) && j < (mPatchesPerEdge-1))
@ -1233,7 +1237,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(NORTHEAST, NULL); patchp->setNeighborPatch(NORTHEAST, nullptr);
} }
if (i > 0 && j < (mPatchesPerEdge-1)) if (i > 0 && j < (mPatchesPerEdge-1))
@ -1242,7 +1246,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(NORTHWEST, NULL); patchp->setNeighborPatch(NORTHWEST, nullptr);
} }
if (i > 0 && j > 0) if (i > 0 && j > 0)
@ -1251,7 +1255,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(SOUTHWEST, NULL); patchp->setNeighborPatch(SOUTHWEST, nullptr);
} }
if (i < (mPatchesPerEdge-1) && j > 0) if (i < (mPatchesPerEdge-1) && j > 0)
@ -1260,7 +1264,7 @@ void LLSurface::createPatchData()
} }
else else
{ {
patchp->setNeighborPatch(SOUTHEAST, NULL); patchp->setNeighborPatch(SOUTHEAST, nullptr);
} }
LLVector3d origin_global; LLVector3d origin_global;
@ -1278,7 +1282,7 @@ void LLSurface::destroyPatchData()
// Delete all of the cached patch data for these patches. // Delete all of the cached patch data for these patches.
delete [] mPatchList; delete [] mPatchList;
mPatchList = NULL; mPatchList = nullptr;
mVisiblePatchCount = 0; mVisiblePatchCount = 0;
} }
@ -1306,12 +1310,12 @@ LLSurfacePatch *LLSurface::getPatch(const S32 x, const S32 y) const
if ((x < 0) || (x >= mPatchesPerEdge)) if ((x < 0) || (x >= mPatchesPerEdge))
{ {
LL_ERRS() << "Asking for patch out of bounds" << LL_ENDL; LL_ERRS() << "Asking for patch out of bounds" << LL_ENDL;
return NULL; return nullptr;
} }
if ((y < 0) || (y >= mPatchesPerEdge)) if ((y < 0) || (y >= mPatchesPerEdge))
{ {
LL_ERRS() << "Asking for patch out of bounds" << LL_ENDL; LL_ERRS() << "Asking for patch out of bounds" << LL_ENDL;
return NULL; return nullptr;
} }
return mPatchList + x + y*mPatchesPerEdge; return mPatchList + x + y*mPatchesPerEdge;

View File

@ -29,14 +29,8 @@
#include "v3math.h" #include "v3math.h"
#include "v3dmath.h" #include "v3dmath.h"
#include "v4math.h"
#include "m3math.h"
#include "m4math.h"
#include "llquaternion.h"
#include "v4coloru.h"
#include "v4color.h"
#include "lltimer.h"
#include "llvowater.h" #include "llvowater.h"
#include "llpatchvertexarray.h" #include "llpatchvertexarray.h"
#include "llviewertexture.h" #include "llviewertexture.h"
@ -65,7 +59,7 @@ class LLGroupHeader;
class LLSurface class LLSurface
{ {
public: public:
LLSurface(U32 type, LLViewerRegion *regionp = NULL); LLSurface(U32 type, LLViewerRegion *regionp = nullptr);
virtual ~LLSurface(); virtual ~LLSurface();
static void initClasses(); // Do class initialization for LLSurface and its child classes. static void initClasses(); // Do class initialization for LLSurface and its child classes.
@ -172,14 +166,13 @@ public:
F32 mDetailTextureScale; // Number of times to repeat detail texture across this surface F32 mDetailTextureScale; // Number of times to repeat detail texture across this surface
protected: private:
void createSTexture(); void createSTexture();
void initTextures(); void initTextures();
void createPatchData(); // Allocates memory for patches. void createPatchData(); // Allocates memory for patches.
void destroyPatchData(); // Deallocates memory for patches. void destroyPatchData(); // Deallocates memory for patches.
protected:
LLVector3d mOriginGlobal; // In absolute frame LLVector3d mOriginGlobal; // In absolute frame
LLSurfacePatch *mPatchList; // Array of all patches LLSurfacePatch *mPatchList; // Array of all patches
@ -215,6 +208,7 @@ protected:
private: private:
LLViewerRegion *mRegionp; // Patch whose coordinate system this surface is using. LLViewerRegion *mRegionp; // Patch whose coordinate system this surface is using.
static S32 sTextureSize; // Size of the surface texture static S32 sTextureSize; // Size of the surface texture
LLTimer mTimer; // timer to throttle initial requests until the mSTexture is fully fetched
}; };
extern template bool LLSurface::idleUpdate</*PBR=*/false>(F32 max_update_time); extern template bool LLSurface::idleUpdate</*PBR=*/false>(F32 max_update_time);

View File

@ -4947,7 +4947,7 @@ void LLPipeline::renderPhysicsDisplay()
gGL.flush(); gGL.flush();
gDebugProgram.bind(); gDebugProgram.bind();
LLGLEnable ploygon_offset_line(GL_POLYGON_OFFSET_LINE); LLGLEnable polygon_offset_line(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(3.f, 3.f); glPolygonOffset(3.f, 3.f);
gGL.setLineWidth(3.f); gGL.setLineWidth(3.f);
LLGLEnable blend(GL_BLEND); LLGLEnable blend(GL_BLEND);

View File

@ -884,7 +884,7 @@ Erwartet wurde [VALIDS]
<notification name="ModelUploaderMissingPhysicsApple"> <notification name="ModelUploaderMissingPhysicsApple">
Das Hochladen von Modellen wird derzeit auf Apple Silicon-Systemen nicht verfügbar, wird jedoch in einem späteren Release unterstützt. Das Hochladen von Modellen wird derzeit auf Apple Silicon-Systemen nicht verfügbar, wird jedoch in einem späteren Release unterstützt.
Workaround: Im Finder auf die [APP_NAME] App rechtsklicken, dann "Info anzeigen" wählen und anschließend "Mit Rosette öffnen" aktivieren. Workaround: Im Finder auf die [APP_NAME] App rechtsklicken, dann „Info anzeigen“ wählen und anschließend „Mit Rosette öffnen“ aktivieren.
</notification> </notification>
<notification name="ModelUploaderMissingPhysics"> <notification name="ModelUploaderMissingPhysics">
Physik-Bibliothek ist nicht vorhanden - einzelne Funktionen für das Hochladen des Modells funktionieren möglicherweise nicht oder nicht korrekt. Physik-Bibliothek ist nicht vorhanden - einzelne Funktionen für das Hochladen des Modells funktionieren möglicherweise nicht oder nicht korrekt.

View File

@ -2338,7 +2338,7 @@ Could not open uploaded sound file for reading:
Model upload is not yet available on Apple Silicon, but will be supported in an upcoming release. Model upload is not yet available on Apple Silicon, but will be supported in an upcoming release.
Workaround: Right-click the [APP_NAME] app in Finder, select Workaround: Right-click the [APP_NAME] app in Finder, select
"Get Info", then check "Open using Rosetta" &apos;Get Info&apos;, then check &apos;Open using Rosetta&apos;
<tag>fail</tag> <tag>fail</tag>
</notification> </notification>

View File

@ -334,6 +334,16 @@ class ViewerManifest(LLManifest,FSViewerManifest):
} }
return "%(channel_vendor_base)s%(channel_variant_underscores)s_%(version_underscores)s_%(arch)s" % substitution_strings return "%(channel_vendor_base)s%(channel_variant_underscores)s_%(version_underscores)s_%(arch)s" % substitution_strings
def installer_base_name_mac(self):
global CHANNEL_VENDOR_BASE
# a standard map of strings for replacing in the templates
substitution_strings = {
'channel_vendor_base' : '_'.join(CHANNEL_VENDOR_BASE.split()),
'channel_variant_underscores':self.channel_variant_app_suffix(),
'version_underscores' : '_'.join(self.args['version'])
}
return "%(channel_vendor_base)s%(channel_variant_underscores)s_%(version_underscores)s_universal" % substitution_strings
def app_name(self): def app_name(self):
global CHANNEL_VENDOR_BASE global CHANNEL_VENDOR_BASE
channel_type=self.channel_type() channel_type=self.channel_type()
@ -1606,7 +1616,7 @@ class Darwin_x86_64_Manifest(ViewerManifest):
volname=CHANNEL_VENDOR_BASE+" Installer" # DO NOT CHANGE without understanding comment above volname=CHANNEL_VENDOR_BASE+" Installer" # DO NOT CHANGE without understanding comment above
# <FS:ND> Make sure all our package names look similar # <FS:ND> Make sure all our package names look similar
#imagename = self.installer_base_name() #imagename = self.installer_base_name_mac()
imagename = self.fs_installer_basename() imagename = self.fs_installer_basename()
# </FS:ND> # </FS:ND>