Merge remote-tracking branch 'origin/develop' into brad/webrtc-voice-develop

master
Brad Linden 2024-06-18 11:55:30 -07:00
commit 6393e88ca4
25 changed files with 154 additions and 127 deletions

View File

@ -1,12 +1,6 @@
name: Build name: Build
on: on:
workflow_dispatch:
inputs:
release_run:
type: boolean
description: Do a release of this build
default: false
pull_request: pull_request:
push: push:
branches: ["main", "release/*", "project/*"] branches: ["main", "release/*", "project/*"]
@ -231,6 +225,9 @@ jobs:
elif [[ "$prefix" == "release" || "$prefix" == "main" ]]; elif [[ "$prefix" == "release" || "$prefix" == "main" ]];
then then
export viewer_channel="Second Life Release" export viewer_channel="Second Life Release"
elif [[ "$branch" == "develop" ]];
then
export viewer_channel="Second Life Develop"
else else
export viewer_channel="Second Life Test" export viewer_channel="Second Life Test"
fi fi

48
.github/workflows/tag-release.yaml vendored Normal file
View File

@ -0,0 +1,48 @@
name: Tag a Build
on:
# schedule event triggers always run on the default branch
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
schedule:
# run "nightly" builds on default branch every mon/wed/fri
- cron: "21 2 * * 2,4,6" # 2:21am UTC tues/thurs/sat == 7:21pm PDT mon/wed/fri -- see https://crontab.guru/#21_01_*_*_2,4,6
workflow_dispatch:
inputs:
channel:
description: "Channel to configure the build"
required: true
type: choice
default: "Test"
options:
- "Test"
- "Develop"
- "Project"
- "Release"
project:
description: "Project Name (used for channel name in project builds, and tag name for all builds)"
default: "hippo"
# TODO - add an input for selecting another sha to build other than head of branch
jobs:
tag-release:
runs-on: ubuntu-latest
env:
GITHUB_TAG_TOKEN: ${{ secrets.GITHUB_TAG_TOKEN }}
steps:
- name: Setup Env Vars
run: |
CHANNEL="${{ inputs.channel }}"
echo VIEWER_CHANNEL="Second_Life_${CHANNEL:-Develop}" >> ${GITHUB_ENV}
echo NIGHTLY_DATE=$(date --rfc-3339=date) >> ${GITHUB_ENV}
- name: Update Tag
uses: actions/github-script@v7.0.1
if: env.GITHUB_TAG_TOKEN
with:
github-token: ${{ env.GITHUB_TAG_TOKEN }}
script: |
github.rest.git.createRef(
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/${{ env.VIEWER_CHANNEL }}#${{ env.NIGHTLY_DATE }}",
sha: context.sha
)

View File

