summarylogtreecommitdiffstats
path: root/juce-pixel.patch
blob: 2d94c4a6d2566a948b4090acf67bbbd19b1015a3 (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
From 4e0adb2af8b424c43d22bd431011c9a6c57d36b6 Mon Sep 17 00:00:00 2001
From: Tom Poole <thomas.poole@roli.com>
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 c57ad53c635..934c61c4781 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 b8137ac4d04..10bd64e1459 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<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