Class DDSImage


  • public class DDSImage
    extends Object
    A reader and writer for DirectDraw Surface (.dds) files, which are used to describe textures. These files can contain multiple mipmap levels in one file. This class is currently minimal and does not support all of the possible file formats.
    • Method Detail

      • read

        public static DDSImage read​(String filename)
                             throws IOException
        Reads a DirectDraw surface from the specified file name, returning the resulting DDSImage.
        Parameters:
        filename - File name
        Returns:
        DDS image object
        Throws:
        IOException - if an I/O exception occurred
      • read

        public static DDSImage read​(File file)
                             throws IOException
        Reads a DirectDraw surface from the specified file, returning the resulting DDSImage.
        Parameters:
        file - File object
        Returns:
        DDS image object
        Throws:
        IOException - if an I/O exception occurred
      • read

        public static DDSImage read​(ByteBuffer buf)
                             throws IOException
        Reads a DirectDraw surface from the specified ByteBuffer, returning the resulting DDSImage.
        Parameters:
        buf - Input data
        Returns:
        DDS image object
        Throws:
        IOException - if an I/O exception occurred
      • close

        public void close()
        Closes open files and resources associated with the open DDSImage. No other methods may be called on this object once this is called.
      • createFromData

        public static DDSImage createFromData​(int d3dFormat,
                                              int width,
                                              int height,
                                              ByteBuffer[] mipmapData)
                                       throws IllegalArgumentException
        Creates a new DDSImage from data supplied by the user. The resulting DDSImage can be written to disk using the write() method.
        Parameters:
        d3dFormat - the D3DFMT_ constant describing the data; it is assumed that it is packed tightly
        width - the width in pixels of the topmost mipmap image
        height - the height in pixels of the topmost mipmap image
        mipmapData - the data for each mipmap level of the resulting DDSImage; either only one mipmap level should be specified, or they all must be
        Returns:
        DDS image object
        Throws:
        IllegalArgumentException - if the data does not match the specified arguments
      • write

        public void write​(String filename)
                   throws IOException
        Writes this DDSImage to the specified file name.
        Parameters:
        filename - File name to write to
        Throws:
        IOException - if an I/O exception occurred
      • write

        public void write​(File file)
                   throws IOException
        Writes this DDSImage to the specified file name.
        Parameters:
        file - File object to write to
        Throws:
        IOException - if an I/O exception occurred
      • isSurfaceDescFlagSet

        public boolean isSurfaceDescFlagSet​(int flag)
        Test for presence/absence of surface description flags (DDSD_*)
        Parameters:
        flag - DDSD_* flags set to test
        Returns:
        true if flag present or false otherwise
      • isPixelFormatFlagSet

        public boolean isPixelFormatFlagSet​(int flag)
        Test for presence/absence of pixel format flags (DDPF_*)
      • getPixelFormat

        public int getPixelFormat()
        Gets the pixel format of this texture (D3DFMT_*) based on some heuristics. Returns D3DFMT_UNKNOWN if could not recognize the pixel format.
      • isCubemap

        public boolean isCubemap()
        Indicates whether this texture is cubemap
        Returns:
        true if cubemap or false otherwise
      • isCubemapSidePresent

        public boolean isCubemapSidePresent​(int side)
        Indicates whethe this cubemap side present
        Parameters:
        side - Side to test
        Returns:
        true if side present or false otherwise
      • isCompressed

        public boolean isCompressed()
        Indicates whether this texture is compressed.
      • getCompressionFormat

        public int getCompressionFormat()
        If this surface is compressed, returns the kind of compression used (DXT1..DXT5).
      • getWidth

        public int getWidth()
        Width of the texture (or the top-most mipmap if mipmaps are present)
      • getHeight

        public int getHeight()
        Height of the texture (or the top-most mipmap if mipmaps are present)
      • getDepth

        public int getDepth()
        Total number of bits per pixel. Only valid if DDPF_RGB is present. For A8R8G8B8, would be 32.
      • getNumMipMaps

        public int getNumMipMaps()
        Number of mip maps in the texture
      • getMipMap

        public DDSImage.ImageInfo getMipMap​(int map)
        Gets the ith mipmap data (0..getNumMipMaps() - 1)
        Parameters:
        map - Mipmap index
        Returns:
        Image object
      • getMipMap

        public DDSImage.ImageInfo getMipMap​(int side,
                                            int map)
        Gets the ith mipmap data (0..getNumMipMaps() - 1)
        Parameters:
        side - Cubemap side or 0 for 2D texture
        map - Mipmap index
        Returns:
        Image object
      • getAllMipMaps

        public DDSImage.ImageInfo[] getAllMipMaps()
        Returns an array of ImageInfos corresponding to all mipmap levels of this DDS file.
        Returns:
        Mipmap image objects set
      • getAllMipMaps

        public DDSImage.ImageInfo[] getAllMipMaps​(int side)
        Returns an array of ImageInfos corresponding to all mipmap levels of this DDS file.
        Parameters:
        side - Cubemap side or 0 for 2D texture
        Returns:
        Mipmap image objects set
      • getCompressionFormatName

        public static String getCompressionFormatName​(int compressionFormat)
        Converts e.g. DXT1 compression format constant (see getCompressionFormat()) into "DXT1".
        Parameters:
        compressionFormat - Compression format constant
        Returns:
        String format code
      • allocateBlankBuffer

        public static ByteBuffer allocateBlankBuffer​(int width,
                                                     int height,
                                                     int openGLInternalFormat)
        Allocates a temporary, empty ByteBuffer suitable for use in a call to glCompressedTexImage2D. This is used by the Texture class to expand non-power-of-two DDS compressed textures to power-of-two sizes on hardware not supporting OpenGL 2.0 and the NPOT texture extension. The specified OpenGL internal format must be one of GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, or GL_COMPRESSED_RGBA_S3TC_DXT5_EXT.
      • debugPrint

        public void debugPrint()