From 2a5b9b5f98dac77ee2378205ad062425b2fab8c1 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Thu, 24 Apr 2025 09:39:14 -0400 Subject: [PATCH] Fix two RGBGFX bugs (#1671) * Fix two RGBGFX bugs * Fix clang-format idempotence * Update src/gfx/rgba.cpp Co-authored-by: Eldred Habert --------- Co-authored-by: Eldred Habert --- src/gfx/pal_spec.cpp | 10 ++++------ src/gfx/process.cpp | 4 ++-- src/gfx/rgba.cpp | 5 +++-- test/gfx/alpha_embedded.err | 4 ++++ test/gfx/alpha_embedded.flags | 1 + test/gfx/alpha_embedded.png | Bin 0 -> 279 bytes test/gfx/alpha_grayscale.out.2bpp | Bin 0 -> 32 bytes test/gfx/alpha_grayscale.out.pal | Bin 0 -> 8 bytes test/gfx/alpha_grayscale.out.palmap | Bin 0 -> 2 bytes test/gfx/alpha_grayscale.out.tilemap | Bin 0 -> 2 bytes test/gfx/alpha_grayscale.png | Bin 0 -> 128 bytes test/gfx/alpha_rgb.out.2bpp | Bin 0 -> 32 bytes test/gfx/alpha_rgb.out.pal | Bin 0 -> 16 bytes test/gfx/alpha_rgb.out.palmap | Bin 0 -> 2 bytes test/gfx/alpha_rgb.out.tilemap | Bin 0 -> 2 bytes test/gfx/alpha_rgb.png | Bin 0 -> 128 bytes test/gfx/font_nums.out.2bpp | Bin 0 -> 160 bytes test/gfx/font_nums.out.pal | Bin 0 -> 8 bytes test/gfx/font_nums.png | Bin 0 -> 312 bytes 19 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 test/gfx/alpha_embedded.err create mode 100644 test/gfx/alpha_embedded.flags create mode 100644 test/gfx/alpha_embedded.png create mode 100644 test/gfx/alpha_grayscale.out.2bpp create mode 100644 test/gfx/alpha_grayscale.out.pal create mode 100644 test/gfx/alpha_grayscale.out.palmap create mode 100644 test/gfx/alpha_grayscale.out.tilemap create mode 100644 test/gfx/alpha_grayscale.png create mode 100644 test/gfx/alpha_rgb.out.2bpp create mode 100644 test/gfx/alpha_rgb.out.pal create mode 100644 test/gfx/alpha_rgb.out.palmap create mode 100644 test/gfx/alpha_rgb.out.tilemap create mode 100644 test/gfx/alpha_rgb.png create mode 100644 test/gfx/font_nums.out.2bpp create mode 100644 test/gfx/font_nums.out.pal create mode 100644 test/gfx/font_nums.png diff --git a/src/gfx/pal_spec.cpp b/src/gfx/pal_spec.cpp index 3fb84675..d87d672c 100644 --- a/src/gfx/pal_spec.cpp +++ b/src/gfx/pal_spec.cpp @@ -231,8 +231,7 @@ static std::optional parseDec(std::string const &str, size_t &n) { return std::optional{value}; } -static std::optional - parseColor(std::string const &str, size_t &n, uint16_t i) { +static std::optional parseColor(std::string const &str, size_t &n, uint16_t i) { std::optional r = parseDec(str, n); if (!r) { error("Failed to parse color #%d (\"%s\"): invalid red component", i + 1, str.c_str()); @@ -602,10 +601,9 @@ void parseExternalPalSpec(char const *arg) { std::tuple{"GBC", &parseGBCFile, std::ios::binary}, }; - auto iter = - std::find_if(RANGE(parsers), [&arg, &ptr](auto const &parser) { - return strncasecmp(arg, std::get<0>(parser), ptr - arg) == 0; - }); + auto iter = std::find_if(RANGE(parsers), [&arg, &ptr](auto const &parser) { + return strncasecmp(arg, std::get<0>(parser), ptr - arg) == 0; + }); if (iter == parsers.end()) { error( "Unknown external palette format \"%.*s\"", diff --git a/src/gfx/process.cpp b/src/gfx/process.cpp index 4b9d34e5..f27fb3e2 100644 --- a/src/gfx/process.cpp +++ b/src/gfx/process.cpp @@ -604,9 +604,9 @@ static std::tuple, std::vector> // Convert the palette spec to actual palettes std::vector palettes(options.palSpec.size()); for (auto [spec, pal] : zip(options.palSpec, palettes)) { - for (size_t i = 0; i < options.nbColorsPerPal && (!spec[i] || spec[i]->isOpaque()); ++i) { + for (size_t i = 0; i < options.nbColorsPerPal; ++i) { // If the spec has a gap, there's no need to copy anything. - if (spec[i]) { + if (spec[i].has_value() && !spec[i]->isTransparent()) { pal[i] = spec[i]->cgbColor(); } } diff --git a/src/gfx/rgba.cpp b/src/gfx/rgba.cpp index 0e0677ef..ace209f3 100644 --- a/src/gfx/rgba.cpp +++ b/src/gfx/rgba.cpp @@ -58,6 +58,7 @@ uint16_t Rgba::cgbColor() const { uint8_t Rgba::grayIndex() const { assume(isGray()); - // Convert from [0; 256[ to [0; maxOpaqueColors[ - return static_cast(255 - red) * options.maxOpaqueColors() / 256; + // Convert from 0..<256 to hasTransparentPixels..d#O4m=ZJ`n0Vx()VF=)&cC*`YqIs^pK`T- z0vWg_Z@T%!-$q#D+$#r$w5Bx^;#602@9mv`wB)tlk!rIElF$7fy;xA)egErf=CG+@ zMoW&iy~uQ1D(c~8sVAd>&u`8WOD#9 T2wV!D45B<;{an^LB{Ts5OuuJ@ literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_grayscale.out.2bpp b/test/gfx/alpha_grayscale.out.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..e0cbbb26301032c7ecff0cdc1326028fb4929320 GIT binary patch literal 32 WcmZQzC;&q~Fkk=z2%muu3>g4CfCC=@ literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_grayscale.out.pal b/test/gfx/alpha_grayscale.out.pal new file mode 100644 index 0000000000000000000000000000000000000000..255e7e55f8a04f0a98de4a612f6be90b3a0a1bdb GIT binary patch literal 8 PcmZQ*_+KyJ#J~Um4FdvE literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_grayscale.out.palmap b/test/gfx/alpha_grayscale.out.palmap new file mode 100644 index 0000000000000000000000000000000000000000..09f370e38f498a462e1ca0faa724559b6630c04f GIT binary patch literal 2 JcmZQz0000200961 literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_grayscale.out.tilemap b/test/gfx/alpha_grayscale.out.tilemap new file mode 100644 index 0000000000000000000000000000000000000000..bdc955b7b2e610ad5a72302b139a2e6cb325519a GIT binary patch literal 2 JcmZQz1ONa700IC2 literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_grayscale.png b/test/gfx/alpha_grayscale.png new file mode 100644 index 0000000000000000000000000000000000000000..c28ad35a2134fb9616ac0b6e30fea6f94ba07b2c GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQY^(zo*^7SP{WbZ0py!|x;Tbt zOg!3e$i-m5!*qV1js5m$PTiEk6_ZzVIB_uE_$H`wcj3wSmrXk!%;c{4wE9%<>;J71 Z(p#%|x!a7REP+Nac)I$ztaD0e0s!i8Cj$Tg literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_rgb.out.2bpp b/test/gfx/alpha_rgb.out.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..c6a02a762b37815eb3a41063b57b9018710399c1 GIT binary patch literal 32 WcmZQzNB}|x2?hx^AYcFjR6YPF_yQ3C literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_rgb.out.pal b/test/gfx/alpha_rgb.out.pal new file mode 100644 index 0000000000000000000000000000000000000000..768358d83d406a95228fb79bd77efb8256567e3c GIT binary patch literal 16 WcmZQ*_+P&@jDdjxNPB5AFaQ8Gy9Ijy literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_rgb.out.palmap b/test/gfx/alpha_rgb.out.palmap new file mode 100644 index 0000000000000000000000000000000000000000..bdc955b7b2e610ad5a72302b139a2e6cb325519a GIT binary patch literal 2 JcmZQz1ONa700IC2 literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_rgb.out.tilemap b/test/gfx/alpha_rgb.out.tilemap new file mode 100644 index 0000000000000000000000000000000000000000..bdc955b7b2e610ad5a72302b139a2e6cb325519a GIT binary patch literal 2 JcmZQz1ONa700IC2 literal 0 HcmV?d00001 diff --git a/test/gfx/alpha_rgb.png b/test/gfx/alpha_rgb.png new file mode 100644 index 0000000000000000000000000000000000000000..a35bd2020db68f6c2a3988c9f436cf607865f447 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQY^(zo*^7SP{WbZ0py!|x;Tbt zOiWH#!1jZm^~nk2z@w}N8?vsh`oB7C?V*>GE?l_qf8oM~8lSF|G7A0RKg#kn^BL13 aMuzQ+WM4kByUGYOg2B_(&t;ucLK6VW^($5Y literal 0 HcmV?d00001 diff --git a/test/gfx/font_nums.out.2bpp b/test/gfx/font_nums.out.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..b36f76d6862d2559291448dff011bee9eb0d2845 GIT binary patch literal 160 zcmb1OP+@R_LKOxHAhcl6VBmm4J0Q=8!G(c^frmkWA%UR|$Y%jV8!%}B)D40V9!REw s!2t*hp!y3KWEd2H5T;H7C=XHvGG71)K{7622%#+)YQVf2uqu#B0QHp&`2YX_ literal 0 HcmV?d00001 diff --git a/test/gfx/font_nums.out.pal b/test/gfx/font_nums.out.pal new file mode 100644 index 0000000000000000000000000000000000000000..939611f9a87e4f93df5bdfcbd54319c2673985df GIT binary patch literal 8 PcmZQ*_+QV^z|a5y4gCWD literal 0 HcmV?d00001 diff --git a/test/gfx/font_nums.png b/test/gfx/font_nums.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecd7c53d2a3a6f6488682cc842f20810747dbc6 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<-!3HE#uG_8!Qcpcy978<3&xT#(I%2@F``>@} z@-GJjjTQ^OOR&og%f6D5Q+wdsz2AG*Z58`$e^N{mV#!EkaS{A