@ -876,15 +876,15 @@ std::string LLDir::getTempFilename() const
} }
// static // static
std::string LLDir::getScrubbedFileName(const std::string uncleanFileName) std::string LLDir::getScrubbedFileName(std::string_view uncleanFileName)
{ {
std::string name(uncleanFileName); std::string name(uncleanFileName);
const std::string illegalChars(getForbiddenFileChars()); const std::string illegalChars(getForbiddenFileChars());
// replace any illegal file chars with and underscore '_' // replace any illegal file chars with and underscore '_'
for( unsigned int i = 0; i < illegalChars.length(); i++ ) for (const char& ch : illegalChars)
{ {
std::string::size_type j = -1; std::string::size_type j{ 0 };
while((j = name.find(illegalChars[i])) > std::string::npos) while ((j = name.find(ch, j)) != std::string::npos)
{ {
name[j] = '_'; name[j] = '_';
} }

View File

@ -178,7 +178,7 @@ class LLDir
static std::string getDumpLogsDirPath(const std::string &file_name = ""); static std::string getDumpLogsDirPath(const std::string &file_name = "");
// For producing safe download file names from potentially unsafe ones // For producing safe download file names from potentially unsafe ones
static std::string getScrubbedFileName(const std::string uncleanFileName); static std::string getScrubbedFileName(std::string_view uncleanFileName);
static std::string getForbiddenFileChars(); static std::string getForbiddenFileChars();
void setDumpDir( const std::string& path ); void setDumpDir( const std::string& path );

View File

@ -1099,7 +1099,8 @@ S32 LLGLSLShader::bindTexture(S32 uniform, LLTexture* texture, LLTexUnit::eTextu
if (uniform < 0 || uniform >= (S32)mTexture.size()) if (uniform < 0 || uniform >= (S32)mTexture.size())
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform out of range: " << uniform << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << uniform << LL_ENDL;
llassert(false);
return -1; return -1;
} }
@ -1120,6 +1121,8 @@ S32 LLGLSLShader::bindTexture(S32 uniform, LLRenderTarget* texture, bool depth,
if (uniform < 0 || uniform >= (S32)mTexture.size()) if (uniform < 0 || uniform >= (S32)mTexture.size())
{ {
LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << uniform << LL_ENDL;
llassert(false);
return -1; return -1;
} }
@ -1167,7 +1170,8 @@ S32 LLGLSLShader::unbindTexture(S32 uniform, LLTexUnit::eTextureType mode)
if (uniform < 0 || uniform >= (S32)mTexture.size()) if (uniform < 0 || uniform >= (S32)mTexture.size())
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform out of range: " << uniform << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << uniform << LL_ENDL;
llassert(false);
return -1; return -1;
} }
@ -1192,7 +1196,8 @@ S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTex
if (uniform < 0 || uniform >= (S32)mTexture.size()) if (uniform < 0 || uniform >= (S32)mTexture.size())
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform out of range: " << uniform << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << uniform << LL_ENDL;
llassert(false);
return -1; return -1;
} }
@ -1213,7 +1218,8 @@ S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTe
if (uniform < 0 || uniform >= (S32)mTexture.size()) if (uniform < 0 || uniform >= (S32)mTexture.size())
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform out of range: " << uniform << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << uniform << LL_ENDL;
llassert(false);
return -1; return -1;
} }
S32 index = mTexture[uniform]; S32 index = mTexture[uniform];
@ -1244,7 +1250,8 @@ void LLGLSLShader::uniform1i(U32 index, GLint x)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1269,7 +1276,8 @@ void LLGLSLShader::uniform1f(U32 index, GLfloat x)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1304,7 +1312,8 @@ void LLGLSLShader::uniform2f(U32 index, GLfloat x, GLfloat y)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1330,7 +1339,8 @@ void LLGLSLShader::uniform3f(U32 index, GLfloat x, GLfloat y, GLfloat z)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1356,7 +1366,8 @@ void LLGLSLShader::uniform4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1382,7 +1393,8 @@ void LLGLSLShader::uniform1iv(U32 index, U32 count, const GLint* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1408,7 +1420,8 @@ void LLGLSLShader::uniform4iv(U32 index, U32 count, const GLint* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1435,7 +1448,8 @@ void LLGLSLShader::uniform1fv(U32 index, U32 count, const GLfloat* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1461,7 +1475,8 @@ void LLGLSLShader::uniform2fv(U32 index, U32 count, const GLfloat* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1487,7 +1502,8 @@ void LLGLSLShader::uniform3fv(U32 index, U32 count, const GLfloat* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1513,7 +1529,8 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1540,7 +1557,8 @@ void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, c
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1560,7 +1578,8 @@ void LLGLSLShader::uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, c
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1580,7 +1599,8 @@ void LLGLSLShader::uniformMatrix3x4fv(U32 index, U32 count, GLboolean transpose,
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }
@ -1600,7 +1620,8 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c
{ {
if (mUniform.size() <= index) if (mUniform.size() <= index)
{ {
LL_SHADER_UNIFORM_ERRS() << "Uniform index out of bounds." << LL_ENDL; LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL;
llassert(false);
return; return;
} }

View File

@ -548,6 +548,5 @@ glh::matrix4f gl_perspective(GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloa
glh::matrix4f gl_lookat(LLVector3 eye, LLVector3 center, LLVector3 up); glh::matrix4f gl_lookat(LLVector3 eye, LLVector3 center, LLVector3 up);
#define LL_SHADER_LOADING_WARNS(...) LL_WARNS() #define LL_SHADER_LOADING_WARNS(...) LL_WARNS()
#define LL_SHADER_UNIFORM_ERRS(...) LL_ERRS("Shader")
#endif #endif

View File

@ -409,7 +409,6 @@ LLWindow* LLWindowManager::createWindow(
bool ignore_pixel_depth, bool ignore_pixel_depth,
U32 fsaa_samples, U32 fsaa_samples,
U32 max_cores, U32 max_cores,
U32 max_vram,
F32 max_gl_version) F32 max_gl_version)
{ {
LLWindow* new_window; LLWindow* new_window;
@ -427,11 +426,11 @@ LLWindow* LLWindowManager::createWindow(
#elif LL_WINDOWS #elif LL_WINDOWS
new_window = new LLWindowWin32(callbacks, new_window = new LLWindowWin32(callbacks,
title, name, x, y, width, height, flags, title, name, x, y, width, height, flags,
fullscreen, clearBg, enable_vsync, use_gl, ignore_pixel_depth, fsaa_samples, max_cores, max_vram, max_gl_version); fullscreen, clearBg, enable_vsync, use_gl, ignore_pixel_depth, fsaa_samples, max_cores, max_gl_version);
#elif LL_DARWIN #elif LL_DARWIN
new_window = new LLWindowMacOSX(callbacks, new_window = new LLWindowMacOSX(callbacks,
title, name, x, y, width, height, flags, title, name, x, y, width, height, flags,
fullscreen, clearBg, enable_vsync, use_gl, ignore_pixel_depth, fsaa_samples, max_vram); fullscreen, clearBg, enable_vsync, use_gl, ignore_pixel_depth, fsaa_samples);
#endif #endif
} }
else else

View File

@ -164,8 +164,6 @@ public:
virtual F32 getPixelAspectRatio() = 0; virtual F32 getPixelAspectRatio() = 0;
virtual void setNativeAspectRatio(F32 aspect) = 0; virtual void setNativeAspectRatio(F32 aspect) = 0;
virtual void setMaxVRAMMegabytes(U32 max_vram) = 0;
virtual void beforeDialog() {}; // prepare to put up an OS dialog (if special measures are required, such as in fullscreen mode) virtual void beforeDialog() {}; // prepare to put up an OS dialog (if special measures are required, such as in fullscreen mode)
virtual void afterDialog() {}; // undo whatever was done in beforeDialog() virtual void afterDialog() {}; // undo whatever was done in beforeDialog()
@ -286,14 +284,14 @@ protected:
// Platform-neutral for accessing the platform specific message box // Platform-neutral for accessing the platform specific message box
S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type); S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type);
const U32 OSMB_OK = 0; constexpr U32 OSMB_OK = 0;
const U32 OSMB_OKCANCEL = 1; constexpr U32 OSMB_OKCANCEL = 1;
const U32 OSMB_YESNO = 2; constexpr U32 OSMB_YESNO = 2;
const S32 OSBTN_YES = 0; constexpr S32 OSBTN_YES = 0;
const S32 OSBTN_NO = 1; constexpr S32 OSBTN_NO = 1;
const S32 OSBTN_OK = 2; constexpr S32 OSBTN_OK = 2;
const S32 OSBTN_CANCEL = 3; constexpr S32 OSBTN_CANCEL = 3;
// //
// LLWindowManager // LLWindowManager
@ -313,7 +311,6 @@ public:
bool ignore_pixel_depth = false, bool ignore_pixel_depth = false,
U32 fsaa_samples = 0, U32 fsaa_samples = 0,
U32 max_cores = 0, U32 max_cores = 0,
U32 max_vram = 0,
F32 max_gl_version = 4.6f); F32 max_gl_version = 4.6f);
static bool destroyWindow(LLWindow* window); static bool destroyWindow(LLWindow* window);
static bool isWindowValid(LLWindow *window); static bool isWindowValid(LLWindow *window);
@ -329,6 +326,4 @@ extern const S32 gURLProtocolWhitelistCount;
extern const std::string gURLProtocolWhitelist[]; extern const std::string gURLProtocolWhitelist[];
//extern const std::string gURLProtocolWhitelistHandler[]; //extern const std::string gURLProtocolWhitelistHandler[];
void simpleEscapeString ( std::string& stringIn );
#endif // _LL_window_h_ #endif // _LL_window_h_

View File

@ -101,8 +101,6 @@ public:
/*virtual*/ F32 getPixelAspectRatio() override { return 1.0f; } /*virtual*/ F32 getPixelAspectRatio() override { return 1.0f; }
/*virtual*/ void setNativeAspectRatio(F32 ratio) override {} /*virtual*/ void setNativeAspectRatio(F32 ratio) override {}
void setMaxVRAMMegabytes(U32 max_vram) override {}
/*virtual*/ void *getPlatformWindow() override { return 0; } /*virtual*/ void *getPlatformWindow() override { return 0; }
/*virtual*/ void bringToFront() override {} /*virtual*/ void bringToFront() override {}

View File

@ -122,8 +122,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,
bool fullscreen, bool clearBg, bool fullscreen, bool clearBg,
bool enable_vsync, bool use_gl, bool enable_vsync, bool use_gl,
bool ignore_pixel_depth, bool ignore_pixel_depth,
U32 fsaa_samples, U32 fsaa_samples)
U32 max_vram)
: LLWindow(NULL, fullscreen, flags) : LLWindow(NULL, fullscreen, flags)
{ {
// *HACK: During window construction we get lots of OS events for window // *HACK: During window construction we get lots of OS events for window

View File

@ -100,8 +100,6 @@ public:
F32 getPixelAspectRatio() override; F32 getPixelAspectRatio() override;
void setNativeAspectRatio(F32 ratio) override { mOverrideAspectRatio = ratio; } void setNativeAspectRatio(F32 ratio) override { mOverrideAspectRatio = ratio; }
virtual void setMaxVRAMMegabytes(U32 max_vram) override {}
void beforeDialog() override; void beforeDialog() override;
void afterDialog() override; void afterDialog() override;
@ -154,8 +152,7 @@ protected:
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags, const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl, bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl,
bool ignore_pixel_depth, bool ignore_pixel_depth,
U32 fsaa_samples, U32 fsaa_samples);
U32 max_vram);
~LLWindowMacOSX(); ~LLWindowMacOSX();
void initCursors(); void initCursors();

View File

@ -404,7 +404,6 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
using FuncType = std::function<void()>; using FuncType = std::function<void()>;
// call GetMessage() and pull enqueue messages for later processing // call GetMessage() and pull enqueue messages for later processing
void gatherInput();
HWND mWindowHandleThrd = NULL; HWND mWindowHandleThrd = NULL;
HDC mhDCThrd = 0; HDC mhDCThrd = 0;
@ -412,8 +411,6 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool
// until after some graphics setup. See SL-20177. -Cosmic,2023-09-18 // until after some graphics setup. See SL-20177. -Cosmic,2023-09-18
bool mGLReady = false; bool mGLReady = false;
bool mGotGLBuffer = false; bool mGotGLBuffer = false;
U32 mMaxVRAM = 0; // maximum amount of vram to allow in the "budget", or 0 for no maximum (see updateVRAMUsage)
}; };
@ -425,7 +422,6 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
bool ignore_pixel_depth, bool ignore_pixel_depth,
U32 fsaa_samples, U32 fsaa_samples,
U32 max_cores, U32 max_cores,
U32 max_vram,
F32 max_gl_version) F32 max_gl_version)
: :
LLWindow(callbacks, fullscreen, flags), LLWindow(callbacks, fullscreen, flags),
@ -434,7 +430,6 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
{ {
sMainThreadId = LLThread::currentID(); sMainThreadId = LLThread::currentID();
mWindowThread = new LLWindowWin32Thread(); mWindowThread = new LLWindowWin32Thread();
mWindowThread->mMaxVRAM = max_vram;
//MAINT-516 -- force a load of opengl32.dll just in case windows went sideways //MAINT-516 -- force a load of opengl32.dll just in case windows went sideways
LoadLibrary(L"opengl32.dll"); LoadLibrary(L"opengl32.dll");
@ -4545,15 +4540,6 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()
// Fonts previously in getFontListSans() have moved to fonts.xml. // Fonts previously in getFontListSans() have moved to fonts.xml.
return std::vector<std::string>(); return std::vector<std::string>();
} }
void LLWindowWin32::setMaxVRAMMegabytes(U32 max_vram)
{
if (mWindowThread)
{
mWindowThread->mMaxVRAM = max_vram;
}
}
#endif // LL_WINDOWS #endif // LL_WINDOWS
inline LLWindowWin32::LLWindowWin32Thread::LLWindowWin32Thread() inline LLWindowWin32::LLWindowWin32Thread::LLWindowWin32Thread()

