示例#1
0
        private void Init(MaterialProperty[] properties)
        {
            //if (drawers != null)
            //    return;

            keywordDrawer = new KeywordDrawer(properties);
            drawers       = new IDrawer[]
            {
                new DefaultDrawer(properties, OceanShaderOptions.TessellationAccessor, nameof(OceanShaderOptions.Tessellation)),
                new WaveDrawer(properties),
                new DefaultDrawer(properties, OceanShaderOptions.LightingAccessor, nameof(OceanShaderOptions.Lighting)),
                new DefaultDrawer(properties, OceanShaderOptions.RefractionAccessor, nameof(OceanShaderOptions.Refraction)),
                new DefaultDrawer(properties, OceanShaderOptions.FoamAccessor, nameof(OceanShaderOptions.Foam)),
                new DefaultDrawer(properties, OceanShaderOptions.CookieAccessor, nameof(OceanShaderOptions.Cookie)),
                new DefaultDrawer(properties, OceanShaderOptions.ReflectionAccessor, nameof(OceanShaderOptions.Reflection)),
                new DefaultDrawer(properties, OceanShaderOptions.BackLightingAccessor, nameof(OceanShaderOptions.BackLighting)),
                new DefaultDrawer(properties, OceanShaderOptions.BackRefractionAccessor, nameof(OceanShaderOptions.BackRefraction)),
                new DefaultDrawer(properties, OceanShaderOptions.PointLightingAccessor, nameof(OceanShaderOptions.PointLighting)),
            };

            keywords = new List <string>();
        }
示例#2
0
 public void FindDrawers(List <ISerializedPropertyDrawer> drawers, IShaderFieldGroup group, SerializedProperty property)
 {
     foreach (var child in group.Children)
     {
         if (child is ShaderField)
         {
             var field  = (ShaderField)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new ShaderFieldDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderKeyword)
         {
             var field  = (ShaderKeyword)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new KeywordDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderEnumKeyword)
         {
             var field  = (ShaderEnumKeyword)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new EnumKeywordDrawer(target, field);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderFieldMark)
         {
             var field  = (ShaderFieldMark)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new Drawer(target);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderCustomField)
         {
             var field  = (ShaderCustomField)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new Drawer(target);
                 drawers.Add(drawer);
             }
         }
         else if (child is ShaderFieldGroup)
         {
             var field  = (ShaderFieldGroup)child;
             var target = property.FindPropertyRelative(field.ReflectiveField.Name);
             if (target != null)
             {
                 var drawer = new GroupDrawer(target, field);
                 drawers.Add(drawer);
                 FindDrawers(drawer.Drawers, field, target);
             }
         }
         else
         {
             throw new NotImplementedException();
         }
     }
 }