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); }
/// <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); } }
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); } }
/// <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); } }
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; } }
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; }
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); }
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); }
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); }
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()); }
public string GetBlendString() { return("Blend " + blendSrc.ToString() + " " + blendDst.ToString()); }
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); } }
public virtual void BlendMode(int layer, BlendMode mode, bool deffered = false) { BlendMode(layer, mode.ToString(), deffered); }
public override string GetCurrentModalMode() { return(currentBlendMode.ToString()); }