Ejemplo n.º 1
0
        private Material _GetUIMaterial(BlendMode blendMode)
        {
            //normal model, return the parent shareMaterial
            if (blendMode == BlendMode.Normal)
            {
                return((this.parent as UnityTextureAtlasData).uiTexture);
            }

            var blendModeStr = "UI_" + blendMode.ToString();

            if (this._cacheBlendModeMats.ContainsKey(blendModeStr))
            {
                return(this._cacheBlendModeMats[blendModeStr]);
            }

            //framebuffer won't work in the editor mode
#if UNITY_EDITOR
            var newMaterial = new Material(Resources.Load <Shader>(SHADER_PATH + UI_SHADER_GRAP));
#else
            var newMaterial = new Material(Resources.Load <Shader>(SHADER_PATH + UI_SHADER_GRAP));
#endif
            var texture = (this.parent as UnityTextureAtlasData).uiTexture.mainTexture;
            newMaterial.name        = texture.name + "_" + SHADER_GRAP + "_Mat";
            newMaterial.hideFlags   = HideFlags.HideAndDontSave;
            newMaterial.mainTexture = texture;

            this._cacheBlendModeMats.Add(blendModeStr, newMaterial);

            return(newMaterial);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Looks for suitable cached material and creates a new one if needed.
        /// </summary>
        public static Material GetMaterial(ObjectType objectType, RenderMode renderMode = RenderMode.Grab,
                                           BlendMode blendMode = BlendMode.Normal, Shader shader = null)
        {
            // Framebuffer won't work in the editor, so fallback to Grab mode.
            if (Application.isEditor && renderMode == RenderMode.Framebuffer)
            {
                renderMode = RenderMode.Grab;
            }

            var blendMataterial = new BlendMaterial(objectType, renderMode, blendMode);

            // Disable caching for mesh and particle materials, as they are sharing them.
            if (objectType != ObjectType.MeshDefault && objectType != ObjectType.ParticleDefault && cachedMaterials.Exists(m => m.IsEqual(blendMataterial)))
            {
                return(cachedMaterials.Find(m => m.IsEqual(blendMataterial)).Material);
            }
            else
            {
                var mat = new Material(shader ? shader : Resources.Load <Shader>(string.Format("BlendModes/{0}/{1}", objectType, renderMode)));
                mat.hideFlags = HideFlags.HideAndDontSave;
                mat.EnableKeyword("Bm" + blendMode.ToString());

                blendMataterial.Material = mat;

                cachedMaterials.Add(blendMataterial);

                return(mat);
            }
        }
Ejemplo n.º 3
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        if (!isVisible)
        {
            return;
        }

        GUILayout.Space(10);

        EditorGUI.BeginChangeCheck();
        _selectedBlendMode = (BlendMode)EditorGUILayout.EnumPopup("Blend Mode", _selectedBlendMode);
        if (EditorGUI.EndChangeCheck())
        {
            for (int i = 0; i < _targetMaterial.shaderKeywords.Length; i++)
            {
                if (_targetMaterial.shaderKeywords[i].StartsWith("_BM_"))
                {
                    _targetMaterial.DisableKeyword(_targetMaterial.shaderKeywords[i]);
                }
            }
            _targetMaterial.EnableKeyword("_BM_" + _selectedBlendMode.ToString().ToUpper());
            EditorUtility.SetDirty(_targetMaterial);
        }
    }
