@@ -7,8 +7,6 @@ public class Dxt5Dds : CompressedDds
7
7
private const byte PIXEL_DEPTH = 4 ;
8
8
private const byte DIV_SIZE = 4 ;
9
9
10
- private readonly byte [ ] alpha = new byte [ 8 ] ;
11
-
12
10
public override int BitsPerPixel => 8 * PIXEL_DEPTH ;
13
11
public override ImageFormat Format => ImageFormat . Rgba32 ;
14
12
protected override byte DivSize => DIV_SIZE ;
@@ -20,8 +18,10 @@ public Dxt5Dds(DdsHeader header, PfimConfig config) : base(header, config)
20
18
21
19
protected override byte PixelDepthBytes => PIXEL_DEPTH ;
22
20
23
- protected override int Decode ( byte [ ] stream , byte [ ] data , int streamIndex , uint dataIndex , uint stride )
21
+ protected override unsafe int Decode ( byte [ ] stream , byte [ ] data , int streamIndex , uint dataIndex , uint stride )
24
22
{
23
+ byte * alpha = stackalloc byte [ 8 ] ;
24
+
25
25
streamIndex = Bc5Dds . ExtractGradient ( alpha , stream , streamIndex ) ;
26
26
27
27
ulong alphaCodes = stream [ streamIndex ++ ] ;
@@ -43,7 +43,7 @@ protected override int Decode(byte[] stream, byte[] data, int streamIndex, uint
43
43
var c1 = ColorFloatRgb . FromRgb565 ( color1 ) ;
44
44
45
45
( var i0 , var i1 ) = ( c0 . As8Bit ( ) , c1 . As8Bit ( ) ) ;
46
- Color888 [ ] colors = new [ ] { i0 , i1 , c0 . Lerp ( c1 , 1f / 3 ) . As8Bit ( ) , c0 . Lerp ( c1 , 2f / 3 ) . As8Bit ( ) } ;
46
+ Color888 * colors = stackalloc Color888 [ ] { i0 , i1 , c0 . Lerp ( c1 , 1f / 3 ) . As8Bit ( ) , c0 . Lerp ( c1 , 2f / 3 ) . As8Bit ( ) } ;
47
47
48
48
for ( int alphaShift = 0 ; alphaShift < 48 ; alphaShift += 12 )
49
49
{
0 commit comments