Added support for DXT1/3/5 and BC5/7 compressed textures via love.image.CompressedData. Some internals are still iffy.

- added a new CompressedData type to love.image
- added love.image.isCompressed(file or data)
- love.graphics.newImage automatically tests for compression when loading a file
- added love.graphics.isSupported strings for DXT, BC5, and BC7

Compressed textures meant to be used on the GPU offer huge performance gains when
- loading the texture from a file
- loading the texture from RAM to VRAM
- loading mipmaps
- rendering

--HG--
branch : image-CompressedData
This commit is contained in:
Alex Szpakowski
2013-04-04 19:09:18 -03:00
parent 7e658861d7
commit 5301026f3c
27 changed files with 1902 additions and 87 deletions
+21 -1
View File
@@ -26,6 +26,7 @@
#include "common/math.h"
#include "common/config.h"
#include "image/ImageData.h"
#include "image/CompressedData.h"
#include "graphics/Image.h"
// OpenGL
@@ -52,10 +53,17 @@ public:
* Creates a new Image. Not that anything is ready to use
* before load is called.
*
* @param file The file from which to load the image.
* @param data The data from which to load the image.
**/
Image(love::image::ImageData *data);
/**
* Creates a new Image with compressed image data.
*
* @param cdata The compressed data from which to load the image.
**/
Image(love::image::CompressedData *cdata);
/**
* Destructor. Deletes the hardware texture and other resources.
**/
@@ -126,6 +134,9 @@ public:
static bool hasMipmapSupport();
static bool hasMipmapSharpnessSupport();
static bool hasCompressedTextureSupport();
static bool hasCompressedTextureSupport(image::CompressedData::TextureType type);
private:
void drawv(const Matrix &t, const vertex *v) const;
@@ -138,6 +149,9 @@ private:
// The ImageData from which the texture is created.
love::image::ImageData *data;
// Or the Compressed Image Data from which the texture is created.
love::image::CompressedData *cdata;
// Width and height of the hardware texture.
float width, height;
@@ -153,12 +167,16 @@ private:
// True if mipmaps have been created for this Image.
bool mipmapsCreated;
bool isCompressed;
// The image's filter mode
Image::Filter filter;
// The image's wrap mode
Image::Wrap wrap;
void preload();
bool loadVolatilePOT();
bool loadVolatileNPOT();
@@ -169,6 +187,8 @@ private:
static FilterMode defaultMipmapFilter;
static float defaultMipmapSharpness;
GLenum getCompressedFormat(image::CompressedData::TextureType type) const;
}; // Image
} // opengl