Remove HQ2X and the `Image.expand_2x_hq2x()` method
As of Godot 3.0, HQ2X is no longer used to upscale the editor theme and icons on hiDPI displays, which limited its effective uses. HQ2X was also used to upscale the project theme when the "Use Hidpi" project setting was enabled, but results were often less than ideal. The new StyleBoxFlat and SVG support also make HQ2X less important to have as a core feature. This decreases binary sizes slightly (-150 KB on most platforms, -212 KB on WebAssembly release). This partially addresses #12419.
This commit is contained in:
parent
ac58372db8
commit
d935a4348d
|
@ -257,12 +257,6 @@ Comment: FastLZ
|
|||
Copyright: 2005-2020, Ariya Hidayat
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/misc/hq2x.cpp
|
||||
./thirdparty/misc/hq2x.h
|
||||
Comment: hq2x implementation
|
||||
Copyright: 2016, Bruno Ribeiro
|
||||
License: Apache-2.0
|
||||
|
||||
Files: ./thirdparty/misc/ifaddrs-android.cc
|
||||
./thirdparty/misc/ifaddrs-android.h
|
||||
Comment: libjingle
|
||||
|
|
|
@ -52,7 +52,6 @@ thirdparty_misc_sources = [
|
|||
"r128.c",
|
||||
"smaz.c",
|
||||
# C++ sources
|
||||
"hq2x.cpp",
|
||||
"pcg.cpp",
|
||||
"triangulator.cpp",
|
||||
"clipper.cpp",
|
||||
|
|
|
@ -37,8 +37,6 @@
|
|||
#include "core/os/copymem.h"
|
||||
#include "core/print_string.h"
|
||||
|
||||
#include "thirdparty/misc/hq2x.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
const char *Image::format_names[Image::FORMAT_MAX] = {
|
||||
|
@ -1445,47 +1443,6 @@ static void _generate_po2_mipmap(const Component *p_src, Component *p_dst, uint3
|
|||
}
|
||||
}
|
||||
|
||||
void Image::expand_x2_hq2x() {
|
||||
ERR_FAIL_COND(!_can_modify(format));
|
||||
|
||||
bool used_mipmaps = has_mipmaps();
|
||||
if (used_mipmaps) {
|
||||
clear_mipmaps();
|
||||
}
|
||||
|
||||
Format current = format;
|
||||
|
||||
if (current != FORMAT_RGBA8) {
|
||||
convert(FORMAT_RGBA8);
|
||||
}
|
||||
|
||||
Vector<uint8_t> dest;
|
||||
dest.resize(width * 2 * height * 2 * 4);
|
||||
|
||||
{
|
||||
const uint8_t *r = data.ptr();
|
||||
uint8_t *w = dest.ptrw();
|
||||
|
||||
ERR_FAIL_COND(!r);
|
||||
|
||||
hq2x_resize((const uint32_t *)r, width, height, (uint32_t *)w);
|
||||
}
|
||||
|
||||
width *= 2;
|
||||
height *= 2;
|
||||
data = dest;
|
||||
|
||||
if (current != FORMAT_RGBA8) {
|
||||
convert(current);
|
||||
}
|
||||
|
||||
// FIXME: This is likely meant to use "used_mipmaps" as defined above, but if we do,
|
||||
// we end up with a regression: GH-22747
|
||||
if (mipmaps) {
|
||||
generate_mipmaps();
|
||||
}
|
||||
}
|
||||
|
||||
void Image::shrink_x2() {
|
||||
ERR_FAIL_COND(data.size() == 0);
|
||||
|
||||
|
@ -3047,7 +3004,6 @@ void Image::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("resize_to_po2", "square"), &Image::resize_to_po2, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("resize", "width", "height", "interpolation"), &Image::resize, DEFVAL(INTERPOLATE_BILINEAR));
|
||||
ClassDB::bind_method(D_METHOD("shrink_x2"), &Image::shrink_x2);
|
||||
ClassDB::bind_method(D_METHOD("expand_x2_hq2x"), &Image::expand_x2_hq2x);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("crop", "width", "height"), &Image::crop);
|
||||
ClassDB::bind_method(D_METHOD("flip_x"), &Image::flip_x);
|
||||
|
|
|
@ -235,7 +235,6 @@ public:
|
|||
void resize_to_po2(bool p_square = false);
|
||||
void resize(int p_width, int p_height, Interpolation p_interpolation = INTERPOLATE_BILINEAR);
|
||||
void shrink_x2();
|
||||
void expand_x2_hq2x();
|
||||
bool is_size_po2() const;
|
||||
/**
|
||||
* Crop the image to a specific size, if larger, then the image is filled by black
|
||||
|
|
|
@ -190,13 +190,6 @@
|
|||
<description>
|
||||
</description>
|
||||
</method>
|
||||
<method name="expand_x2_hq2x">
|
||||
<return type="void">
|
||||
</return>
|
||||
<description>
|
||||
Stretches the image and enlarges it by a factor of 2. No interpolation is done.
|
||||
</description>
|
||||
</method>
|
||||
<method name="fill">
|
||||
<return type="void">
|
||||
</return>
|
||||
|
|
|
@ -52,20 +52,9 @@ static Ref<StyleBoxTexture> make_stylebox(T p_src, float p_left, float p_top, fl
|
|||
} else {
|
||||
texture = Ref<ImageTexture>(memnew(ImageTexture));
|
||||
Ref<Image> img = memnew(Image(p_src));
|
||||
|
||||
if (scale > 1) {
|
||||
Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->expand_x2_hq2x();
|
||||
if (scale != 2.0) {
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
}
|
||||
} else if (scale < 1) {
|
||||
Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
}
|
||||
const Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
|
||||
texture->create_from_image(img);
|
||||
(*tex_cache)[p_src] = texture;
|
||||
|
@ -98,19 +87,9 @@ template <class T>
|
|||
static Ref<Texture2D> make_icon(T p_src) {
|
||||
Ref<ImageTexture> texture(memnew(ImageTexture));
|
||||
Ref<Image> img = memnew(Image(p_src));
|
||||
if (scale > 1) {
|
||||
Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->expand_x2_hq2x();
|
||||
if (scale != 2.0) {
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
}
|
||||
} else if (scale < 1) {
|
||||
Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
}
|
||||
const Size2 orig_size = Size2(img->get_width(), img->get_height());
|
||||
img->convert(Image::FORMAT_RGBA8);
|
||||
img->resize(orig_size.x * scale, orig_size.y * scale);
|
||||
texture->create_from_image(img);
|
||||
|
||||
return texture;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,19 +0,0 @@
|
|||
#ifndef HQ2X_H
|
||||
#define HQ2X_H
|
||||
|
||||
#include "core/typedefs.h"
|
||||
|
||||
|
||||
uint32_t *hq2x_resize(
|
||||
const uint32_t *image,
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
uint32_t *output,
|
||||
uint32_t trY = 0x30,
|
||||
uint32_t trU = 0x07,
|
||||
uint32_t trV = 0x06,
|
||||
uint32_t trA = 0x50,
|
||||
bool wrapX = false,
|
||||
bool wrapY = false );
|
||||
|
||||
#endif // HQ2X_H
|
Loading…
Reference in New Issue