diff options
author | Juan Linietsky <juan@godotengine.org> | 2021-03-26 15:14:12 -0300 |
---|---|---|
committer | Juan Linietsky <juan@godotengine.org> | 2021-03-26 15:44:00 -0300 |
commit | 4763835c11c6772e4da84fa8bfec6c02ca06bc0b (patch) | |
tree | 0cdc556bb90af1e1d70af0bae718850564fbb4eb /core | |
parent | 2bd89ac24960c105e1f570d991def4dc3667d1fa (diff) |
Optimize image channel detection
Speeds up compression
Diffstat (limited to 'core')
-rw-r--r-- | core/io/image.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/core/io/image.cpp b/core/io/image.cpp index 5d46d75efe..873eb66f33 100644 --- a/core/io/image.cpp +++ b/core/io/image.cpp @@ -3010,26 +3010,28 @@ Image::UsedChannels Image::detect_used_channels(CompressSource p_source) { ERR_FAIL_COND_V(is_compressed(), USED_CHANNELS_RGBA); bool r = false, g = false, b = false, a = false, c = false; - for (int i = 0; i < width; i++) { - for (int j = 0; j < height; j++) { - Color col = get_pixel(i, j); + const uint8_t *data_ptr = data.ptr(); - if (col.r > 0.001) { - r = true; - } - if (col.g > 0.001) { - g = true; - } - if (col.b > 0.001) { - b = true; - } - if (col.a < 0.999) { - a = true; - } + uint32_t data_total = width * height; - if (col.r != col.b || col.r != col.g || col.b != col.g) { - c = true; - } + for (uint32_t i = 0; i < data_total; i++) { + Color col = _get_color_at_ofs(data_ptr, i); + + if (col.r > 0.001) { + r = true; + } + if (col.g > 0.001) { + g = true; + } + if (col.b > 0.001) { + b = true; + } + if (col.a < 0.999) { + a = true; + } + + if (col.r != col.b || col.r != col.g || col.b != col.g) { + c = true; } } |