public static void CancelSetMaterial(Renderer renderer,CustomShader type) { if (renderer == null) return; CancelSetMaterial(renderer, GetShaderName(type)); }
public static void CancelSetMaterial(Renderer renderer, CustomShader type) { if (renderer == null) { return; } CancelSetMaterial(renderer, GetShaderName(type)); }
public static void SetLightMaterial(Renderer renderer, CustomShader type, Hashtable shaderParams = null) { if (renderer == null) { return; } string shaderName = GetShaderName(type); SetMaterial(renderer, Shader.Find(shaderName), LIGHT_MATERIAL_NAME, shaderParams); }
private static string GetShaderName(CustomShader type) { switch (type) { case CustomShader.OUTLINE_GLOW:return OUTLINE_GLOW; case CustomShader.Edge_GLOW:return Edge_GLOW; default: return LIGHT_SHADER_PATH_1; } }
private static string GetShaderName(CustomShader type) { switch (type) { case CustomShader.OUTLINE_GLOW: return(OUTLINE_GLOW); case CustomShader.Edge_GLOW: return(Edge_GLOW); default: return(LIGHT_SHADER_PATH_1); } }
/// <summary> /// Tries to read import statements for external .FX files /// </summary> /// <param name="xmlEffect">xml effect node</param> /// <param name="material">Material instance to store data in</param> void ReadEffectImport(XmlNode xmlMaterial, XmlNode xmlEffect, ref Material material) { // for now the simplest solution: Simply search for a file path containing ".fx" Match match = Regex.Match(xmlEffect.InnerXml, "\"([^\"]+\\.fx)\""); if (!match.Success) { return; } string filename = match.Groups[1].Value.Replace("%20", " "); if (!Path.IsPathRooted(filename)) { filename = Path.GetDirectoryName(model.SourceFilename) + "\\" + filename; } CustomShader shader = new CustomShader(); shader.Filename = filename; // Set parameters as given in <instance_effect> XmlNode xmlInstanceEffect = xmlMaterial.SelectSingleNode("instance_effect"); if (xmlInstanceEffect == null) { return; } foreach (XmlNode setparam in xmlInstanceEffect.SelectNodes("setparam")) { // Name referencing a shader parameter string name = setparam.GetAttributeString("ref"); // value can be color, vector, single or texture Object value = null; XmlNode valueNode = setparam.FirstChild; switch (valueNode.Name) { case "float": value = XmlUtil.ParseFloats(valueNode.InnerText)[0]; break; case "float3": value = XmlUtil.ParseVector3(valueNode.InnerText); break; case "float4": value = XmlUtil.ParseVector4(valueNode.InnerText); break; case "float4x4": value = XmlUtil.ParseMatrix(valueNode.InnerText); break; case "surface": TextureReference texture = new TextureReference(); texture.TextureChannel = "CHANNEL1"; string imageId = valueNode.SelectSingleNode("init_from").InnerText; // texture/surface -> image XmlNode root = xmlEffect.OwnerDocument.DocumentElement; XmlNode imageInitFrom = root.SelectSingleNode("library_images/image[@id='" + imageId + "']/init_from"); if (imageInitFrom == null) { throw new Exception("Image not found: " + imageId, null); } texture.Filename = imageInitFrom.InnerText.Trim(); texture.Filename = texture.Filename.Replace("file://", ""); if (!Path.IsPathRooted(texture.Filename)) { texture.Filename = Path.GetDirectoryName(model.SourceFilename) + "\\" + texture.Filename; } value = texture; break; } if (value != null) { shader.Parameters.Add(name, value); } } material.Properties.Add(shader); }
public static void SetLightMaterial(Renderer renderer,CustomShader type,Hashtable shaderParams = null) { if (renderer == null) return; string shaderName = GetShaderName(type); SetMaterial(renderer, Shader.Find(shaderName), LIGHT_MATERIAL_NAME, shaderParams); }