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}'"); } }
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); } } }