From 4e0adb2af8b424c43d22bd431011c9a6c57d36b6 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Tue, 30 Apr 2019 17:11:24 +0100 Subject: [PATCH] GCC 9 compatibility fixes --- .../juce_graphics/colour/juce_PixelFormats.h | 34 +++--------- .../native/juce_RenderingHelpers.h | 52 ++----------------- 2 files changed, 9 insertions(+), 77 deletions(-) diff --git a/modules/juce_graphics/colour/juce_PixelFormats.h b/modules/juce_graphics/colour/juce_PixelFormats.h index c57ad53c635b..934c61c47813 100644 --- a/modules/juce_graphics/colour/juce_PixelFormats.h +++ b/modules/juce_graphics/colour/juce_PixelFormats.h @@ -107,22 +107,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. @@ -341,9 +328,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 @@ -428,13 +412,9 @@ class JUCE_API PixelRGB //============================================================================== forcedinline uint8 getAlpha() const noexcept { return 0xff; } - forcedinline uint8 getRed() const noexcept { return r; } + forcedinline uint8 getRed() const noexcept { return r; } 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; } + forcedinline uint8 getBlue() const noexcept { return b; } //============================================================================== /** Copies another pixel colour over this one. @@ -651,11 +631,9 @@ class JUCE_API PixelAlpha //============================================================================== forcedinline uint8 getAlpha() const noexcept { return a; } - forcedinline uint8& getAlpha() noexcept { return a; } - - forcedinline uint8 getRed() const noexcept { return 0; } + forcedinline uint8 getRed() const noexcept { return 0; } forcedinline uint8 getGreen() const noexcept { return 0; } - forcedinline uint8 getBlue() const noexcept { return 0; } + forcedinline uint8 getBlue() const noexcept { return 0; } //============================================================================== /** Copies another pixel colour over this one. diff --git a/modules/juce_graphics/native/juce_RenderingHelpers.h b/modules/juce_graphics/native/juce_RenderingHelpers.h index b8137ac4d043..10bd64e14596 100644 --- a/modules/juce_graphics/native/juce_RenderingHelpers.h +++ b/modules/juce_graphics/native/juce_RenderingHelpers.h @@ -577,18 +577,10 @@ namespace EdgeTableFillers : destData (image), sourceColour (colour) { if (sizeof (PixelType) == 3 && (size_t) 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 (int y) noexcept @@ -670,7 +662,6 @@ namespace EdgeTableFillers const Image::BitmapData& destData; PixelType* linePixels; PixelARGB sourceColour; - PixelRGB filler[4]; bool areRGBComponentsEqual; forcedinline PixelType* getPixel (int x) const noexcept @@ -685,47 +676,10 @@ namespace EdgeTableFillers forcedinline void replaceLine (PixelRGB* dest, PixelARGB colour, int width) const noexcept { - if ((size_t) destData.pixelStride == sizeof (*dest)) - { - if (areRGBComponentsEqual) // if all the component values are the same, we can cheat.. - { - memset ((void*) dest, colour.getRed(), (size_t) width * 3); - } - else - { - if (width >> 5) - { - auto intFiller = reinterpret_cast (filler); - - while (width > 8 && (((pointer_sized_int) dest) & 7) != 0) - { - dest->set (colour); - ++dest; - --width; - } - - while (width > 4) - { - auto 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)) - } + JUCE_PERFORM_PIXEL_OP_LOOP (set (colour)); } forcedinline void replaceLine (PixelAlpha* dest, const PixelARGB colour, int width) const noexcept