Skip to content

Commit 35f4b2f

Browse files
committed
Clarify dubious float/int operations
1 parent 2190b2d commit 35f4b2f

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

impl/gui/sdl/src/gui_sdl_font.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,13 @@ font::font(
190190
if (pre_multiplied_alpha_supported) {
191191
const std::size_t area = canvas_dimensions.x * canvas_dimensions.y;
192192
for (std::size_t i = 0; i < area; ++i) {
193-
float a = texture_pixels[i].a / 255.0f;
194-
texture_pixels[i].r *= a;
195-
texture_pixels[i].g *= a;
196-
texture_pixels[i].b *= a;
193+
float a = static_cast<float>(texture_pixels[i].a) / 255.0f;
194+
texture_pixels[i].r =
195+
static_cast<unsigned char>(static_cast<float>(texture_pixels[i].r) * a);
196+
texture_pixels[i].g =
197+
static_cast<unsigned char>(static_cast<float>(texture_pixels[i].g) * a);
198+
texture_pixels[i].b =
199+
static_cast<unsigned char>(static_cast<float>(texture_pixels[i].b) * a);
197200
}
198201
}
199202

impl/gui/sdl/src/gui_sdl_material.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,10 @@ void material::premultiply_alpha(SDL_Surface* surface) {
189189

190190
const std::size_t area = surface->w * surface->h;
191191
for (std::size_t i = 0; i < area; ++i) {
192-
float a = pixel_data[i].a / 255.0f;
193-
pixel_data[i].r *= a;
194-
pixel_data[i].g *= a;
195-
pixel_data[i].b *= a;
192+
float a = static_cast<float>(pixel_data[i].a) / 255.0f;
193+
pixel_data[i].r = static_cast<unsigned char>(static_cast<float>(pixel_data[i].r) * a);
194+
pixel_data[i].g = static_cast<unsigned char>(static_cast<float>(pixel_data[i].g) * a);
195+
pixel_data[i].b = static_cast<unsigned char>(static_cast<float>(pixel_data[i].b) * a);
196196
}
197197
}
198198

impl/gui/sdl/src/gui_sdl_render_target.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <SDL.h>
77
#include <SDL_image.h>
8+
#include <algorithm>
89
#include <iostream>
910

1011
namespace lxgui::gui::sdl {
@@ -58,11 +59,14 @@ void render_target::save_to_file(std::string filename) const {
5859

5960
const std::size_t area = surface->w * surface->h;
6061
for (std::size_t i = 0; i < area; ++i) {
61-
float a = pixel_data[i].a / 255.0f;
62+
float a = static_cast<float>(pixel_data[i].a) / 255.0f;
6263
if (a > 0.0f) {
63-
pixel_data[i].r /= a;
64-
pixel_data[i].g /= a;
65-
pixel_data[i].b /= a;
64+
pixel_data[i].r = static_cast<unsigned char>(
65+
std::clamp(static_cast<float>(pixel_data[i].r) / a, 0.0f, 255.0f));
66+
pixel_data[i].g = static_cast<unsigned char>(
67+
std::clamp(static_cast<float>(pixel_data[i].g) / a, 0.0f, 255.0f));
68+
pixel_data[i].b = static_cast<unsigned char>(
69+
std::clamp(static_cast<float>(pixel_data[i].b) / a, 0.0f, 255.0f));
6670
}
6771
}
6872

0 commit comments

Comments
 (0)