private static float[] Read(HSDReader d, GXCompType type, int size) { switch (type) { case GXCompType.UInt16: size /= 2; break; case GXCompType.Int16: size /= 2; break; case GXCompType.Float: size /= 4; break; } float[] a = new float[size]; switch (type) { case GXCompType.UInt8: for (int i = 0; i < size; i++) { a[i] = d.ReadByte(); } break; case GXCompType.Int8: for (int i = 0; i < size; i++) { a[i] = d.ReadSByte(); } break; case GXCompType.UInt16: for (int i = 0; i < size; i++) { a[i] = d.ReadUInt16(); } break; case GXCompType.Int16: for (int i = 0; i < size; i++) { a[i] = d.ReadInt16(); } break; case GXCompType.Float: for (int i = 0; i < size; i++) { a[i] = d.ReadSingle(); } break; default: for (int i = 0; i < size; i++) { a[i] = d.ReadByte(); } break; } return(a); }
public VertexAttributeFormat(GXAttribute attr, GXCompType type, GXCompCnt cnt, byte frac) { _attr = attr; _cnt = cnt; _type = type; _frac = frac; }
/// <summary> /// /// </summary> /// <param name="Writer"></param> /// <param name="Value"></param> /// <param name="Type"></param> /// <param name="Scale"></param> private static void WriteData(BinaryWriterExt Writer, float Value, GXCompType Type, float Scale) { double Scaled = Value * Math.Pow(2, Scale); switch (Type) { case GXCompType.UInt8: Writer.Write((byte)Scaled); break; case GXCompType.Int8: Writer.Write((sbyte)Scaled); break; case GXCompType.UInt16: Writer.Write((ushort)Scaled); break; case GXCompType.Int16: Writer.Write((short)Scaled); break; case GXCompType.Float: Writer.Write(Scaled); break; default: Writer.Write((byte)Scaled); break; } }
private void WriteData(HSDWriter Writer, float Value, GXCompType Type, float Scale) { float Scaled = Value * (float)Math.Pow(2, Scale); switch (Type) { case GXCompType.UInt8: Writer.Write((byte)Scaled); break; case GXCompType.Int8: Writer.Write((sbyte)Scaled); break; case GXCompType.UInt16: Writer.Write((ushort)Scaled); break; case GXCompType.Int16: Writer.Write((short)Scaled); break; case GXCompType.Float: Writer.Write(Scaled); break; default: Writer.Write((byte)Scaled); break; } }
public override void Open(HSDReader Reader) { Name = (GXAttribName)Reader.ReadUInt32(); AttributeType = (GXAttribType)Reader.ReadUInt32(); CompCount = (GXCompCnt)Reader.ReadInt32(); CompType = (GXCompType)Reader.ReadUInt32(); Scale = Reader.ReadByte(); Reader.ReadByte();//Padding Stride = Reader.ReadUInt16(); Offset = Reader.ReadUInt32(); }
/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="type"></param> /// <returns></returns> private static int CompTypeToInt(GXAttribName name, GXCompType type) { switch (name) { case GXAttribName.GX_VA_CLR0: case GXAttribName.GX_VA_CLR1: switch (type) { case GXCompType.RGBA4: case GXCompType.RGB565: return(2); case GXCompType.RGB8: case GXCompType.RGBA6: return(3); case GXCompType.RGBX8: case GXCompType.RGBA8: return(4); default: return(0); } default: switch (type) { case GXCompType.Int8: case GXCompType.UInt8: return(1); case GXCompType.Int16: case GXCompType.UInt16: return(2); case GXCompType.Float: return(4); default: return(0); } } }
private static void WriteGXClr(byte[] clr, BinaryWriterExt d, GXCompType type) { switch (type) { case GXCompType.RGB565: // GX_RGB565 d.Write((short)ClrTo565(clr)); break; case GXCompType.RGB8: // GX_RGB888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); break; case GXCompType.RGBX8: // GX_RGBX888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); d.Write(clr[3]); break; case GXCompType.RGBA4: // GX_RGBA4 short s = (short)((((clr[0] >> 4) & 0xF) << 12) | (((clr[1] >> 4) & 0xF) << 8) | (((clr[2] >> 4) & 0xF) << 4) | (((clr[3] >> 4) & 0xF))); d.Write((ushort)s); break; case GXCompType.RGBA6: // GX_RGBA6 int three = (((clr[0] >> 2) << 18) | ((clr[1] >> 2) << 12) | ((clr[2] >> 2) << 6) | (clr[3] >> 2)); d.Write((byte)((three >> 16) & 0xFF)); d.Write((byte)((three >> 8) & 0xFF)); d.Write((byte)((three) & 0xFF)); break; case GXCompType.RGBA8: // GX_RGBa888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); d.Write(clr[3]); break; } }
public static void WriteGXClr(byte[] clr, HSDWriter d, GXCompType type) { switch ((int)type) { case 0: // GX_RGB565 d.Write((short)ClrTo565(clr)); break; case 1: // GX_RGB888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); break; case 2: // GX_RGBX888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); d.Write(0); break; case 3: // GX_RGBA4 short s = (short)((((clr[0] >> 4) & 0xF) << 12) | (((clr[1] >> 4) & 0xF) << 8) | (((clr[2] >> 4) & 0xF) << 4) | (((clr[3] >> 4) & 0xF))); d.Write((ushort)s); break; case 4: // GX_RGBA6 int three = (((clr[0] >> 2) << 18) | ((clr[1] >> 2) << 12) | ((clr[2] >> 2) << 6) | (clr[3] >> 2)); d.Write((byte)((three >> 16) & 0xFF)); d.Write((byte)((three >> 8) & 0xFF)); d.Write((byte)((three) & 0xFF)); break; case 5: // GX_RGBX888 d.Write(clr[0]); d.Write(clr[1]); d.Write(clr[2]); d.Write(clr[3]); break; } }
public byte _frac; //scale/divisor #region Constructors public VertexAttributeFormat(GXAttribute attr, GXCompType type, GXCompCnt cnt, byte frac) { _attr = attr; _cnt = cnt; _type = type; _frac = frac; }