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)); }
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); }
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>(); } } }
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); }