Exemple #1
0
        public void ConstructionFromBytesSetsColorIndexes()
        {
            byte indexes0 = "11 10 01 00".AsByte(); // d c b a
            byte indexes1 = "00 11 10 01".AsByte(); // h g f e
            byte indexes2 = "01 00 11 10".AsByte(); // l k j i
            byte indexes3 = "10 01 00 11".AsByte(); // p o n m

            var bytes = new byte[BlockFormat.BC1ByteSize];

            bytes[4] = indexes0;
            bytes[5] = indexes1;
            bytes[6] = indexes2;
            bytes[7] = indexes3;

            var block = BC1BlockData.FromBytes(bytes);

            Assert.AreEqual(0, block.ColorIndexes[0]);  // a    00
            Assert.AreEqual(1, block.ColorIndexes[1]);  // b    01
            Assert.AreEqual(2, block.ColorIndexes[2]);  // c    10
            Assert.AreEqual(3, block.ColorIndexes[3]);  // d    11
            Assert.AreEqual(1, block.ColorIndexes[4]);  // e    01
            Assert.AreEqual(2, block.ColorIndexes[5]);  // f    10
            Assert.AreEqual(3, block.ColorIndexes[6]);  // g    11
            Assert.AreEqual(0, block.ColorIndexes[7]);  // h    00
            Assert.AreEqual(2, block.ColorIndexes[8]);  // i    10
            Assert.AreEqual(3, block.ColorIndexes[9]);  // j    11
            Assert.AreEqual(0, block.ColorIndexes[10]); // k    00
            Assert.AreEqual(1, block.ColorIndexes[11]); // l    01
            Assert.AreEqual(3, block.ColorIndexes[12]); // m    11
            Assert.AreEqual(0, block.ColorIndexes[13]); // n    00
            Assert.AreEqual(1, block.ColorIndexes[14]); // o    01
            Assert.AreEqual(2, block.ColorIndexes[15]); // p    10
        }
Exemple #2
0
        public void ConversionToBytesReturnsArrayOfCorrectSize()
        {
            var block = new BC1BlockData();

            var buffer = block.ToBytes();

            Assert.AreEqual(BlockFormat.BC1ByteSize, buffer.Length);

            CollectionAssert.AreEqual(buffer, new byte[BlockFormat.BC1ByteSize]);
        }
Exemple #3
0
        public void ConstructionFromBytesSetsColor1()
        {
            var color = new Color565Helper(40500);
            var bytes = new byte[BlockFormat.BC1ByteSize];

            bytes[2] = color.LowByte;
            bytes[3] = color.HighByte;

            var block = BC1BlockData.FromBytes(bytes);

            Assert.AreEqual(color.Color.Value, block.Color1.Value);
        }
Exemple #4
0
        public void WriteDataForSoleBlock()
        {
            var format = new Mock <IBlockCompressionFormat>();

            format.Setup(f => f.BlockSize).Returns(BlockFormat.BC1ByteSize);

            var bytes = Enumerable.Repeat((byte)200, BlockFormat.BC1ByteSize).ToArray();
            var block = BC1BlockData.FromBytes(bytes);

            var dds = DDSImage.CreateEmpty(BlockFormat.Dimension, BlockFormat.Dimension, format.Object);

            dds.SetBlockData(new Point(0, 0), block.ToBytes());

            CollectionAssert.AreEqual(dds.GetBuffer(), bytes);
        }
Exemple #5
0
        public void ConversionToBytesSetsColor1()
        {
            var color = new Color565Helper(40500);

            var block = new BC1BlockData();

            block.Color1 = color.Color;

            var buffer = block.ToBytes();

            byte c1Low = buffer[2];
            byte c1Hi  = buffer[3];

            Assert.AreEqual(color.LowByte, c1Low);
            Assert.AreEqual(color.HighByte, c1Hi);
        }
