Skip to content

Commit

Permalink
Use cluster fit at higher quality levels
Browse files Browse the repository at this point in the history
  • Loading branch information
elasota committed Aug 22, 2018
1 parent 334acc0 commit 4cd8666
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
6 changes: 3 additions & 3 deletions core/image.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1685,7 +1685,7 @@ Error Image::compress(CompressMode p_mode, CompressSource p_source, float p_loss
case COMPRESS_S3TC: {

ERR_FAIL_COND_V(!_image_compress_bc_func, ERR_UNAVAILABLE);
_image_compress_bc_func(this, p_source);
_image_compress_bc_func(this, p_lossy_quality, p_source);
} break;
case COMPRESS_PVRTC2: {

Expand Down Expand Up @@ -2048,7 +2048,7 @@ ImageMemLoadFunc Image::_png_mem_loader_func = NULL;
ImageMemLoadFunc Image::_jpg_mem_loader_func = NULL;
ImageMemLoadFunc Image::_webp_mem_loader_func = NULL;

void (*Image::_image_compress_bc_func)(Image *, Image::CompressSource) = NULL;
void (*Image::_image_compress_bc_func)(Image *, float, Image::CompressSource) = NULL;
void (*Image::_image_compress_bptc_func)(Image *, float, Image::CompressSource) = NULL;
void (*Image::_image_compress_pvrtc2_func)(Image *) = NULL;
void (*Image::_image_compress_pvrtc4_func)(Image *) = NULL;
Expand Down Expand Up @@ -2569,7 +2569,7 @@ void Image::_bind_methods() {
BIND_ENUM_CONSTANT(COMPRESS_SOURCE_NORMAL);
}

void Image::set_compress_bc_func(void (*p_compress_func)(Image *, CompressSource)) {
void Image::set_compress_bc_func(void (*p_compress_func)(Image *, float, CompressSource)) {

_image_compress_bc_func = p_compress_func;
}
Expand Down
4 changes: 2 additions & 2 deletions core/image.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class Image : public Resource {
static ImageMemLoadFunc _jpg_mem_loader_func;
static ImageMemLoadFunc _webp_mem_loader_func;

static void (*_image_compress_bc_func)(Image *, CompressSource p_source);
static void (*_image_compress_bc_func)(Image *, float, CompressSource p_source);
static void (*_image_compress_bptc_func)(Image *, float p_lossy_quality, CompressSource p_source);
static void (*_image_compress_pvrtc2_func)(Image *);
static void (*_image_compress_pvrtc4_func)(Image *);
Expand Down Expand Up @@ -316,7 +316,7 @@ class Image : public Resource {
Rect2 get_used_rect() const;
Ref<Image> get_rect(const Rect2 &p_area) const;

static void set_compress_bc_func(void (*p_compress_func)(Image *, CompressSource));
static void set_compress_bc_func(void (*p_compress_func)(Image *, float, CompressSource));
static void set_compress_bptc_func(void (*p_compress_func)(Image *, float, CompressSource));
static String get_format_name(Format p_format);

Expand Down
8 changes: 7 additions & 1 deletion modules/squish/image_compress_squish.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void image_decompress_squish(Image *p_image) {
p_image->create(p_image->get_width(), p_image->get_height(), p_image->has_mipmaps(), target_format, data);
}

void image_compress_squish(Image *p_image, Image::CompressSource p_source) {
void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source) {

if (p_image->get_format() >= Image::FORMAT_DXT1)
return; //do not compress, already compressed
Expand All @@ -86,6 +86,12 @@ void image_compress_squish(Image *p_image, Image::CompressSource p_source) {
if (p_image->get_format() <= Image::FORMAT_RGBA8) {

int squish_comp = squish::kColourRangeFit;

if (p_lossy_quality > 0.85)
squish_comp = squish::kColourIterativeClusterFit;
else if (p_lossy_quality > 0.75)
squish_comp = squish::kColourClusterFit;

Image::Format target_format = Image::FORMAT_RGBA8;

Image::DetectChannels dc = p_image->get_detected_channels();
Expand Down
2 changes: 1 addition & 1 deletion modules/squish/image_compress_squish.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

#include "image.h"

void image_compress_squish(Image *p_image, Image::CompressSource p_source);
void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source);
void image_decompress_squish(Image *p_image);

#endif // IMAGE_COMPRESS_SQUISH_H

0 comments on commit 4cd8666

Please sign in to comment.