1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001
From: jikstra <jikstra@disroot.org>
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<const int*> (filler);
-
- while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)
- {
- dest->set (colour);
- ++dest;
- --width;
- }
-
- while (width > 4)
- {
- int* 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))
|