/// public VertexMeta( VertexElementFormat format, VertexElementUsage usage, VertexElementMethod method ) { this.Format = format; this.Usage = usage; this.Method = method; }
public VertexMeta( short stream, VertexElementFormat format, VertexElementUsage usage ) { this.Stream = stream; this.Format = format; this.Usage = usage; }
public VertexElement(VertexElementFormat type, VertexElementUsage kind, TextureUnit unit) : this() { Type = type; Kind = kind; Unit = unit; }
public VertexElement(int offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, int usageIndex) { this.offset = offset; this.elementFormat = elementFormat; this.elementUsage = elementUsage; this.usageIndex = usageIndex; }
public VertexMeta( VertexElementFormat format, VertexElementUsage usage, byte usageIndex ) { this.Format = format; this.Usage = usage; this.UsageIndex = usageIndex; }
/// <summary> /// /// </summary> public static Type FromEnum(VertexElementFormat format) { switch (format) { case VertexElementFormat.Single: return typeof (Single); case VertexElementFormat.Vector2: return typeof (Vector2); case VertexElementFormat.Vector3: return typeof (Vector3); case VertexElementFormat.Vector4: return typeof (Vector4); case VertexElementFormat.Colour: return typeof (Rgba32); case VertexElementFormat.Byte4: return typeof (Byte4); case VertexElementFormat.Short2: return typeof (Short2); case VertexElementFormat.Short4: return typeof (Short4); case VertexElementFormat.NormalisedShort2: return typeof (NormalisedShort2); case VertexElementFormat.NormalisedShort4: return typeof (NormalisedShort4); //case VertexElementFormat.HalfVector2: // return typeof (Abacus.HalfPrecision.Vector2); //case VertexElementFormat.HalfVector4: // return typeof (Abacus.HalfPrecision.Vector4); } throw new NotSupportedException (); }
public VertexMeta( short stream, VertexElementFormat format, VertexElementUsage usage, byte usageIndex ) { this.Stream = stream; this.Format = format; this.Usage = usage; this.UsageIndex = usageIndex; }
public VertexMeta( short stream, VertexElementFormat format, VertexElementUsage usage, VertexElementMethod method ) { this.Stream = stream; this.Format = format; this.Usage = usage; this.Method = method; }
public VertexElement(short stream, short offset, VertexElementFormat elementFormat, VertexElementMethod elementMethod, VertexElementUsage elementUsage, byte usageIndex) { this.stream = stream; this.offset = offset; this.usageIndex = usageIndex; this.format = elementFormat; this.method = elementMethod; this.usage = elementUsage; }
public VertexElement( int offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, int usageIndex ) : this() { Offset = offset; UsageIndex = usageIndex; VertexElementFormat = elementFormat; VertexElementUsage = elementUsage; }
/// <summary> /// /// </summary> public VertexElement( Int32 offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, Int32 usageIndex) { this._offset = offset; this._usageIndex = usageIndex; this._format = elementFormat; this._usage = elementUsage; }
public static PssVertexFormat ToVertexFormat(VertexElementFormat format) { switch (format) { case VertexElementFormat.Vector3: return PssVertexFormat.Float3; case VertexElementFormat.Color: return PssVertexFormat.UByte4N; default: #warning Plenty more formats still to implement throw new NotImplementedException(); } }
public static All OpenGLValueType(VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: throw new NotImplementedException(); case VertexElementFormat.Vector2: return All.Float; case VertexElementFormat.Vector3: return All.Float; case VertexElementFormat.Vector4: return All.Float; case VertexElementFormat.Color: return All.UnsignedByte; case VertexElementFormat.Byte4: return All.UnsignedByte; case VertexElementFormat.Short2: return All.UnsignedShort; case VertexElementFormat.Short4: return All.UnsignedShort; case VertexElementFormat.NormalizedShort2: return All.UnsignedShort; case VertexElementFormat.NormalizedShort4: return All.UnsignedShort; case VertexElementFormat.HalfVector2: return All.Float; case VertexElementFormat.HalfVector4: return All.Float; } throw new NotImplementedException(); }
/// <summary> /// /// </summary> public static Int32 GetTypeSize(VertexElementFormat format) { switch (format) { case VertexElementFormat.Single: return 4; case VertexElementFormat.Vector2: return 8; case VertexElementFormat.Vector3: return 12; case VertexElementFormat.Vector4: return 0x10; case VertexElementFormat.Colour: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 4; case VertexElementFormat.Short4: return 8; case VertexElementFormat.NormalisedShort2: return 4; case VertexElementFormat.NormalisedShort4: return 8; case VertexElementFormat.HalfVector2: return 4; case VertexElementFormat.HalfVector4: return 8; } throw new Exception ("Unsupported"); }
private static int GetNumberOfElements(VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 1; case VertexElementFormat.Vector2: return 2; case VertexElementFormat.Vector3: return 3; case VertexElementFormat.Vector4: return 4; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 2; case VertexElementFormat.Short4: return 2; case VertexElementFormat.NormalizedShort2: return 2; case VertexElementFormat.NormalizedShort4: return 4; case VertexElementFormat.HalfVector2: return 2; case VertexElementFormat.HalfVector4: return 4; } throw new ArgumentException("Should be a value defined in VertexElementFormat", "elementFormat"); }
public static int GetSize(this VertexElementFormat format) { return(format.GetElementsCount() * format.GetElementSize()); }
/// <summary>Initializes a new vertex element attribute</summary> /// <param name="usage">What purpose the vertex element will serve</param> /// <param name="format">Format in in which the data for this element is provided</param> public VertexElementAttribute(VertexElementUsage usage, VertexElementFormat format) : this(usage) { this.format = format; this.formatProvided = true; }
public VertexElement(VertexElementFormat type, VertexElementUsage kind) : this(type, kind, TextureUnit.Texture0) { }
public void ToFormat(GraphicStreamFormat graphicStreamFormat, VertexElementFormat format) { Assert.AreEqual(format, graphicStreamFormat.ToFormat()); }
/// <summary> /// Constructs a new VertexElementDescription describing a per-vertex element. /// </summary> /// <param name="name">The name of the element.</param> /// <param name="semantic">The semantic type of the element.</param> /// <param name="format">The format of the element.</param> public VertexElementDescription(string name, VertexElementSemantic semantic, VertexElementFormat format) : this(name, format, semantic) { }
internal static Format ToDxgiFormat(VertexElementFormat format) { switch (format) { case VertexElementFormat.Float1: return(Format.R32_Float); case VertexElementFormat.Float2: return(Format.R32G32_Float); case VertexElementFormat.Float3: return(Format.R32G32B32_Float); case VertexElementFormat.Float4: return(Format.R32G32B32A32_Float); case VertexElementFormat.Byte2_Norm: return(Format.R8G8_UNorm); case VertexElementFormat.Byte2: return(Format.R8G8_UInt); case VertexElementFormat.Byte4_Norm: return(Format.R8G8B8A8_UNorm); case VertexElementFormat.Byte4: return(Format.R8G8B8A8_UInt); case VertexElementFormat.SByte2_Norm: return(Format.R8G8_SNorm); case VertexElementFormat.SByte2: return(Format.R8G8_SInt); case VertexElementFormat.SByte4_Norm: return(Format.R8G8B8A8_SNorm); case VertexElementFormat.SByte4: return(Format.R8G8B8A8_SInt); case VertexElementFormat.UShort2_Norm: return(Format.R16G16_UNorm); case VertexElementFormat.UShort2: return(Format.R16G16_UInt); case VertexElementFormat.UShort4_Norm: return(Format.R16G16B16A16_UNorm); case VertexElementFormat.UShort4: return(Format.R16G16B16A16_UInt); case VertexElementFormat.Short2_Norm: return(Format.R16G16_SNorm); case VertexElementFormat.Short2: return(Format.R16G16_SInt); case VertexElementFormat.Short4_Norm: return(Format.R16G16B16A16_SNorm); case VertexElementFormat.Short4: return(Format.R16G16B16A16_SInt); case VertexElementFormat.UInt1: return(Format.R32_UInt); case VertexElementFormat.UInt2: return(Format.R32G32_UInt); case VertexElementFormat.UInt3: return(Format.R32G32B32_UInt); case VertexElementFormat.UInt4: return(Format.R32G32B32A32_UInt); case VertexElementFormat.Int1: return(Format.R32_SInt); case VertexElementFormat.Int2: return(Format.R32G32_SInt); case VertexElementFormat.Int3: return(Format.R32G32B32_SInt); case VertexElementFormat.Int4: return(Format.R32G32B32A32_SInt); case VertexElementFormat.Half1: return(Format.R16_Float); case VertexElementFormat.Half2: return(Format.R16G16_Float); case VertexElementFormat.Half4: return(Format.R16G16B16A16_Float); default: throw Illegal.Value <VertexElementFormat>(); } }
public VertexAttribute() { CurrentBuffer = 0; CurrentPointer = IntPtr.Zero; CurrentFormat = VertexElementFormat.Single; CurrentNormalized = false; CurrentStride = 0; }
public VertexElement(int offset, VertexElementFormat format, VertexElementSemantic semantic) : this(offset, format, semantic.GetSemanticString()) { }
internal static VkFormat VdToVkVertexElementFormat(VertexElementFormat format) { switch (format) { case VertexElementFormat.Float1: return(VkFormat.R32Sfloat); case VertexElementFormat.Float2: return(VkFormat.R32g32Sfloat); case VertexElementFormat.Float3: return(VkFormat.R32g32b32Sfloat); case VertexElementFormat.Float4: return(VkFormat.R32g32b32a32Sfloat); case VertexElementFormat.Byte2_Norm: return(VkFormat.R8g8Unorm); case VertexElementFormat.Byte2: return(VkFormat.R8g8Uint); case VertexElementFormat.Byte4_Norm: return(VkFormat.R8g8b8a8Unorm); case VertexElementFormat.Byte4: return(VkFormat.R8g8b8a8Uint); case VertexElementFormat.SByte2_Norm: return(VkFormat.R8g8Snorm); case VertexElementFormat.SByte2: return(VkFormat.R8g8Sint); case VertexElementFormat.SByte4_Norm: return(VkFormat.R8g8b8a8Snorm); case VertexElementFormat.SByte4: return(VkFormat.R8g8b8a8Sint); case VertexElementFormat.UShort2_Norm: return(VkFormat.R16g16Unorm); case VertexElementFormat.UShort2: return(VkFormat.R16g16Uint); case VertexElementFormat.UShort4_Norm: return(VkFormat.R16g16b16a16Unorm); case VertexElementFormat.UShort4: return(VkFormat.R16g16b16a16Uint); case VertexElementFormat.Short2_Norm: return(VkFormat.R16g16Snorm); case VertexElementFormat.Short2: return(VkFormat.R16g16Sint); case VertexElementFormat.Short4_Norm: return(VkFormat.R16g16b16a16Snorm); case VertexElementFormat.Short4: return(VkFormat.R16g16b16a16Sint); case VertexElementFormat.UInt1: return(VkFormat.R32Uint); case VertexElementFormat.UInt2: return(VkFormat.R32g32Uint); case VertexElementFormat.UInt3: return(VkFormat.R32g32b32Uint); case VertexElementFormat.UInt4: return(VkFormat.R32g32b32a32Uint); case VertexElementFormat.Int1: return(VkFormat.R32Sint); case VertexElementFormat.Int2: return(VkFormat.R32g32Sint); case VertexElementFormat.Int3: return(VkFormat.R32g32b32Sint); case VertexElementFormat.Int4: return(VkFormat.R32g32b32a32Sint); default: throw Illegal.Value <VertexElementFormat>(); } }
internal static int SizeOfFormatType(VertexElementFormat element) { return(formatMappingSize[element]); }
/// <summary></summary> /// <param name="usage">Usage of the element, eg <see cref="VertexElementUsage"/>.Position.</param> /// <param name="usageIndex">Usage index of the element, eg COLOR1 has a usage index of 1</param> /// <param name="format">Data type format of the element, eg a <see cref="Vector4"/> is <see cref="VertexElementFormat"/>.Vector4</param> public VertexElementAttribute(VertexElementUsage usage, VertexElementFormat format, byte usageIndex) { this.usage = usage; this.format = format; this.index = usageIndex; }
/// <summary></summary> /// <param name="usage">Usage of the element, eg <see cref="VertexElementUsage"/>.Position.</param> /// <param name="usageIndex">Usage index of the element, eg COLOR1 has a usage index of 1</param> public VertexElementAttribute(VertexElementUsage usage, byte usageIndex) { this.usage = usage; this.format = VertexElementFormat.Unused; this.index = usageIndex; }
/// <summary></summary> /// <param name="usage">Usage of the element, eg <see cref="VertexElementUsage"/>.Position.</param> public VertexElementAttribute(VertexElementUsage usage) { this.usage = usage; this.format = VertexElementFormat.Unused; }
/// <summary></summary> /// <param name="usage">Usage of the element, eg <see cref="VertexElementUsage"/>.Position.</param> /// <param name="format">Data type format of the element, eg a <see cref="Vector4"/> is <see cref="VertexElementFormat"/>.Vector4</param> public VertexElementAttribute(VertexElementUsage usage, VertexElementFormat format) { this.usage = usage; this.format = format; }
public VertexElement[] GetDeclaration(Type type) { lock (declarationMapping) { VertexElement[] mapping; if (declarationMapping.TryGetValue(type, out mapping)) { return(mapping); } if (type == typeof(Vector3)) //special case { mapping = new VertexElement[] { new VertexElement(0, 0, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Position, 0) } } ; if (type == typeof(Vector4)) { mapping = new VertexElement[] { new VertexElement(0, 0, VertexElementFormat.Vector4, VertexElementMethod.Default, VertexElementUsage.Position, 0) } } ; if (mapping == null) { List <VertexElement> elements = new List <VertexElement>(); int offset = 0; if (type.IsValueType == false) { throw new ArgumentException("Type " + type.Name + " is a not a ValueType (struct)"); } foreach (FieldInfo f in type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)) { if (!f.ReflectedType.IsValueType) { throw new ArgumentException("Field " + type.Name + "." + f.Name + " is a not a ValueType (struct)"); } int size = Marshal.SizeOf(f.FieldType); bool attribSet = false; foreach (object o in f.GetCustomAttributes(true)) { if (o is VertexElementAttribute) { VertexElementAttribute att = (VertexElementAttribute)o; VertexElementFormat format = att.VertexElementFormat; if (format == VertexElementFormat.Unused) { format = DetermineFormat(f); } else { int formatSize; if (!formatMappingSize.TryGetValue(format, out formatSize)) { throw new ArgumentException(string.Format("Invlaid VertexElementFormat ({0}) specified in VertexElementAttribute for {1}.{2}", format, type.FullName, f.Name)); } if (formatSize != Marshal.SizeOf(f.FieldType)) { throw new ArgumentException(string.Format("VertexElementFormat size mismatch in {4}.{5}, {0} requires a size of {1}, specified type {2} has size {3}", format, formatSize, f.FieldType.FullName, Marshal.SizeOf(f.FieldType), type.FullName, f.Name)); } } elements.Add(new VertexElement(0, (short)offset, format, VertexElementMethod.Default, att.VertexElementUsage, (byte)att.UsageIndex)); attribSet = true; break; } } if (!attribSet) { VertexElementFormat format = DetermineFormat(f); int index; VertexElementUsage usage = DetermineUsage(elements, f, out index); elements.Add(new VertexElement(0, (short)offset, format, VertexElementMethod.Default, usage, (byte)index)); } offset += size; } mapping = elements.ToArray(); } declarationMapping.Add(type, mapping); return(mapping); } }
public VertexElement(int offset, VertexElementFormat elementFormat, VertexElementUsage elementUsage, int usageIndex = 0) { Offset = offset; VertexElementFormat = elementFormat; VertexElementUsage = elementUsage; UsageIndex = usageIndex; IsNormalized = true; switch (elementFormat) { case VertexElementFormat.Single: ElementCount = 1; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.Float; break; case VertexElementFormat.Vector2: ElementCount = 2; SizeInBytes = 8; VertexAttribPointerType = VertexAttribPointerType.Float; break; case VertexElementFormat.Vector3: ElementCount = 3; SizeInBytes = 12; VertexAttribPointerType = VertexAttribPointerType.Float; break; case VertexElementFormat.Vector4: ElementCount = 4; SizeInBytes = 16; VertexAttribPointerType = VertexAttribPointerType.Float; break; case VertexElementFormat.Color: ElementCount = 4; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.UnsignedByte; IsNormalized = false; break; case VertexElementFormat.Byte4: ElementCount = 4; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.Byte; IsNormalized = false; break; case VertexElementFormat.Short2: ElementCount = 2; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.Short; IsNormalized = false; break; case VertexElementFormat.Short4: ElementCount = 4; SizeInBytes = 8; VertexAttribPointerType = VertexAttribPointerType.Short; IsNormalized = false; break; case VertexElementFormat.NormalizedShort2: ElementCount = 2; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.Short; break; case VertexElementFormat.NormalizedShort4: ElementCount = 4; SizeInBytes = 8; VertexAttribPointerType = VertexAttribPointerType.Short; break; case VertexElementFormat.HalfVector2: ElementCount = 2; SizeInBytes = 4; VertexAttribPointerType = VertexAttribPointerType.HalfFloat; break; case VertexElementFormat.HalfVector4: ElementCount = 4; VertexAttribPointerType = VertexAttribPointerType.HalfFloat; SizeInBytes = 8; break; } }
public VertexMeta( VertexElementFormat format, VertexElementUsage usage ) { this.Format = format; this.Usage = usage; }
private static int GetTypeSize(VertexElementFormat elementFormat) { switch (elementFormat) { case VertexElementFormat.Single: return 4; case VertexElementFormat.Vector2: return 8; case VertexElementFormat.Vector3: return 12; case VertexElementFormat.Vector4: return 16; case VertexElementFormat.Color: return 4; case VertexElementFormat.Byte4: return 4; case VertexElementFormat.Short2: return 4; case VertexElementFormat.Short4: return 8; case VertexElementFormat.NormalizedShort2: return 4; case VertexElementFormat.NormalizedShort4: return 8; case VertexElementFormat.HalfVector2: return 4; case VertexElementFormat.HalfVector4: return 8; } return 0; }
internal static MTLVertexFormat VdToMTLVertexFormat(VertexElementFormat format) { switch (format) { case VertexElementFormat.Byte2_Norm: return(MTLVertexFormat.uchar2Normalized); case VertexElementFormat.Byte2: return(MTLVertexFormat.uchar2); case VertexElementFormat.Byte4_Norm: return(MTLVertexFormat.uchar4Normalized); case VertexElementFormat.Byte4: return(MTLVertexFormat.uchar4); case VertexElementFormat.SByte2_Norm: return(MTLVertexFormat.char2Normalized); case VertexElementFormat.SByte2: return(MTLVertexFormat.char2); case VertexElementFormat.SByte4_Norm: return(MTLVertexFormat.char4Normalized); case VertexElementFormat.SByte4: return(MTLVertexFormat.char4); case VertexElementFormat.UShort2_Norm: return(MTLVertexFormat.ushort2Normalized); case VertexElementFormat.UShort2: return(MTLVertexFormat.ushort2); case VertexElementFormat.Short2_Norm: return(MTLVertexFormat.short2Normalized); case VertexElementFormat.Short2: return(MTLVertexFormat.short2); case VertexElementFormat.UShort4_Norm: return(MTLVertexFormat.ushort4Normalized); case VertexElementFormat.UShort4: return(MTLVertexFormat.ushort4); case VertexElementFormat.Short4_Norm: return(MTLVertexFormat.short4Normalized); case VertexElementFormat.Short4: return(MTLVertexFormat.short4); case VertexElementFormat.UInt1: return(MTLVertexFormat.@uint); case VertexElementFormat.UInt2: return(MTLVertexFormat.uint2); case VertexElementFormat.UInt3: return(MTLVertexFormat.uint3); case VertexElementFormat.UInt4: return(MTLVertexFormat.uint4); case VertexElementFormat.Int1: return(MTLVertexFormat.@int); case VertexElementFormat.Int2: return(MTLVertexFormat.int2); case VertexElementFormat.Int3: return(MTLVertexFormat.int3); case VertexElementFormat.Int4: return(MTLVertexFormat.int4); case VertexElementFormat.Float1: return(MTLVertexFormat.@float); case VertexElementFormat.Float2: return(MTLVertexFormat.float2); case VertexElementFormat.Float3: return(MTLVertexFormat.float3); case VertexElementFormat.Float4: return(MTLVertexFormat.float4); default: throw Illegal.Value <VertexElementFormat>(); } }
public VertexElementAttribute(string name, VertexElementSemantic semantic, VertexElementFormat format) { Name = name; Semantic = semantic; Format = format; }
/// <summary> /// Gets the size of the format in terms of binding slots in a shader. /// </summary> /// <param name="fmt">The format to get the size for.</param> /// <param name="arrSize">The number of elements in the array, if the type is an array.</param> /// <returns>The size of the format, in shader binding slots.</returns> /// <remarks>A shader binding slot is 16 bytes on basically all hardware.</remarks> public static uint GetBindingSize(this VertexElementFormat fmt, uint arrSize = 1) => (uint)Mathf.Ceiling(GetSize(fmt, arrSize) / 16.0f);
/// <summary> /// Gets the size (in bytes) of a vertex element format /// </summary> /// <param name="format"></param> /// <returns></returns> public static int SizeOfFormatType(VertexElementFormat format) { return(VertexDeclarationBuilder.SizeOfFormatType(format)); }
internal static VertexAttribPointerType VdToGLVertexAttribPointerType( VertexElementFormat format, out bool normalized, out bool isInteger) { switch (format) { case VertexElementFormat.Float1: case VertexElementFormat.Float2: case VertexElementFormat.Float3: case VertexElementFormat.Float4: normalized = false; isInteger = false; return(VertexAttribPointerType.Float); case VertexElementFormat.Byte2_Norm: case VertexElementFormat.Byte4_Norm: normalized = true; isInteger = true; return(VertexAttribPointerType.UnsignedByte); case VertexElementFormat.Byte2: case VertexElementFormat.Byte4: normalized = false; isInteger = true; return(VertexAttribPointerType.UnsignedByte); case VertexElementFormat.SByte2_Norm: case VertexElementFormat.SByte4_Norm: normalized = true; isInteger = true; return(VertexAttribPointerType.Byte); case VertexElementFormat.SByte2: case VertexElementFormat.SByte4: normalized = false; isInteger = true; return(VertexAttribPointerType.Byte); case VertexElementFormat.UShort2_Norm: case VertexElementFormat.UShort4_Norm: normalized = true; isInteger = true; return(VertexAttribPointerType.UnsignedShort); case VertexElementFormat.UShort2: case VertexElementFormat.UShort4: normalized = false; isInteger = true; return(VertexAttribPointerType.UnsignedShort); case VertexElementFormat.Short2_Norm: case VertexElementFormat.Short4_Norm: normalized = true; isInteger = true; return(VertexAttribPointerType.Short); case VertexElementFormat.Short2: case VertexElementFormat.Short4: normalized = false; isInteger = true; return(VertexAttribPointerType.Short); case VertexElementFormat.UInt1: case VertexElementFormat.UInt2: case VertexElementFormat.UInt3: case VertexElementFormat.UInt4: normalized = false; isInteger = true; return(VertexAttribPointerType.UnsignedInt); case VertexElementFormat.Int1: case VertexElementFormat.Int2: case VertexElementFormat.Int3: case VertexElementFormat.Int4: normalized = false; isInteger = true; return(VertexAttribPointerType.Int); default: throw Illegal.Value <VertexElementFormat>(); } }