#Polymorphism drama
1 messages · Page 1 of 1 (latest)
public interface HlslTranslatable
{
string CSharpName { get; }
string HlslName { get; }
}
public interface HlslDependency : HlslTranslatable
{
string FilePath { get; }
}
public abstract class IPragma : HlslDependency
{
public abstract List<HlslDependency> Dependencies { get; }
public abstract string CSharpName { get; }
public abstract string HlslName { get; }
public abstract string FilePath { get; }
public string IncludeDirectives
{
get
{
StringBuilder ss = new StringBuilder();
foreach (var pragmator in Dependencies)
{
ss.Append($"#include \"{pragmator.FilePath}\"\n");
}
return ss.ToString();
}
}
public string Pragma => $"#ifndef {pragma}\n#define {pragma}";
private string pragma => $"{HlslName}_AUTOGENERATED_HLSL";
}
public class HlslBaseType: HlslTranslatable
{
public static List<HlslBaseType> TypesPool = new List<HlslBaseType>();
public HlslBaseType(System.Type type, string hlslName = null)
{
MyType = type;
CSharpName = type.Name;
if (hlslName != null)
{
HlslName = hlslName;
}else
{
HlslName = type.Name;
}
}
public static void CreateType(Type type)
{
TypesPool.Add(new
HlslBaseType(type));
}
public static HlslBaseType TryGet(Type type)
{
HlslBaseType instance = TypesPool.FirstOrDefault(x => x.MyType == type);
return instance;
}
public Type MyType { get; }
public string HlslName { get; }
public string CSharpName { get; }
}
public class HlslLinkedType : IPragma
{
public static List<HlslLinkedType> TypesPool = new List<HlslLinkedType>();
public HlslLinkedType(Type type)
{
MyType = type;
CSharpName = type.Name;
HlslName = type.Name;
Dependencies = new List<HlslDependency>();
}