1/*
2 * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#ifndef IntArgb_h_Included
27#define IntArgb_h_Included
28
29#include "IntDcm.h"
30#include "ByteGray.h"
31#include "UshortGray.h"
32
33/*
34 * This file contains macro and type definitions used by the macros in
35 * LoopMacros.h to manipulate a surface of type "IntArgb".
36 */
37
38typedef jint IntArgbPixelType;
39typedef jint IntArgbDataType;
40
41#define IntArgbIsOpaque 0
42
43#define IntArgbPixelStride 4
44
45#define DeclareIntArgbLoadVars(PREFIX)
46#define DeclareIntArgbStoreVars(PREFIX)
47#define InitIntArgbLoadVars(PREFIX, pRasInfo)
48#define SetIntArgbStoreVarsYPos(PREFIX, pRasInfo, y)
49#define SetIntArgbStoreVarsXPos(PREFIX, pRasInfo, x)
50#define InitIntArgbStoreVarsY(PREFIX, pRasInfo)
51#define InitIntArgbStoreVarsX(PREFIX, pRasInfo)
52#define NextIntArgbStoreVarsX(PREFIX)
53#define NextIntArgbStoreVarsY(PREFIX)
54#define DeclareIntArgbInitialLoadVars(pRasInfo, pRas, PREFIX, x)
55#define InitialLoadIntArgb(pRas, PREFIX)
56#define ShiftBitsIntArgb(PREFIX)
57#define FinalStoreIntArgb(pRas, PREFIX)
58
59#define IntArgbPixelFromArgb(pixel, rgb, pRasInfo) \
60 (pixel) = (rgb)
61
62#define StoreIntArgbPixel(pRas, x, pixel) \
63 (pRas)[x] = (pixel)
64
65#define DeclareIntArgbPixelData(PREFIX)
66
67#define ExtractIntArgbPixelData(PIXEL, PREFIX)
68
69#define StoreIntArgbPixelData(pPix, x, pixel, PREFIX) \
70 (pPix)[x] = (pixel)
71
72
73#define LoadIntArgbTo1IntRgb(pRas, PREFIX, x, rgb) \
74 (rgb) = (pRas)[x]
75
76#define LoadIntArgbTo1IntArgb(pRas, PREFIX, x, argb) \
77 (argb) = (pRas)[x]
78
79#define LoadIntArgbTo3ByteRgb(pRas, PREFIX, x, r, g, b) \
80 do { \
81 jint pixel = (pRas)[x]; \
82 ExtractIntDcmComponentsX123(pixel, r, g, b); \
83 } while (0)
84
85#define LoadIntArgbTo4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
86 do { \
87 jint pixel = (pRas)[x]; \
88 ExtractIntDcmComponents1234(pixel, a, r, g, b); \
89 } while (0)
90
91#define StoreIntArgbFrom1IntRgb(pRas, PREFIX, x, rgb) \
92 (pRas)[x] = 0xff000000 | (rgb)
93
94#define StoreIntArgbFrom1IntArgb(pRas, PREFIX, x, argb) \
95 (pRas)[x] = (argb)
96
97#define StoreIntArgbFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \
98 StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, 0xff, r, g, b)
99
100#define StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, a, r, g, b) \
101 (pRas)[x] = ComposeIntDcmComponents1234(a, r, g, b)
102
103#define CopyIntArgbToIntArgbPre(pRGB, i, PREFIX, pRow, x) \
104 do { \
105 jint argb = (pRow)[x]; \
106 jint a = URShift(argb, 24); \
107 if (a == 0) { \
108 argb = 0; \
109 } else if (a < 0xff) { \
110 jint r = (argb >> 16) & 0xff; \
111 jint g = (argb >> 8) & 0xff; \
112 jint b = (argb ) & 0xff; \
113 r = MUL8(a, r); \
114 g = MUL8(a, g); \
115 b = MUL8(a, b); \
116 argb = ComposeIntDcmComponents1234(a, r, g, b); \
117 } \
118 (pRGB)[i] = argb; \
119 } while (0)
120
121
122#define DeclareIntArgbAlphaLoadData(PREFIX) \
123 jint PREFIX;
124
125#define InitIntArgbAlphaLoadData(PREFIX, pRasInfo) \
126 PREFIX = 0
127
128#define LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX) \
129 do { \
130 PREFIX = (pRas)[0]; \
131 COMP_PREFIX ## A = ((juint) PREFIX) >> 24; \
132 } while (0)
133
134#define LoadAlphaFromIntArgbFor1ByteGray(pRas, PREFIX, COMP_PREFIX) \
135 LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX)
136
137#define LoadAlphaFromIntArgbFor1ShortGray(pRas, PREFIX, COMP_PREFIX) \
138 do { \
139 LoadAlphaFromIntArgbFor4ByteArgb(pRas, PREFIX, COMP_PREFIX); \
140 COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
141 } while (0)
142
143#define Postload4ByteArgbFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
144 do { \
145 COMP_PREFIX ## R = (PREFIX >> 16) & 0xff; \
146 COMP_PREFIX ## G = (PREFIX >> 8) & 0xff; \
147 COMP_PREFIX ## B = (PREFIX >> 0) & 0xff; \
148 } while (0)
149
150#define Postload1ByteGrayFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
151 do { \
152 int r, g, b; \
153 ExtractIntDcmComponentsX123(PREFIX, r, g, b); \
154 COMP_PREFIX ## G = ComposeByteGrayFrom3ByteRgb(r, g, b); \
155 } while (0)
156
157#define Postload1ShortGrayFromIntArgb(pRas, PREFIX, COMP_PREFIX) \
158 do { \
159 int r, g, b; \
160 ExtractIntDcmComponentsX123(PREFIX, r, g, b); \
161 COMP_PREFIX ## G = ComposeUshortGrayFrom3ByteRgb(r, g, b); \
162 } while (0)
163
164
165#define IntArgbIsPremultiplied 0
166
167#define DeclareIntArgbBlendFillVars(PREFIX)
168
169#define ClearIntArgbBlendFillVars(PREFIX, argb) \
170 argb = 0
171
172#define InitIntArgbBlendFillVarsNonPre(PREFIX, argb, COMP_PREFIX) \
173 argb = (COMP_PREFIX ## A << 24) | (argb & 0x00ffffff); \
174
175#define InitIntArgbBlendFillVarsPre(PREFIX, argb, COMP_PREFIX)
176
177#define StoreIntArgbBlendFill(pRas, PREFIX, x, argb, COMP_PREFIX) \
178 (pRas)[x] = (argb)
179
180#define StoreIntArgbFrom4ByteArgbComps(pRas, PREFIX, x, COMP_PREFIX) \
181 StoreIntArgbFrom4ByteArgb(pRas, PREFIX, x, \
182 COMP_PREFIX ## A, COMP_PREFIX ## R, \
183 COMP_PREFIX ## G, COMP_PREFIX ## B)
184
185
186/*
187 * Extract ## STRATEGY ## CompsAndAlphaFromArgb(pixel, COMP_PREFIX)
188 */
189#define Extract3ByteRgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
190 ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, COMP_PREFIX ## R, \
191 COMP_PREFIX ## G, COMP_PREFIX ## B)
192
193#define Extract4ByteArgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
194 Extract3ByteRgbCompsAndAlphaFromArgb(pixel, COMP_PREFIX)
195
196#define Extract1ByteGrayCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
197 do { \
198 int r, g, b; \
199 ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, r, g, b); \
200 COMP_PREFIX ## G = ComposeByteGrayFrom3ByteRgb(r, g, b); \
201 } while (0)
202
203#define Extract1ShortGrayCompsAndAlphaFromArgb(pixel, COMP_PREFIX) \
204 do { \
205 int r, g, b; \
206 ExtractIntDcmComponents1234(pixel, COMP_PREFIX ## A, r, g, b); \
207 COMP_PREFIX ## G = ComposeUshortGrayFrom3ByteRgb(r, g, b); \
208 COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
209 } while (0)
210
211/*
212 * SrcOver ## TYPE ## BlendFactor
213 * Returns appropriate blend value for use in blending calculations.
214 */
215#define SrcOverIntArgbBlendFactor(dF, dA) \
216 (dA)
217
218#endif /* IntArgb_h_Included */
219