Beispiel #1
0
 public static void Initialize()
 {
     ShaderKeywords.SetKeywordName(
         (int)ShaderKeyword.ENABLE_MAIN_COLOR, "ENABLE_MAIN_COLOR");
     ShaderKeywords.SetKeywordName(
         (int)ShaderKeyword.ENABLE_RIM, "ENABLE_RIM");
 }
Beispiel #2
0
        private void OnWillRenderObject()
        {
            if (this.materials == null)
            {
                return;
            }

            ShaderKeywords usedKeyword = this.keywords;

            var materialsApl = this.AppliedMaterials;

            for (int i = 0; i < this.materials.Length; ++i)
            {
                var mat = this.materials[i];
                if (mat != null)
                {
                    materialsApl[i] = MaterialCache.Instance.GetMaterial(mat, this.renderQueue, usedKeyword);
                }
                else
                {
                    materialsApl[i] = null;
                }
            }

            var unityRenderer = this.UnityRenderer;

            unityRenderer.sharedMaterials = materialsApl;
            if (this.propertyBlock != null)
            {
                unityRenderer.SetPropertyBlock(this.propertyBlock);
            }
        }
Beispiel #3
0
        internal Material GetMaterial(
            Material origin,
            int renderQueue,
            ShaderKeywords keywords)
        {
            CacheKey key;

            key.MaterialID  = origin.GetInstanceID();
            key.RenderQueue = renderQueue;
            key.Keywords    = keywords;

            Material material;

            if (this.cache.TryGetValue(key, out material))
            {
                if (material != null)
                {
                    return(material);
                }

                this.cache.Remove(key);
            }

            material           = new Material(origin);
            material.hideFlags = HideFlags.DontSave;
            if (renderQueue != -1)
            {
                material.renderQueue = (int)renderQueue;
            }

            foreach (var k in key.Keywords)
            {
                string keyword = ShaderKeywords.GetKeywordName(k);
                material.EnableKeyword(keyword);
#if UNITY_EDITOR
                material.name += "[" + keyword + "]";
#endif
            }

            this.cache.Add(key, material);

            return(material);
        }
Beispiel #4
0
 public bool Equals(ShaderKeywords other)
 {
     return(this.keywords == other.keywords);
 }
Beispiel #5
0
 public void Merge(ShaderKeywords keywords)
 {
     this.keywords |= keywords.keywords;
 }