View File

@ -108,8 +108,6 @@ public:
/*virtual*/ F32 getPixelAspectRatio(); /*virtual*/ F32 getPixelAspectRatio();
/*virtual*/ void setNativeAspectRatio(F32 ratio) { mOverrideAspectRatio = ratio; } /*virtual*/ void setNativeAspectRatio(F32 ratio) { mOverrideAspectRatio = ratio; }
/*virtual*/ void setMaxVRAMMegabytes(U32 max_vram) override;
/*virtual*/ bool dialogColorPicker(F32 *r, F32 *g, F32 *b ); /*virtual*/ bool dialogColorPicker(F32 *r, F32 *g, F32 *b );
/*virtual*/ void *getPlatformWindow(); /*virtual*/ void *getPlatformWindow();
@ -142,11 +140,10 @@ protected:
LLWindowWin32(LLWindowCallbacks* callbacks, LLWindowWin32(LLWindowCallbacks* callbacks,
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags, const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl, bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl,
bool ignore_pixel_depth, U32 fsaa_samples, U32 max_cores, U32 max_vram, F32 max_gl_version); bool ignore_pixel_depth, U32 fsaa_samples, U32 max_cores, F32 max_gl_version);
~LLWindowWin32(); ~LLWindowWin32();
void initCursors(); void initCursors();
void initInputDevices();
HCURSOR loadColorCursor(LPCTSTR name); HCURSOR loadColorCursor(LPCTSTR name);
bool isValid(); bool isValid();
void moveWindow(const LLCoordScreen& position,const LLCoordScreen& size); void moveWindow(const LLCoordScreen& position,const LLCoordScreen& size);
@ -163,7 +160,6 @@ protected:
bool shouldPostQuit() { return mPostQuit; } bool shouldPostQuit() { return mPostQuit; }
void fillCompositionForm(const LLRect& bounds, COMPOSITIONFORM *form);
void fillCandidateForm(const LLCoordGL& caret, const LLRect& bounds, CANDIDATEFORM *form); void fillCandidateForm(const LLCoordGL& caret, const LLRect& bounds, CANDIDATEFORM *form);
void fillCharPosition(const LLCoordGL& caret, const LLRect& bounds, const LLRect& control, IMECHARPOSITION *char_position); void fillCharPosition(const LLCoordGL& caret, const LLRect& bounds, const LLRect& control, IMECHARPOSITION *char_position);
void fillCompositionLogfont(LOGFONT *logfont); void fillCompositionLogfont(LOGFONT *logfont);
@ -178,10 +174,8 @@ protected:
// //
bool getClientRectInScreenSpace(RECT* rectp); bool getClientRectInScreenSpace(RECT* rectp);
void updateJoystick( );
static LRESULT CALLBACK mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_param, LPARAM l_param); static LRESULT CALLBACK mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_param, LPARAM l_param);
static bool CALLBACK enumChildWindows(HWND h_wnd, LPARAM l_param);
// //
@ -288,8 +282,6 @@ private:
extern LLW32MsgCallback gAsyncMsgCallback; extern LLW32MsgCallback gAsyncMsgCallback;
extern LPWSTR gIconResource; extern LPWSTR gIconResource;
static void handleMessage( const MSG& msg );
S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 type); S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 type);
#endif //LL_LLWINDOWWIN32_H #endif //LL_LLWINDOWWIN32_H

