all repos — fluxbox @ 6514398bead7926b85b6e5eb7d6276f47a97cd2f

custom fork of the fluxbox windowmanager

Branchless code for interlacing a texture
Mathias Gumz akira at fluxbox dot org
commit

6514398bead7926b85b6e5eb7d6276f47a97cd2f

parent

779618e45d4571bb6a4866aa2e398780f4b4da5d

1 files changed, 15 insertions(+), 25 deletions(-)

jump to
M src/FbTk/TextureRender.ccsrc/FbTk/TextureRender.cc

@@ -85,12 +85,14 @@ color.g = PRE_MULTIPLY_0_75[color.g];

color.b = PRE_MULTIPLY_0_75[color.b]; } + static void noop(RGBA& color) { } typedef void (*colorFunc)(RGBA&); - static const colorFunc pseudoInterlaceFuncs[2]; + static const colorFunc pseudoInterlaceFuncs[3]; }; -const RGBA::colorFunc RGBA::pseudoInterlaceFuncs[2] = { +const RGBA::colorFunc RGBA::pseudoInterlaceFuncs[3] = { + RGBA::noop, RGBA::brighten_4, RGBA::darken };

@@ -233,12 +235,11 @@ //

size_t half_size = (size >> 1) + (size & 1); prepare(half_size, &rgba[0], from, to, scale); - mirrorRGB(size, 1, rgba); // TODO!! + mirrorRGB(size, 1, rgba); } - -inline void pseudoInterlace(FbTk::RGBA& rgba, const size_t& y) { - FbTk::RGBA::pseudoInterlaceFuncs[y & 1](rgba); +inline void pseudoInterlace(FbTk::RGBA& rgba, const bool& do_interlace, const size_t& y) { + FbTk::RGBA::pseudoInterlaceFuncs[do_interlace + (do_interlace * (y & 1))](rgba); }

@@ -367,11 +368,8 @@ size_t i;

for (i = 0, y = 0; y < height; ++y) { for (x = 0; x < width; ++x, ++i) { - rgba[i] = gradient[x]; - - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -392,9 +390,7 @@

for (i = 0, y = 0; y < height; ++y) { for (x = 0; x < width; ++x, ++i) { rgba[i] = gradient[y]; - - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -427,8 +423,7 @@ rgba[i].r = x_gradient[x].r + y_gradient[y].r;

rgba[i].g = x_gradient[x].g + y_gradient[y].g; rgba[i].b = x_gradient[x].b + y_gradient[y].b; - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -482,8 +477,7 @@ } else {

rgba[i] = y_gradient[y]; } - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -525,8 +519,7 @@ } else {

rgba[i] = y_gradient[y]; } - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -562,8 +555,7 @@ rgba[i].r = x_gradient[x].r + y_gradient[y].r;

rgba[i].g = x_gradient[x].g + y_gradient[y].g; rgba[i].b = x_gradient[x].b + y_gradient[y].b; - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -608,8 +600,7 @@ rgba[i].r = (unsigned char)(r - (d * dr));

rgba[i].g = (unsigned char)(g - (d * dg)); rgba[i].b = (unsigned char)(b - (d * db)); - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }

@@ -643,8 +634,7 @@ rgba[i].r = x_gradient[x].r + y_gradient[y].r;

rgba[i].g = x_gradient[x].g + y_gradient[y].g; rgba[i].b = x_gradient[x].b + y_gradient[y].b; - if (interlaced) - pseudoInterlace(rgba[i], y); + pseudoInterlace(rgba[i], interlaced, y); } } }