// Token: 0x17000E32 RID: 3634
    public Material this[global::UIDrawCall.Clipping clipping]
    {
        get
        {
            global::UIMaterial.ClippingFlags clippingFlags = (global::UIMaterial.ClippingFlags)(1 << (int)clipping);
            if ((clippingFlags & this.madeMats) != clippingFlags)
            {
                return(this.MakeMaterial(clipping));
            }
            switch (clipping)
            {
            case global::UIDrawCall.Clipping.None:
                return(this.matNone);

            case global::UIDrawCall.Clipping.HardClip:
                return(this.matHardClip);

            case global::UIDrawCall.Clipping.AlphaClip:
                return(this.matAlphaClip);

            case global::UIDrawCall.Clipping.SoftClip:
                return(this.matSoftClip);

            default:
                throw new NotImplementedException();
            }
        }
    }
    // Token: 0x06004AFA RID: 19194 RVA: 0x00121EF8 File Offset: 0x001200F8
    public static global::UIMaterial Create(Material key, bool manageKeyDestruction, global::UIDrawCall.Clipping useAsClipping)
    {
        if (!manageKeyDestruction)
        {
            return(global::UIMaterial.Create(key));
        }
        if (!key)
        {
            return(null);
        }
        global::UIMaterial uimaterial;

        if (global::UIMaterial.g.keyedMaterials.TryGetValue(key, out uimaterial))
        {
            throw new InvalidOperationException("That material is registered and cannot be used with manageKeyDestruction");
        }
        if (global::UIMaterial.g.generatedMaterials.TryGetValue(key, out uimaterial))
        {
            return(uimaterial);
        }
        uimaterial          = ScriptableObject.CreateInstance <global::UIMaterial>();
        uimaterial.key      = key;
        uimaterial.hashCode = ++global::UIMaterial.g.hashCodeIterator;
        if (uimaterial.hashCode == 2147483647)
        {
            global::UIMaterial.g.hashCodeIterator = int.MinValue;
        }
        global::UIMaterial.g.generatedMaterials.Add(key, uimaterial);
        uimaterial.matFirst = key;
        switch (useAsClipping)
        {
        case global::UIDrawCall.Clipping.None:
            uimaterial.matNone = key;
            break;

        case global::UIDrawCall.Clipping.HardClip:
            uimaterial.matHardClip = key;
            break;

        case global::UIDrawCall.Clipping.AlphaClip:
            uimaterial.matAlphaClip = key;
            break;

        case global::UIDrawCall.Clipping.SoftClip:
            uimaterial.matSoftClip = key;
            break;

        default:
            throw new NotImplementedException();
        }
        uimaterial.madeMats = (global::UIMaterial.ClippingFlags)(1 << (int)useAsClipping);
        return(uimaterial);
    }
    // Token: 0x06004B00 RID: 19200 RVA: 0x001220EC File Offset: 0x001202EC
    private static Shader GetClippingShader(Shader original, global::UIDrawCall.Clipping clipping)
    {
        if (!original)
        {
            return(null);
        }
        string text = original.name;

        switch (clipping)
        {
        case global::UIDrawCall.Clipping.None:
        {
            string text2 = text.Replace(" (HardClip)", string.Empty).Replace(" (AlphaClip)", string.Empty).Replace(" (SoftClip)", string.Empty);
            if (text2 == text)
            {
                return(original);
            }
            text = text2;
            break;
        }

        case global::UIDrawCall.Clipping.HardClip:
            if (!global::UIMaterial.ShaderNameDecor(ref text, " (AlphaClip)", " (SoftClip)", " (HardClip)"))
            {
                return(original);
            }
            break;

        case global::UIDrawCall.Clipping.AlphaClip:
            if (!global::UIMaterial.ShaderNameDecor(ref text, " (SoftClip)", " (HardClip)", " (AlphaClip)"))
            {
                return(original);
            }
            break;

        case global::UIDrawCall.Clipping.SoftClip:
            if (!global::UIMaterial.ShaderNameDecor(ref text, " (HardClip)", " (AlphaClip)", " (SoftClip)"))
            {
                return(original);
            }
            break;

        default:
            throw new NotImplementedException();
        }
        Shader shader = Shader.Find(text);

        if (!shader)
        {
            throw new MissingReferenceException("Theres no shader named " + text);
        }
        return(shader);
    }
 // Token: 0x06004B10 RID: 19216 RVA: 0x001227FC File Offset: 0x001209FC
 public void SetPass(int pass)
 {
     if (this.madeMats == (global::UIMaterial.ClippingFlags) 0)
     {
         this.MakeDefaultMaterial();
     }
     for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
     {
         if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
         {
             this.FastGet(clipping).SetPass(pass);
         }
     }
 }
 // Token: 0x06004B0F RID: 19215 RVA: 0x001227AC File Offset: 0x001209AC
 public void SetTextureOffset(string property, Vector2 offset)
 {
     if (this.madeMats == (global::UIMaterial.ClippingFlags) 0)
     {
         this.MakeDefaultMaterial();
     }
     for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
     {
         if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
         {
             this.FastGet(clipping).SetTextureOffset(property, offset);
         }
     }
 }
 // Token: 0x06004B0B RID: 19211 RVA: 0x0012266C File Offset: 0x0012086C
 public void Set(string property, Color color)
 {
     if (this.madeMats == (global::UIMaterial.ClippingFlags) 0)
     {
         this.MakeDefaultMaterial();
     }
     for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
     {
         if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
         {
             this.FastGet(clipping).SetColor(property, color);
         }
     }
 }
 // Token: 0x06004B14 RID: 19220 RVA: 0x00122900 File Offset: 0x00120B00
 private void OnDestroy()
 {
     if (this.madeMats != (global::UIMaterial.ClippingFlags) 0)
     {
         for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
         {
             if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
             {
                 Material material = this.FastGet(clipping);
                 global::UIMaterial.g.generatedMaterials.Remove(material);
                 Object.DestroyImmediate(material);
             }
         }
     }
     global::UIMaterial.g.keyedMaterials.Remove(this.key);
     this.matNone = (this.matFirst = (this.matHardClip = (this.matSoftClip = (this.matAlphaClip = (this.key = null)))));
 }
 // Token: 0x06004B11 RID: 19217 RVA: 0x0012284C File Offset: 0x00120A4C
 public void CopyPropertiesFromMaterial(Material material)
 {
     if (this.madeMats == (global::UIMaterial.ClippingFlags) 0)
     {
         if (material == this.key)
         {
             return;
         }
         this.MakeDefaultMaterial();
     }
     for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
     {
         if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
         {
             this.FastGet(clipping).CopyPropertiesFromMaterial(material);
         }
     }
 }
    // Token: 0x06004B0A RID: 19210 RVA: 0x001225E8 File Offset: 0x001207E8
    public void Set(string property, Vector4 value)
    {
        if (this.madeMats == (global::UIMaterial.ClippingFlags) 0)
        {
            this.MakeDefaultMaterial();
        }
        Vector4 vector;

        vector.x = value.x;
        vector.y = value.y;
        vector.z = (vector.w = 0f);
        for (global::UIDrawCall.Clipping clipping = global::UIDrawCall.Clipping.None; clipping < (global::UIDrawCall.Clipping) 4; clipping++)
        {
            if ((this.madeMats & (global::UIMaterial.ClippingFlags)(1 << (int)clipping)) != (global::UIMaterial.ClippingFlags) 0)
            {
                this.FastGet(clipping).SetVector(property, vector);
            }
        }
    }
    // Token: 0x06004AFE RID: 19198 RVA: 0x0012203C File Offset: 0x0012023C
    private Material FastGet(global::UIDrawCall.Clipping clipping)
    {
        switch (clipping)
        {
        case global::UIDrawCall.Clipping.None:
            return(this.matNone);

        case global::UIDrawCall.Clipping.HardClip:
            return(this.matHardClip);

        case global::UIDrawCall.Clipping.AlphaClip:
            return(this.matAlphaClip);

        case global::UIDrawCall.Clipping.SoftClip:
            return(this.matSoftClip);

        default:
            throw new NotImplementedException();
        }
    }
    // Token: 0x06004B05 RID: 19205 RVA: 0x001222B0 File Offset: 0x001204B0
    private Material MakeMaterial(global::UIDrawCall.Clipping clipping)
    {
        bool     flag = this.madeMats == (global::UIMaterial.ClippingFlags) 0;
        Material material;
        Material material2;

        switch (clipping)
        {
        case global::UIDrawCall.Clipping.None:
        {
            Shader shader = this.key.shader;
            material       = this.matNone;
            material2      = (this.matNone = global::UIMaterial.CreateMaterial(shader));
            this.madeMats |= global::UIMaterial.ClippingFlags.None;
            break;
        }

        case global::UIDrawCall.Clipping.HardClip:
        {
            Shader shader = global::UIMaterial.GetClippingShader(this.key.shader, global::UIDrawCall.Clipping.HardClip);
            material       = this.matHardClip;
            material2      = (this.matHardClip = global::UIMaterial.CreateMaterial(shader));
            this.madeMats |= global::UIMaterial.ClippingFlags.HardClip;
            break;
        }

        case global::UIDrawCall.Clipping.AlphaClip:
        {
            Shader shader = global::UIMaterial.GetClippingShader(this.key.shader, global::UIDrawCall.Clipping.AlphaClip);
            material       = this.matAlphaClip;
            material2      = (this.matAlphaClip = global::UIMaterial.CreateMaterial(shader));
            this.madeMats |= global::UIMaterial.ClippingFlags.AlphaClip;
            break;
        }

        case global::UIDrawCall.Clipping.SoftClip:
        {
            Shader shader = global::UIMaterial.GetClippingShader(this.key.shader, global::UIDrawCall.Clipping.SoftClip);
            material       = this.matSoftClip;
            material2      = (this.matSoftClip = global::UIMaterial.CreateMaterial(shader));
            this.madeMats |= global::UIMaterial.ClippingFlags.SoftClip;
            break;
        }

        default:
            throw new NotImplementedException();
        }
        global::UIMaterial.g.generatedMaterials.Add(material2, this);
        if (flag)
        {
            this.matFirst = material2;
            material2.CopyPropertiesFromMaterial(this.key);
        }
        else
        {
            material2.CopyPropertiesFromMaterial(this.matFirst);
        }
        if (material)
        {
            Object.DestroyImmediate(material);
        }
        return(material2);
    }