View File

@ -756,9 +756,12 @@ void LLRenderPass::pushGLTFBatch(LLDrawInfo& params)
{ {
auto& mat = params.mGLTFMaterial; auto& mat = params.mGLTFMaterial;
mat->bind(params.mTexture); if (mat.notNull())
{
mat->bind(params.mTexture);
}
LLGLDisable cull_face(mat->mDoubleSided ? GL_CULL_FACE : 0); LLGLDisable cull_face(mat.notNull() && mat->mDoubleSided ? GL_CULL_FACE : 0);
setup_texture_matrix(params); setup_texture_matrix(params);

View File

@ -251,32 +251,27 @@ bool LLReflectionMap::getBox(LLMatrix4& box)
if (mViewerObject) if (mViewerObject)
{ {
LLVolume* volume = mViewerObject->getVolume(); LLVolume* volume = mViewerObject->getVolume();
if (volume) if (volume && mViewerObject->getReflectionProbeIsBox())
{ {
LLVOVolume* vobjp = (LLVOVolume*)mViewerObject; glh::matrix4f mv(gGLModelView);
glh::matrix4f scale;
if (vobjp->getReflectionProbeIsBox()) LLVector3 s = mViewerObject->getScale().scaledVec(LLVector3(0.5f, 0.5f, 0.5f));
mRadius = s.magVec();
scale.set_scale(glh::vec3f(s.mV));
if (mViewerObject->mDrawable != nullptr)
{ {
glh::matrix4f mv(gGLModelView); // object to agent space (no scale)
glh::matrix4f scale; glh::matrix4f rm((F32*)mViewerObject->mDrawable->getWorldMatrix().mMatrix);
LLVector3 s = vobjp->getScale().scaledVec(LLVector3(0.5f, 0.5f, 0.5f));
mRadius = s.magVec();
scale.set_scale(glh::vec3f(s.mV));
if (vobjp->mDrawable != nullptr)
{
// object to agent space (no scale)
glh::matrix4f rm((F32*)vobjp->mDrawable->getWorldMatrix().mMatrix);
// construct object to camera space (with scale) // construct object to camera space (with scale)
mv = mv * rm * scale; mv = mv * rm * scale;
// inverse is camera space to object unit cube // inverse is camera space to object unit cube
mv = mv.inverse(); mv = mv.inverse();
box = LLMatrix4(mv.m); box = LLMatrix4(mv.m);
return true; return true;
}
} }
} }
} }

View File

@ -135,7 +135,7 @@ LLVersionInfo::ViewerMaturity LLVersionInfo::getViewerMaturity()
std::string channel = getChannel(); std::string channel = getChannel();
static const boost::regex is_test_channel("\\bTest\\b"); static const boost::regex is_test_channel("\\bTest\\b");
static const boost::regex is_beta_channel("\\bBeta\\b"); static const boost::regex is_beta_channel("\\b(Beta|Develop)\\b"); // Develop is an alias for Beta
static const boost::regex is_project_channel("\\bProject\\b"); static const boost::regex is_project_channel("\\bProject\\b");
static const boost::regex is_release_channel("\\bRelease\\b"); static const boost::regex is_release_channel("\\bRelease\\b");

View File

@ -94,7 +94,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera()
mZoomSubregion = 1; mZoomSubregion = 1;
mAverageSpeed = 0.f; mAverageSpeed = 0.f;
mAverageAngularSpeed = 0.f; mAverageAngularSpeed = 0.f;
gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
}
LLViewerCamera::~LLViewerCamera()
{
mCameraAngleChangedSignal.disconnect();
} }
void LLViewerCamera::updateCameraLocation(const LLVector3 &center, const LLVector3 &up_direction, const LLVector3 &point_of_interest) void LLViewerCamera::updateCameraLocation(const LLVector3 &center, const LLVector3 &up_direction, const LLVector3 &point_of_interest)
@ -895,10 +901,8 @@ bool LLViewerCamera::isDefaultFOVChanged()
return false; return false;
} }
// static void LLViewerCamera::updateCameraAngle(const LLSD& value)
void LLViewerCamera::updateCameraAngle( void* user_data, const LLSD& value)
{ {
LLViewerCamera* self=(LLViewerCamera*)user_data; setDefaultFOV(value.asReal());
self->setDefaultFOV(value.asReal());
} }

