public ShaderAttribute Clone() { var result = new ShaderAttribute(); result.Name = Name.Clone(); result.Attribute = Attribute; foreach (var param in Parameters) { result.Parameters.Add(new ShaderAttributeParameter { Name = param.Name, Value = param.Value }); } return(result); }
public static Shader.UniformBuffer Parse(ShaderAttribute attribute) { var uniformAttribute = new Shader.UniformBuffer() { BindingId = -1, DescriptorSet = 0 }; foreach (var namedArg in attribute.Attribute.NamedArguments) { if (namedArg.Key == "DescriptorSet") { uniformAttribute.DescriptorSet = (int)namedArg.Value.Value; } else if (namedArg.Key == "BindingId") { uniformAttribute.BindingId = (int)namedArg.Value.Value; } } return(uniformAttribute); }
public ShaderAttributes ParseAttributes(ISymbol symbol) { var shaderAttributes = new ShaderAttributes(); foreach (var attribute in symbol.GetAttributes()) { var shaderAttribute = new ShaderAttribute(); shaderAttributes.Add(shaderAttribute); shaderAttribute.Name = TypeAliases.GetTypeName(attribute.AttributeClass); shaderAttribute.Attribute = attribute; foreach (var argument in attribute.ConstructorArguments) { var shaderAttributeParam = new ShaderAttributeParameter(); shaderAttribute.Parameters.Add(shaderAttributeParam); if (argument.Kind != TypedConstantKind.Array) { shaderAttributeParam.Value = argument.Value; } } foreach (var argument in attribute.NamedArguments) { var shaderAttributeParam = new ShaderAttributeParameter(); shaderAttribute.Parameters.Add(shaderAttributeParam); shaderAttributeParam.Name = argument.Key; shaderAttributeParam.Value = argument.Value.Value; } if (TypeAliases.GetFullTypeName(attribute.AttributeClass) == TypeAliases.GetFullTypeName <Shader.Input>()) { var inputAttributes = new List <TypeName> { TypeAliases.GetTypeName <Shader.FragmentInput>(), TypeAliases.GetTypeName <Shader.StageInput>(), TypeAliases.GetTypeName <Shader.AppBuiltInInput>(), TypeAliases.GetTypeName <Shader.HardwareBuiltInInput>(), TypeAliases.GetTypeName <Shader.PropertyInput>(), }; foreach (var inputAttribute in inputAttributes) { var clone = shaderAttribute.Clone(); clone.Name = inputAttribute; shaderAttributes.Add(clone); } } if (TypeAliases.GetFullTypeName(attribute.AttributeClass) == TypeAliases.GetFullTypeName <Shader.Output>()) { var outputAttributes = new List <TypeName> { TypeAliases.GetTypeName <Shader.FragmentOutput>(), TypeAliases.GetTypeName <Shader.StageOutput>(), TypeAliases.GetTypeName <Shader.HardwareBuiltInOutput>(), }; foreach (var outputAttribute in outputAttributes) { var clone = shaderAttribute.Clone(); clone.Name = outputAttribute; shaderAttributes.Add(clone); } } } return(shaderAttributes); }