1 module skia.GRDefinitions;
2 
3 import skia.Definitions;
4 import skia.EnumMappings;
5 import skia.Exceptions;
6 import skia.MathTypes;
7 import skia.SkiaApi;
8 
9 alias GRBackendObject = void*;
10 
11 // struct GRBackendRenderTargetDesc : IEquatable<GRBackendRenderTargetDesc>
12 struct GRBackendRenderTargetDesc {
13 	// int Width { get; set; }
14 	// int Height { get; set; }
15 	// GRPixelConfig Config { get; set; }
16 	// GRSurfaceOrigin Origin { get; set; }
17 	// int SampleCount { get; set; }
18 	// int StencilBits { get; set; }
19 	// GRBackendObject RenderTargetHandle { get; set; }
20 	int Width;
21 	int Height;
22 	GRPixelConfig Config;
23 	GRSurfaceOrigin Origin;
24 	int SampleCount;
25 	int StencilBits;
26 	GRBackendObject RenderTargetHandle;
27 
28 	const SKSizeI Size() {
29 		return SKSizeI(Width, Height);
30 	}
31 
32 	const SKRectI Rect() {
33 		return SKRectI(0, 0, Width, Height);
34 	}
35 
36 	// const bool Equals(GRBackendRenderTargetDesc obj) {
37 	// 	return Width == obj.Width && Height == obj.Height && Config == obj.Config
38 	// 		&& Origin == obj.Origin && SampleCount == obj.SampleCount
39 	// 		&& StencilBits == obj.StencilBits && RenderTargetHandle == obj.RenderTargetHandle;
40 	// }
41 
42 	// const override bool Equals (object obj)
43 	// {
44 	//   return obj is GRBackendRenderTargetDesc f && Equals (f);
45 	// }
46 
47 	// static bool operator == (GRBackendRenderTargetDesc left, GRBackendRenderTargetDesc right)
48 	// {
49 	//   return left.Equals (right);
50 	// }
51 
52 	// static bool operator != (GRBackendRenderTargetDesc left, GRBackendRenderTargetDesc right)
53 	// {
54 	//   return !left.Equals (right);
55 	// }
56 
57 	// const override int GetHashCode ()
58 	// {
59 	// 	auto hash = new HashCode ();
60 	// 	hash.Add (Width);
61 	// 	hash.Add (Height);
62 	// 	hash.Add (Config);
63 	// 	hash.Add (Origin);
64 	// 	hash.Add (SampleCount);
65 	// 	hash.Add (StencilBits);
66 	// 	hash.Add (RenderTargetHandle);
67 	// 	return hash.ToHashCode ();
68 	// }
69 }
70 
71 enum GRGlBackendState : uint {
72 	None = 0,
73 	RenderTarget = 1 << 0,
74 	TextureBinding = 1 << 1,
75 	View = 1 << 2, // scissor and viewport
76 	Blend = 1 << 3,
77 	MSAAEnable = 1 << 4,
78 	Vertex = 1 << 5,
79 	Stencil = 1 << 6,
80 	PixelStore = 1 << 7,
81 	Program = 1 << 8,
82 	FixedFunction = 1 << 9,
83 	Misc = 1 << 10,
84 	PathRendering = 1 << 11,
85 	All = 0xffff
86 }
87 
88 enum GRBackendState : uint {
89 	None = 0,
90 	All = 0xffffffff,
91 }
92 
93 struct GRGlFramebufferInfo {
94 	// unsigned int fFBOID
95 	private uint fFBOID;
96 	uint FramebufferObjectId() {
97 		return fFBOID;
98 	}
99 
100 	void FramebufferObjectId(uint value) {
101 		fFBOID = value;
102 	}
103 
104 	// unsigned int fFormat
105 	private uint fFormat;
106 	uint Format() {
107 		return fFormat;
108 	}
109 
110 	void Format(uint value) {
111 		fFormat = value;
112 	}
113 
114     // override bool opEquals(Object obj) {
115     //     GRGlFramebufferInfo pp = cast(GRGlFramebufferInfo) obj;
116     //     if (pp  is null)
117     //         return false;
118     //     return fFBOID == obj.fFBOID && fFormat == obj.fFormat;
119     // }
120 
121     // override size_t toHash() @trusted nothrow {
122     //     return hashOf(fFBOID) + hashOf(fFormat);
123     // }
124 
125 	this(uint fboId) {
126 		fFBOID = fboId;
127 		fFormat = 0;
128 	}
129 
130 	this(uint fboId, uint format) {
131 		fFBOID = fboId;
132 		fFormat = format;
133 	}
134 }
135 
136 struct GRGlTextureInfo {
137 	// unsigned int fTarget
138 	private uint fTarget;
139 	uint Target() {
140 		return fTarget;
141 	}
142 
143 	void Target(uint value) {
144 		fTarget = value;
145 	}
146 
147 	// unsigned int fID
148 	private uint fID;
149 	uint Id() {
150 		return fID;
151 	}
152 
153 	void Id(uint value) {
154 		fID = value;
155 	}
156 
157 	// unsigned int fFormat
158 	private uint fFormat;
159 	uint Format() {
160 		return fFormat;
161 	}
162 
163 	void Format(uint value) {
164 		fFormat = value;
165 	}
166 
167     // override bool opEquals(Object obj) {
168     //     GRGlTextureInfo pp = cast(GRGlTextureInfo) obj;
169     //     if (pp  is null)
170     //         return false;
171     //     return fTarget == obj.fTarget && fID == obj.fID && fFormat == obj.fFormat;
172     // }
173 
174     // override size_t toHash() @trusted nothrow {
175     //     return hashOf(fTarget) + hashOf(fID) + hashOf(fFormat);
176     // }
177 
178 	this(uint target, uint id) {
179 		fTarget = target;
180 		fID = id;
181 		fFormat = 0;
182 	}
183 
184 	this(uint target, uint id, uint format) {
185 		fTarget = target;
186 		fID = id;
187 		fFormat = format;
188 	}
189 }
190 
191 enum GRBackendTextureDescFlags {
192 	None = 0,
193 	RenderTarget = 1,
194 }
195 
196 struct GRBackendTextureDesc // : IEquatable<GRBackendTextureDesc>
197 {
198 	GRBackendTextureDescFlags Flags; // { get; set; }
199 	GRSurfaceOrigin Origin; // { get; set; }
200 	int Width; // { get; set; }
201 	int Height; // { get; set; }
202 	GRPixelConfig Config; // { get; set; }
203 	int SampleCount; //{ get; set; }
204 	GRBackendObject TextureHandle; // { get; set; }
205 
206 	const SKSizeI Size() {
207 		return SKSizeI(Width, Height);
208 	}
209 
210 	const SKRectI Rect() {
211 		return SKRectI(0, 0, Width, Height);
212 	}
213 
214 	// const bool Equals (GRBackendTextureDesc obj) =>
215 	// 	Flags == obj.Flags &&
216 	// 	Origin == obj.Origin &&
217 	// 	Width == obj.Width &&
218 	// 	Height == obj.Height &&
219 	// 	Config == obj.Config &&
220 	// 	SampleCount == obj.SampleCount &&
221 	// 	TextureHandle == obj.TextureHandle;
222 
223 	// const override bool Equals (object obj) =>
224 	// 	obj is GRBackendTextureDesc f && Equals (f);
225 
226 	// static bool operator == (GRBackendTextureDesc left, GRBackendTextureDesc right) =>
227 	// 	left.Equals (right);
228 
229 	// static bool operator != (GRBackendTextureDesc left, GRBackendTextureDesc right) =>
230 	// 	!left.Equals (right);
231 
232 	// const override int GetHashCode ()
233 	// {
234 	// 	auto hash == new HashCode ();
235 	// 	hash.Add (Flags);
236 	// 	hash.Add (Origin);
237 	// 	hash.Add (Width);
238 	// 	hash.Add (Height);
239 	// 	hash.Add (Config);
240 	// 	hash.Add (SampleCount);
241 	// 	hash.Add (TextureHandle);
242 	// 	return hash.ToHashCode ();
243 	// }
244 }
245 
246 
247 // struct GRGlBackendTextureDesc : IEquatable<GRGlBackendTextureDesc>
248 struct GRGlBackendTextureDesc {
249 	// GRBackendTextureDescFlags Flags { get; set; }
250 	// GRSurfaceOrigin Origin { get; set; }
251 	// int Width { get; set; }
252 	// int Height { get; set; }
253 	// GRPixelConfig Config { get; set; }
254 	// int SampleCount { get; set; }
255 	// GRGlTextureInfo TextureHandle { get; set; }
256 	GRBackendTextureDescFlags Flags; //{ get; set; }
257 	GRSurfaceOrigin Origin; //{ get; set; }
258 	int Width; // { get; set; }
259 	int Height; // { get; set; }
260 	GRPixelConfig Config; // { get; set; }
261 	int SampleCount; // { get; set; }
262 	GRGlTextureInfo TextureHandle; //{ get; set; }
263 
264 	const SKSizeI Size() {
265 		return SKSizeI(Width, Height);
266 	}
267 
268 	const SKRectI Rect() {
269 		return SKRectI(0, 0, Width, Height);
270 	}
271 
272 	const bool Equals(GRGlBackendTextureDesc obj) {
273 		return Flags == obj.Flags && Origin == obj.Origin && Width == obj.Width
274 			&& Height == obj.Height && Config == obj.Config
275 			&& SampleCount == obj.SampleCount && TextureHandle == obj.TextureHandle;
276 	}
277 
278 	// const override bool Equals (object obj)
279 	// {
280 	//   return 	obj is GRGlBackendTextureDesc f && Equals (f);
281 	// }
282 
283 	// static bool operator == (GRGlBackendTextureDesc left, GRGlBackendTextureDesc right)
284 	// {
285 	//   return 	left.Equals (right);
286 	// }
287 
288 	// static bool operator != (GRGlBackendTextureDesc left, GRGlBackendTextureDesc right)
289 	// {
290 	//   return !left.Equals (right);
291 	// }
292 
293 	// const override int GetHashCode() {
294 	// 	auto hash = new HashCode();
295 	// 	hash.Add(Flags);
296 	// 	hash.Add(Origin);
297 	// 	hash.Add(Width);
298 	// 	hash.Add(Height);
299 	// 	hash.Add(Config);
300 	// 	hash.Add(SampleCount);
301 	// 	hash.Add(TextureHandle);
302 	// 	return hash.ToHashCode();
303 	// }
304 }
305 
306 
307 
308 alias ToGlSizedFormat = SkiaExtensions.ToGlSizedFormat;
309 alias ToColorType = SkiaExtensions.ToColorType;
310 
311 class SkiaExtensions {
312 	// static uint ToGlSizedFormat (this SKColorType colorType)
313 	static uint ToGlSizedFormat(SKColorType colorType) {
314 		switch (colorType) {
315 		case SKColorType.Unknown:
316 			return 0;
317 		case SKColorType.Alpha8:
318 			return GRGlSizedFormat.ALPHA8;
319 		case SKColorType.Gray8:
320 			return GRGlSizedFormat.LUMINANCE8;
321 		case SKColorType.Rgb565:
322 			return GRGlSizedFormat.RGB565;
323 		case SKColorType.Argb4444:
324 			return GRGlSizedFormat.RGBA4;
325 		case SKColorType.Rgba8888:
326 			return GRGlSizedFormat.RGBA8;
327 		case SKColorType.Rgb888x:
328 			return GRGlSizedFormat.RGB8;
329 		case SKColorType.Bgra8888:
330 			return GRGlSizedFormat.BGRA8;
331 		case SKColorType.Rgba1010102:
332 			return GRGlSizedFormat.RGB10_A2;
333 		case SKColorType.AlphaF16:
334 			return GRGlSizedFormat.R16F;
335 		case SKColorType.RgbaF16:
336 			return GRGlSizedFormat.RGBA16F;
337 		case SKColorType.RgbaF16Clamped:
338 			return GRGlSizedFormat.RGBA16F;
339 		case SKColorType.Alpha16:
340 			return GRGlSizedFormat.R16;
341 		case SKColorType.Rg1616:
342 			return GRGlSizedFormat.RG16;
343 		case SKColorType.Rgba16161616:
344 			return GRGlSizedFormat.RGBA16;
345 		case SKColorType.RgF16:
346 			return GRGlSizedFormat.RG16F;
347 		case SKColorType.Rg88:
348 			return GRGlSizedFormat.RG8;
349 		case SKColorType.Rgb101010x:
350 			return 0;
351 		case SKColorType.RgbaF32:
352 			return 0;
353 		default:
354 			throw new ArgumentOutOfRangeException(colorType.stringof);
355 		}
356 	}
357 
358 	// static uint ToGlSizedFormat (this GRPixelConfig config)
359 	static uint ToGlSizedFormat(GRPixelConfig config) {
360 		switch (config) {
361 		case GRPixelConfig.Unknown:
362 			return 0;
363 		case GRPixelConfig.Alpha8:
364 			return GRGlSizedFormat.ALPHA8;
365 		case GRPixelConfig.Alpha8AsAlpha:
366 			return GRGlSizedFormat.ALPHA8;
367 		case GRPixelConfig.Alpha8AsRed:
368 			return GRGlSizedFormat.ALPHA8;
369 		case GRPixelConfig.Gray8:
370 			return GRGlSizedFormat.LUMINANCE8;
371 		case GRPixelConfig.Gray8AsLum:
372 			return GRGlSizedFormat.LUMINANCE8;
373 		case GRPixelConfig.Gray8AsRed:
374 			return GRGlSizedFormat.LUMINANCE8;
375 		case GRPixelConfig.Rgb565:
376 			return GRGlSizedFormat.RGB565;
377 		case GRPixelConfig.Rgba4444:
378 			return GRGlSizedFormat.RGBA4;
379 		case GRPixelConfig.Rgba8888:
380 			return GRGlSizedFormat.RGBA8;
381 		case GRPixelConfig.Rgb888:
382 			return GRGlSizedFormat.RGB8;
383 		case GRPixelConfig.Rgb888x:
384 			return GRGlSizedFormat.RGBA8;
385 		case GRPixelConfig.Rg88:
386 			return GRGlSizedFormat.RG8;
387 		case GRPixelConfig.Bgra8888:
388 			return GRGlSizedFormat.BGRA8;
389 		case GRPixelConfig.Srgba8888:
390 			return GRGlSizedFormat.SRGB8_ALPHA8;
391 		case GRPixelConfig.Rgba1010102:
392 			return GRGlSizedFormat.RGB10_A2;
393 		case GRPixelConfig.AlphaHalf:
394 			return GRGlSizedFormat.R16F;
395 		case GRPixelConfig.AlphaHalfAsLum:
396 			return GRGlSizedFormat.LUMINANCE16F;
397 		case GRPixelConfig.AlphaHalfAsRed:
398 			return GRGlSizedFormat.R16F;
399 		case GRPixelConfig.RgbaHalf:
400 			return GRGlSizedFormat.RGBA16F;
401 		case GRPixelConfig.RgbaHalfClamped:
402 			return GRGlSizedFormat.RGBA16F;
403 		case GRPixelConfig.RgbEtc1:
404 			return GRGlSizedFormat.COMPRESSED_ETC1_RGB8;
405 		case GRPixelConfig.Alpha16:
406 			return GRGlSizedFormat.R16;
407 		case GRPixelConfig.Rg1616:
408 			return GRGlSizedFormat.RG16;
409 		case GRPixelConfig.Rgba16161616:
410 			return GRGlSizedFormat.RGBA16;
411 		case GRPixelConfig.RgHalf:
412 			return GRGlSizedFormat.RG16F;
413 		default:
414 			throw new ArgumentOutOfRangeException(config.stringof);
415 		}
416 	}
417 
418 	// static GRPixelConfig ToPixelConfig (this SKColorType colorType)
419 	static GRPixelConfig ToPixelConfig(SKColorType colorType) {
420 		switch (colorType) {
421 		case SKColorType.Unknown:
422 			return GRPixelConfig.Unknown;
423 		case SKColorType.Alpha8:
424 			return GRPixelConfig.Alpha8;
425 		case SKColorType.Gray8:
426 			return GRPixelConfig.Gray8;
427 		case SKColorType.Rgb565:
428 			return GRPixelConfig.Rgb565;
429 		case SKColorType.Argb4444:
430 			return GRPixelConfig.Rgba4444;
431 		case SKColorType.Rgba8888:
432 			return GRPixelConfig.Rgba8888;
433 		case SKColorType.Rgb888x:
434 			return GRPixelConfig.Rgb888;
435 		case SKColorType.Bgra8888:
436 			return GRPixelConfig.Bgra8888;
437 		case SKColorType.Rgba1010102:
438 			return GRPixelConfig.Rgba1010102;
439 		case SKColorType.AlphaF16:
440 			return GRPixelConfig.AlphaHalf;
441 		case SKColorType.RgbaF16:
442 			return GRPixelConfig.RgbaHalf;
443 		case SKColorType.RgbaF16Clamped:
444 			return GRPixelConfig.RgbaHalfClamped;
445 		case SKColorType.Alpha16:
446 			return GRPixelConfig.Alpha16;
447 		case SKColorType.Rg1616:
448 			return GRPixelConfig.Rg1616;
449 		case SKColorType.Rgba16161616:
450 			return GRPixelConfig.Rgba16161616;
451 		case SKColorType.RgF16:
452 			return GRPixelConfig.RgHalf;
453 		case SKColorType.Rg88:
454 			return GRPixelConfig.Rg88;
455 		case SKColorType.Rgb101010x:
456 			return GRPixelConfig.Unknown;
457 		case SKColorType.RgbaF32:
458 			return GRPixelConfig.Unknown;
459 		default:
460 			throw new ArgumentOutOfRangeException(colorType.stringof);
461 		}
462 	}
463 
464 	// static SKColorType ToColorType (this GRPixelConfig config)
465 	static SKColorType ToColorType(GRPixelConfig config) {
466 		switch (config) {
467 		case GRPixelConfig.Unknown:
468 			return SKColorType.Unknown;
469 		case GRPixelConfig.Alpha8:
470 			return SKColorType.Alpha8;
471 		case GRPixelConfig.Gray8:
472 			return SKColorType.Gray8;
473 		case GRPixelConfig.Rgb565:
474 			return SKColorType.Rgb565;
475 		case GRPixelConfig.Rgba4444:
476 			return SKColorType.Argb4444;
477 		case GRPixelConfig.Rgba8888:
478 			return SKColorType.Rgba8888;
479 		case GRPixelConfig.Rgb888:
480 			return SKColorType.Rgb888x;
481 		case GRPixelConfig.Bgra8888:
482 			return SKColorType.Bgra8888;
483 		case GRPixelConfig.Srgba8888:
484 			return SKColorType.Rgba8888;
485 		case GRPixelConfig.Rgba1010102:
486 			return SKColorType.Rgba1010102;
487 		case GRPixelConfig.AlphaHalf:
488 			return SKColorType.AlphaF16;
489 		case GRPixelConfig.RgbaHalf:
490 			return SKColorType.RgbaF16;
491 		case GRPixelConfig.Alpha8AsAlpha:
492 			return SKColorType.Alpha8;
493 		case GRPixelConfig.Alpha8AsRed:
494 			return SKColorType.Alpha8;
495 		case GRPixelConfig.AlphaHalfAsLum:
496 			return SKColorType.AlphaF16;
497 		case GRPixelConfig.AlphaHalfAsRed:
498 			return SKColorType.AlphaF16;
499 		case GRPixelConfig.Gray8AsLum:
500 			return SKColorType.Gray8;
501 		case GRPixelConfig.Gray8AsRed:
502 			return SKColorType.Gray8;
503 		case GRPixelConfig.RgbaHalfClamped:
504 			return SKColorType.RgbaF16Clamped;
505 		case GRPixelConfig.Alpha16:
506 			return SKColorType.Alpha16;
507 		case GRPixelConfig.Rg1616:
508 			return SKColorType.Rg1616;
509 		case GRPixelConfig.Rgba16161616:
510 			return SKColorType.Rgba16161616;
511 		case GRPixelConfig.RgHalf:
512 			return SKColorType.RgF16;
513 		case GRPixelConfig.Rg88:
514 			return SKColorType.Rg88;
515 		case GRPixelConfig.Rgb888x:
516 			return SKColorType.Rgb888x;
517 		case GRPixelConfig.RgbEtc1:
518 			return SKColorType.Rgb888x;
519 		default:
520 			throw new ArgumentOutOfRangeException(config.stringof);
521 		}
522 	}
523 
524 }
525 
526 struct GRGlSizedFormat {
527 	// Unsized formats
528 	enum STENCIL_INDEX = 0x1901;
529 	enum DEPTH_COMPONENT = 0x1902;
530 	enum DEPTH_STENCIL = 0x84F9;
531 	enum RED = 0x1903;
532 	enum RED_INTEGER = 0x8D94;
533 	enum GREEN = 0x1904;
534 	enum BLUE = 0x1905;
535 	enum ALPHA = 0x1906;
536 	enum LUMINANCE = 0x1909;
537 	enum LUMINANCE_ALPHA = 0x190A;
538 	enum RG_INTEGER = 0x8228;
539 	enum RGB = 0x1907;
540 	enum RGB_INTEGER = 0x8D98;
541 	enum SRGB = 0x8C40;
542 	enum RGBA = 0x1908;
543 	enum RG = 0x8227;
544 	enum SRGB_ALPHA = 0x8C42;
545 	enum RGBA_INTEGER = 0x8D99;
546 	enum BGRA = 0x80E1;
547 
548 	// Stencil index sized formats
549 	enum STENCIL_INDEX4 = 0x8D47;
550 	enum STENCIL_INDEX8 = 0x8D48;
551 	enum STENCIL_INDEX16 = 0x8D49;
552 
553 	// Depth component sized formats
554 	enum DEPTH_COMPONENT16 = 0x81A5;
555 
556 	// Depth stencil sized formats
557 	enum DEPTH24_STENCIL8 = 0x88F0;
558 
559 	// Red sized formats
560 	enum R8 = 0x8229;
561 	enum R16 = 0x822A;
562 	enum R16F = 0x822D;
563 	enum R32F = 0x822E;
564 
565 	// Red integer sized formats
566 	enum R8I = 0x8231;
567 	enum R8UI = 0x8232;
568 	enum R16I = 0x8233;
569 	enum R16UI = 0x8234;
570 	enum R32I = 0x8235;
571 	enum R32UI = 0x8236;
572 
573 	// Luminance sized formats
574 	enum LUMINANCE8 = 0x8040;
575 	enum LUMINANCE16F = 0x881E;
576 
577 	// Alpha sized formats
578 	enum ALPHA8 = 0x803C;
579 	enum ALPHA16 = 0x803E;
580 	enum ALPHA16F = 0x881C;
581 	enum ALPHA32F = 0x8816;
582 
583 	// Alpha integer sized formats
584 	enum ALPHA8I = 0x8D90;
585 	enum ALPHA8UI = 0x8D7E;
586 	enum ALPHA16I = 0x8D8A;
587 	enum ALPHA16UI = 0x8D78;
588 	enum ALPHA32I = 0x8D84;
589 	enum ALPHA32UI = 0x8D72;
590 
591 	// RG sized formats
592 	enum RG8 = 0x822B;
593 	enum RG16 = 0x822C;
594 	//enum R16F = 0x822D;
595 	//enum R32F = 0x822E;
596 	enum RG16F = 0x822F;
597 
598 	// RG sized integer formats
599 	enum RG8I = 0x8237;
600 	enum RG8UI = 0x8238;
601 	enum RG16I = 0x8239;
602 	enum RG16UI = 0x823A;
603 	enum RG32I = 0x823B;
604 	enum RG32UI = 0x823C;
605 
606 	// RGB sized formats
607 	enum RGB5 = 0x8050;
608 	enum RGB565 = 0x8D62;
609 	enum RGB8 = 0x8051;
610 	enum SRGB8 = 0x8C41;
611 
612 	// RGB integer sized formats
613 	enum RGB8I = 0x8D8F;
614 	enum RGB8UI = 0x8D7D;
615 	enum RGB16I = 0x8D89;
616 	enum RGB16UI = 0x8D77;
617 	enum RGB32I = 0x8D83;
618 	enum RGB32UI = 0x8D71;
619 
620 	// RGBA sized formats
621 	enum RGBA4 = 0x8056;
622 	enum RGB5_A1 = 0x8057;
623 	enum RGBA8 = 0x8058;
624 	enum RGB10_A2 = 0x8059;
625 	enum SRGB8_ALPHA8 = 0x8C43;
626 	enum RGBA16F = 0x881A;
627 	enum RGBA32F = 0x8814;
628 	enum RG32F = 0x8230;
629 	enum RGBA16 = 0x805B;
630 
631 	// RGBA integer sized formats
632 	enum RGBA8I = 0x8D8E;
633 	enum RGBA8UI = 0x8D7C;
634 	enum RGBA16I = 0x8D88;
635 	enum RGBA16UI = 0x8D76;
636 	enum RGBA32I = 0x8D82;
637 	enum RGBA32UI = 0x8D70;
638 
639 	// BGRA sized formats
640 	enum BGRA8 = 0x93A1;
641 
642 	// Compressed texture sized formats
643 	enum COMPRESSED_ETC1_RGB8 = 0x8D64;
644 }