View File

@ -43,6 +43,7 @@ class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton<LLViewerC
LL_ALIGN_NEW LL_ALIGN_NEW
public: public:
LLViewerCamera(); LLViewerCamera();
~LLViewerCamera();
typedef enum typedef enum
{ {
@ -65,7 +66,7 @@ public:
const LLVector3 &point_of_interest); const LLVector3 &point_of_interest);
static void updateFrustumPlanes(LLCamera& camera, bool ortho = false, bool zflip = false, bool no_hacks = false); static void updateFrustumPlanes(LLCamera& camera, bool ortho = false, bool zflip = false, bool no_hacks = false);
static void updateCameraAngle(void* user_data, const LLSD& value); void updateCameraAngle(const LLSD& value);
void setPerspective(bool for_selection, S32 x, S32 y_from_bot, S32 width, S32 height, bool limit_select_distance, F32 z_near = 0, F32 z_far = 0); void setPerspective(bool for_selection, S32 x, S32 y_from_bot, S32 width, S32 height, bool limit_select_distance, F32 z_near = 0, F32 z_far = 0);
const LLMatrix4 &getProjection() const; const LLMatrix4 &getProjection() const;
@ -125,6 +126,8 @@ protected:
F32 mZoomFactor; F32 mZoomFactor;
S16 mZoomSubregion; S16 mZoomSubregion;
boost::signals2::connection mCameraAngleChangedSignal;
public: public:
}; };

