diff options
| author | Brad Linden <brad@lindenlab.com> | 2024-06-18 11:55:30 -0700 | 
|---|---|---|
| committer | Brad Linden <brad@lindenlab.com> | 2024-06-18 11:55:30 -0700 | 
| commit | 6393e88ca47998fc5dfae3ce2fc2fd41bf568f49 (patch) | |
| tree | a0c17d1b8e499740934f88780b2043e264eab078 | |
| parent | d0dfffe659b24f5a6bfadc5cc612869e1f08bb93 (diff) | |
| parent | 4e593dcded0ab1cc033a9be4d0489d12a8305a7e (diff) | |
Merge remote-tracking branch 'origin/develop' into brad/webrtc-voice-develop
25 files changed, 154 insertions, 127 deletions
| diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 57faafc042..aa504f51d8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,12 +1,6 @@  name: Build  on: -  workflow_dispatch: -    inputs: -      release_run: -        type: boolean -        description: Do a release of this build -        default: false    pull_request:    push:      branches: ["main", "release/*", "project/*"] @@ -231,6 +225,9 @@ jobs:            elif  [[ "$prefix" == "release" || "$prefix" == "main" ]];            then                export viewer_channel="Second Life Release" +          elif  [[ "$branch" == "develop" ]]; +          then +              export viewer_channel="Second Life Develop"            else                export viewer_channel="Second Life Test"            fi diff --git a/.github/workflows/tag-release.yaml b/.github/workflows/tag-release.yaml new file mode 100644 index 0000000000..b73ec502f1 --- /dev/null +++ b/.github/workflows/tag-release.yaml @@ -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 +            ) diff --git a/indra/llfilesystem/lldir.cpp b/indra/llfilesystem/lldir.cpp index 483ef0fd02..8ee2c309a5 100644 --- a/indra/llfilesystem/lldir.cpp +++ b/indra/llfilesystem/lldir.cpp @@ -876,15 +876,15 @@ std::string LLDir::getTempFilename() const  }  // static -std::string LLDir::getScrubbedFileName(const std::string uncleanFileName) +std::string LLDir::getScrubbedFileName(std::string_view uncleanFileName)  {      std::string name(uncleanFileName);      const std::string illegalChars(getForbiddenFileChars());      // 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; -        while((j = name.find(illegalChars[i])) > std::string::npos) +        std::string::size_type j{ 0 }; +        while ((j = name.find(ch, j)) != std::string::npos)          {              name[j] = '_';          } diff --git a/indra/llfilesystem/lldir.h b/indra/llfilesystem/lldir.h index be82f55e46..b0d2b6aada 100644 --- a/indra/llfilesystem/lldir.h +++ b/indra/llfilesystem/lldir.h @@ -178,7 +178,7 @@ class LLDir      static std::string getDumpLogsDirPath(const std::string &file_name = "");      // 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();      void setDumpDir( const std::string& path ); diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 79979657f1..e22df46b28 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -1099,7 +1099,8 @@ S32 LLGLSLShader::bindTexture(S32 uniform, LLTexture* texture, LLTexUnit::eTextu      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;      } @@ -1120,6 +1121,8 @@ S32 LLGLSLShader::bindTexture(S32 uniform, LLRenderTarget* texture, bool depth,      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;      } @@ -1167,7 +1170,8 @@ S32 LLGLSLShader::unbindTexture(S32 uniform, LLTexUnit::eTextureType mode)      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;      } @@ -1192,7 +1196,8 @@ S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTex      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;      } @@ -1213,7 +1218,8 @@ S32 LLGLSLShader::disableTexture(S32 uniform, LLTexUnit::eTextureType mode, LLTe      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;      }      S32 index = mTexture[uniform]; @@ -1244,7 +1250,8 @@ void LLGLSLShader::uniform1i(U32 index, GLint x)      {          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;          } @@ -1269,7 +1276,8 @@ void LLGLSLShader::uniform1f(U32 index, GLfloat x)      {          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;          } @@ -1304,7 +1312,8 @@ void LLGLSLShader::uniform2f(U32 index, GLfloat x, GLfloat y)      {          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;          } @@ -1330,7 +1339,8 @@ void LLGLSLShader::uniform3f(U32 index, GLfloat x, GLfloat y, GLfloat z)      {          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;          } @@ -1356,7 +1366,8 @@ void LLGLSLShader::uniform4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat      {          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;          } @@ -1382,7 +1393,8 @@ void LLGLSLShader::uniform1iv(U32 index, U32 count, const GLint* v)      {          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;          } @@ -1408,7 +1420,8 @@ void LLGLSLShader::uniform4iv(U32 index, U32 count, const GLint* v)      {          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;          } @@ -1435,7 +1448,8 @@ void LLGLSLShader::uniform1fv(U32 index, U32 count, const GLfloat* v)      {          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;          } @@ -1461,7 +1475,8 @@ void LLGLSLShader::uniform2fv(U32 index, U32 count, const GLfloat* v)      {          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;          } @@ -1487,7 +1502,8 @@ void LLGLSLShader::uniform3fv(U32 index, U32 count, const GLfloat* v)      {          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;          } @@ -1513,7 +1529,8 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)      {          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;          } @@ -1540,7 +1557,8 @@ void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, c      {          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;          } @@ -1560,7 +1578,8 @@ void LLGLSLShader::uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, c      {          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;          } @@ -1580,7 +1599,8 @@ void LLGLSLShader::uniformMatrix3x4fv(U32 index, U32 count, GLboolean transpose,      {          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;          } @@ -1600,7 +1620,8 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c      {          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;          } diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index ebdc9e751d..be9f3895e7 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -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);  #define LL_SHADER_LOADING_WARNS(...) LL_WARNS() -#define LL_SHADER_UNIFORM_ERRS(...)  LL_ERRS("Shader")  #endif diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index 964b173e74..56c393be0f 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -409,7 +409,6 @@ LLWindow* LLWindowManager::createWindow(      bool ignore_pixel_depth,      U32 fsaa_samples,      U32 max_cores, -    U32 max_vram,      F32 max_gl_version)  {      LLWindow* new_window; @@ -427,11 +426,11 @@ LLWindow* LLWindowManager::createWindow(  #elif LL_WINDOWS          new_window = new LLWindowWin32(callbacks,              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          new_window = new LLWindowMacOSX(callbacks,              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      }      else diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index b7bb426654..5e06e665f3 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -164,8 +164,6 @@ public:      virtual F32 getPixelAspectRatio() = 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 afterDialog() {};  // undo whatever was done in beforeDialog() @@ -286,14 +284,14 @@ protected:  // Platform-neutral for accessing the platform specific message box  S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type); -const U32 OSMB_OK = 0; -const U32 OSMB_OKCANCEL = 1; -const U32 OSMB_YESNO = 2; +constexpr U32 OSMB_OK = 0; +constexpr U32 OSMB_OKCANCEL = 1; +constexpr U32 OSMB_YESNO = 2; -const S32 OSBTN_YES = 0; -const S32 OSBTN_NO = 1; -const S32 OSBTN_OK = 2; -const S32 OSBTN_CANCEL = 3; +constexpr S32 OSBTN_YES = 0; +constexpr S32 OSBTN_NO = 1; +constexpr S32 OSBTN_OK = 2; +constexpr S32 OSBTN_CANCEL = 3;  //  // LLWindowManager @@ -313,7 +311,6 @@ public:          bool ignore_pixel_depth = false,          U32 fsaa_samples = 0,          U32 max_cores = 0, -        U32 max_vram = 0,          F32 max_gl_version = 4.6f);      static bool destroyWindow(LLWindow* window);      static bool isWindowValid(LLWindow *window); @@ -329,6 +326,4 @@ extern const S32 gURLProtocolWhitelistCount;  extern const std::string gURLProtocolWhitelist[];  //extern const std::string gURLProtocolWhitelistHandler[]; -void simpleEscapeString ( std::string& stringIn  ); -  #endif // _LL_window_h_ diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h index 32c12b0d47..5696b69a59 100644 --- a/indra/llwindow/llwindowheadless.h +++ b/indra/llwindow/llwindowheadless.h @@ -101,8 +101,6 @@ public:      /*virtual*/ F32 getPixelAspectRatio() override { return 1.0f; }      /*virtual*/ void setNativeAspectRatio(F32 ratio) override {} -    void setMaxVRAMMegabytes(U32 max_vram) override {} -      /*virtual*/ void *getPlatformWindow() override { return 0; }      /*virtual*/ void bringToFront() override {} diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index cd00f4d33c..80001b14ee 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -122,8 +122,7 @@ LLWindowMacOSX::LLWindowMacOSX(LLWindowCallbacks* callbacks,                                 bool fullscreen, bool clearBg,                                 bool enable_vsync, bool use_gl,                                 bool ignore_pixel_depth, -                               U32 fsaa_samples, -                               U32 max_vram) +                               U32 fsaa_samples)      : LLWindow(NULL, fullscreen, flags)  {      // *HACK: During window construction we get lots of OS events for window diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h index 3be89c255a..f5b6441746 100644 --- a/indra/llwindow/llwindowmacosx.h +++ b/indra/llwindow/llwindowmacosx.h @@ -100,8 +100,6 @@ public:      F32 getPixelAspectRatio() override;      void setNativeAspectRatio(F32 ratio) override { mOverrideAspectRatio = ratio; } -    virtual void setMaxVRAMMegabytes(U32 max_vram) override {} -      void beforeDialog() 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,          bool fullscreen, bool clearBg, bool enable_vsync, bool use_gl,          bool ignore_pixel_depth, -        U32 fsaa_samples, -        U32 max_vram); +        U32 fsaa_samples);          ~LLWindowMacOSX();      void    initCursors(); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 3d349b2080..f0f7e03691 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -404,7 +404,6 @@ struct LLWindowWin32::LLWindowWin32Thread : public LL::ThreadPool      using FuncType = std::function<void()>;      // call GetMessage() and pull enqueue messages for later processing -    void gatherInput();      HWND mWindowHandleThrd = NULL;      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      bool mGLReady = 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,                               U32 fsaa_samples,                               U32 max_cores, -                             U32 max_vram,                               F32 max_gl_version)      :      LLWindow(callbacks, fullscreen, flags), @@ -434,7 +430,6 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,  {      sMainThreadId = LLThread::currentID();      mWindowThread = new LLWindowWin32Thread(); -    mWindowThread->mMaxVRAM = max_vram;      //MAINT-516 -- force a load of opengl32.dll just in case windows went sideways      LoadLibrary(L"opengl32.dll"); @@ -4545,15 +4540,6 @@ std::vector<std::string> LLWindowWin32::getDynamicFallbackFontList()      // Fonts previously in getFontListSans() have moved to fonts.xml.      return std::vector<std::string>();  } - -void LLWindowWin32::setMaxVRAMMegabytes(U32 max_vram) -{ -    if (mWindowThread) -    { -        mWindowThread->mMaxVRAM = max_vram; -    } -} -  #endif // LL_WINDOWS  inline LLWindowWin32::LLWindowWin32Thread::LLWindowWin32Thread() diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index 82541ace6e..287402faa0 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -108,8 +108,6 @@ public:      /*virtual*/ F32 getPixelAspectRatio();      /*virtual*/ void setNativeAspectRatio(F32 ratio) { mOverrideAspectRatio = ratio; } -    /*virtual*/ void setMaxVRAMMegabytes(U32 max_vram) override; -      /*virtual*/ bool dialogColorPicker(F32 *r, F32 *g, F32 *b );      /*virtual*/ void *getPlatformWindow(); @@ -142,11 +140,10 @@ protected:      LLWindowWin32(LLWindowCallbacks* callbacks,          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 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();      void    initCursors(); -    void    initInputDevices();      HCURSOR loadColorCursor(LPCTSTR name);      bool    isValid();      void    moveWindow(const LLCoordScreen& position,const LLCoordScreen& size); @@ -163,7 +160,6 @@ protected:      bool    shouldPostQuit() { return mPostQuit; } -    void    fillCompositionForm(const LLRect& bounds, COMPOSITIONFORM *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    fillCompositionLogfont(LOGFONT *logfont); @@ -178,10 +174,8 @@ protected:      //      bool    getClientRectInScreenSpace(RECT* rectp); -    void    updateJoystick( );      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 LPWSTR gIconResource; -static void handleMessage( const MSG& msg ); -  S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 type);  #endif //LL_LLWINDOWWIN32_H diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 9ba4f7f300..739975eab4 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -756,9 +756,12 @@ void LLRenderPass::pushGLTFBatch(LLDrawInfo& params)  {      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); diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp index 79c07d8c09..31fd6f3f07 100644 --- a/indra/newview/llreflectionmap.cpp +++ b/indra/newview/llreflectionmap.cpp @@ -251,32 +251,27 @@ bool LLReflectionMap::getBox(LLMatrix4& box)      if (mViewerObject)      {          LLVolume* volume = mViewerObject->getVolume(); -        if (volume) +        if (volume && mViewerObject->getReflectionProbeIsBox())          { -            LLVOVolume* vobjp = (LLVOVolume*)mViewerObject; - -            if (vobjp->getReflectionProbeIsBox()) +            glh::matrix4f mv(gGLModelView); +            glh::matrix4f scale; +            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); -                glh::matrix4f scale; -                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); +                // object to agent space (no scale) +                glh::matrix4f rm((F32*)mViewerObject->mDrawable->getWorldMatrix().mMatrix); -                    // construct object to camera space (with scale) -                    mv = mv * rm * scale; +                // construct object to camera space (with scale) +                mv = mv * rm * scale; -                    // inverse is camera space to object unit cube -                    mv = mv.inverse(); +                // inverse is camera space to object unit cube +                mv = mv.inverse(); -                    box = LLMatrix4(mv.m); +                box = LLMatrix4(mv.m); -                    return true; -                } +                return true;              }          }      } diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp index c3dc07f357..a571b5544b 100644 --- a/indra/newview/llversioninfo.cpp +++ b/indra/newview/llversioninfo.cpp @@ -135,7 +135,7 @@ LLVersionInfo::ViewerMaturity LLVersionInfo::getViewerMaturity()      std::string channel = getChannel();      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_release_channel("\\bRelease\\b"); diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index a070711727..ab7953846f 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -94,7 +94,13 @@ LLViewerCamera::LLViewerCamera() : LLCamera()      mZoomSubregion = 1;      mAverageSpeed = 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 ¢er, const LLVector3 &up_direction, const LLVector3 &point_of_interest) @@ -895,10 +901,8 @@ bool LLViewerCamera::isDefaultFOVChanged()      return false;  } -// static -void LLViewerCamera::updateCameraAngle( void* user_data, const LLSD& value) +void LLViewerCamera::updateCameraAngle(const LLSD& value)  { -    LLViewerCamera* self=(LLViewerCamera*)user_data; -    self->setDefaultFOV(value.asReal()); +    setDefaultFOV(value.asReal());  } diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h index 6d8fb2a520..a204b85d88 100644 --- a/indra/newview/llviewercamera.h +++ b/indra/newview/llviewercamera.h @@ -43,6 +43,7 @@ class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton<LLViewerC      LL_ALIGN_NEW  public:      LLViewerCamera(); +    ~LLViewerCamera();      typedef enum      { @@ -65,7 +66,7 @@ public:                                  const LLVector3 &point_of_interest);      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);      const LLMatrix4 &getProjection() const; @@ -125,6 +126,8 @@ protected:      F32                 mZoomFactor;      S16                 mZoomSubregion; +    boost::signals2::connection mCameraAngleChangedSignal; +  public:  }; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index b96a1a6644..09584d22a8 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -266,6 +266,7 @@ public:      virtual bool isRiggedMesh() const               { return false; }      virtual bool hasLightTexture() 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      // the agent, one of its groups, or it encroaches and diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 87eddefcba..19a1990665 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2854,7 +2854,11 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss              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;              } diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 70aee2dc43..cfa12bf178 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1867,15 +1867,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)      U32 max_core_count = gSavedSettings.getU32("EmulateCoreCount");      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,          p.title, p.name, p.x, p.y, p.width, p.height, 0,          p.fullscreen, @@ -1885,7 +1876,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)          p.ignore_pixel_depth,          0,          max_core_count, -        max_vram,          max_gl_version); //don't use window level anti-aliasing      if (NULL == mWindow) @@ -2436,8 +2426,6 @@ LLViewerWindow::~LLViewerWindow()          LLViewerShaderMgr::releaseInstance();          LLViewerShaderMgr::sInitialized = false;      } - -    mMaxVRAMControlConnection.disconnect();  } diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 5cd6aacdb2..4a6b901b33 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -550,8 +550,6 @@ private:      // Object temporarily hovered over while dragging      LLPointer<LLViewerObject>   mDragHoveredObject; -    boost::signals2::connection mMaxVRAMControlConnection; -      static LLTrace::SampleStatHandle<>  sMouseVelocityStat;  }; diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index a004dab8c9..07e02e042c 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -306,7 +306,7 @@ public:      bool isReflectionProbe() const override;      F32 getReflectionProbeAmbiance() const;      F32 getReflectionProbeNearClip() const; -    bool getReflectionProbeIsBox() const; +    bool getReflectionProbeIsBox() const override;      bool getReflectionProbeIsDynamic() const;      bool getReflectionProbeIsMirror() const; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4819ea4346..f9ff8217af 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -10229,7 +10229,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar, bool preview_avatar, bool      result.clear();      grabReferences(result); -    if (!avatar || !avatar->mDrawable) +    if (!avatar || avatar->isDead() || !avatar->mDrawable)      {          LL_WARNS_ONCE("AvatarRenderPipeline") << "Avatar is " << (avatar ? "not drawable" : "null") << LL_ENDL;          return; diff --git a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml index cc4f80a15c..a80b1e1c13 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml @@ -1,6 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <floater -  height="400" +  height="411"    layout="topleft"    name="prefs_graphics_advanced"    help_topic="Preferences_Graphics_Advanced" @@ -545,7 +545,7 @@    </text>     <view_border        bevel_style="in" -      height="322" +      height="357"        layout="topleft"        left="385"        name="vert_border" @@ -889,7 +889,7 @@        layout="topleft"        left="13"        name="horiz_border" -      top="338" +      top="373"        top_delta="5"        width="774"/>    <button @@ -899,7 +899,7 @@      layout="topleft"      left="20"      name="Defaults" -    top_delta="20" +    top_delta="7"      width="210">      <button.commit_callback        function="Pref.HardwareDefaults" /> | 
