Merge branch 'develop' of https://github.com/secondlife/viewer
# 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.pymaster
commit
5c03f284af
2
build.sh
2
build.sh
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
7.2.2
|
7.2.3
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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,19 +218,29 @@ 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);
|
||||||
|
|
||||||
U32 grid_x, grid_y;
|
|
||||||
|
|
||||||
grid_from_region_handle(handle, &grid_x, &grid_y);
|
|
||||||
|
|
||||||
mSTexturep = LLWorldMipmap::loadObjectsTile(grid_x, grid_y, 1);
|
|
||||||
}
|
}
|
||||||
|
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;
|
||||||
|
|
||||||
|
grid_from_region_handle(handle, &grid_x, &grid_y);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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"
|
'Get Info', then check 'Open using Rosetta'
|
||||||
<tag>fail</tag>
|
<tag>fail</tag>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue