public ShaderIOVariable(ShaderIOVariableInterpolation interpolation, ShaderValueType type, string name, IEnumerable<KeyValuePair<string, string>> specialParameters) : base(name, specialParameters) { if (type == null) throw new ArgumentNullException("type"); this.interpolation = interpolation; this.type = type; if (!type.TryGetBaseType(out baseType)) throw new ArgumentException("Type of a shader IO variable must have a base type"); }
public FieldDescriptor(string tag, string name, string define, ShaderValueType type, string semantic = "", string preprocessor = "", StructFieldOptions subscriptOptions = StructFieldOptions.Static) { this.tag = tag; this.name = name; this.define = define; this.type = type.ToShaderString(); this.vectorCount = type.GetVectorCount(); this.semantic = semantic; this.preprocessor = preprocessor; this.subscriptOptions = subscriptOptions; }
public static int GetVectorCount(this ShaderValueType type) { switch (type) { case ShaderValueType.Float2: return(2); case ShaderValueType.Float3: return(3); case ShaderValueType.Float4: return(4); default: return(0); } }
public static string ValueTypeToString(ShaderValueType type) { switch (type.Class) { case ShaderValueTypeClass.Scalar: return ScalarTypeToString((ShaderValueScalarType)type); case ShaderValueTypeClass.Vector: return VectorTypeToString((ShaderValueVectorType)type); case ShaderValueTypeClass.Matrix: return MatrixTypeToString((ShaderValueMatrixType)type); case ShaderValueTypeClass.Array: var arrayType = (ShaderValueArrayType)type; return string.Format("{0}[{1}]", ValueTypeToString(arrayType.ElementType), arrayType.Length); case ShaderValueTypeClass.Structure: return ((ShaderValueStructureType)type).Name; default: throw new ArgumentOutOfRangeException(); } }
public static string ToShaderString(this ShaderValueType type, string precisionToken = PrecisionUtil.Token) { switch (type) { case ShaderValueType.Boolean: return(precisionToken); case ShaderValueType.Float: return(precisionToken); case ShaderValueType.Float2: return($"{precisionToken}2"); case ShaderValueType.Float3: return($"{precisionToken}3"); case ShaderValueType.Float4: return($"{precisionToken}4"); case ShaderValueType.Matrix2: return($"{precisionToken}2x2"); case ShaderValueType.Matrix3: return($"{precisionToken}3x3"); case ShaderValueType.Matrix4: return($"{precisionToken}4x4"); case ShaderValueType.Integer: return("int"); case ShaderValueType.Uint: return("uint"); case ShaderValueType.Uint4: return("uint4"); default: return("Error"); } }
public static string ValueVariableDeclaration(ShaderValueType type, string name) { if (type.Class != ShaderValueTypeClass.Array) return string.Format("{0} {1}", ValueTypeToString(type), name); var arrayType = (ShaderValueArrayType)type; return string.Format("{0} {1}[{2}]", ValueTypeToString(arrayType.ElementType), name, arrayType.Length.ToString(CultureInfo.InvariantCulture)); }