Exemple #6
0
        public void ConversionToBytesSetsColorIndexes()
        {
            byte expectedIndexes0 = "11 10 01 00".AsByte(); // d c b a
            byte expectedIndexes1 = "00 11 10 01".AsByte(); // h g f e
            byte expectedIndexes2 = "01 00 11 10".AsByte(); // l k j i
            byte expectedIndexes3 = "10 01 00 11".AsByte(); // p o n m

            var block = new BC1BlockData();

            // texel    value    byte
            block.ColorIndexes[0]  = 0;     // a(0,3)   00       indexes0
            block.ColorIndexes[1]  = 1;     // b(1,3)   01
            block.ColorIndexes[2]  = 2;     // c(2,3)   10
            block.ColorIndexes[3]  = 3;     // d(3,3)   11
            block.ColorIndexes[4]  = 1;     // e(0,2)   01       indexes1
            block.ColorIndexes[5]  = 2;     // f(1,2)   10
            block.ColorIndexes[6]  = 3;     // g(2,2)   11
            block.ColorIndexes[7]  = 0;     // h(3,2)   00
            block.ColorIndexes[8]  = 2;     // i(0,1)   10       indexes2
            block.ColorIndexes[9]  = 3;     // j(1,1)   11
            block.ColorIndexes[10] = 0;     // k(2,1)   00
            block.ColorIndexes[11] = 1;     // l(3,1)   01
            block.ColorIndexes[12] = 3;     // m(0,0)   11       indexes3
            block.ColorIndexes[13] = 0;     // n(1,0)   00
            block.ColorIndexes[14] = 1;     // o(2,0)   01
            block.ColorIndexes[15] = 2;     // p(3,0)   10

            var buffer = block.ToBytes();

            byte indexes0 = buffer[4];
            byte indexes1 = buffer[5];
            byte indexes2 = buffer[6];
            byte indexes3 = buffer[7];

            Assert.AreEqual(expectedIndexes0, indexes0);
            Assert.AreEqual(expectedIndexes1, indexes1);
            Assert.AreEqual(expectedIndexes2, indexes2);
            Assert.AreEqual(expectedIndexes3, indexes3);
        }
Exemple #7
0
        public void WriteDataForMultipleBlocks()
        {
            const int numberOfBlocks = 4;

            var format = new Mock <IBlockCompressionFormat>();

            format.Setup(f => f.BlockSize).Returns(BlockFormat.BC1ByteSize);

            var block1 = Enumerable.Repeat((byte)50, BlockFormat.BC1ByteSize).ToArray();
            var block2 = Enumerable.Repeat((byte)100, BlockFormat.BC1ByteSize).ToArray();
            var block3 = Enumerable.Repeat((byte)150, BlockFormat.BC1ByteSize).ToArray();
            var block4 = Enumerable.Repeat((byte)200, BlockFormat.BC1ByteSize).ToArray();

            var buffer = new byte[numberOfBlocks * BlockFormat.BC1ByteSize];

            Array.Copy(block1, 0, buffer, 0, BlockFormat.BC1ByteSize);
            Array.Copy(block2, 0, buffer, 8, BlockFormat.BC1ByteSize);
            Array.Copy(block3, 0, buffer, 16, BlockFormat.BC1ByteSize);
            Array.Copy(block4, 0, buffer, 24, BlockFormat.BC1ByteSize);

            var data1 = BC1BlockData.FromBytes(block1).ToBytes();
            var data2 = BC1BlockData.FromBytes(block2).ToBytes();
            var data3 = BC1BlockData.FromBytes(block3).ToBytes();
            var data4 = BC1BlockData.FromBytes(block4).ToBytes();

            int widthAndHeight = 2 * BlockFormat.Dimension;

            var ddsImage = DDSImage.CreateEmpty(widthAndHeight, widthAndHeight, format.Object);

            ddsImage.SetBlockData(new Point(0, 0), data1);
            ddsImage.SetBlockData(new Point(1, 0), data2);
            ddsImage.SetBlockData(new Point(0, 1), data3);
            ddsImage.SetBlockData(new Point(1, 1), data4);

            CollectionAssert.AreEqual(ddsImage.GetBuffer(), buffer);
        }