Example #1
0
 public MessageHeader ToMessageHeader()
 {
     if (header == null)
     {
         header = new ParameterHeader(this);
     }
     return(header);
 }
        private XmlDictionaryReader GetComparableReader()
        {
            XmlBuffer           buffer = new XmlBuffer(0x7fffffff);
            XmlDictionaryWriter writer = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);

            ParameterHeader.WriteStartHeader(writer, this, AddressingVersion.WSAddressingAugust2004);
            ParameterHeader.WriteHeaderContents(writer, this);
            writer.WriteEndElement();
            buffer.CloseSection();
            buffer.Close();
            return(buffer.GetReader(0));
        }
Example #3
0
        XmlDictionaryReader GetComparableReader()
        {
            XmlBuffer           buffer = new XmlBuffer(int.MaxValue);
            XmlDictionaryWriter writer = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);

            // WSAddressingAugust2004 does not write the IsReferenceParameter attribute,
            // and that's good for a consistent comparable form
            ParameterHeader.WriteStartHeader(writer, this, AddressingVersion.WSAddressingAugust2004);
            ParameterHeader.WriteHeaderContents(writer, this);
            writer.WriteEndElement();
            buffer.CloseSection();
            buffer.Close();
            return(buffer.GetReader(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);
        }
Example #5
0
 public void Read(Stream input, OWLib.STUD stud)
 {
     using (BinaryReader reader = new BinaryReader(input, System.Text.Encoding.Default, true)) {
         header = reader.Read <ParameterHeader>();
         if (header.arrayOffset == 0)
         {
             parameters = new ParameterEntry[0];
             return;
         }
         input.Position = (long)header.arrayOffset;
         STUDArrayInfo ptr = reader.Read <STUDArrayInfo>();
         parameters     = new ParameterEntry[ptr.count];
         input.Position = (long)ptr.offset;
         for (ulong i = 0; i < ptr.count; ++i)
         {
             parameters[i] = reader.Read <ParameterEntry>();
         }
     }
 }
Example #6
0
 public Parameter(ShPkFile file, ParameterHeader header, byte[] buffer) {
     Header = header;
     var off = file.Header.ParameterListOffset + header.NameOffset;
     Name = Encoding.ASCII.GetString(buffer, off, header.NameLength);
 }