View File

@ -266,6 +266,7 @@ public:
virtual bool isRiggedMesh() const { return false; } virtual bool isRiggedMesh() const { return false; }
virtual bool hasLightTexture() const { return false; } virtual bool hasLightTexture() const { return false; }
virtual bool isReflectionProbe() const { return false; } virtual bool isReflectionProbe() const { return false; }
virtual bool getReflectionProbeIsBox() const { return false; }
// This method returns true if the object is over land owned by // This method returns true if the object is over land owned by
// the agent, one of its groups, or it encroaches and // the agent, one of its groups, or it encroaches and

View File

@ -2854,7 +2854,11 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss
if(entry->isState(LLVOCacheEntry::ACTIVE)) if(entry->isState(LLVOCacheEntry::ACTIVE))
{ {
((LLDrawable*)entry->getEntry()->getDrawable())->getVObj()->loadFlags(flags); LLDrawable* drawable = (LLDrawable*)entry->getEntry()->getDrawable();
if (drawable && drawable->getVObj())
{
drawable->getVObj()->loadFlags(flags);
}
return true; return true;
} }

View File

@ -1867,15 +1867,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
U32 max_core_count = gSavedSettings.getU32("EmulateCoreCount"); U32 max_core_count = gSavedSettings.getU32("EmulateCoreCount");
F32 max_gl_version = gSavedSettings.getF32("RenderMaxOpenGLVersion"); F32 max_gl_version = gSavedSettings.getF32("RenderMaxOpenGLVersion");
LLControlVariable* vram_control = gSavedSettings.getControl("RenderMaxVRAMBudget");
U32 max_vram = vram_control->getValue().asInteger();
mMaxVRAMControlConnection = vram_control->getSignal()->connect(
[this](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val)
{
if (mWindow) mWindow->setMaxVRAMMegabytes(new_val.asInteger());
});
mWindow = LLWindowManager::createWindow(this, mWindow = LLWindowManager::createWindow(this,
p.title, p.name, p.x, p.y, p.width, p.height, 0, p.title, p.name, p.x, p.y, p.width, p.height, 0,
p.fullscreen, p.fullscreen,
@ -1885,7 +1876,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
p.ignore_pixel_depth, p.ignore_pixel_depth,
0, 0,
max_core_count, max_core_count,
max_vram,
max_gl_version); //don't use window level anti-aliasing max_gl_version); //don't use window level anti-aliasing
if (NULL == mWindow) if (NULL == mWindow)
@ -2436,8 +2426,6 @@ LLViewerWindow::~LLViewerWindow()
LLViewerShaderMgr::releaseInstance(); LLViewerShaderMgr::releaseInstance();
LLViewerShaderMgr::sInitialized = false; LLViewerShaderMgr::sInitialized = false;
} }
mMaxVRAMControlConnection.disconnect();
} }

