Ejemplo n.º 1
0
        public ShPkHeader(byte[] buffer)
        {
            const uint Magic = 0x6B506853;
            const uint SupportedFormat = 0x00395844;

            if (BitConverter.ToUInt32(buffer, 0x00) != Magic)
                throw new NotSupportedException("File is not a ShPk.");
            if (BitConverter.ToUInt32(buffer, 0x08) != SupportedFormat)
                throw new NotSupportedException("Shader format is not supported.");

            FileLength = BitConverter.ToInt32(buffer, 0x0C);
            ShaderDataOffset = BitConverter.ToInt32(buffer, 0x10);
            ParameterListOffset = BitConverter.ToInt32(buffer, 0x14);
            VertexShaderCount = BitConverter.ToInt32(buffer, 0x18);
            PixelShaderCount = BitConverter.ToInt32(buffer, 0x1C);

            ScalarParameterCount = BitConverter.ToInt32(buffer, 0x28);
            ResourceParameterCount = BitConverter.ToInt32(buffer, 0x2C);

            var offset = Size;
            var shs = new List<ShaderHeader>();
            for (var i = 0; i < VertexShaderCount; ++i) {
                var sh = new ShaderHeader(ShaderType.Vertex, buffer, offset);
                offset += sh.Size;
                shs.Add(sh);
            }
            for (var i = 0; i < PixelShaderCount; ++i) {
                var sh = new ShaderHeader(ShaderType.Pixel, buffer, offset);
                offset += sh.Size;
                shs.Add(sh);
            }
            ShaderHeaders = new ReadOnlyCollection<ShaderHeader>(shs);

            var c1 = BitConverter.ToInt32(buffer, 0x24);
            offset += c1 * 0x08;

            var para = new List<ParameterHeader>();
            for (var i = 0; i < ScalarParameterCount; ++i) {
                var p = new ParameterHeader(ParameterType.Scalar, buffer, offset);
                offset += ParameterHeader.Size;
                para.Add(p);
            }
            for (var i = 0; i < ResourceParameterCount; ++i) {
                var p = new ParameterHeader(ParameterType.Resource, buffer, offset);
                offset += ParameterHeader.Size;
                para.Add(p);
            }
            ParameterHeaders = new ReadOnlyCollection<ParameterHeader>(para);
        }
Ejemplo n.º 2
0
        public ShPkHeader(byte[] buffer)
        {
            const uint Magic           = 0x6B506853;
            const uint SupportedFormat = 0x00395844;

            if (BitConverter.ToUInt32(buffer, 0x00) != Magic)
            {
                throw new NotSupportedException("File is not a ShPk.");
            }
            if (BitConverter.ToUInt32(buffer, 0x08) != SupportedFormat)
            {
                throw new NotSupportedException("Shader format is not supported.");
            }

            FileLength          = BitConverter.ToInt32(buffer, 0x0C);
            ShaderDataOffset    = BitConverter.ToInt32(buffer, 0x10);
            ParameterListOffset = BitConverter.ToInt32(buffer, 0x14);
            VertexShaderCount   = BitConverter.ToInt32(buffer, 0x18);
            PixelShaderCount    = BitConverter.ToInt32(buffer, 0x1C);

            ScalarParameterCount   = BitConverter.ToInt32(buffer, 0x28);
            ResourceParameterCount = BitConverter.ToInt32(buffer, 0x2C);

            int offset = Size;
            List <ShaderHeader> shs = new List <ShaderHeader>();

            for (int i = 0; i < VertexShaderCount; ++i)
            {
                ShaderHeader sh = new ShaderHeader(ShaderType.Vertex, buffer, offset);
                offset += sh.Size;
                shs.Add(sh);
            }
            for (int i = 0; i < PixelShaderCount; ++i)
            {
                ShaderHeader sh = new ShaderHeader(ShaderType.Pixel, buffer, offset);
                offset += sh.Size;
                shs.Add(sh);
            }
            ShaderHeaders = new ReadOnlyCollection <ShaderHeader>(shs);


            int c1 = BitConverter.ToInt32(buffer, 0x24);

            offset += c1 * 0x08;

            List <ParameterHeader> para = new List <ParameterHeader>();

            for (int i = 0; i < ScalarParameterCount; ++i)
            {
                ParameterHeader p = new ParameterHeader(ParameterType.Scalar, buffer, offset);
                offset += ParameterHeader.Size;
                para.Add(p);
            }
            for (int i = 0; i < ResourceParameterCount; ++i)
            {
                ParameterHeader p = new ParameterHeader(ParameterType.Resource, buffer, offset);
                offset += ParameterHeader.Size;
                para.Add(p);
            }
            ParameterHeaders = new ReadOnlyCollection <ParameterHeader>(para);
        }