private UltimateVertexAttribute(string name, int componentCount, MeshAttribute.AttributeDataType dataType, int index, int bufferIndex) { Name = name; ComponentCount = componentCount; DataType = dataType; Index = index; BufferIndex = bufferIndex; }
/// <summary> /// Gets the size in bytes for this data type. /// </summary> /// <param name="dataType">The data type for each of the attribute's components</param> /// <returns>The number of bytes used to store <paramref name="dataType"/></returns> public static int GetSizeInBytes(this MeshAttribute.AttributeDataType dataType) { switch (dataType) { case MeshAttribute.AttributeDataType.Float: return(sizeof(float)); case MeshAttribute.AttributeDataType.Byte: return(sizeof(byte)); case MeshAttribute.AttributeDataType.HalfFloat: return(2); case MeshAttribute.AttributeDataType.HalfFloat2: return(2); default: throw new NotImplementedException($"Size not implemented for {dataType}"); } }
private void WriteType(BinaryWriter writer, MeshAttribute.AttributeDataType type, float value) { switch (type) { case MeshAttribute.AttributeDataType.Float: writer.Write(value); break; case MeshAttribute.AttributeDataType.Byte: writer.Write((byte)value); break; case MeshAttribute.AttributeDataType.HalfFloat: writer.Write((ushort)FloatToHalfFloatBits(value)); break; case MeshAttribute.AttributeDataType.HalfFloat2: writer.Write((ushort)FloatToHalfFloatBits(value)); break; } }