-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpixels.js
299 lines (289 loc) · 11.2 KB
/
pixels.js
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
const {
e,
ref,
Struct,
ArrayType,
en,
push_export
} = require('./api');
e.SDL_ALPHA_OPAQUE = 255;
e.SDL_ALPHA_TRANSPARENT = 0;
e.SDL_PIXELTYPE_UNKNOWN = en(0);
e.SDL_PIXELTYPE_INDEX1 = en();
e.SDL_PIXELTYPE_INDEX4 = en();
e.SDL_PIXELTYPE_INDEX8 = en();
e.SDL_PIXELTYPE_PACKED8 = en();
e.SDL_PIXELTYPE_PACKED16 = en();
e.SDL_PIXELTYPE_PACKED32 = en();
e.SDL_PIXELTYPE_ARRAYU8 = en();
e.SDL_PIXELTYPE_ARRAYU16 = en();
e.SDL_PIXELTYPE_ARRAYU32 = en();
e.SDL_PIXELTYPE_ARRAYF16 = en();
e.SDL_PIXELTYPE_ARRAYF32 = en();
e.SDL_BITMAPORDER_NONE = en(0);
e.SDL_BITMAPORDER_4321 = en();
e.SDL_BITMAPORDER_1234 = en();
e.SDL_PIXELTYPE_ARRAYF32 = en();
e.SDL_PACKEDORDER_NONE = en(0);
e.SDL_PACKEDORDER_XRGB = en();
e.SDL_PACKEDORDER_RGBX = en();
e.SDL_PACKEDORDER_ARGB = en();
e.SDL_PACKEDORDER_RGBA = en();
e.SDL_PACKEDORDER_XBGR = en();
e.SDL_PACKEDORDER_BGRX = en();
e.SDL_PACKEDORDER_ABGR = en();
e.SDL_PACKEDORDER_BGRA = en();
e.SDL_ARRAYORDER_NONE = en(0);
e.SDL_ARRAYORDER_RGB = en();
e.SDL_ARRAYORDER_RGBA = en();
e.SDL_ARRAYORDER_ARGB = en();
e.SDL_ARRAYORDER_BGR = en();
e.SDL_ARRAYORDER_BGRA = en();
e.SDL_ARRAYORDER_ABGR = en();
e.SDL_PACKEDLAYOUT_NONE = en(0);
e.SDL_PACKEDLAYOUT_332 = en();
e.SDL_PACKEDLAYOUT_4444 = en();
e.SDL_PACKEDLAYOUT_1555 = en();
e.SDL_PACKEDLAYOUT_5551 = en();
e.SDL_PACKEDLAYOUT_565 = en();
e.SDL_PACKEDLAYOUT_8888 = en();
e.SDL_PACKEDLAYOUT_2101010 = en();
e.SDL_PACKEDLAYOUT_1010102 = en();
e.SDL_Color = Struct({
r: 'Uint8',
g: 'Uint8',
b: 'Uint8',
a: 'Uint8'
});
e.SDL_Palette = Struct({
ncolors: 'int',
colors: ref.refType(e.SDL_Color),
version: 'Uint32',
refcount: 'int',
});
e.SDL_PixelFormat = Struct({
format: 'Uint32',
palette: ref.refType(e.SDL_Palette),
BitsPerPixel: 'Uint8',
BytesPerPixel: 'Uint8',
padding: ArrayType('Uint8', 2),
Rmask: 'Uint32',
Gmask: 'Uint32',
Bmask: 'Uint32',
Amask: 'Uint32',
Rloss: 'Uint8',
Gloss: 'Uint8',
Bloss: 'Uint8',
Aloss: 'Uint8',
Rshift: 'Uint8',
Gshift: 'Uint8',
Bshift: 'Uint8',
Ashift: 'Uint8',
refcount: 'int',
next: 'void*'
});
e.SDL_DEFINE_PIXELFOURCC = function(A, B, C, D) {
return A << 0 | B << 8 | C << 16 | D << 24;
}
e.SDL_DEFINE_PIXELFORMAT = function(type, order, layout, bits, bytes) {
return ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) |
((bits) << 8) | ((bytes) << 0));
}
e.SDL_PIXELFLAG = function(X) {
return ((X) >> 28) & 0x0F;
}
e.SDL_PIXELTYPE = function(X) {
return ((X) >> 24) & 0x0F;
}
e.SDL_PIXELORDER = function(X) {
return ((X) >> 20) & 0x0F;
}
e.SDL_PIXELLAYOUT = function(X) {
return ((X) >> 16) & 0x0F;
}
e.SDL_BITSPERPIXEL = function(X) {
return ((X) >> 8) & 0x0F;
}
e.SDL_BYTESPERPIXEL = function(X) {
return e.SDL_ISPIXELFORMAT_FOURCC(X) ?
((((X) == e.SDL_PIXELFORMAT_YUY2) ||
((X) == e.SDL_PIXELFORMAT_UYVY) ||
((X) == e.SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF);
}
e.SDL_ISPIXELFORMAT_INDEXED = function(format) {
return (!e.SDL_ISPIXELFORMAT_FOURCC(format) &&
((e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_INDEX1) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_INDEX4) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_INDEX8)));
}
e.SDL_ISPIXELFORMAT_PACKED = function(format) {
return (!e.SDL_ISPIXELFORMAT_FOURCC(format) &&
((e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_PACKED8) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_PACKED16) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_PACKED32)));
}
e.SDL_ISPIXELFORMAT_ARRAY = function(format) {
return (!e.SDL_ISPIXELFORMAT_FOURCC(format) &&
((e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_ARRAYU8) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_ARRAYU16) ||
(e.SDL_PIXELTYPE(format) == e.e.SDL_PIXELTYPE_ARRAYU32) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_ARRAYF16) ||
(e.SDL_PIXELTYPE(format) == e.SDL_PIXELTYPE_ARRAYF32)));
}
e.SDL_ISPIXELFORMAT_ALPHA = function(format) {
return ((e.SDL_ISPIXELFORMAT_PACKED(format) &&
((e.SDL_PIXELORDER(format) == e.SDL_PACKEDORDER_ARGB) ||
(e.SDL_PIXELORDER(format) == e.e.SDL_PACKEDORDER_RGBA) ||
(e.SDL_PIXELORDER(format) == e.SDL_PACKEDORDER_ABGR) ||
(e.SDL_PIXELORDER(format) == e.SDL_PACKEDORDER_BGRA))) ||
(e.SDL_ISPIXELFORMAT_ARRAY(format) &&
((e.SDL_PIXELORDER(format) == e.SDL_ARRAYORDER_ARGB) ||
(e.SDL_PIXELORDER(format) == e.SDL_ARRAYORDER_RGBA) ||
(e.SDL_PIXELORDER(format) == e.SDL_ARRAYORDER_ABGR) ||
(e.SDL_PIXELORDER(format) == e.SDL_ARRAYORDER_BGRA))));
}
e.SDL_ISPIXELFORMAT_FOURCC = function(format) {
return ((format) && (e.SDL_PIXELFLAG(format) != 1));
}
e.SDL_PIXELFORMAT_UNKNOWN = en(0);
e.SDL_PIXELFORMAT_INDEX1LSB =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_INDEX1, e.SDL_BITMAPORDER_4321, 0,
1, 0));
e.SDL_PIXELFORMAT_INDEX1MSB =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_INDEX1, e.SDL_BITMAPORDER_1234, 0,
1, 0));
e.SDL_PIXELFORMAT_INDEX4LSB =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_INDEX4, e.SDL_BITMAPORDER_4321, 0,
4, 0));
e.SDL_PIXELFORMAT_INDEX4MSB =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_INDEX4, e.SDL_BITMAPORDER_1234, 0,
4, 0));
e.SDL_PIXELFORMAT_INDEX8 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1));
e.SDL_PIXELFORMAT_RGB332 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED8, e.SDL_PACKEDORDER_XRGB,
e.SDL_PACKEDLAYOUT_332, 8, 1));
e.SDL_PIXELFORMAT_XRGB4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XRGB,
e.SDL_PACKEDLAYOUT_4444, 12, 2));
e.SDL_PIXELFORMAT_RGB444 = e.SDL_PIXELFORMAT_XRGB4444,
e.SDL_PIXELFORMAT_XBGR4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XBGR,
e.SDL_PACKEDLAYOUT_4444, 12, 2));
e.SDL_PIXELFORMAT_BGR444 = e.SDL_PIXELFORMAT_XBGR4444,
e.SDL_PIXELFORMAT_XRGB1555 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XRGB,
e.SDL_PACKEDLAYOUT_1555, 15, 2));
e.SDL_PIXELFORMAT_RGB555 = e.SDL_PIXELFORMAT_XRGB1555,
e.SDL_PIXELFORMAT_XBGR1555 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XBGR,
e.SDL_PACKEDLAYOUT_1555, 15, 2));
e.SDL_PIXELFORMAT_BGR555 = e.SDL_PIXELFORMAT_XBGR1555,
e.SDL_PIXELFORMAT_ARGB4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_ARGB,
e.SDL_PACKEDLAYOUT_4444, 16, 2));
e.SDL_PIXELFORMAT_RGBA4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_RGBA,
e.SDL_PACKEDLAYOUT_4444, 16, 2));
e.SDL_PIXELFORMAT_ABGR4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_ABGR,
e.SDL_PACKEDLAYOUT_4444, 16, 2));
e.SDL_PIXELFORMAT_BGRA4444 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_BGRA,
e.SDL_PACKEDLAYOUT_4444, 16, 2));
e.SDL_PIXELFORMAT_ARGB1555 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_ARGB,
e.SDL_PACKEDLAYOUT_1555, 16, 2));
e.SDL_PIXELFORMAT_RGBA5551 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_RGBA,
e.SDL_PACKEDLAYOUT_5551, 16, 2));
e.SDL_PIXELFORMAT_ABGR1555 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_ABGR,
e.SDL_PACKEDLAYOUT_1555, 16, 2));
e.SDL_PIXELFORMAT_BGRA5551 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_BGRA,
e.SDL_PACKEDLAYOUT_5551, 16, 2));
e.SDL_PIXELFORMAT_RGB565 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XRGB,
e.SDL_PACKEDLAYOUT_565, 16, 2));
e.SDL_PIXELFORMAT_BGR565 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED16, e.SDL_PACKEDORDER_XBGR,
e.SDL_PACKEDLAYOUT_565, 16, 2));
e.SDL_PIXELFORMAT_RGB24 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_ARRAYU8, e.SDL_ARRAYORDER_RGB, 0,
24, 3));
e.SDL_PIXELFORMAT_BGR24 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_ARRAYU8, e.SDL_ARRAYORDER_BGR, 0,
24, 3));
e.SDL_PIXELFORMAT_XRGB8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_XRGB,
e.SDL_PACKEDLAYOUT_8888, 24, 4));
e.SDL_PIXELFORMAT_RGB888 = e.SDL_PIXELFORMAT_XRGB8888,
e.SDL_PIXELFORMAT_RGBX8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_RGBX,
e.SDL_PACKEDLAYOUT_8888, 24, 4));
e.SDL_PIXELFORMAT_XBGR8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_XBGR,
e.SDL_PACKEDLAYOUT_8888, 24, 4));
e.SDL_PIXELFORMAT_BGR888 = e.SDL_PIXELFORMAT_XBGR8888,
e.SDL_PIXELFORMAT_BGRX8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_BGRX,
e.SDL_PACKEDLAYOUT_8888, 24, 4));
e.SDL_PIXELFORMAT_ARGB8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_ARGB,
e.SDL_PACKEDLAYOUT_8888, 32, 4));
e.SDL_PIXELFORMAT_RGBA8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_RGBA,
e.SDL_PACKEDLAYOUT_8888, 32, 4));
e.SDL_PIXELFORMAT_ABGR8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_ABGR,
e.SDL_PACKEDLAYOUT_8888, 32, 4));
e.SDL_PIXELFORMAT_BGRA8888 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_BGRA,
e.SDL_PACKEDLAYOUT_8888, 32, 4));
e.SDL_PIXELFORMAT_ARGB2101010 =
en(e.SDL_DEFINE_PIXELFORMAT(e.SDL_PIXELTYPE_PACKED32, e.SDL_PACKEDORDER_ARGB,
e.SDL_PACKEDLAYOUT_2101010, 32, 4));
if (e.SDL_BYTEORDER == e.SDL_BIG_ENDIAN) {
e.SDL_PIXELFORMAT_RGBA32 = en(e.SDL_PIXELFORMAT_RGBA8888);
e.SDL_PIXELFORMAT_ARGB32 = en(e.SDL_PIXELFORMAT_ARGB8888);
e.SDL_PIXELFORMAT_BGRA32 = en(e.SDL_PIXELFORMAT_BGRA8888);
e.SDL_PIXELFORMAT_ABGR32 = en(e.SDL_PIXELFORMAT_ABGR8888);
} else {
e.SDL_PIXELFORMAT_RGBA32 = en(e.SDL_PIXELFORMAT_ABGR8888);
e.SDL_PIXELFORMAT_ARGB32 = en(e.SDL_PIXELFORMAT_BGRA8888);
e.SDL_PIXELFORMAT_BGRA32 = en(e.SDL_PIXELFORMAT_ARGB8888);
e.SDL_PIXELFORMAT_ABGR32 = en(e.SDL_PIXELFORMAT_RGBA8888);
}
e.SDL_PIXELFORMAT_YV12 =
e.SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2');
e.SDL_PIXELFORMAT_IYUV =
e.SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V');
e.SDL_PIXELFORMAT_YUY2 =
e.SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2');
e.SDL_PIXELFORMAT_UYVY =
e.SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y');
e.SDL_PIXELFORMAT_YVYU =
e.SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U');
e.SDL_PIXELFORMAT_NV12 =
e.SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2');
e.SDL_PIXELFORMAT_NV21 =
e.SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1');
e.SDL_PIXELFORMAT_EXTERNAL_OES =
e.SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ');
push_export({
'SDL_GetPixelFormatName': ['string', ['Uint32']],
'SDL_PixelFormatEnumToMasks': ['int', ['Uint32', 'int', 'Uint32*', 'Uint32*', 'Uint32*', 'Uint32*']],
'SDL_MasksToPixelFormatEnum': ['Uint32', ['int', 'Uint32', 'Uint32', 'Uint32', 'Uint32']],
'SDL_AllocFormat': ['int*', ['Uint32']],
'SDL_FreeFormat': ['void', ['Uint32']],
'SDL_AllocPalette': ['int*', ['int']],
'SDL_SetPixelFormatPalette': ['int', ['int*', 'int*']],
'SDL_SetPaletteColors': ['int', ['int*', 'int*', 'int', 'int']],
'SDL_FreePalette': ['void', ['int*']],
'SDL_MapRGB': ['Uint32', ['int*', 'Uint8', 'Uint8', 'Uint8']],
'SDL_MapRGBA': ['Uint32', ['int*', 'Uint8', 'Uint8', 'Uint8', 'Uint8']],
'SDL_GetRGB': ['void', ['Uint32', 'int*', 'Uint8*', 'Uint8*', 'Uint8*']],
'SDL_GetRGBA': ['void', ['Uint32', 'int*', 'Uint8*', 'Uint8*', 'Uint8*', 'Uint8*']],
'SDL_CalculateGammaRamp': ['void', ['float', 'Uint16*']],
});