From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001 From: jikstra Date: Tue, 20 Aug 2019 03:00:51 +0200 Subject: [PATCH] Backport https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6 to the bundled JUCE framework to make helm compile on gcc 9.1 again --- .../juce_graphics/colour/juce_PixelFormats.h | 25 +--------- .../native/juce_RenderingHelpers.h | 48 +------------------ 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h index 9be9ba09c..3535eab80 100644 --- a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h +++ b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h @@ -105,23 +105,9 @@ class JUCE_API PixelARGB //============================================================================== forcedinline uint8 getAlpha() const noexcept { return components.a; } - forcedinline uint8 getRed() const noexcept { return components.r; } + forcedinline uint8 getRed() const noexcept { return components.r; } forcedinline uint8 getGreen() const noexcept { return components.g; } - forcedinline uint8 getBlue() const noexcept { return components.b; } - - #if JUCE_GCC - // NB these are here as a workaround because GCC refuses to bind to packed values. - forcedinline uint8& getAlpha() noexcept { return comps [indexA]; } - forcedinline uint8& getRed() noexcept { return comps [indexR]; } - forcedinline uint8& getGreen() noexcept { return comps [indexG]; } - forcedinline uint8& getBlue() noexcept { return comps [indexB]; } - #else - forcedinline uint8& getAlpha() noexcept { return components.a; } - forcedinline uint8& getRed() noexcept { return components.r; } - forcedinline uint8& getGreen() noexcept { return components.g; } - forcedinline uint8& getBlue() noexcept { return components.b; } - #endif - + forcedinline uint8 getBlue() const noexcept { return components.b; } //============================================================================== /** Copies another pixel colour over this one. @@ -340,9 +326,6 @@ class JUCE_API PixelARGB { uint32 internal; Components components; - #if JUCE_GCC - uint8 comps[4]; // helper struct needed because gcc does not allow references to packed union members - #endif }; } #ifndef DOXYGEN @@ -429,10 +412,6 @@ class JUCE_API PixelRGB forcedinline uint8 getGreen() const noexcept { return g; } forcedinline uint8 getBlue() const noexcept { return b; } - forcedinline uint8& getRed() noexcept { return r; } - forcedinline uint8& getGreen() noexcept { return g; } - forcedinline uint8& getBlue() noexcept { return b; } - //============================================================================== /** Copies another pixel colour over this one. diff --git a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h index 1c4cd31ef..29519cb5a 100644 --- a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h +++ b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h @@ -581,18 +581,10 @@ namespace EdgeTableFillers : destData (image), sourceColour (colour) { if (sizeof (PixelType) == 3 && destData.pixelStride == sizeof (PixelType)) - { areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen() && sourceColour.getGreen() == sourceColour.getBlue(); - filler[0].set (sourceColour); - filler[1].set (sourceColour); - filler[2].set (sourceColour); - filler[3].set (sourceColour); - } else - { areRGBComponentsEqual = false; - } } forcedinline void setEdgeTableYPos (const int y) noexcept @@ -643,7 +635,6 @@ namespace EdgeTableFillers const Image::BitmapData& destData; PixelType* linePixels; PixelARGB sourceColour; - PixelRGB filler [4]; bool areRGBComponentsEqual; forcedinline PixelType* getPixel (const int x) const noexcept @@ -658,43 +649,8 @@ namespace EdgeTableFillers forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept { - if (destData.pixelStride == sizeof (*dest)) - { - if (areRGBComponentsEqual) // if all the component values are the same, we can cheat.. - { - memset (dest, colour.getRed(), (size_t) width * 3); - } - else - { - if (width >> 5) - { - const int* const intFiller = reinterpret_cast (filler); - - while (width > 8 && (((pointer_sized_int) dest) & 7) != 0) - { - dest->set (colour); - ++dest; - --width; - } - - while (width > 4) - { - int* d = reinterpret_cast (dest); - *d++ = intFiller[0]; - *d++ = intFiller[1]; - *d++ = intFiller[2]; - dest = reinterpret_cast (d); - width -= 4; - } - } - - while (--width >= 0) - { - dest->set (colour); - ++dest; - } - } - } + if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual) + memset ((void*) dest, colour.getRed(), (size_t) width * 3); // if all the component values are the same, we can cheat.. else { JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))