Merge branch 'release/2025.03' of https://github.com/secondlife/viewer
# Conflicts: # indra/llappearance/llwearable.cpp # indra/newview/llappviewer.cpp # indra/newview/llappviewerwin32.cpp # indra/newview/llviewerassetstorage.cpp # indra/newview/llviewertexturelist.cpp # indra/newview/llviewerwindow.cppmaster
commit
99e1699479
|
|
@ -652,9 +652,10 @@ void LLWearable::addVisualParam(LLVisualParam *param)
|
|||
//void LLWearable::setVisualParamWeight(S32 param_index, F32 value)
|
||||
void LLWearable::setVisualParamWeight(S32 param_index, F32 value, bool upload_bake)
|
||||
{
|
||||
if( is_in_map(mVisualParamIndexMap, param_index ) )
|
||||
visual_param_index_map_t::iterator found = mVisualParamIndexMap.find(param_index);
|
||||
if(found != mVisualParamIndexMap.end())
|
||||
{
|
||||
LLVisualParam *wearable_param = mVisualParamIndexMap[param_index];
|
||||
LLVisualParam *wearable_param = found->second;
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
//wearable_param->setWeight(value);
|
||||
wearable_param->setWeight(value, upload_bake);
|
||||
|
|
@ -667,10 +668,10 @@ void LLWearable::setVisualParamWeight(S32 param_index, F32 value, bool upload_ba
|
|||
|
||||
F32 LLWearable::getVisualParamWeight(S32 param_index) const
|
||||
{
|
||||
if( is_in_map(mVisualParamIndexMap, param_index ) )
|
||||
visual_param_index_map_t::const_iterator found = mVisualParamIndexMap.find(param_index);
|
||||
if(found != mVisualParamIndexMap.end())
|
||||
{
|
||||
const LLVisualParam *wearable_param = mVisualParamIndexMap.find(param_index)->second;
|
||||
return wearable_param->getWeight();
|
||||
return found->second->getWeight();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -743,7 +744,7 @@ void LLWearable::writeToAvatar(LLAvatarAppearance* avatarp)
|
|||
if (!avatarp) return;
|
||||
|
||||
// Pull params
|
||||
for( LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() )
|
||||
for( const LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() )
|
||||
{
|
||||
// cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the
|
||||
// avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way.
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
// std headers
|
||||
// external library headers
|
||||
// other Linden headers
|
||||
#include "llapp.h"
|
||||
#include "llcoros.h"
|
||||
#include LLCOROS_MUTEX_HEADER
|
||||
#include "llerror.h"
|
||||
|
|
@ -102,19 +103,95 @@ std::string LL::WorkQueueBase::makeName(const std::string& name)
|
|||
return STRINGIZE("WorkQueue" << num);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
#if LL_WINDOWS
|
||||
|
||||
static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
|
||||
|
||||
U32 exception_filter(U32 code, struct _EXCEPTION_POINTERS* exception_infop)
|
||||
{
|
||||
if (LLApp::instance()->reportCrashToBugsplat((void*)exception_infop))
|
||||
{
|
||||
// Handled
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
else if (code == STATUS_MSC_EXCEPTION)
|
||||
{
|
||||
// C++ exception, go on
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
else
|
||||
{
|
||||
// handle it, convert to std::exception
|
||||
return EXCEPTION_EXECUTE_HANDLER;
|
||||
}
|
||||
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
}
|
||||
|
||||
void cpphandle(const LL::WorkQueueBase::Work& work)
|
||||
{
|
||||
// SE and C++ can not coexists, thus two handlers
|
||||
try
|
||||
{
|
||||
work();
|
||||
}
|
||||
catch (const LLContinueError&)
|
||||
{
|
||||
// Any uncaught exception derived from LLContinueError will be caught
|
||||
// here and logged. This coroutine will terminate but the rest of the
|
||||
// viewer will carry on.
|
||||
LOG_UNHANDLED_EXCEPTION(STRINGIZE("LLContinue in work queue"));
|
||||
}
|
||||
}
|
||||
|
||||
void sehandle(const LL::WorkQueueBase::Work& work)
|
||||
{
|
||||
__try
|
||||
{
|
||||
// handle stop and continue exceptions first
|
||||
cpphandle(work);
|
||||
}
|
||||
__except (exception_filter(GetExceptionCode(), GetExceptionInformation()))
|
||||
{
|
||||
// convert to C++ styled exception
|
||||
char integer_string[512];
|
||||
sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode());
|
||||
throw std::exception(integer_string);
|
||||
}
|
||||
}
|
||||
#endif // LL_WINDOWS
|
||||
} // anonymous namespace
|
||||
|
||||
void LL::WorkQueueBase::callWork(const Work& work)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_THREAD;
|
||||
|
||||
#ifdef LL_WINDOWS
|
||||
// can not use __try directly, toplevel requires unwinding, thus use of a wrapper
|
||||
sehandle(work);
|
||||
#else // LL_WINDOWS
|
||||
try
|
||||
{
|
||||
work();
|
||||
}
|
||||
catch (...)
|
||||
catch (LLContinueError&)
|
||||
{
|
||||
// No matter what goes wrong with any individual work item, the worker
|
||||
// thread must go on! Log our own instance name with the exception.
|
||||
LOG_UNHANDLED_EXCEPTION(getKey());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
// Stash any other kind of uncaught exception to be rethrown by main thread.
|
||||
LL_WARNS("LLCoros") << "Capturing uncaught exception in WorkQueueBase "
|
||||
<< getKey() << LL_ENDL;
|
||||
|
||||
LL::WorkQueue::ptr_t main_queue = LL::WorkQueue::getInstance("mainloop");
|
||||
main_queue->post(
|
||||
// Bind the current exception rethrow it in main loop.
|
||||
[exc = std::current_exception()]() { std::rethrow_exception(exc); });
|
||||
}
|
||||
#endif // else LL_WINDOWS
|
||||
}
|
||||
|
||||
void LL::WorkQueueBase::error(const std::string& msg)
|
||||
|
|
|
|||
|
|
@ -585,7 +585,8 @@ void LLAssetStorage::getAssetData(const LLUUID uuid,
|
|||
// static
|
||||
void LLAssetStorage::removeAndCallbackPendingDownloads(const LLUUID& file_id, LLAssetType::EType file_type,
|
||||
const LLUUID& callback_id, LLAssetType::EType callback_type,
|
||||
S32 result_code, LLExtStat ext_status)
|
||||
S32 result_code, LLExtStat ext_status,
|
||||
S32 bytes_fetched)
|
||||
{
|
||||
// find and callback ALL pending requests for this UUID
|
||||
// SJB: We process the callbacks in reverse order, I do not know if this is important,
|
||||
|
|
@ -598,6 +599,10 @@ void LLAssetStorage::removeAndCallbackPendingDownloads(const LLUUID& file_id, LL
|
|||
LLAssetRequest* tmp = *curiter;
|
||||
if ((tmp->getUUID() == file_id) && (tmp->getType()== file_type))
|
||||
{
|
||||
if (bytes_fetched > 0)
|
||||
{
|
||||
tmp->mBytesFetched = bytes_fetched;
|
||||
}
|
||||
requests.push_front(tmp);
|
||||
iter = gAssetStorage->mPendingDownloads.erase(curiter);
|
||||
}
|
||||
|
|
@ -664,6 +669,7 @@ void LLAssetStorage::downloadCompleteCallback(
|
|||
callback_type = req->getType();
|
||||
}
|
||||
|
||||
S32 bytes_fetched = 0;
|
||||
if (LL_ERR_NOERR == result)
|
||||
{
|
||||
// we might have gotten a zero-size file
|
||||
|
|
@ -677,21 +683,11 @@ void LLAssetStorage::downloadCompleteCallback(
|
|||
}
|
||||
else
|
||||
{
|
||||
#if 1
|
||||
for (request_list_t::iterator iter = gAssetStorage->mPendingDownloads.begin();
|
||||
iter != gAssetStorage->mPendingDownloads.end(); ++iter )
|
||||
{
|
||||
LLAssetRequest* dlreq = *iter;
|
||||
if ((dlreq->getUUID() == file_id) && (dlreq->getType()== file_type))
|
||||
{
|
||||
dlreq->mBytesFetched = vfile.getSize();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
bytes_fetched = vfile.getSize();
|
||||
}
|
||||
}
|
||||
|
||||
removeAndCallbackPendingDownloads(file_id, file_type, callback_id, callback_type, result, ext_status);
|
||||
removeAndCallbackPendingDownloads(file_id, file_type, callback_id, callback_type, result, ext_status, bytes_fetched);
|
||||
}
|
||||
|
||||
void LLAssetStorage::getEstateAsset(
|
||||
|
|
|
|||
|
|
@ -324,7 +324,8 @@ public:
|
|||
|
||||
static void removeAndCallbackPendingDownloads(const LLUUID& file_id, LLAssetType::EType file_type,
|
||||
const LLUUID& callback_id, LLAssetType::EType callback_type,
|
||||
S32 result_code, LLExtStat ext_status);
|
||||
S32 result_code, LLExtStat ext_status,
|
||||
S32 bytes_fetched);
|
||||
|
||||
// download process callbacks
|
||||
static void downloadCompleteCallback(
|
||||
|
|
|
|||
|
|
@ -105,6 +105,36 @@ LLCubeMapArray::LLCubeMapArray()
|
|||
|
||||
}
|
||||
|
||||
LLCubeMapArray::LLCubeMapArray(LLCubeMapArray& lhs, U32 width, U32 count) : mTextureStage(0)
|
||||
{
|
||||
mWidth = width;
|
||||
mCount = count;
|
||||
|
||||
// Allocate a new cubemap array with the same criteria as the incoming cubemap array
|
||||
allocate(mWidth, lhs.mImage->getComponents(), count, lhs.mImage->getUseMipMaps(), lhs.mHDR);
|
||||
|
||||
// Copy each cubemap from the incoming array to the new array
|
||||
U32 min_count = std::min(count, lhs.mCount);
|
||||
for (U32 i = 0; i < min_count * 6; ++i)
|
||||
{
|
||||
U32 src_resolution = lhs.mWidth;
|
||||
U32 dst_resolution = mWidth;
|
||||
{
|
||||
GLint components = GL_RGB;
|
||||
if (mImage->getComponents() == 4)
|
||||
components = GL_RGBA;
|
||||
GLint format = GL_RGB;
|
||||
|
||||
// Handle different resolutions by scaling the image
|
||||
LLPointer<LLImageRaw> src_image = new LLImageRaw(lhs.mWidth, lhs.mWidth, lhs.mImage->getComponents());
|
||||
glGetTexImage(GL_TEXTURE_CUBE_MAP_ARRAY, 0, components, GL_UNSIGNED_BYTE, src_image->getData());
|
||||
|
||||
LLPointer<LLImageRaw> scaled_image = src_image->scaled(mWidth, mWidth);
|
||||
glTexSubImage3D(GL_TEXTURE_CUBE_MAP_ARRAY, 0, 0, 0, i, mWidth, mWidth, 1, components, GL_UNSIGNED_BYTE, scaled_image->getData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLCubeMapArray::~LLCubeMapArray()
|
||||
{
|
||||
}
|
||||
|
|
@ -115,6 +145,8 @@ void LLCubeMapArray::allocate(U32 resolution, U32 components, U32 count, bool us
|
|||
mWidth = resolution;
|
||||
mCount = count;
|
||||
|
||||
mHDR = hdr;
|
||||
|
||||
LLImageGL::generateTextures(1, &texname);
|
||||
|
||||
mImage = new LLImageGL(resolution, resolution, components, use_mips);
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ class LLCubeMapArray : public LLRefCount
|
|||
{
|
||||
public:
|
||||
LLCubeMapArray();
|
||||
LLCubeMapArray(LLCubeMapArray& lhs, U32 width, U32 count);
|
||||
|
||||
static GLenum sTargets[6];
|
||||
|
||||
|
|
@ -73,4 +74,5 @@ protected:
|
|||
U32 mWidth = 0;
|
||||
U32 mCount = 0;
|
||||
S32 mTextureStage;
|
||||
bool mHDR;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1259,7 +1259,8 @@ LLNotifications::LLNotifications()
|
|||
|
||||
void LLNotifications::clear()
|
||||
{
|
||||
mDefaultChannels.clear();
|
||||
mDefaultChannels.clear();
|
||||
mTemplates.clear();
|
||||
}
|
||||
|
||||
// The expiration channel gets all notifications that are cancelled
|
||||
|
|
|
|||
|
|
@ -209,8 +209,15 @@ public:
|
|||
}
|
||||
virtual bool execute( LLTextBase* editor, S32* delta )
|
||||
{
|
||||
mWString = editor->getWText().substr(getPosition(), mLen);
|
||||
*delta = remove(editor, getPosition(), mLen );
|
||||
try
|
||||
{
|
||||
mWString = editor->getWText().substr(getPosition(), mLen);
|
||||
*delta = remove(editor, getPosition(), mLen);
|
||||
}
|
||||
catch (std::out_of_range&)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return (*delta != 0);
|
||||
}
|
||||
virtual S32 undo( LLTextBase* editor )
|
||||
|
|
|
|||
|
|
@ -287,6 +287,10 @@ void callResetKeys()
|
|||
|
||||
bool callUnicodeCallback(wchar_t character, unsigned int mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
NativeKeyEventData eventData;
|
||||
|
||||
memset(&eventData, 0, sizeof(NativeKeyEventData));
|
||||
|
|
@ -308,7 +312,7 @@ bool callUnicodeCallback(wchar_t character, unsigned int mask)
|
|||
|
||||
void callFocus()
|
||||
{
|
||||
if (gWindowImplementation)
|
||||
if (gWindowImplementation && gWindowImplementation->getCallbacks())
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleFocus(gWindowImplementation);
|
||||
}
|
||||
|
|
@ -316,7 +320,7 @@ void callFocus()
|
|||
|
||||
void callFocusLost()
|
||||
{
|
||||
if (gWindowImplementation)
|
||||
if (gWindowImplementation && gWindowImplementation->getCallbacks())
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleFocusLost(gWindowImplementation);
|
||||
}
|
||||
|
|
@ -324,6 +328,10 @@ void callFocusLost()
|
|||
|
||||
void callRightMouseDown(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (gWindowImplementation->allowsLanguageInput())
|
||||
{
|
||||
gWindowImplementation->interruptLanguageTextInput();
|
||||
|
|
@ -337,6 +345,10 @@ void callRightMouseDown(float *pos, MASK mask)
|
|||
|
||||
void callRightMouseUp(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (gWindowImplementation->allowsLanguageInput())
|
||||
{
|
||||
gWindowImplementation->interruptLanguageTextInput();
|
||||
|
|
@ -350,6 +362,10 @@ void callRightMouseUp(float *pos, MASK mask)
|
|||
|
||||
void callLeftMouseDown(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (gWindowImplementation->allowsLanguageInput())
|
||||
{
|
||||
gWindowImplementation->interruptLanguageTextInput();
|
||||
|
|
@ -363,6 +379,10 @@ void callLeftMouseDown(float *pos, MASK mask)
|
|||
|
||||
void callLeftMouseUp(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (gWindowImplementation->allowsLanguageInput())
|
||||
{
|
||||
gWindowImplementation->interruptLanguageTextInput();
|
||||
|
|
@ -377,6 +397,10 @@ void callLeftMouseUp(float *pos, MASK mask)
|
|||
|
||||
void callDoubleClick(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (gWindowImplementation->allowsLanguageInput())
|
||||
{
|
||||
gWindowImplementation->interruptLanguageTextInput();
|
||||
|
|
@ -390,7 +414,7 @@ void callDoubleClick(float *pos, MASK mask)
|
|||
|
||||
void callResize(unsigned int width, unsigned int height)
|
||||
{
|
||||
if (gWindowImplementation != NULL)
|
||||
if (gWindowImplementation && gWindowImplementation->getCallbacks())
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleResize(gWindowImplementation, width, height);
|
||||
}
|
||||
|
|
@ -398,6 +422,10 @@ void callResize(unsigned int width, unsigned int height)
|
|||
|
||||
void callMouseMoved(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
outCoords.mY = ll_round(pos[1]);
|
||||
|
|
@ -411,6 +439,10 @@ void callMouseMoved(float *pos, MASK mask)
|
|||
|
||||
void callMouseDragged(float *pos, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
outCoords.mY = ll_round(pos[1]);
|
||||
|
|
@ -432,6 +464,10 @@ void callScrollMoved(float deltaX, float deltaY)
|
|||
|
||||
void callMouseExit()
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->getCallbacks()->handleMouseLeave(gWindowImplementation);
|
||||
}
|
||||
|
||||
|
|
@ -483,11 +519,19 @@ void callWindowDidChangeScreen()
|
|||
|
||||
void callDeltaUpdate(float *delta, MASK mask)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->updateMouseDeltas(delta);
|
||||
}
|
||||
|
||||
void callOtherMouseDown(float *pos, MASK mask, int button)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
outCoords.mY = ll_round(pos[1]);
|
||||
|
|
@ -508,6 +552,10 @@ void callOtherMouseDown(float *pos, MASK mask, int button)
|
|||
|
||||
void callOtherMouseUp(float *pos, MASK mask, int button)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
outCoords.mY = ll_round(pos[1]);
|
||||
|
|
@ -532,27 +580,43 @@ void callModifier(MASK mask)
|
|||
|
||||
void callHandleDragEntered(std::string url)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->handleDragNDrop(url, LLWindowCallbacks::DNDA_START_TRACKING);
|
||||
}
|
||||
|
||||
void callHandleDragExited(std::string url)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->handleDragNDrop(url, LLWindowCallbacks::DNDA_STOP_TRACKING);
|
||||
}
|
||||
|
||||
void callHandleDragUpdated(std::string url)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->handleDragNDrop(url, LLWindowCallbacks::DNDA_TRACK);
|
||||
}
|
||||
|
||||
void callHandleDragDropped(std::string url)
|
||||
{
|
||||
if (!gWindowImplementation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
gWindowImplementation->handleDragNDrop(url, LLWindowCallbacks::DNDA_DROPPED);
|
||||
}
|
||||
|
||||
void callQuitHandler()
|
||||
{
|
||||
if (gWindowImplementation)
|
||||
if (gWindowImplementation && gWindowImplementation->getCallbacks())
|
||||
{
|
||||
if(gWindowImplementation->getCallbacks()->handleCloseRequest(gWindowImplementation))
|
||||
{
|
||||
|
|
@ -563,7 +627,7 @@ void callQuitHandler()
|
|||
|
||||
void getPreeditSelectionRange(int *position, int *length)
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
gWindowImplementation->getPreeditor()->getSelectionRange(position, length);
|
||||
}
|
||||
|
|
@ -571,7 +635,7 @@ void getPreeditSelectionRange(int *position, int *length)
|
|||
|
||||
void getPreeditMarkedRange(int *position, int *length)
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
gWindowImplementation->getPreeditor()->getPreeditRange(position, length);
|
||||
}
|
||||
|
|
@ -579,7 +643,7 @@ void getPreeditMarkedRange(int *position, int *length)
|
|||
|
||||
void setPreeditMarkedRange(int position, int length)
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
gWindowImplementation->getPreeditor()->markAsPreedit(position, length);
|
||||
}
|
||||
|
|
@ -588,7 +652,7 @@ void setPreeditMarkedRange(int position, int length)
|
|||
bool handleUnicodeCharacter(wchar_t c)
|
||||
{
|
||||
bool success = false;
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
success = gWindowImplementation->getPreeditor()->handleUnicodeCharHere(c);
|
||||
}
|
||||
|
|
@ -598,7 +662,7 @@ bool handleUnicodeCharacter(wchar_t c)
|
|||
|
||||
void resetPreedit()
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
gWindowImplementation->getPreeditor()->resetPreedit();
|
||||
}
|
||||
|
|
@ -608,7 +672,7 @@ void resetPreedit()
|
|||
// This largely mirrors the old implementation, only sans the carbon parameters.
|
||||
void setMarkedText(unsigned short *unitext, unsigned int *selectedRange, unsigned int *replacementRange, long text_len, attributedStringInfo segments)
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
LLPreeditor *preeditor = gWindowImplementation->getPreeditor();
|
||||
preeditor->resetPreedit();
|
||||
|
|
@ -631,7 +695,7 @@ void setMarkedText(unsigned short *unitext, unsigned int *selectedRange, unsigne
|
|||
|
||||
void getPreeditLocation(float *location, unsigned int length)
|
||||
{
|
||||
if (gWindowImplementation->getPreeditor())
|
||||
if (gWindowImplementation && gWindowImplementation->getPreeditor())
|
||||
{
|
||||
LLPreeditor *preeditor = gWindowImplementation->getPreeditor();
|
||||
LLCoordGL coord;
|
||||
|
|
|
|||
|
|
@ -11252,7 +11252,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderMinFreeMainMemoryThreshold</key>
|
||||
<map>
|
||||
|
|
@ -12645,6 +12645,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderReflectionProbeDynamicAllocation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable dynamic allocation of reflection probes. -1 means no dynamic allocation. Sets a buffer to allocate when a dynamic allocation occurs otherwise.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>-1</integer>
|
||||
</map>
|
||||
<key>RenderReflectionProbeCount</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -264,11 +264,11 @@ void main()
|
|||
|
||||
// Calculate some distance fade in the water to better assist with refraction blending and reducing the refraction texture's "disconnect".
|
||||
#ifdef SHORELINE_FADE
|
||||
fade = max(0,min(1, (pos.z - refPos.z) / 10))
|
||||
fade = max(0,min(1, (pos.z - refPos.z) / 10));
|
||||
#else
|
||||
fade = 1 * water_mask;
|
||||
fade = 1;
|
||||
#endif
|
||||
|
||||
fade *= water_mask;
|
||||
distort2 = mix(distort, distort2, min(1, fade * 10));
|
||||
depth = texture(depthMap, distort2).r;
|
||||
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 1
|
||||
RenderDisableVintageMode 1 1
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -128,6 +129,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 512
|
||||
RenderReflectionProbeCount 1 1
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -170,6 +172,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 1024
|
||||
RenderReflectionProbeCount 1 32
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -211,6 +214,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -252,6 +256,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -293,6 +298,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 128
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -334,6 +340,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -375,6 +382,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
@ -408,6 +416,7 @@ RenderReflectionProbeDetail 0 -1
|
|||
RenderMirrors 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list Intel
|
||||
RenderAnisotropic 1 0
|
||||
|
|
@ -429,6 +438,7 @@ RenderMirrors 0 0
|
|||
RenderGLMultiThreadedTextures 0 0
|
||||
RenderGLMultiThreadedMedia 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list TexUnit16orLess
|
||||
RenderTerrainPBRDetail 1 -1
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 1
|
||||
RenderDisableVintageMode 1 1
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -128,6 +129,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 512
|
||||
RenderReflectionProbeCount 1 1
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -170,6 +172,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 1024
|
||||
RenderReflectionProbeCount 1 32
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -211,6 +214,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -252,6 +256,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -293,6 +298,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 128
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (deferred + SSAO + all shadows)
|
||||
|
|
@ -334,6 +340,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -375,6 +382,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
@ -408,6 +416,7 @@ RenderReflectionProbeDetail 0 -1
|
|||
RenderMirrors 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list Intel
|
||||
RenderAnisotropic 1 0
|
||||
|
|
@ -431,6 +440,7 @@ RenderMirrors 0 0
|
|||
RenderGLMultiThreadedTextures 0 0
|
||||
RenderGLMultiThreadedMedia 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list TexUnit16orLess
|
||||
RenderTerrainPBRDetail 1 -1
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ RenderTonemapMix 1 1
|
|||
RenderDisableVintageMode 1 1
|
||||
RenderDownScaleMethod 1 0
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
|
|
@ -128,6 +129,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 512
|
||||
RenderReflectionProbeCount 1 1
|
||||
|
||||
//
|
||||
// Medium Low Graphics Settings
|
||||
|
|
@ -170,6 +172,7 @@ RenderTonemapType 1 1
|
|||
RenderTonemapMix 1 0.7
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 1024
|
||||
RenderReflectionProbeCount 1 32
|
||||
|
||||
//
|
||||
// Medium Graphics Settings (standard)
|
||||
|
|
@ -211,6 +214,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// Medium High Graphics Settings
|
||||
|
|
@ -252,6 +256,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 64
|
||||
|
||||
//
|
||||
// High Graphics Settings (SSAO + sun shadows)
|
||||
|
|
@ -293,6 +298,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 128
|
||||
|
||||
//
|
||||
// High Ultra Graphics Settings (SSAO + all shadows)
|
||||
|
|
@ -334,6 +340,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Ultra graphics (REALLY PURTY!)
|
||||
|
|
@ -375,6 +382,7 @@ RenderExposure 1 1
|
|||
RenderTonemapType 1 1
|
||||
RenderTonemapMix 1 0.7
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 1 256
|
||||
|
||||
//
|
||||
// Class Unknown Hardware (unknown)
|
||||
|
|
@ -407,6 +415,7 @@ RenderShadowDetail 0 0
|
|||
RenderMirrors 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderMaxTextureResolution 1 2048
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list TexUnit8orLess
|
||||
RenderDeferredSSAO 0 0
|
||||
|
|
@ -447,6 +456,7 @@ RenderReflectionProbeDetail 0 0
|
|||
RenderReflectionsEnabled 0 0
|
||||
RenderMirrors 0 0
|
||||
RenderDisableVintageMode 1 0
|
||||
RenderReflectionProbeCount 0 0
|
||||
|
||||
list VaryingVectors16orLess
|
||||
RenderTerrainPBRPlanarSampleCount 1 1
|
||||
|
|
|
|||
|
|
@ -512,9 +512,9 @@ void idle_afk_check()
|
|||
// Enforce an idle time of 30 minutes if @allowidle=n restricted
|
||||
S32 afk_timeout = (!gRlvHandler.hasBehaviour(RLV_BHVR_ALLOWIDLE)) ? sAFKTimeout : 60 * 30;
|
||||
// [/RLVa:KB]
|
||||
// F32 afk_timeout = (F32)gSavedSettings.getS32("AFKTimeout");
|
||||
// static LLCachedControl<S32> afk_timeout(gSavedSettings, "AFKTimeout", 300);
|
||||
// <FS:CR> Explicit conversions just cos.
|
||||
//if (afk_timeout && (current_idle > afk_timeout) && ! gAgent.getAFK())
|
||||
//if (afk_timeout() && (current_idle > (F32)afk_timeout()) && !gAgent.getAFK())
|
||||
if (static_cast<S32>(afk_timeout) && (current_idle > static_cast<F32>(afk_timeout)) && ! gAgent.getAFK())
|
||||
{
|
||||
LL_INFOS("IdleAway") << "Idle more than " << afk_timeout << " seconds: automatically changing to Away status" << LL_ENDL;
|
||||
|
|
@ -6291,8 +6291,8 @@ void LLAppViewer::idleNetwork()
|
|||
gObjectList.mNumNewObjects = 0;
|
||||
S32 total_decoded = 0;
|
||||
|
||||
static LLCachedControl<bool> speedTest(gSavedSettings, "SpeedTest");
|
||||
if (!speedTest)
|
||||
static LLCachedControl<bool> speed_test(gSavedSettings, "SpeedTest", false);
|
||||
if (!speed_test())
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_NETWORK("idle network"); //LL_RECORD_BLOCK_TIME(FTM_IDLE_NETWORK); // decode
|
||||
|
||||
|
|
@ -6351,7 +6351,9 @@ void LLAppViewer::idleNetwork()
|
|||
}
|
||||
|
||||
// Handle per-frame message system processing.
|
||||
lmc.processAcks(gSavedSettings.getF32("AckCollectTime"));
|
||||
|
||||
static LLCachedControl<F32> ack_collection_time(gSavedSettings, "AckCollectTime", 0.1f);
|
||||
lmc.processAcks(ack_collection_time());
|
||||
}
|
||||
}
|
||||
add(LLStatViewer::NUM_NEW_OBJECTS, gObjectList.mNumNewObjects);
|
||||
|
|
|
|||
|
|
@ -200,10 +200,10 @@ namespace
|
|||
// sBugSplatSender->setDefaultUserDescription(WCSTR(LLError::getFatalMessage()));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"OS"), WCSTR(LLOSInfo::instance().getOSStringSimple())); // In case we ever stop using email for this
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"AppState"), WCSTR(LLStartUp::getStartupStateString()));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GL Vendor"), WCSTR(gGLManager.mGLVendor));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GL Version"), WCSTR(gGLManager.mGLVersionString));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GPU Version"), WCSTR(gGLManager.mDriverVersionVendorString));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GL Renderer"), WCSTR(gGLManager.mGLRenderer));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GLVendor"), WCSTR(gGLManager.mGLVendor));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GLVersion"), WCSTR(gGLManager.mGLVersionString));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GPUVersion"), WCSTR(gGLManager.mDriverVersionVendorString));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"GLRenderer"), WCSTR(gGLManager.mGLRenderer));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"VRAM"), WCSTR(STRINGIZE(gGLManager.mVRAM)));
|
||||
// sBugSplatSender->setAttribute(WCSTR(L"RAM"), WCSTR(STRINGIZE(gSysMemory.getPhysicalMemoryKB().value())));
|
||||
|
||||
|
|
|
|||
|
|
@ -2370,7 +2370,7 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
|
|||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_FACE("calcPixelArea - rigged");
|
||||
//override with joint volume face joint bounding boxes
|
||||
LLVOAvatar* avatar = mVObjp->getAvatar();
|
||||
LLVOAvatar* avatar = mVObjp.notNull() ? mVObjp->getAvatar() : nullptr;
|
||||
bool hasRiggedExtents = false;
|
||||
|
||||
if (avatar && avatar->mDrawable)
|
||||
|
|
|
|||
|
|
@ -1951,7 +1951,7 @@ bool LLFloaterIMContainer::removeConversationListItem(const LLUUID& uuid, bool c
|
|||
mConversationEventQueue.erase(uuid);
|
||||
|
||||
// Don't let the focus fall IW, select and refocus on the first conversation in the list
|
||||
if (change_focus)
|
||||
if (change_focus && isInVisibleChain())
|
||||
{
|
||||
setFocus(true);
|
||||
if (new_selection)
|
||||
|
|
@ -1971,6 +1971,10 @@ bool LLFloaterIMContainer::removeConversationListItem(const LLUUID& uuid, bool c
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Conversation widgets: " << (S32)mConversationsWidgets.size() << LL_ENDL;
|
||||
}
|
||||
return is_widget_selected;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3183,10 +3183,7 @@ void LLPanelFace::onCommitHideWater()
|
|||
}
|
||||
else
|
||||
{
|
||||
// reset texture to default plywood
|
||||
LLSelectMgr::getInstance()->selectionSetImage(DEFAULT_OBJECT_TEXTURE);
|
||||
// reset texture repeats, that might be altered by invisiprim script from wiki
|
||||
LLSelectMgr::getInstance()->selectionTexScaleAutofit(2.f);
|
||||
LLSelectMgr::getInstance()->clearWaterExclusion();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -224,48 +224,54 @@ void LLReflectionMapManager::update()
|
|||
|
||||
static LLCachedControl<S32> sDetail(gSavedSettings, "RenderReflectionProbeDetail", -1);
|
||||
static LLCachedControl<S32> sLevel(gSavedSettings, "RenderReflectionProbeLevel", 3);
|
||||
static LLCachedControl<U32> sReflectionProbeCount(gSavedSettings, "RenderReflectionProbeCount", 256U);
|
||||
static LLCachedControl<S32> sProbeDynamicAllocation(gSavedSettings, "RenderReflectionProbeDynamicAllocation", -1);
|
||||
mResetFade = llmin((F32)(mResetFade + gFrameIntervalSeconds * 2.f), 1.f);
|
||||
|
||||
// Once every 20 frames, update the dynamic probe count.
|
||||
if (gFrameCount % 20)
|
||||
{
|
||||
U32 probe_count_temp = mDynamicProbeCount;
|
||||
if (sLevel == 0)
|
||||
if (sProbeDynamicAllocation > -1)
|
||||
{
|
||||
mDynamicProbeCount = 1;
|
||||
}
|
||||
else if (sLevel == 1)
|
||||
{
|
||||
mDynamicProbeCount = (U32)mProbes.size();
|
||||
if (sLevel == 0)
|
||||
{
|
||||
mDynamicProbeCount = 1;
|
||||
}
|
||||
else if (sLevel == 1)
|
||||
{
|
||||
mDynamicProbeCount = (U32)mProbes.size();
|
||||
}
|
||||
else if (sLevel == 2)
|
||||
{
|
||||
mDynamicProbeCount = llmax((U32)mProbes.size(), 128);
|
||||
}
|
||||
else
|
||||
{
|
||||
mDynamicProbeCount = 256;
|
||||
}
|
||||
|
||||
}
|
||||
else if (sLevel == 2)
|
||||
{
|
||||
mDynamicProbeCount = llmax((U32)mProbes.size(), 128);
|
||||
if (sProbeDynamicAllocation > 1)
|
||||
{
|
||||
// Round mDynamicProbeCount to the nearest increment of 16
|
||||
mDynamicProbeCount = ((mDynamicProbeCount + sProbeDynamicAllocation / 2) / sProbeDynamicAllocation) * 16;
|
||||
mDynamicProbeCount = llclamp(mDynamicProbeCount, 1, sReflectionProbeCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
mDynamicProbeCount = llclamp(mDynamicProbeCount + sProbeDynamicAllocation, 1, sReflectionProbeCount);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mDynamicProbeCount = 256;
|
||||
mDynamicProbeCount = sReflectionProbeCount;
|
||||
}
|
||||
|
||||
// Round mDynamicProbeCount to the nearest increment of 32
|
||||
mDynamicProbeCount = ((mDynamicProbeCount + 16) / 32) * 32;
|
||||
mDynamicProbeCount = llclamp(mDynamicProbeCount, 1, LL_MAX_REFLECTION_PROBE_COUNT);
|
||||
mDynamicProbeCount = llmin(mDynamicProbeCount, LL_MAX_REFLECTION_PROBE_COUNT);
|
||||
|
||||
if (mDynamicProbeCount < probe_count_temp * 1.1 && mDynamicProbeCount > probe_count_temp * 0.9)
|
||||
mDynamicProbeCount = probe_count_temp;
|
||||
else
|
||||
mGlobalFadeTarget = 0.f;
|
||||
if (mDynamicProbeCount != probe_count_temp)
|
||||
mResetFade = 1.f;
|
||||
}
|
||||
|
||||
if (mGlobalFadeTarget < mResetFade)
|
||||
mResetFade = llmax(mGlobalFadeTarget, mResetFade - (F32)gFrameIntervalSeconds * 2);
|
||||
else
|
||||
mResetFade = llmin(mGlobalFadeTarget, mResetFade + (F32)gFrameIntervalSeconds * 2);
|
||||
|
||||
if (mResetFade == mGlobalFadeTarget)
|
||||
{
|
||||
initReflectionMaps();
|
||||
}
|
||||
initReflectionMaps();
|
||||
|
||||
static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true);
|
||||
|
||||
|
|
@ -356,6 +362,7 @@ void LLReflectionMapManager::update()
|
|||
probe->mCubeArray = nullptr;
|
||||
probe->mCubeIndex = -1;
|
||||
probe->mComplete = false;
|
||||
probe->mFadeIn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1418,8 +1425,6 @@ void LLReflectionMapManager::initReflectionMaps()
|
|||
}
|
||||
|
||||
gEXRImage = nullptr;
|
||||
mGlobalFadeTarget = 1.f;
|
||||
mResetFade = -0.125f;
|
||||
mReset = false;
|
||||
mReflectionProbeCount = mDynamicProbeCount;
|
||||
mProbeResolution = probe_resolution;
|
||||
|
|
@ -1429,15 +1434,25 @@ void LLReflectionMapManager::initReflectionMaps()
|
|||
mTexture->getWidth() != mProbeResolution ||
|
||||
mReflectionProbeCount + 2 != mTexture->getCount())
|
||||
{
|
||||
mTexture = new LLCubeMapArray();
|
||||
if (mTexture)
|
||||
{
|
||||
mTexture = new LLCubeMapArray(*mTexture, mProbeResolution, mReflectionProbeCount + 2);
|
||||
|
||||
static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true);
|
||||
mIrradianceMaps = new LLCubeMapArray(*mIrradianceMaps, LL_IRRADIANCE_MAP_RESOLUTION, mReflectionProbeCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
mTexture = new LLCubeMapArray();
|
||||
|
||||
// store mReflectionProbeCount+2 cube maps, final two cube maps are used for render target and radiance map generation source)
|
||||
mTexture->allocate(mProbeResolution, 3, mReflectionProbeCount + 2, true, render_hdr);
|
||||
static LLCachedControl<bool> render_hdr(gSavedSettings, "RenderHDREnabled", true);
|
||||
|
||||
mIrradianceMaps = new LLCubeMapArray();
|
||||
mIrradianceMaps->allocate(LL_IRRADIANCE_MAP_RESOLUTION, 3, mReflectionProbeCount, false, render_hdr);
|
||||
// store mReflectionProbeCount+2 cube maps, final two cube maps are used for render target and radiance map generation
|
||||
// source)
|
||||
mTexture->allocate(mProbeResolution, 3, mReflectionProbeCount + 2, true, render_hdr);
|
||||
|
||||
mIrradianceMaps = new LLCubeMapArray();
|
||||
mIrradianceMaps->allocate(LL_IRRADIANCE_MAP_RESOLUTION, 3, mReflectionProbeCount, false, render_hdr);
|
||||
}
|
||||
}
|
||||
|
||||
// reset probe state
|
||||
|
|
@ -1457,6 +1472,7 @@ void LLReflectionMapManager::initReflectionMaps()
|
|||
probe->mCubeArray = nullptr;
|
||||
probe->mCubeIndex = -1;
|
||||
probe->mNeighbors.clear();
|
||||
probe->mFadeIn = 0;
|
||||
}
|
||||
|
||||
mCubeFree.clear();
|
||||
|
|
|
|||
|
|
@ -2138,7 +2138,7 @@ bool LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)
|
|||
asset_id = BLANK_MATERIAL_ASSET_ID;
|
||||
}
|
||||
}
|
||||
|
||||
objectp->clearTEWaterExclusion(te);
|
||||
// Blank out most override data on the object and send to server
|
||||
objectp->setRenderMaterialID(te, asset_id);
|
||||
|
||||
|
|
@ -2622,6 +2622,7 @@ void LLSelectMgr::selectionSetMedia(U8 media_type, const LLSD &media_data)
|
|||
}
|
||||
else {
|
||||
// Add/update media
|
||||
object->clearTEWaterExclusion(te);
|
||||
object->setTEMediaFlags(te, mMediaFlags);
|
||||
LLVOVolume *vo = dynamic_cast<LLVOVolume*>(object);
|
||||
llassert(NULL != vo);
|
||||
|
|
@ -8017,6 +8018,14 @@ void LLSelectMgr::setAgentHUDZoom(F32 target_zoom, F32 current_zoom)
|
|||
gAgentCamera.mHUDCurZoom = current_zoom;
|
||||
}
|
||||
|
||||
void LLSelectMgr::clearWaterExclusion()
|
||||
{
|
||||
// reset texture to default plywood
|
||||
LLSelectMgr::getInstance()->selectionSetImage(DEFAULT_OBJECT_TEXTURE);
|
||||
// reset texture repeats, that might be altered by invisiprim script from wiki
|
||||
LLSelectMgr::getInstance()->selectionTexScaleAutofit(2.f);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Object selection iterator helpers
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -908,6 +908,7 @@ public:
|
|||
void getAgentHUDZoom(F32 &target_zoom, F32 ¤t_zoom) const;
|
||||
|
||||
void updatePointAt();
|
||||
void clearWaterExclusion();
|
||||
|
||||
// Internal list maintenance functions. TODO: Make these private!
|
||||
void remove(std::vector<LLViewerObject*>& objects);
|
||||
|
|
|
|||
|
|
@ -407,9 +407,13 @@ void LLViewerAssetStorage::queueRequestHttp(
|
|||
manager->enqueueCoprocedure(
|
||||
VIEWER_ASSET_STORAGE_CORO_POOL,
|
||||
"LLViewerAssetStorage::assetRequestCoro",
|
||||
// <FS:Ansariel> [UDP Assets] Need request for UDP assets
|
||||
//[this, uuid, atype, callback, user_data]
|
||||
[this, req, uuid, atype, callback, user_data]
|
||||
(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t&, const LLUUID&)
|
||||
{
|
||||
// <FS:Ansariel> [UDP Assets] Need request for UDP assets
|
||||
//assetRequestCoro(uuid, atype, callback, user_data);
|
||||
assetRequestCoro(req, uuid, atype, callback, user_data);
|
||||
});
|
||||
}
|
||||
|
|
@ -445,7 +449,7 @@ struct LLScopedIncrement
|
|||
};
|
||||
|
||||
void LLViewerAssetStorage::assetRequestCoro(
|
||||
LLViewerAssetRequest *req,
|
||||
LLViewerAssetRequest *req, // <FS:Ansariel> [UDP Assets] Need request for UDP assets
|
||||
const LLUUID uuid,
|
||||
LLAssetType::EType atype,
|
||||
LLGetAssetCallback callback,
|
||||
|
|
@ -469,7 +473,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
LL_WARNS_ONCE("ViewerAsset") << "Asset request fails: no region set" << LL_ENDL;
|
||||
result_code = LL_ERR_ASSET_REQUEST_FAILED;
|
||||
ext_status = LLExtStat::NONE;
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status);
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status, 0);
|
||||
return;
|
||||
}
|
||||
else if (!gAgent.getRegion()->capabilitiesReceived())
|
||||
|
|
@ -491,7 +495,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
LL_WARNS_ONCE("ViewerAsset") << "capsRecv got event" << LL_ENDL;
|
||||
LL_WARNS_ONCE("ViewerAsset") << "region " << gAgent.getRegion() << " mViewerAssetUrl " << mViewerAssetUrl << LL_ENDL;
|
||||
}
|
||||
// <FS:Beq> FIRE-23657 [OPENSIM] Update the Viewer Asset Url irrespective of previous setting (Fix provided by Liru Færs)
|
||||
// <FS:Beq> FIRE-23657 [OPENSIM] Update the Viewer Asset Url irrespective of previous setting (Fix provided by Liru Færs)
|
||||
// if (mViewerAssetUrl.empty() && gAgent.getRegion())
|
||||
if (gAgent.getRegion())
|
||||
// </FS:Beq>
|
||||
|
|
@ -501,7 +505,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
if (mViewerAssetUrl.empty())
|
||||
{
|
||||
// <FS:Ansariel> [UDP Assets]
|
||||
if (!LLGridManager::instance().isInSecondLife() && mUpstreamHost.isOk())
|
||||
if (!LLGridManager::instance().isInSecondLife() && mUpstreamHost.isOk() && req)
|
||||
{
|
||||
req->mWithHTTP = false;
|
||||
|
||||
|
|
@ -529,7 +533,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
LL_WARNS_ONCE("ViewerAsset") << "asset request fails: caps received but no viewer asset cap found" << LL_ENDL;
|
||||
result_code = LL_ERR_ASSET_REQUEST_FAILED;
|
||||
ext_status = LLExtStat::NONE;
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status);
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status, 0);
|
||||
// <FS:Ansariel> [UDP Assets]
|
||||
}
|
||||
// </FS:Ansariel> [UDP Assets]
|
||||
|
|
@ -563,6 +567,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
|
||||
mCountCompleted++;
|
||||
|
||||
S32 bytes_fetched = 0;
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
if (!status)
|
||||
|
|
@ -600,7 +605,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
LLUUID temp_id;
|
||||
temp_id.generate();
|
||||
LLFileSystem vf(temp_id, atype, LLFileSystem::WRITE);
|
||||
req->mBytesFetched = size;
|
||||
bytes_fetched = size;
|
||||
if (!vf.write(raw.data(),size))
|
||||
{
|
||||
// TODO asset-http: handle error
|
||||
|
|
@ -629,7 +634,7 @@ void LLViewerAssetStorage::assetRequestCoro(
|
|||
}
|
||||
|
||||
// Clean up pending downloads and trigger callbacks
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status);
|
||||
removeAndCallbackPendingDownloads(uuid, atype, uuid, atype, result_code, ext_status, bytes_fetched);
|
||||
}
|
||||
|
||||
std::string LLViewerAssetStorage::getAssetURL(const std::string& cap_url, const LLUUID& uuid, LLAssetType::EType atype)
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ protected:
|
|||
|
||||
void capsRecvForRegion(const LLUUID& region_id, std::string pumpname);
|
||||
|
||||
void assetRequestCoro(LLViewerAssetRequest *req,
|
||||
void assetRequestCoro(LLViewerAssetRequest *req, // <FS:Ansariel> [UDP Assets] Need request for UDP assets
|
||||
const LLUUID uuid,
|
||||
LLAssetType::EType atype,
|
||||
LLGetAssetCallback callback,
|
||||
|
|
|
|||
|
|
@ -7923,6 +7923,31 @@ void LLViewerObject::setGLTFAsset(const LLUUID& id)
|
|||
updateVolume(volume_params);
|
||||
}
|
||||
|
||||
void LLViewerObject::clearTEWaterExclusion(const U8 te)
|
||||
{
|
||||
if (permModify())
|
||||
{
|
||||
LLViewerTexture* image = getTEImage(te);
|
||||
if (image && (IMG_ALPHA_GRAD == image->getID()))
|
||||
{
|
||||
// reset texture to default plywood
|
||||
setTEImage(te, LLViewerTextureManager::getFetchedTexture(DEFAULT_OBJECT_TEXTURE, FTT_DEFAULT, true, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
|
||||
// reset texture repeats, that might be altered by invisiprim script from wiki
|
||||
U32 s_axis, t_axis;
|
||||
if (!LLPrimitive::getTESTAxes(te, &s_axis, &t_axis))
|
||||
{
|
||||
return;
|
||||
}
|
||||
F32 DEFAULT_REPEATS = 2.f;
|
||||
F32 new_s = getScale().mV[s_axis] * DEFAULT_REPEATS;
|
||||
F32 new_t = getScale().mV[t_axis] * DEFAULT_REPEATS;
|
||||
|
||||
setTEScale(te, new_s, new_t);
|
||||
sendTEUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ObjectPhysicsProperties : public LLHTTPNode
|
||||
{
|
||||
|
|
|
|||
|
|
@ -412,6 +412,8 @@ public:
|
|||
LLViewerTexture *getTENormalMap(const U8 te) const;
|
||||
LLViewerTexture *getTESpecularMap(const U8 te) const;
|
||||
|
||||
void clearTEWaterExclusion(const U8 te);
|
||||
|
||||
bool isImageAlphaBlended(const U8 te) const;
|
||||
|
||||
void fitFaceTexture(const U8 face);
|
||||
|
|
|
|||
|
|
@ -964,6 +964,9 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
{
|
||||
llassert(!gCubeSnapshot);
|
||||
|
||||
constexpr F32 BIAS_TRS_OUT_OF_SCREEN = 1.5f;
|
||||
constexpr F32 BIAS_TRS_ON_SCREEN = 1.f;
|
||||
|
||||
if (imagep->getBoostLevel() < LLViewerFetchedTexture::BOOST_HIGH) // don't bother checking face list for boosted textures
|
||||
{
|
||||
static LLCachedControl<F32> texture_scale_min(gSavedSettings, "TextureScaleMinAreaFactor", 0.0095f);
|
||||
|
|
@ -1043,6 +1046,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
// Also moved allocation outside the loop
|
||||
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
|
||||
//F32 vsize = face->getPixelArea();
|
||||
|
||||
//on_screen |= face->mInFrustum;
|
||||
// Get the already calculated face's virtual size, instead of re-calculating it
|
||||
vsize = face->getVirtualSize();
|
||||
|
||||
|
|
@ -1064,7 +1069,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
//
|
||||
// Maximum usage examples: huge chunk of terrain repeats texture
|
||||
// TODO: make this work with the GLTF texture transforms
|
||||
|
||||
|
||||
S32 te_offset = face->getTEOffset(); // offset is -1 if not inited
|
||||
LLViewerObject* objp = face->getViewerObject();
|
||||
const LLTextureEntry* te = (te_offset < 0 || te_offset >= objp->getNumTEs()) ? nullptr : objp->getTE(te_offset);
|
||||
|
|
@ -1087,6 +1092,13 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
}
|
||||
|
||||
max_vsize = llmax(max_vsize, vsize);
|
||||
|
||||
// addTextureStats limits size to sMaxVirtualSize
|
||||
if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize
|
||||
&& (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN))
|
||||
{
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
// Use math to skip having to use a conditaional check
|
||||
|
|
@ -1107,6 +1119,14 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
// </FS:minerjr> [FIRE-35081]
|
||||
}
|
||||
}
|
||||
|
||||
// <FS> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
|
||||
//if (max_vsize >= LLViewerFetchedTexture::sMaxVirtualSize
|
||||
// && (on_screen || LLViewerTexture::sDesiredDiscardBias <= BIAS_TRS_ON_SCREEN))
|
||||
//{
|
||||
// break;
|
||||
//}
|
||||
// </FS>
|
||||
}
|
||||
|
||||
// <FS:minerjr> [FIRE-35081] Blurry prims not changing with graphics settings, not happening with SL Viewer
|
||||
|
|
@ -1122,6 +1142,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
{ // this texture is used in so many places we should just boost it and not bother checking its vsize
|
||||
// this is especially important because the above is not time sliced and can hit multiple ms for a single texture
|
||||
imagep->setBoostLevel(LLViewerFetchedTexture::BOOST_HIGH);
|
||||
// Do we ever remove it? This also sets texture nodelete!
|
||||
}
|
||||
|
||||
if (imagep->getType() == LLViewerTexture::LOD_TEXTURE && imagep->getBoostLevel() == LLViewerTexture::BOOST_NONE)
|
||||
|
|
@ -1129,8 +1150,8 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag
|
|||
// this is an alternative to decaying mMaxVirtualSize over time
|
||||
// that keeps textures from continously downrezzing and uprezzing in the background
|
||||
|
||||
if (LLViewerTexture::sDesiredDiscardBias > 1.5f ||
|
||||
(!on_screen && LLViewerTexture::sDesiredDiscardBias > 1.f))
|
||||
if (LLViewerTexture::sDesiredDiscardBias > BIAS_TRS_OUT_OF_SCREEN ||
|
||||
(!on_screen && LLViewerTexture::sDesiredDiscardBias > BIAS_TRS_ON_SCREEN))
|
||||
{
|
||||
imagep->mMaxVirtualSize = 0.f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -520,9 +520,8 @@ public:
|
|||
|
||||
clearText();
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowTime"))
|
||||
static LLCachedControl<bool> debugShowTime(gSavedSettings, "DebugShowTime");
|
||||
if (debugShowTime)
|
||||
static LLCachedControl<bool> debug_show_time(gSavedSettings, "DebugShowTime", false);
|
||||
if (debug_show_time())
|
||||
{
|
||||
// <FS:Ansariel> FIRE-9746: Show FPS with DebugShowTime
|
||||
{
|
||||
|
|
@ -538,9 +537,8 @@ public:
|
|||
addText(xpos, ypos, llformat("Time: %d:%02d:%02d", hours,mins,secs)); ypos += y_inc;
|
||||
}
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowMemory"))
|
||||
static LLCachedControl<bool> debugShowMemory(gSavedSettings, "DebugShowMemory");
|
||||
if (debugShowMemory)
|
||||
static LLCachedControl<bool> debug_show_memory(gSavedSettings, "DebugShowMemory", false);
|
||||
if (debug_show_memory())
|
||||
{
|
||||
auto rss = LLMemory::getCurrentRSS() / 1024;
|
||||
addText(xpos, ypos,
|
||||
|
|
@ -640,9 +638,8 @@ public:
|
|||
ypos += y_inc;
|
||||
}*/
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowRenderInfo"))
|
||||
static LLCachedControl<bool> debugShowRenderInfo(gSavedSettings, "DebugShowRenderInfo");
|
||||
if (debugShowRenderInfo)
|
||||
static LLCachedControl<bool> debug_show_render_info(gSavedSettings, "DebugShowRenderInfo", false);
|
||||
if (debug_show_render_info())
|
||||
{
|
||||
LLTrace::Recording& last_frame_recording = LLTrace::get_frame_recording().getLastRecording();
|
||||
|
||||
|
|
@ -793,8 +790,8 @@ public:
|
|||
// </FS:Beq>
|
||||
gPipeline.mNumVisibleNodes = LLPipeline::sVisibleLightCount = 0;
|
||||
}
|
||||
static LLCachedControl<bool> sDebugShowAvatarRenderInfo(gSavedSettings, "DebugShowAvatarRenderInfo");
|
||||
if (sDebugShowAvatarRenderInfo)
|
||||
static LLCachedControl<bool> debug_show_avatar_render_info(gSavedSettings, "DebugShowAvatarRenderInfo", false);
|
||||
if (debug_show_avatar_render_info())
|
||||
{
|
||||
std::map<std::string, LLVOAvatar*> sorted_avs;
|
||||
{
|
||||
|
|
@ -827,10 +824,8 @@ public:
|
|||
av_iter++;
|
||||
}
|
||||
}
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowRenderMatrices"))
|
||||
static LLCachedControl<bool> debugShowRenderMatrices(gSavedSettings, "DebugShowRenderMatrices");
|
||||
if (debugShowRenderMatrices)
|
||||
static LLCachedControl<bool> debug_show_render_matrices(gSavedSettings, "DebugShowRenderMatrices", false);
|
||||
if (debug_show_render_matrices())
|
||||
{
|
||||
char camera_lines[8][32];
|
||||
memset(camera_lines, ' ', sizeof(camera_lines));
|
||||
|
|
@ -856,11 +851,8 @@ public:
|
|||
ypos += y_inc;
|
||||
}
|
||||
// disable use of glReadPixels which messes up nVidia nSight graphics debugging
|
||||
//<FS:AO improve use of controls with radiogroups>
|
||||
//if (gSavedSettings.getBOOL("DebugShowColor") && !LLRender::sNsightDebugSupport)
|
||||
static LLCachedControl<S32> debugShowColor(gSavedSettings, "DebugShowColor");
|
||||
//</FS:AO>
|
||||
if (debugShowColor && !LLRender::sNsightDebugSupport)
|
||||
static LLCachedControl<bool> debug_show_color(gSavedSettings, "DebugShowColor", false);
|
||||
if (debug_show_color() && !LLRender::sNsightDebugSupport)
|
||||
{
|
||||
U8 color[4];
|
||||
LLCoordGL coord = gViewerWindow->getCurrentMouse();
|
||||
|
|
@ -977,9 +969,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowTextureInfo"))
|
||||
static LLCachedControl<bool> debugShowTextureInfo(gSavedSettings, "DebugShowTextureInfo");
|
||||
if (debugShowTextureInfo)
|
||||
static LLCachedControl<bool> debug_show_texture_info(gSavedSettings, "DebugShowTextureInfo", false);
|
||||
if (debug_show_texture_info())
|
||||
{
|
||||
LLViewerObject* objectp = NULL ;
|
||||
|
||||
|
|
@ -1555,10 +1546,13 @@ void LLViewerWindow::handleMouseLeave(LLWindow *window)
|
|||
|
||||
bool LLViewerWindow::handleCloseRequest(LLWindow *window)
|
||||
{
|
||||
// User has indicated they want to close, but we may need to ask
|
||||
// about modified documents.
|
||||
LLAppViewer::instance()->userQuit();
|
||||
// Don't quit immediately
|
||||
if (!LLApp::isExiting())
|
||||
{
|
||||
// User has indicated they want to close, but we may need to ask
|
||||
// about modified documents.
|
||||
LLAppViewer::instance()->userQuit();
|
||||
// Don't quit immediately
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1702,7 +1696,8 @@ bool LLViewerWindow::handleActivate(LLWindow *window, bool activated)
|
|||
mActive = false;
|
||||
|
||||
// if the user has chosen to go Away automatically after some time, then go Away when minimizing
|
||||
if (gSavedSettings.getS32("AFKTimeout"))
|
||||
static LLCachedControl<S32> afk_time(gSavedSettings, "AFKTimeout", 300);
|
||||
if (afk_time())
|
||||
{
|
||||
gAgent.setAFK();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -236,6 +236,16 @@
|
|||
<slider label="Schattenqualität" tool_tip="Qualität der Schattendarstellung (Standard: 1)" name="ShadowResolution"/>
|
||||
<slider label="Skalierung der Bodentexturen (Erfordert Neustart)" name="RenderTerrainScale" tool_tip="Setzt die Skalierung der Bodentexturen - niedriger bedeutet höhere Kompression"/>
|
||||
<slider label="Schärfung" name="RenderSharpness"/>
|
||||
<text name="ReflectionProbeCount">
|
||||
Max Anzahl Reflexionstests:
|
||||
</text>
|
||||
<combo_box name="ProbeCount">
|
||||
<combo_box.item label="Keine" name="1"/>
|
||||
<combo_box.item label="Niedrig" name="32"/>
|
||||
<combo_box.item label="Mittel" name="64"/>
|
||||
<combo_box.item label="Hoch" name="128"/>
|
||||
<combo_box.item label="Ultra" name="256"/>
|
||||
</combo_box>
|
||||
<text name="TonemapTypeText">
|
||||
Tone Mapper:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -858,6 +858,51 @@
|
|||
value="3"/>
|
||||
</combo_box>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="420"
|
||||
name="ReflectionProbeCount"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="22"
|
||||
width="128">
|
||||
Max Reflection Probes:
|
||||
</text>
|
||||
|
||||
<combo_box
|
||||
control_name="RenderReflectionProbeCount"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
label="Max. Reflection Probes:"
|
||||
left_delta="130"
|
||||
top_delta="0"
|
||||
name="ProbeCount"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="None"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="Low"
|
||||
name="32"
|
||||
value="32"/>
|
||||
<combo_box.item
|
||||
label="Medium"
|
||||
name="64"
|
||||
value="64"/>
|
||||
<combo_box.item
|
||||
label="High"
|
||||
name="128"
|
||||
value="128"/>
|
||||
<combo_box.item
|
||||
label="Ultra"
|
||||
name="256"
|
||||
value="256"/>
|
||||
</combo_box>
|
||||
|
||||
<slider
|
||||
control_name="RenderExposure"
|
||||
decimal_digits="1"
|
||||
|
|
|
|||
|
|
@ -1599,6 +1599,47 @@ If you do not understand the distinction then leave this control alone."
|
|||
width="405">
|
||||
</slider>
|
||||
<!-- End of Sharpening Settings-->
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="ReflectionProbeCount"
|
||||
top_pad="2"
|
||||
width="150">
|
||||
Max. Reflection Probes:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderReflectionProbeCount"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
top_delta="-2"
|
||||
name="ProbeCount"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="None"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="Low"
|
||||
name="32"
|
||||
value="32"/>
|
||||
<combo_box.item
|
||||
label="Medium"
|
||||
name="64"
|
||||
value="64"/>
|
||||
<combo_box.item
|
||||
label="High"
|
||||
name="128"
|
||||
value="128"/>
|
||||
<combo_box.item
|
||||
label="Ultra"
|
||||
name="256"
|
||||
value="256"/>
|
||||
</combo_box>
|
||||
<!-- Tone Mapping Settings -->
|
||||
<text
|
||||
type="string"
|
||||
|
|
@ -1608,7 +1649,7 @@ If you do not understand the distinction then leave this control alone."
|
|||
layout="topleft"
|
||||
left="10"
|
||||
name="TonemapTypeText"
|
||||
top_pad="8"
|
||||
top_pad="6"
|
||||
width="150">
|
||||
Tone Mapper:
|
||||
</text>
|
||||
|
|
|
|||
Loading…
Reference in New Issue