diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2024-09-30 18:28:00 +0300 | 
|---|---|---|
| committer | Andrey Kleshchev <117672381+akleshchev@users.noreply.github.com> | 2024-10-28 16:47:19 +0200 | 
| commit | 200a196d31b0dd53ffc0acec31c8ec777aabc786 (patch) | |
| tree | 103727d499f049a4c519e9b49079049ae9f399bd | |
| parent | b1fb2fba7078fe1b1f2fec9b57561f37d51f599a (diff) | |
viewer#2883 Regenerate font's matrix and depth instead of loading
to fix issues with nametags and window resizes
| -rw-r--r-- | indra/llrender/llfontgl.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llfontvertexbuffer.cpp | 11 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 24 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.h | 1 | 
4 files changed, 35 insertions, 3 deletions
| diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 94daba0817..4c9a062246 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -404,7 +404,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons      {          // recursively render ellipses at end of string          // we've already reserved enough room -        gGL.pushUIMatrix();          static LLWString elipses_wstr(utf8string_to_wstring(std::string("...")));          render(elipses_wstr,                  0, @@ -417,7 +416,6 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons                  right_x,                  false,                  use_color); -        gGL.popUIMatrix();      }      gGL.popUIMatrix(); diff --git a/indra/llrender/llfontvertexbuffer.cpp b/indra/llrender/llfontvertexbuffer.cpp index 32c8ddc598..5bd1ca5eed 100644 --- a/indra/llrender/llfontvertexbuffer.cpp +++ b/indra/llrender/llfontvertexbuffer.cpp @@ -213,6 +213,17 @@ void LLFontVertexBuffer::renderBuffers()      gGL.flush(); // deliberately empty pending verts      gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);      gGL.pushUIMatrix(); + +    gGL.loadUIIdentity(); + +    // Depth translation, so that floating text appears 'in-world' +    // and is correctly occluded. +    gGL.translatef(0.f, 0.f, LLFontGL::sCurDepth); +    gGL.setSceneBlendType(LLRender::BT_ALPHA); + +    // Note: ellipses should technically be covered by push/load/translate of their own +    // but it's more complexity, values do not change, skipping doesn't appear to break +    // anything, so we can skip that until it proves to cause issues.      for (LLVertexBufferData& buffer : mBufferList)      {          buffer.draw(); diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 6f4828397a..12ae36f4bb 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -604,7 +604,7 @@ public:  static LLVBOPool* sVBOPool = nullptr; -void LLVertexBufferData::draw() +void LLVertexBufferData::drawWithMatrix()  {      if (!mVB)      { @@ -642,6 +642,28 @@ void LLVertexBufferData::draw()      gGL.popMatrix();  } +void LLVertexBufferData::draw() +{ +    if (!mVB) +    { +        llassert(false); +        // Not supposed to happen, check buffer generation +        return; +    } + +    if (mTexName) +    { +        gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mTexName); +    } +    else +    { +        gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); +    } + +    mVB->setBuffer(); +    mVB->drawArrays(mMode, 0, mCount); +} +  //============================================================================  //static diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index d4c6fbaf18..375ad76fb8 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -77,6 +77,7 @@ public:          , mModelView(projection)          , mTexture0(texture0)      {} +    void drawWithMatrix();      void draw();      LLPointer<LLVertexBuffer> mVB;      U8 mMode; | 
