示例#1
0
        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);
        }
示例#2
0
 public VertexAttributeFormat(GXAttribute attr, GXCompType type, GXCompCnt cnt, byte frac)
 {
     _attr = attr;
     _cnt  = cnt;
     _type = type;
     _frac = frac;
 }
示例#3
0
        /// <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;
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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();
        }
示例#6
0
        /// <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);
                }
            }
        }
示例#7
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;
            }
        }
示例#8
0
        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;
            }
        }
示例#9
0
        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;
        }