/**
*
*/
package model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import jogl.DDSImage;
import model.DDSFile;
import org.junit.Test;
import ddsutil.MipMapsUtil;
import test.DDSTestCase;
import util.Stopwatch;
/**
* @author danielsenff
*
*/
public class DDSImageFileTests extends DDSTestCase {
@Test
public void testFourCC() throws FileNotFoundException, IOException {
assertTrue("is a dds image", DDSImage.isDDSImage(new FileInputStream(textureDDS1024)));
}
@Test
public void testDimensions() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
assertEquals(1024, ddsimage.getHeight());
assertEquals(1024, ddsimage.getWidth());
}
@Test
public void testIsDXT5() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
assertEquals(DDSImage.D3DFMT_DXT5, ddsimage.getPixelformat());
}
@Test
public void testActivateMipMaps() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
assertEquals("activated mipmaps beforehand", true, ddsimage.hasMipMaps());
ddsimage.setHasMipMaps(true);
assertEquals("activated mipmaps", true, ddsimage.hasMipMaps());
ddsimage.setHasMipMaps(false);
assertEquals("deactivated mipmaps", false, ddsimage.hasMipMaps());
}
@Test
public void testHasMipMaps() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
assertEquals("has MipMaps", true, ddsimage.hasMipMaps());
}
@Test
public void testNumMipMap() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
try {
int numMipMaps = DDSImage.read(textureDDS1024).getNumMipMaps();
assertEquals("Number of MipMaps from original:",numMipMaps, ddsimage.getNumMipMaps());
assertEquals("calculated number of MipMaps", numMipMaps, MipMapsUtil.calculateMaxNumberOfMipMaps(ddsimage.getWidth(), ddsimage.getHeight()));
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testDecompressBufferedImage() {
Stopwatch stopwatch = new Stopwatch();
stopwatch.start();
DDSFile ddsimage = loadDDSFile(textureDDS1024);
BufferedImage originalImage = ddsimage.getData();
stopwatch.stop();
stopwatch.printMilliseconds("Time fo producing BufferedImage: ");
assertEquals(1024, originalImage.getHeight());
assertEquals(1024, originalImage.getWidth());
assertEquals(BufferedImage.TYPE_4BYTE_ABGR, originalImage.getType());
assertEquals("File objects are identical", textureDDS1024.getAbsolutePath(), ddsimage.getAbsolutePath());
}
/*
@Test
public void testGetAllMipMapBuffer() {
DDSImageFile ddsimage = DDSImageFileTests.loadDDSImage(original1024);
assertMipMapBuffer(ddsimage.generateAllMipMapBuffer());
}*/
@Test
public void testMipMapBuffer() {
DDSFile ddsimage = loadDDSFile(textureDDS1024);
assertEquals("has mipmaps", true, ddsimage.hasMipMaps());
assertEquals("numMipMaps", 11, ddsimage.getNumMipMaps());
// assertMipMapBuffer(MipMapsUtil.compressMipMaps(ddsimage.getWidth(),
// ddsimage.getHeight(), ddsimage.generateAllMipMapBuffer(), Squish.CompressionType.DXT5));
}
private void assertMipMapBuffer(ByteBuffer[] buffer) {
int curSize = buffer[0].remaining();
for (int i = 0; i < buffer.length; i++) {
int remaining = buffer[i].remaining();
System.out.println("MipMapGen-Level: " + i + " remaining: " + remaining + " expected " + curSize);
if (curSize>16) {
// squished, 16 is min blocksize
assertEquals(curSize, remaining);
curSize /= 4;
}
}
}
@Test
public void testIsPowerOfTwo() {
assertEquals(true, DDSFile.isPowerOfTwo(2048));
assertEquals(true, DDSFile.isPowerOfTwo(1024));
assertEquals(true, DDSFile.isPowerOfTwo(512));
assertEquals(false, DDSFile.isPowerOfTwo(612));
assertEquals(false, DDSFile.isPowerOfTwo(33));
assertEquals(false, DDSFile.isPowerOfTwo(78));
}
}