Ejemplo n.º 4
0
        /// <summary>
        /// Looks for suitable cached material and creates a new one if needed.
        /// </summary>
        public static Material GetMaterial(ObjectType objectType, RenderMode renderMode, BlendMode blendMode, bool selectiveBlending)
        {
            if (blendMode == BlendMode.Normal)
            {
                if (objectType == ObjectType.MeshDefault)
                {
                    var mat = new Material(Shader.Find("Diffuse"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else if (objectType == ObjectType.SpriteDefault)
                {
                    var mat = new Material(Shader.Find("Sprites/Default"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else if (objectType == ObjectType.ParticleDefault)
                {
                    var mat = new Material(Shader.Find("Particles/Additive"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else
                {
                    return(null);
                }
            }

            // Framebuffer won't work in the editor, so fallback to Grab mode.
            if (Application.isEditor && renderMode == RenderMode.Framebuffer)
            {
                renderMode = RenderMode.Grab;
            }

            var blendMataterial = new BlendMaterial(objectType, renderMode, blendMode, selectiveBlending);

            // Disable caching for mesh and particle materials, as they are sharing them.
            if (objectType != ObjectType.MeshDefault && objectType != ObjectType.ParticleDefault && cachedMaterials.Exists(m => m.IsEqual(blendMataterial)))
            {
                return(cachedMaterials.Find(m => m.IsEqual(blendMataterial)).Material);
            }
            else
            {
                var mat = new Material(Resources.Load <Shader>(string.Format("BlendModes/{0}/{1}", objectType, renderMode)));
                mat.hideFlags = HideFlags.HideAndDontSave;
                mat.EnableKeyword("BM" + blendMode.ToString());
                mat.SetFloat("_IsSelectiveBlendingActive", selectiveBlending ? 1 : 0);

                blendMataterial.Material = mat;

                cachedMaterials.Add(blendMataterial);

                return(mat);
            }
        }
Ejemplo n.º 5
0
        public static Material GetMaterial(ObjectType objectType, RenderMode renderMode, BlendMode blendMode)
        {
            if (blendMode == BlendMode.Normal)
            {
                if (objectType == ObjectType.MeshDefault)
                {
                    var mat = new Material(Shader.Find("Diffuse"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return mat;
                }
                else if (objectType == ObjectType.SpriteDefault)
                {
                    var mat = new Material(Shader.Find("Sprites/Default"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return mat;
                }
                else if (objectType == ObjectType.ParticleDefault)
                {
                    var mat = new Material(Shader.Find("Particles/Additive"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return mat;
                }
                else return null;
            }

            // Framebuffer won't work in the editor, so fallback to Grab mode.
            if (Application.isEditor && renderMode == RenderMode.Framebuffer) renderMode = RenderMode.Grab;

            // Disable caching for mesh and particle materials, as they are sharing them.
            if (objectType != ObjectType.MeshDefault && objectType != ObjectType.ParticleDefault &&
                cachedMaterials.ContainsKey(objectType) &&
                cachedMaterials[objectType].ContainsKey(renderMode) &&
                cachedMaterials[objectType][renderMode].ContainsKey(blendMode))
                return cachedMaterials[objectType][renderMode][blendMode];
            else
            {
                var mat = new Material(Resources.Load<Shader>(string.Format("BlendModes/{0}/{1}", objectType, renderMode)));
                mat.hideFlags = HideFlags.HideAndDontSave;
                mat.EnableKeyword("BM" + blendMode.ToString());

                if (!cachedMaterials.ContainsKey(objectType)) cachedMaterials.Add(objectType, new Dictionary<RenderMode, Dictionary<BlendMode, Material>>());
                if (!cachedMaterials[objectType].ContainsKey(renderMode)) cachedMaterials[objectType].Add(renderMode, new Dictionary<BlendMode, Material>());
                if (!cachedMaterials[objectType][renderMode].ContainsKey(blendMode)) cachedMaterials[objectType][renderMode].Add(blendMode, mat);

                return mat;
            }
        }
Ejemplo n.º 6
0
        public void StepBlendMode(int inc, bool registerUndo)
        {
            int nextBlendIndex = (int)currentBlendMode + inc;



restart:
            foreach (int i in skipEnum)
            {
                if (nextBlendIndex == i)
                {
                    nextBlendIndex += inc;
                    goto restart;                     // Watch out for raptors
                }
            }


            if (nextBlendIndex == -1)
            {
                BlendMode nextBlendMode = (BlendMode)maxEnum;
                if (registerUndo)
                {
                    UndoRecord("switch blend mode to " + nextBlendMode.ToString());
                }
                currentBlendMode = nextBlendMode;
                return;
            }
            else if (nextBlendIndex > maxEnum)
            {
                BlendMode nextBlendMode = (BlendMode)0;
                if (registerUndo)
                {
                    UndoRecord("switch blend mode to " + nextBlendMode.ToString());
                }
                currentBlendMode = nextBlendMode;
                return;
            }

            if (registerUndo)
            {
                UndoRecord("switch blend mode to " + (BlendMode)nextBlendIndex);
            }

            currentBlendMode = (BlendMode)nextBlendIndex;
        }
Ejemplo n.º 7
0
        public virtual bool Serialize(ref object writer)
        {
            if (writer is JObject)
            {
                JObject jmat = writer as JObject;

                jmat.Add("Blend", BlendMode.ToString());
                //jmat.Add("Texture", Texture.Keyname);
                jmat.Add("DepthTest", IsDepthTest);
                jmat.Add("Face", FaceMode.ToString());
                jmat.Add("LinkedSubset", LinkedSubsetName.ToLower());
                jmat.Add("DiffColor", CJsonConverter.ConvertColor(DiffuseColor));
            }
            else
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 8
0
        void InitBlendModeMaterial(Material bmMaterial)
        {
            if (bmMaterial == null)
            {
                return;
            }
            bmMaterial.SetTexture("_EffectTex", _effectTexture);
            bmMaterial.SetColor("_EffectColor", _effectColor);
            if (_enableGrayBase)
            {
                bmMaterial.EnableKeyword("GRAY_BASE_ON");
            }
            else
            {
                bmMaterial.DisableKeyword("GRAY_BASE_ON");
            }
            if (_pixelSnap)
            {
                bmMaterial.EnableKeyword("PIXELSNAP_ON");
            }
            else
            {
                bmMaterial.DisableKeyword("PIXELSNAP_ON");
            }

            foreach (string strColorSoloMode in Enum.GetNames(typeof(ColorSoloMode)))
            {
                bmMaterial.DisableKeyword("_COLORSOLO_" + strColorSoloMode.ToUpper());
            }
            bmMaterial.EnableKeyword("_COLORSOLO_" + _colorSoloMode.ToString().ToUpper());

            foreach (string strBlendMode in Enum.GetNames(typeof(BlendMode)))
            {
                bmMaterial.DisableKeyword("_BM_" + strBlendMode.ToUpper());
            }
            bmMaterial.EnableKeyword("_BM_" + _blendMode.ToString().ToUpper());

            _blendModeMaterial.SetTextureScale("_EffectTex", _effectTextureTiling);
            _blendModeMaterial.SetTextureOffset("_EffectTex", _effectTextureOffset);
        }
Ejemplo n.º 9
0
        public XmlElement Save(XmlDocument doc)
        {
            XmlElement me = doc.CreateElement("pass");

            me.SetAttribute("name", Name);
            if (IsSM3.HasValue)
            {
                me.SetAttribute("sm3", IsSM3.Value ? "true" : "false");
            }
            if (IsDesktop.HasValue)
            {
                me.SetAttribute("desktop", IsDesktop.Value ? "true" : "false");
            }
            if (VS != null && VS.Length > 0)
            {
                me.SetAttribute("vs", VS);
            }
            if (PS != null && PS.Length > 0)
            {
                me.SetAttribute("ps", PS);
            }
            if (VSDefines.Count > 0)
            {
                me.SetAttribute("vsdefines", string.Join(" ", VSDefines.ToArray()));
            }
            if (PSDefines.Count > 0)
            {
                me.SetAttribute("psdefines", string.Join(" ", PSDefines.ToArray()));
            }

            me.SetAttribute("lighting", LightMode.ToString().ToLower());
            me.SetAttribute("blend", BlendMode.ToString().ToLower());
            me.SetAttribute("depthtest", DepthTest.ToString().ToLower());
            me.SetAttribute("depthwrite", DepthWrite ? "true" : "false");
            me.SetAttribute("alphamask", AlphaMask ? "true" : "false");

            return(me);
        }
Ejemplo n.º 10
0
        void InitBlendModeMaterial(Material bmMaterial)
        {
            if (bmMaterial == null)
            {
                return;
            }
            bmMaterial.SetColor("_BaseLayerColor", _baseLayerColor);
            bmMaterial.SetColor("_ExtraColor", _extraColor);
            if (_enableGrayBase)
            {
                bmMaterial.EnableKeyword("GRAY_BASE_ON");
            }
            else
            {
                bmMaterial.DisableKeyword("GRAY_BASE_ON");
            }
            if (_pixelSnap)
            {
                bmMaterial.EnableKeyword("PIXELSNAP_ON");
            }
            else
            {
                bmMaterial.DisableKeyword("PIXELSNAP_ON");
            }

            foreach (string strColorSoloMode in Enum.GetNames(typeof(ColorSoloMode)))
            {
                bmMaterial.DisableKeyword("_COLORSOLO_" + strColorSoloMode.ToUpper());
            }

            foreach (string strBlendMode in Enum.GetNames(typeof(BlendMode)))
            {
                bmMaterial.DisableKeyword("_BM_" + strBlendMode.ToUpper());
            }
            bmMaterial.EnableKeyword("_BM_" + _blendMode.ToString().ToUpper());
        }
Ejemplo n.º 11
0
 public string GetBlendString()
 {
     return("Blend " + blendSrc.ToString() + " " + blendDst.ToString());
 }
Ejemplo n.º 12
0
        public static Material GetMaterial(ObjectType objectType, RenderMode renderMode, BlendMode blendMode)
        {
            if (blendMode == BlendMode.Normal)
            {
                if (objectType == ObjectType.MeshDefault)
                {
                    var mat = new Material(Shader.Find("Diffuse"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else if (objectType == ObjectType.SpriteDefault)
                {
                    var mat = new Material(Shader.Find("Sprites/Default"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else if (objectType == ObjectType.ParticleDefault)
                {
                    var mat = new Material(Shader.Find("Particles/Additive"));
                    mat.hideFlags = HideFlags.HideAndDontSave;
                    return(mat);
                }
                else
                {
                    return(null);
                }
            }

            // Framebuffer won't work in the editor, so fallback to Grab mode.
            if (Application.isEditor && renderMode == RenderMode.Framebuffer)
            {
                renderMode = RenderMode.Grab;
            }

            // Disable caching for mesh and particle materials, as they are sharing them.
            if (objectType != ObjectType.MeshDefault && objectType != ObjectType.ParticleDefault &&
                cachedMaterials.ContainsKey(objectType) &&
                cachedMaterials[objectType].ContainsKey(renderMode) &&
                cachedMaterials[objectType][renderMode].ContainsKey(blendMode))
            {
                return(cachedMaterials[objectType][renderMode][blendMode]);
            }
            else
            {
                var mat = new Material(Resources.Load <Shader>(string.Format("BlendModes/{0}/{1}", objectType, renderMode)));
                mat.hideFlags = HideFlags.HideAndDontSave;
                mat.EnableKeyword("BM" + blendMode.ToString());

                if (!cachedMaterials.ContainsKey(objectType))
                {
                    cachedMaterials.Add(objectType, new Dictionary <RenderMode, Dictionary <BlendMode, Material> >());
                }
                if (!cachedMaterials[objectType].ContainsKey(renderMode))
                {
                    cachedMaterials[objectType].Add(renderMode, new Dictionary <BlendMode, Material>());
                }
                if (!cachedMaterials[objectType][renderMode].ContainsKey(blendMode))
                {
                    cachedMaterials[objectType][renderMode].Add(blendMode, mat);
                }

                return(mat);
            }
        }
Ejemplo n.º 13
0
 public virtual void BlendMode(int layer, BlendMode mode, bool deffered = false)
 {
     BlendMode(layer, mode.ToString(), deffered);
 }
Ejemplo n.º 14
0
 public override string GetCurrentModalMode()
 {
     return(currentBlendMode.ToString());
 }