Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/share/native/libawt/java2d/loops/Index12Gray.c
41159 views
1
/*
2
* Copyright (c) 2001, 2004, 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
#include <string.h>
27
28
#include "AnyShort.h"
29
#include "Index12Gray.h"
30
#include "AlphaMacros.h"
31
32
#include "IntArgb.h"
33
#include "IntArgbPre.h"
34
#include "IntRgb.h"
35
#include "ThreeByteBgr.h"
36
#include "ByteGray.h"
37
#include "ByteIndexed.h"
38
#include "Index8Gray.h"
39
40
/*
41
* This file declares, registers, and defines the various graphics
42
* primitive loops to manipulate surfaces of type "Index12Gray".
43
*
44
* See also LoopMacros.h
45
*/
46
47
RegisterFunc RegisterIndex12Gray;
48
49
DECLARE_CONVERT_BLIT(Index12Gray, IntArgb);
50
DECLARE_CONVERT_BLIT(IntArgb, Index12Gray);
51
DECLARE_CONVERT_BLIT(ThreeByteBgr, Index12Gray);
52
DECLARE_CONVERT_BLIT(ByteGray, Index12Gray);
53
DECLARE_CONVERT_BLIT(Index8Gray, Index12Gray);
54
DECLARE_CONVERT_BLIT(ByteIndexed, Index12Gray);
55
DECLARE_CONVERT_BLIT(Index12Gray, Index12Gray);
56
57
DECLARE_SCALE_BLIT(Index12Gray, Index12Gray);
58
DECLARE_SCALE_BLIT(Index12Gray, IntArgb);
59
DECLARE_SCALE_BLIT(IntArgb, Index12Gray);
60
DECLARE_SCALE_BLIT(ThreeByteBgr, Index12Gray);
61
DECLARE_SCALE_BLIT(UshortGray, Index12Gray);
62
DECLARE_SCALE_BLIT(ByteIndexed, Index12Gray);
63
DECLARE_SCALE_BLIT(ByteGray, Index12Gray);
64
DECLARE_SCALE_BLIT(Index8Gray, Index12Gray);
65
66
DECLARE_XPAR_CONVERT_BLIT(ByteIndexedBm, Index12Gray);
67
DECLARE_XPAR_BLITBG(ByteIndexedBm, Index12Gray);
68
69
DECLARE_XOR_BLIT(IntArgb, Index12Gray);
70
DECLARE_ALPHA_MASKFILL(Index12Gray);
71
DECLARE_ALPHA_MASKBLIT(IntArgb, Index12Gray);
72
DECLARE_ALPHA_MASKBLIT(IntArgbPre, Index12Gray);
73
DECLARE_ALPHA_MASKBLIT(IntRgb, Index12Gray);
74
DECLARE_SRCOVER_MASKFILL(Index12Gray);
75
DECLARE_SRCOVER_MASKBLIT(IntArgb, Index12Gray);
76
DECLARE_SRCOVER_MASKBLIT(IntArgbPre, Index12Gray);
77
DECLARE_SOLID_DRAWGLYPHLISTAA(Index12Gray);
78
79
DECLARE_TRANSFORMHELPER_FUNCS(Index12Gray);
80
81
NativePrimitive Index12GrayPrimitives[] = {
82
REGISTER_CONVERT_BLIT(IntArgb, Index12Gray),
83
REGISTER_CONVERT_BLIT_EQUIV(IntRgb, Index12Gray,
84
NAME_CONVERT_BLIT(IntArgb, Index12Gray)),
85
REGISTER_CONVERT_BLIT(ThreeByteBgr, Index12Gray),
86
REGISTER_CONVERT_BLIT(ByteGray, Index12Gray),
87
REGISTER_CONVERT_BLIT(Index8Gray, Index12Gray),
88
REGISTER_CONVERT_BLIT_FLAGS(Index12Gray, Index12Gray,
89
SD_LOCK_LUT,
90
SD_LOCK_LUT | SD_LOCK_INVGRAY),
91
REGISTER_CONVERT_BLIT(ByteIndexed, Index12Gray),
92
93
REGISTER_SCALE_BLIT(Index12Gray, IntArgb),
94
REGISTER_SCALE_BLIT(IntArgb, Index12Gray),
95
REGISTER_SCALE_BLIT_EQUIV(IntRgb, Index12Gray,
96
NAME_SCALE_BLIT(IntArgb, Index12Gray)),
97
REGISTER_SCALE_BLIT(ThreeByteBgr, Index12Gray),
98
REGISTER_SCALE_BLIT(UshortGray, Index12Gray),
99
REGISTER_SCALE_BLIT(ByteIndexed, Index12Gray),
100
REGISTER_SCALE_BLIT(ByteGray, Index12Gray),
101
REGISTER_SCALE_BLIT(Index8Gray, Index12Gray),
102
REGISTER_SCALE_BLIT_FLAGS(Index12Gray, Index12Gray, 0,
103
SD_LOCK_LUT | SD_LOCK_INVGRAY),
104
105
REGISTER_XPAR_CONVERT_BLIT(ByteIndexedBm, Index12Gray),
106
REGISTER_XPAR_BLITBG(ByteIndexedBm, Index12Gray),
107
108
REGISTER_XOR_BLIT(IntArgb, Index12Gray),
109
REGISTER_ALPHA_MASKFILL(Index12Gray),
110
REGISTER_ALPHA_MASKBLIT(IntArgb, Index12Gray),
111
REGISTER_ALPHA_MASKBLIT(IntArgbPre, Index12Gray),
112
REGISTER_ALPHA_MASKBLIT(IntRgb, Index12Gray),
113
REGISTER_SRCOVER_MASKFILL(Index12Gray),
114
REGISTER_SRCOVER_MASKBLIT(IntArgb, Index12Gray),
115
REGISTER_SRCOVER_MASKBLIT(IntArgbPre, Index12Gray),
116
REGISTER_SOLID_DRAWGLYPHLISTAA(Index12Gray),
117
118
REGISTER_TRANSFORMHELPER_FUNCS(Index12Gray),
119
};
120
121
extern jboolean checkSameLut(jint *SrcReadLut, jint *DstReadLut,
122
SurfaceDataRasInfo *pSrcInfo,
123
SurfaceDataRasInfo *pDstInfo);
124
125
jboolean RegisterIndex12Gray(JNIEnv *env)
126
{
127
return RegisterPrimitives(env, Index12GrayPrimitives,
128
ArraySize(Index12GrayPrimitives));
129
}
130
131
jint PixelForIndex12Gray(SurfaceDataRasInfo *pRasInfo, jint rgb)
132
{
133
jint r, g, b, gray;
134
ExtractIntDcmComponentsX123(rgb, r, g, b);
135
gray = ComposeByteGrayFrom3ByteRgb(r, g, b);
136
return pRasInfo->invGrayTable[gray];
137
}
138
139
DEFINE_CONVERT_BLIT(IntArgb, Index12Gray, 3ByteRgb)
140
141
DEFINE_CONVERT_BLIT(ThreeByteBgr, Index12Gray, 3ByteRgb)
142
143
DEFINE_CONVERT_BLIT(ByteGray, Index12Gray, 1ByteGray)
144
145
DEFINE_CONVERT_BLIT(Index8Gray, Index12Gray, 1ByteGray)
146
147
DEFINE_CONVERT_BLIT(ByteIndexed, Index12Gray, 3ByteRgb)
148
149
void NAME_CONVERT_BLIT(Index12Gray, Index12Gray)
150
(void *srcBase, void *dstBase,
151
juint width, juint height,
152
SurfaceDataRasInfo *pSrcInfo,
153
SurfaceDataRasInfo *pDstInfo,
154
NativePrimitive *pPrim,
155
CompositeInfo *pCompInfo)
156
{
157
DeclareIndex12GrayLoadVars(SrcRead)
158
DeclareIndex12GrayLoadVars(DstRead)
159
jint srcScan = pSrcInfo->scanStride;
160
jint dstScan = pDstInfo->scanStride;
161
162
InitIndex12GrayLoadVars(SrcRead, pSrcInfo);
163
InitIndex12GrayLoadVars(DstRead, pDstInfo);
164
165
if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) {
166
do {
167
memcpy(dstBase, srcBase, width);
168
srcBase = PtrAddBytes(srcBase, srcScan);
169
dstBase = PtrAddBytes(dstBase, dstScan);
170
} while (--height > 0);
171
} else {
172
DeclareIndex12GrayStoreVars(DstWrite);
173
InitIndex12GrayStoreVarsY(DstWrite, pDstInfo);
174
175
BlitLoopWidthHeight(Index12Gray, pSrc, srcBase, pSrcInfo,
176
Index12Gray, pDst, dstBase, pDstInfo, DstWrite,
177
width, height,
178
ConvertVia1ByteGray
179
(pSrc, Index12Gray, SrcRead,
180
pDst, Index12Gray, DstWrite, 0, 0));
181
}
182
}
183
184
void NAME_SCALE_BLIT(Index12Gray, Index12Gray)
185
(void *srcBase, void *dstBase,
186
juint width, juint height,
187
jint sxloc, jint syloc,
188
jint sxinc, jint syinc, jint shift,
189
SurfaceDataRasInfo *pSrcInfo,
190
SurfaceDataRasInfo *pDstInfo,
191
NativePrimitive *pPrim,
192
CompositeInfo *pCompInfo)
193
{
194
DeclareIndex8GrayLoadVars(SrcRead)
195
DeclareIndex8GrayLoadVars(DstRead)
196
jint srcScan = pSrcInfo->scanStride;
197
jint dstScan = pDstInfo->scanStride;
198
DeclareIndex8GrayStoreVars(DstWrite)
199
200
InitIndex8GrayLoadVars(SrcRead, pSrcInfo);
201
InitIndex8GrayLoadVars(DstRead, pDstInfo);
202
203
if (checkSameLut(SrcReadLut, DstReadLut, pSrcInfo, pDstInfo)) {
204
BlitLoopScaleWidthHeight(Index8Gray, pSrc, srcBase, pSrcInfo,
205
Index8Gray, pDst, dstBase, pDstInfo, DstWrite,
206
x, width, height,
207
sxloc, syloc, sxinc, syinc, shift,
208
pDst[0] = pSrc[x]);
209
} else {
210
DeclareIndex8GrayStoreVars(DstWrite);
211
InitIndex8GrayStoreVarsY(DstWrite, pDstInfo);
212
BlitLoopScaleWidthHeight(Index8Gray, pSrc, srcBase, pSrcInfo,
213
Index8Gray, pDst, dstBase, pDstInfo, DstWrite,
214
x, width, height,
215
sxloc, syloc, sxinc, syinc, shift,
216
ConvertVia1ByteGray(pSrc, Index8Gray, SrcRead,
217
pDst, Index8Gray, DstWrite,
218
x, 0));
219
}
220
}
221
222
DEFINE_SCALE_BLIT(Index12Gray, IntArgb, 1IntArgb)
223
224
DEFINE_SCALE_BLIT(IntArgb, Index12Gray, 3ByteRgb)
225
226
DEFINE_SCALE_BLIT(ThreeByteBgr, Index12Gray, 3ByteRgb)
227
228
DEFINE_SCALE_BLIT(UshortGray, Index12Gray, 1ByteGray)
229
230
DEFINE_SCALE_BLIT_LUT8(ByteIndexed, Index12Gray, PreProcessLut)
231
232
DEFINE_SCALE_BLIT(ByteGray, Index12Gray, 1ByteGray)
233
234
DEFINE_SCALE_BLIT_LUT8(Index8Gray, Index12Gray, PreProcessLut)
235
236
DEFINE_XPAR_CONVERT_BLIT_LUT8(ByteIndexedBm, Index12Gray, PreProcessLut)
237
238
DEFINE_XPAR_BLITBG_LUT8(ByteIndexedBm, Index12Gray, PreProcessLut)
239
240
DEFINE_XOR_BLIT(IntArgb, Index12Gray, AnyShort)
241
242
DEFINE_ALPHA_MASKFILL(Index12Gray, 1ByteGray)
243
244
DEFINE_ALPHA_MASKBLIT(IntArgb, Index12Gray, 1ByteGray)
245
246
DEFINE_ALPHA_MASKBLIT(IntArgbPre, Index12Gray, 1ByteGray)
247
248
DEFINE_ALPHA_MASKBLIT(IntRgb, Index12Gray, 1ByteGray)
249
250
DEFINE_SRCOVER_MASKFILL(Index12Gray, 1ByteGray)
251
252
DEFINE_SRCOVER_MASKBLIT(IntArgb, Index12Gray, 1ByteGray)
253
254
DEFINE_SRCOVER_MASKBLIT(IntArgbPre, Index12Gray, 1ByteGray)
255
256
DEFINE_SOLID_DRAWGLYPHLISTAA(Index12Gray, 1ByteGray)
257
258
DEFINE_TRANSFORMHELPERS(Index12Gray)
259
260