Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gcc 9.1 compatibility fixes #233

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 2 additions & 23 deletions JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,23 +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 @@ -342,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 @@ -433,10 +416,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.

Expand Down
50 changes: 2 additions & 48 deletions JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -582,18 +582,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 (int y) noexcept
Expand Down Expand Up @@ -675,7 +667,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 @@ -690,47 +681,10 @@ namespace EdgeTableFillers

forcedinline void replaceLine (PixelRGB* dest, 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)
{
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))
}
}

forcedinline void replaceLine (PixelAlpha* dest, const PixelARGB colour, int width) const noexcept
Expand Down