Exemple #1
0
			///
			public VertexMeta( VertexElementFormat format,
							  VertexElementUsage usage,
							  VertexElementMethod method ) {
				this.Format = format;
				this.Usage = usage;
				this.Method = method;
			}
Exemple #2
0
			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;
 }
Exemple #5
0
			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 ();
        }
Exemple #7
0
			public VertexMeta( short stream,
							  VertexElementFormat format,
							  VertexElementUsage usage,
							  byte usageIndex ) {
				this.Stream = stream;
				this.Format = format;
				this.Usage = usage;
				this.UsageIndex = usageIndex;
			}
Exemple #8
0
			public VertexMeta( short stream,
							  VertexElementFormat format,
							  VertexElementUsage usage,
							  VertexElementMethod method ) {
				this.Stream = stream;
				this.Format = format;
				this.Usage = usage;
				this.Method = method;
			}
Exemple #9
0
 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;
 }
Exemple #10
0
		public VertexElement(
			int offset,
			VertexElementFormat elementFormat,
			VertexElementUsage elementUsage,
			int usageIndex
		) : this() {
			Offset = offset;
			UsageIndex = usageIndex;
			VertexElementFormat = elementFormat;
			VertexElementUsage = elementUsage;
		}
Exemple #11
0
 /// <summary>
 ///
 /// </summary>
 public VertexElement(
     Int32 offset,
     VertexElementFormat elementFormat,
     VertexElementUsage elementUsage,
     Int32 usageIndex)
 {
     this._offset = offset;
     this._usageIndex = usageIndex;
     this._format = elementFormat;
     this._usage = elementUsage;
 }
Exemple #12
0
        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();
            }
        }
Exemple #13
0
        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");
        }
Exemple #15
0
        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");
        }
Exemple #16
0
 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>();
            }
        }
Exemple #22
0
			public VertexAttribute()
			{
				CurrentBuffer = 0;
				CurrentPointer = IntPtr.Zero;
				CurrentFormat = VertexElementFormat.Single;
				CurrentNormalized = false;
				CurrentStride = 0;
			}
Exemple #23
0
 public VertexElement(int offset, VertexElementFormat format, VertexElementSemantic semantic) : this(offset, format, semantic.GetSemanticString())
 {
 }
Exemple #24
0
        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>();
            }
        }
Exemple #25
0
 internal static int SizeOfFormatType(VertexElementFormat element)
 {
     return(formatMappingSize[element]);
 }
Exemple #26
0
 /// <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;
 }
Exemple #27
0
 /// <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;
 }
Exemple #28
0
 /// <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;
 }
Exemple #29
0
 /// <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;
 }
Exemple #30
0
        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;
            }
        }
 /// <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;
 }
Exemple #33
0
			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;
		}
Exemple #35
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);
Exemple #38
0
 /// <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));
 }
Exemple #39
0
        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>();
            }
        }