public void LoadFrom(YamlMappingNode mapping)
        {
            ID = mapping.GetNode("id").ToString();

            var kind = mapping.GetNode("kind").AsString();

            switch (kind)
            {
            case "source":
                Kind = ShaderKind.Source;
                var path = mapping.GetNode("path").AsResourcePath();
                var resc = IoCManager.Resolve <IResourceCache>();
                Source = resc.GetResource <ShaderSourceResource>(path);

                // TODO: Handle shader parameters!
                break;

            case "canvas":
                Kind = ShaderKind.Canvas;
                ReadCanvasKind(mapping);
                break;

            default:
                throw new InvalidOperationException($"Invalid shader kind: '{kind}'");
            }
        }
Exemple #2
0
        private void ReadSourceKind(YamlMappingNode mapping)
        {
            var path = mapping.GetNode("path").AsResourcePath();
            var resc = IoCManager.Resolve <IResourceCache>();

            Source = resc.GetResource <ShaderSourceResource>(path);
            if (mapping.TryGetNode <YamlMappingNode>("params", out var paramMapping))
            {
                ShaderParams = new Dictionary <string, object>();
                foreach (var item in paramMapping)
                {
                    var name = item.Key.AsString();
                    // TODO: This.
                    if (true)
                    //if (!Source.TryGetShaderParamType(name, out var type))
                    {
                        Logger.ErrorS("shader", "Shader param '{0}' does not exist on shader '{1}'", name, path);
                        continue;
                    }

                    //var value = ParseShaderParamFor(item.Value, type);
                    //ShaderParams.Add(name, value);
                }
            }
        }
        private void ReadSourceKind(YamlMappingNode mapping)
        {
            var path = mapping.GetNode("path").AsResourcePath();
            Source = _resourceCache.GetResource<ShaderSourceResource>(path);
            if (mapping.TryGetNode<YamlMappingNode>("params", out var paramMapping))
            {
                ShaderParams = new Dictionary<string, object>();
                foreach (var item in paramMapping)
                {
                    var name = item.Key.AsString();
                    if (!Source.ParsedShader.Uniforms.TryGetValue(name, out var uniformDefinition))
                    {
                        Logger.ErrorS("shader", "Shader param '{0}' does not exist on shader '{1}'", name, path);
                        continue;
                    }

                    var value = _parseUniformValue(item.Value, uniformDefinition.Type);
                    ShaderParams.Add(name, value);
                }
            }
        }