/// <summary> /// Reads the dds file header from the stream. /// </summary> /// <param name="stream">The <see cref="Stream"/> containing texture data.</param> private void ReadFileHeader(Stream stream) { Span <byte> magicBuffer = stackalloc byte[4]; stream.Read(magicBuffer, 0, 4); uint magicValue = BinaryPrimitives.ReadUInt32LittleEndian(magicBuffer); if (magicValue != DdsFourCc.DdsMagicWord) { throw new NotSupportedException("Invalid DDS magic value."); } byte[] ddsHeaderBuffer = new byte[DdsConstants.DdsHeaderSize]; stream.Read(ddsHeaderBuffer, 0, DdsConstants.DdsHeaderSize); this.ddsHeader = DdsHeader.Parse(ddsHeaderBuffer); this.ddsHeader.Validate(); if (this.ddsHeader.ShouldHaveDxt10Header()) { byte[] ddsDxt10headerBuffer = new byte[DdsConstants.DdsDxt10HeaderSize]; stream.Read(ddsDxt10headerBuffer, 0, DdsConstants.DdsDxt10HeaderSize); this.ddsDxt10header = DdsHeaderDxt10.Parse(ddsDxt10headerBuffer); } }
/// <summary> /// Reads the dds file header from the stream. /// </summary> /// <param name="stream">The <see cref="Stream"/> containing image data.</param> private void ReadFileHeader(Stream stream) { this.currentStream = stream; #if NETCOREAPP2_1 || NETCOREAPP3_1 Span <byte> magicBuffer = stackalloc byte[4]; #else var magicBuffer = new byte[4]; #endif this.currentStream.Read(magicBuffer, 0, 4); uint magicValue = BinaryPrimitives.ReadUInt32LittleEndian(magicBuffer); if (magicValue != DdsFourCC.DdsMagicWord) { throw new NotSupportedException($"Invalid DDS magic value."); } #if NETCOREAPP2_1 || NETCOREAPP3_1 Span <byte> ddsHeaderBuffer = stackalloc byte[DdsConstants.DdsHeaderSize]; #else var ddsHeaderBuffer = new byte[DdsConstants.DdsHeaderSize]; #endif this.currentStream.Read(ddsHeaderBuffer, 0, DdsConstants.DdsHeaderSize); this.ddsHeader = DdsHeader.Parse(ddsHeaderBuffer); this.ddsHeader.Validate(); if (this.ddsHeader.ShouldHaveDxt10Header()) { #if NETCOREAPP2_1 || NETCOREAPP3_1 Span <byte> ddsDxt10headerBuffer = stackalloc byte[DdsConstants.DdsDxt10HeaderSize]; #else var ddsDxt10headerBuffer = new byte[DdsConstants.DdsDxt10HeaderSize]; #endif this.currentStream.Read(ddsDxt10headerBuffer, 0, DdsConstants.DdsDxt10HeaderSize); this.ddsDxt10header = DdsHeaderDxt10.Parse(ddsDxt10headerBuffer); } }
/// <summary> /// Initializes a new instance of the <see cref="DdsProcessor" /> class. /// </summary> /// <param name="ddsHeader">The DDS header.</param> /// <param name="ddsHeaderDxt10">The DDS header DXT10.</param> public DdsProcessor(DdsHeader ddsHeader, DdsHeaderDxt10 ddsHeaderDxt10) { this.DdsHeader = ddsHeader; this.DdsHeaderDxt10 = ddsHeaderDxt10; }