diff options
| author | Rye Mutt <rye@alchemyviewer.org> | 2024-08-24 00:55:32 -0400 | 
|---|---|---|
| committer | Rye Mutt <rye@alchemyviewer.org> | 2024-08-24 00:55:32 -0400 | 
| commit | cbca17825614d18a96994c94ec0c38e9d8e812cf (patch) | |
| tree | dec5155bdef09d3a5e8248754b6884c0ce0eeff7 /indra/llrender | |
| parent | 45b2d69446a68f5b104bd61055214d17da920fae (diff) | |
Add Contrast Adaptive Sharpening post process effect(#2399)
Diffstat (limited to 'indra/llrender')
| -rw-r--r-- | indra/llrender/llglslshader.cpp | 46 | ||||
| -rw-r--r-- | indra/llrender/llglslshader.h | 2 | 
2 files changed, 48 insertions, 0 deletions
| diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index e76a30a954..daa768e8ab 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -1552,6 +1552,34 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)      }  } +void LLGLSLShader::uniform4uiv(U32 index, U32 count, const GLuint* v) +{ +    LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; +    llassert(sCurBoundShaderPtr == this); + +    if (mProgramObject) +    { +        if (mUniform.size() <= index) +        { +            LL_WARNS_ONCE("Shader") << "Uniform index out of bounds. Size: " << (S32)mUniform.size() << " index: " << index << LL_ENDL; +            llassert(false); +            return; +        } + +        if (mUniform[index] >= 0) +        { +            const auto& iter = mValue.find(mUniform[index]); +            LLVector4 vec((F32)v[0], (F32)v[1], (F32)v[2], (F32)v[3]); +            if (iter == mValue.end() || shouldChange(iter->second, vec) || count != 1) +            { +                LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; +                glUniform4uiv(mUniform[index], count, v); +                mValue[mUniform[index]] = vec; +            } +        } +    } +} +  void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v)  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; @@ -1886,6 +1914,24 @@ void LLGLSLShader::uniform4fv(const LLStaticHashedString& uniform, U32 count, co      }  } +void LLGLSLShader::uniform4uiv(const LLStaticHashedString& uniform, U32 count, const GLuint* v) +{ +    LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; +    GLint location = getUniformLocation(uniform); + +    if (location >= 0) +    { +        LLVector4 vec((F32)v[0], (F32)v[1], (F32)v[2], (F32)v[3]); +        const auto& iter = mValue.find(location); +        if (iter == mValue.end() || shouldChange(iter->second, vec) || count != 1) +        { +            LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; +            glUniform4uiv(location, count, v); +            mValue[location] = vec; +        } +    } +} +  void LLGLSLShader::uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat* v)  {      LL_PROFILE_ZONE_SCOPED_CATEGORY_SHADER; diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 86e5625dca..f3c41cd819 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -208,6 +208,7 @@ public:      void uniform2fv(U32 index, U32 count, const GLfloat* v);      void uniform3fv(U32 index, U32 count, const GLfloat* v);      void uniform4fv(U32 index, U32 count, const GLfloat* v); +    void uniform4uiv(U32 index, U32 count, const GLuint* v);      void uniform2i(const LLStaticHashedString& uniform, GLint i, GLint j);      void uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v);      void uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, const GLfloat* v); @@ -223,6 +224,7 @@ public:      void uniform2fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v);      void uniform3fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v);      void uniform4fv(const LLStaticHashedString& uniform, U32 count, const GLfloat* v); +    void uniform4uiv(const LLStaticHashedString& uniform, U32 count, const GLuint* v);      void uniformMatrix4fv(const LLStaticHashedString& uniform, U32 count, GLboolean transpose, const GLfloat* v);      void setMinimumAlpha(F32 minimum); | 
