Skip to content

Commit

Permalink
GCC 9 compatibility fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
tpoole committed Apr 30, 2019
1 parent df62a7c commit 4e0adb2
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 77 deletions.
34 changes: 6 additions & 28 deletions modules/juce_graphics/colour/juce_PixelFormats.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down
52 changes: 3 additions & 49 deletions modules/juce_graphics/native/juce_RenderingHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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<const int*> (filler);

while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)
{
dest->set (colour);
++dest;
--width;
}

while (width > 4)
{
auto d = reinterpret_cast<int*> (dest);
*d++ = intFiller[0];
*d++ = intFiller[1];
*d++ = intFiller[2];
dest = reinterpret_cast<PixelRGB*> (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
Expand Down

0 comments on commit 4e0adb2

Please sign in to comment.