public void convert2RGBA(TpcTexture texture) { if (texture.isCompressed()) { return; } for (TpcMipMap mipMap : texture.getMipMaps()) { if (texture.getFormat() == TpcPixelFormat.RGB) { convertFromRGB2RGBA(mipMap); texture.setDataType(PixelDataType.PixelDataType8); texture.setFormat(TpcPixelFormat.RGBA); texture.setRawFormat(TpcPixelFormatRaw.RGBA8); texture.setMinDataSize(4); } else if (texture.getFormat() == TpcPixelFormat.BGR) { convertFromBgr2RGBA(mipMap); texture.setDataType(PixelDataType.PixelDataType8); texture.setFormat(TpcPixelFormat.RGBA); texture.setRawFormat(TpcPixelFormatRaw.RGBA8); texture.setMinDataSize(4); } else if (texture.getFormat() == TpcPixelFormat.GRAY) { convertFromGRAY2RGBA(mipMap); texture.setDataType(PixelDataType.PixelDataType8); texture.setFormat(TpcPixelFormat.RGBA); texture.setRawFormat(TpcPixelFormatRaw.RGBA8); texture.setMinDataSize(4); } } }
public void decompress(TpcTexture texture) throws IOException { if (!texture.isCompressed()) { return; } if (!(texture.getRawFormat() == TpcPixelFormatRaw.DXT1 || texture.getRawFormat() == TpcPixelFormatRaw.DXT3 || texture.getRawFormat() == TpcPixelFormatRaw.DXT5)) { throw new IllegalArgumentException( "Bad compression format " + texture.getRawFormat() + " in texture [" + texture.getName() + "]"); } for (TpcMipMap mipMap : texture.getMipMaps()) { ByteArrayInputStream src = new ByteArrayInputStream(Arrays.copyOf(mipMap.getData(), mipMap.getData().length)); /* The DXT algorithms work on 4x4 pixel blocks. Textures smaller than one * block will be padded, but larger textures need to be correctly aligned. */ byte[] result; if (texture.getRawFormat() == TpcPixelFormatRaw.DXT1) { result = decompressDxt1(texture, src); mipMap.setData(result); mipMap.setSize(mipMap.getWidth() * mipMap.getHeight() * 4); } else if (texture.getRawFormat() == TpcPixelFormatRaw.DXT5) { result = decompressDxt5(texture, src); mipMap.setData(result); mipMap.setSize(mipMap.getWidth() * mipMap.getHeight() * 4); verticalMirror(mipMap, 4); } else if (texture.getRawFormat() == TpcPixelFormatRaw.DXT3) { throw new RuntimeException("DXT3 uncompression is not implemented yet"); } else { throw new RuntimeException("Unknown compression"); } } texture.setCompressed(false); texture.setDataType(PixelDataType.PixelDataType8); texture.setFormat(TpcPixelFormat.RGBA); texture.setRawFormat(TpcPixelFormatRaw.RGBA8); texture.setMinDataSize(4); }