View File

@ -550,8 +550,6 @@ private:
// Object temporarily hovered over while dragging // Object temporarily hovered over while dragging
LLPointer<LLViewerObject> mDragHoveredObject; LLPointer<LLViewerObject> mDragHoveredObject;
boost::signals2::connection mMaxVRAMControlConnection;
static LLTrace::SampleStatHandle<> sMouseVelocityStat; static LLTrace::SampleStatHandle<> sMouseVelocityStat;
}; };

View File

@ -306,7 +306,7 @@ public:
bool isReflectionProbe() const override; bool isReflectionProbe() const override;
F32 getReflectionProbeAmbiance() const; F32 getReflectionProbeAmbiance() const;
F32 getReflectionProbeNearClip() const; F32 getReflectionProbeNearClip() const;
bool getReflectionProbeIsBox() const; bool getReflectionProbeIsBox() const override;
bool getReflectionProbeIsDynamic() const; bool getReflectionProbeIsDynamic() const;
bool getReflectionProbeIsMirror() const; bool getReflectionProbeIsMirror() const;

View File

@ -10229,7 +10229,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar, bool preview_avatar, bool
result.clear(); result.clear();
grabReferences(result); grabReferences(result);
if (!avatar || !avatar->mDrawable) if (!avatar || avatar->isDead() || !avatar->mDrawable)
{ {
LL_WARNS_ONCE("AvatarRenderPipeline") << "Avatar is " << (avatar ? "not drawable" : "null") << LL_ENDL; LL_WARNS_ONCE("AvatarRenderPipeline") << "Avatar is " << (avatar ? "not drawable" : "null") << LL_ENDL;
return; return;

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater <floater
height="400" height="411"
layout="topleft" layout="topleft"
name="prefs_graphics_advanced" name="prefs_graphics_advanced"
help_topic="Preferences_Graphics_Advanced" help_topic="Preferences_Graphics_Advanced"
@ -545,7 +545,7 @@
</text> </text>
<view_border <view_border
bevel_style="in" bevel_style="in"
height="322" height="357"
layout="topleft" layout="topleft"
left="385" left="385"
name="vert_border" name="vert_border"
@ -889,7 +889,7 @@
layout="topleft" layout="topleft"
left="13" left="13"
name="horiz_border" name="horiz_border"
top="338" top="373"
top_delta="5" top_delta="5"
width="774"/> width="774"/>
<button <button
@ -899,7 +899,7 @@
layout="topleft" layout="topleft"
left="20" left="20"
name="Defaults" name="Defaults"
top_delta="20" top_delta="7"
width="210"> width="210">
<button.commit_callback <button.commit_callback
function="Pref.HardwareDefaults" /> function="Pref.HardwareDefaults" />