private static Bc2Block TryColors(RawBlock4X4Rgba32 rawBlock, ColorRgb565 color0, ColorRgb565 color1, out float error, float rWeight = 0.3f, float gWeight = 0.6f, float bWeight = 0.1f) { Bc2Block output = new Bc2Block(); var pixels = rawBlock.AsSpan; output.color0 = color0; output.color1 = color1; var c0 = color0.ToColorRgb24(); var c1 = color1.ToColorRgb24(); ReadOnlySpan <ColorRgb24> colors = stackalloc ColorRgb24[] { c0, c1, c0 *(2.0 / 3.0) + c1 * (1.0 / 3.0), c0 *(1.0 / 3.0) + c1 * (2.0 / 3.0) }; error = 0; for (int i = 0; i < 16; i++) { var color = pixels[i]; output.SetAlpha(i, color.A); output[i] = ColorChooser.ChooseClosestColor4(colors, color, rWeight, gWeight, bWeight, out var e); error += e; } return(output); }
private static Bc1Block TryColors(RawBlock4X4Rgba32 rawBlock, ColorRgb565 color0, ColorRgb565 color1, out float error, float rWeight = 0.3f, float gWeight = 0.6f, float bWeight = 0.1f) { Bc1Block output = new Bc1Block(); var pixels = rawBlock.AsSpan; output.color0 = color0; output.color1 = color1; var c0 = color0.ToColorRgb24(); var c1 = color1.ToColorRgb24(); ReadOnlySpan <ColorRgb24> colors = output.HasAlphaOrBlack ? stackalloc ColorRgb24[] { c0, c1, c0 *(1.0 / 2.0) + c1 * (1.0 / 2.0), new ColorRgb24(0, 0, 0) } : stackalloc ColorRgb24[] {