private void DrawMaterial(Material m) { eGUI.LabelBold(m.name); var shader = m.shader; if (shader == null) { return; } if (shader != _cachedShader) { _cachedShader = shader; _cachedProperties = new ShaderPropertyInfo[ShaderUtil.GetPropertyCount(shader)]; for (var i = 0; i < _cachedProperties.Length; i++) { _cachedProperties[i] = new ShaderPropertyInfo { name = ShaderUtil.GetPropertyName(shader, i), type = ShaderUtil.GetPropertyType(shader, i) } } ; } eGUI.ComboEditor(ref _target.propertyName, "Property", _cachedProperties.Where(p => (byte)p.type == (byte)_target.propertyType).Select(p => p.name).ToArray()); } }
// Caches the list of properties public static List <ShaderPropertyInfo> GetShaderProperties(Shader s) { if (shaderProps.ContainsKey(s.GetInstanceID())) { return(shaderProps[s.GetInstanceID()]); } var res = new List <ShaderPropertyInfo>(); var pc = ShaderUtil.GetPropertyCount(s); for (var i = 0; i < pc; i++) { var sp = new ShaderPropertyInfo(); sp.property = ShaderUtil.GetPropertyName(s, i); sp.type = (ShaderPropertyType)ShaderUtil.GetPropertyType(s, i); sp.description = ShaderUtil.GetPropertyDescription(s, i); if (sp.type == ShaderPropertyType.Range) { sp.rangeMin = ShaderUtil.GetRangeLimits(s, i, 1); sp.rangeMax = ShaderUtil.GetRangeLimits(s, i, 2); } res.Add(sp); } return(shaderProps[s.GetInstanceID()] = res); }