diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-07-02 13:36:43 +0000 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2020-12-10 23:17:07 +0200 | 
| commit | 5691d302ef876a7e6fb6861441f14e5e7f0c7735 (patch) | |
| tree | a87a93f40ca50645a194931c3bf641f01bcaf3f5 /indra/llprimitive | |
| parent | bb4d02446fa215520a11f219ebca453d2dea0388 (diff) | |
SL-12069 Issues with bakes-on-mesh and alpha modes
Diffstat (limited to 'indra/llprimitive')
| -rw-r--r-- | indra/llprimitive/llmaterial.cpp | 40 | ||||
| -rw-r--r-- | indra/llprimitive/llmaterial.h | 11 | 
2 files changed, 50 insertions, 1 deletions
| diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp index a219ac1450..a1bfc4edd9 100644 --- a/indra/llprimitive/llmaterial.cpp +++ b/indra/llprimitive/llmaterial.cpp @@ -28,6 +28,8 @@  #include "llmaterial.h" +#include "../llrender/llglheaders.h" +  /**   * Materials cap parameters   */ @@ -105,6 +107,8 @@ LLMaterial::LLMaterial()      , mSpecularLightExponent(LLMaterial::DEFAULT_SPECULAR_LIGHT_EXPONENT)      , mEnvironmentIntensity(LLMaterial::DEFAULT_ENV_INTENSITY)      , mDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND) +    , mDiffuseFormatPrimary(GL_RGBA) +    , mDiffuseBaked(false)      , mAlphaMaskCutoff(0)  {  } @@ -311,6 +315,20 @@ void LLMaterial::setEnvironmentIntensity(U8 intensity)      mEnvironmentIntensity = intensity;  } +U8 LLMaterial::getDiffuseAlphaModeRender() const +{ +    if (mDiffuseBaked +        || mDiffuseFormatPrimary == GL_RGBA +        || mDiffuseFormatPrimary == GL_ALPHA) +    { +        return mDiffuseAlphaMode; +    } +    else +    { +        return DIFFUSE_ALPHA_MODE_NONE; +    } +} +  U8 LLMaterial::getDiffuseAlphaMode() const  {      return mDiffuseAlphaMode; @@ -321,6 +339,26 @@ void LLMaterial::setDiffuseAlphaMode(U8 alpha_mode)      mDiffuseAlphaMode = alpha_mode;  } +U32 LLMaterial::getDiffuseFormatPrimary() const +{ +    return mDiffuseFormatPrimary; +} + +void LLMaterial::setDiffuseFormatPrimary(U32 format_primary) +{ +    mDiffuseFormatPrimary = format_primary; +} + +bool LLMaterial::getIsDiffuseBaked() const +{ +    return mDiffuseBaked; +} + +void LLMaterial::setDiffuseBaked(bool baked) +{ +    mDiffuseBaked = baked; +} +  U8 LLMaterial::getAlphaMaskCutoff() const  {      return mAlphaMaskCutoff; @@ -437,7 +475,7 @@ U32 LLMaterial::getShaderMask(U32 alpha_mode)      }      else      { -        ret = getDiffuseAlphaMode(); +        ret = getDiffuseAlphaModeRender();      }      llassert(ret < SHADER_COUNT); diff --git a/indra/llprimitive/llmaterial.h b/indra/llprimitive/llmaterial.h index d58b7ee812..1207917568 100644 --- a/indra/llprimitive/llmaterial.h +++ b/indra/llprimitive/llmaterial.h @@ -115,8 +115,17 @@ public:      void        setSpecularLightExponent(U8 exponent);      U8          getEnvironmentIntensity() const;      void        setEnvironmentIntensity(U8 intensity); + +    // getDiffuseAlphaModeRender takes into account if image supports alpha +    // and returns value apropriate for render +    // getDiffuseAlphaMode() returns value as is +    U8          getDiffuseAlphaModeRender() const;      U8          getDiffuseAlphaMode() const;      void        setDiffuseAlphaMode(U8 alpha_mode); +    U32         getDiffuseFormatPrimary() const; +    void        setDiffuseFormatPrimary(U32 format_primary); +    bool        getIsDiffuseBaked() const; +    void        setDiffuseBaked(bool baked);      U8          getAlphaMaskCutoff() const;      void        setAlphaMaskCutoff(U8 cutoff); @@ -147,6 +156,8 @@ protected:      U8          mSpecularLightExponent;      U8          mEnvironmentIntensity;      U8          mDiffuseAlphaMode; +    U32         mDiffuseFormatPrimary; // value from texture, LLGLenum, is not included in fromLLSD/asLLSD +    bool        mDiffuseBaked; // is not included in fromLLSD/asLLSD      U8          mAlphaMaskCutoff;  }; | 
