public static Span <byte> Create(TextureFormat format, Caps capabilities, Caps2 capabilities2, int width, int height, int?depth, int?mipMapCount, int?pitch, int?linearSize) { Span <byte> data = new byte[128]; data.WriteInt32At(0, Magic); data.WriteInt32At(4, Length - 4); // Remove 4 from length for magic size var flags = DefaultFlags; if (depth.HasValue) { flags |= DdsFlags.Depth; } if (mipMapCount.HasValue) { flags |= DdsFlags.MipMapCount; } if (pitch.HasValue) { flags |= DdsFlags.Pitch; } if (linearSize.HasValue) { flags |= DdsFlags.LinearSize; } data.WriteInt32At(8, (int)flags); data.WriteInt32At(12, height); data.WriteInt32At(16, width); data.WriteInt32At(20, (pitch ?? linearSize).GetValueOrDefault()); data.WriteInt32At(24, depth.GetValueOrDefault()); data.WriteInt32At(28, mipMapCount.GetValueOrDefault() == 0 ? 1 : mipMapCount.GetValueOrDefault()); // 44 bytes of reserved space DdsPixelFormat.Write(format, data.Slice(76)); if (flags.HasFlag(DdsFlags.MipMapCount)) { capabilities |= Caps.MipMap; } data.WriteInt32At(108, (int)capabilities); data.WriteInt32At(112, (int)capabilities2); data.WriteInt32At(116, 0); // Caps3 (unused) data.WriteInt32At(120, 0); // Caps4 (unused) data.WriteInt32At(124, 0); // Reserved return(data); }