1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtCanvas3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40//
41// W A R N I N G
42// -------------
43//
44// This file is not part of the QtCanvas3D API. It exists purely as an
45// implementation detail. This header file may change from version to
46// version without notice, or even be removed.
47//
48// We mean it.
49
50#ifndef CONTEXT3D_P_H
51#define CONTEXT3D_P_H
52
53#include "canvas3dcommon_p.h"
54#include "contextattributes_p.h"
55#include "abstractobject3d_p.h"
56#include "canvasglstatedump_p.h"
57#include "canvastextureprovider_p.h"
58
59#include <QtCore/QMutex>
60#include <QtCore/QWaitCondition>
61#include <QtCore/QString>
62#include <QtCore/QRect>
63#include <QtCore/QSize>
64#include <QtCore/QSet>
65#include <QtCore/QVariantList>
66#include <QtQuick/QQuickItem>
67#include <QtQml>
68#include <QtQml/QJSEngine>
69#include <QtQml/private/qqmlengine_p.h>
70#include <QtQml/private/qv4typedarray_p.h>
71
72#ifdef NO_ERROR // may de defined in winerror.h
73#undef NO_ERROR
74#endif
75
76// Some platforms define BOOL, which conflicts with our enum BOOL, causing incorrect enum to be
77// generated by moc, so undefine BOOL when running moc.
78#if defined(BOOL) && defined(Q_MOC_RUN)
79# undef BOOL
80#endif
81
82QT_BEGIN_NAMESPACE
83
84#if Q_QML_PRIVATE_API_VERSION < 3
85namespace QV4 {
86enum TypedArrayType {
87 Int8Array = QV4::Heap::TypedArray::Int8Array,
88 UInt8Array = QV4::Heap::TypedArray::UInt8Array,
89 Int16Array = QV4::Heap::TypedArray::Int16Array,
90 UInt16Array = QV4::Heap::TypedArray::UInt16Array,
91 Int32Array = QV4::Heap::TypedArray::Int32Array,
92 UInt32Array = QV4::Heap::TypedArray::UInt32Array,
93 UInt8ClampedArray = QV4::Heap::TypedArray::UInt8ClampedArray,
94 Float32Array = QV4::Heap::TypedArray::Float32Array,
95 Float64Array = QV4::Heap::TypedArray::Float64Array,
96 NTypedArrayTypes = QV4::Heap::TypedArray::NTypes
97};
98}
99#endif
100
101QT_CANVAS3D_BEGIN_NAMESPACE
102
103#define ENUM_AS_PROPERTY(A) Q_PROPERTY(QtCanvas3D::CanvasContext::glEnums A READ A ## _read); inline QtCanvas3D::CanvasContext::glEnums A ## _read() { return QtCanvas3D::CanvasContext::A; }
104
105class Canvas;
106class CanvasActiveInfo;
107class CanvasTexture;
108class CanvasShader;
109class CanvasFrameBuffer;
110class CanvasRenderBuffer;
111class CanvasProgram;
112class CanvasBuffer;
113class CanvasUniformLocation;
114class CanvasTextureImage;
115class CanvasShaderPrecisionFormat;
116class EnumToStringMap;
117class CanvasGlCommandQueue;
118class GlCommand;
119class CompressedTextureS3TC;
120class CompressedTexturePVRTC;
121
122class QT_CANVAS3D_EXPORT CanvasContext : public CanvasAbstractObject
123{
124 Q_OBJECT
125 Q_DISABLE_COPY(CanvasContext)
126
127 Q_ENUMS(glEnums)
128
129 Q_PROPERTY(Canvas *canvas READ canvas NOTIFY canvasChanged)
130 Q_PROPERTY(uint drawingBufferWidth READ drawingBufferWidth NOTIFY drawingBufferWidthChanged)
131 Q_PROPERTY(uint drawingBufferHeight READ drawingBufferHeight NOTIFY drawingBufferHeightChanged)
132
133public:
134 enum glEnums {
135 /* ClearBufferMask */
136 DEPTH_BUFFER_BIT = 0x00000100,
137 STENCIL_BUFFER_BIT = 0x00000400,
138 COLOR_BUFFER_BIT = 0x00004000,
139
140 // EXTRA
141 DEPTH_AND_COLOR_BUFFER_BIT = 0x00004100,
142 DEPTH_AND_STENCIL_AND_COLOR_BUFFER_BIT = 0x00004500,
143
144 /* BeginMode */
145 POINTS = 0x0000,
146 LINES = 0x0001,
147 LINE_LOOP = 0x0002,
148 LINE_STRIP = 0x0003,
149 TRIANGLES = 0x0004,
150 TRIANGLE_STRIP = 0x0005,
151 TRIANGLE_FAN = 0x0006,
152
153 /* AlphaFunction (not supported in ES20) */
154 /* NEVER */
155 /* LESS */
156 /* EQUAL */
157 /* LEQUAL */
158 /* GREATER */
159 /* NOTEQUAL */
160 /* GEQUAL */
161 /* ALWAYS */
162
163 /* BlendingFactorDest */
164 ZERO = 0,
165 ONE = 1,
166 SRC_COLOR = 0x0300,
167 ONE_MINUS_SRC_COLOR = 0x0301,
168 SRC_ALPHA = 0x0302,
169 ONE_MINUS_SRC_ALPHA = 0x0303,
170 DST_ALPHA = 0x0304,
171 ONE_MINUS_DST_ALPHA = 0x0305,
172
173 /* BlendingFactorSrc */
174 /* ZERO */
175 /* ONE */
176 DST_COLOR = 0x0306,
177 ONE_MINUS_DST_COLOR = 0x0307,
178 SRC_ALPHA_SATURATE = 0x0308,
179 /* SRC_ALPHA */
180 /* ONE_MINUS_SRC_ALPHA */
181 /* DST_ALPHA */
182 /* ONE_MINUS_DST_ALPHA */
183
184 /* BlendEquationSeparate */
185 FUNC_ADD = 0x8006,
186 BLEND_EQUATION = 0x8009,
187 BLEND_EQUATION_RGB = 0x8009, /* same as BLEND_EQUATION */
188 BLEND_EQUATION_ALPHA = 0x883D,
189
190 /* BlendSubtract */
191 FUNC_SUBTRACT = 0x800A,
192 FUNC_REVERSE_SUBTRACT = 0x800B,
193
194 /* Separate Blend Functions */
195 BLEND_DST_RGB = 0x80C8,
196 BLEND_SRC_RGB = 0x80C9,
197 BLEND_DST_ALPHA = 0x80CA,
198 BLEND_SRC_ALPHA = 0x80CB,
199 CONSTANT_COLOR = 0x8001,
200 ONE_MINUS_CONSTANT_COLOR = 0x8002,
201 CONSTANT_ALPHA = 0x8003,
202 ONE_MINUS_CONSTANT_ALPHA = 0x8004,
203 BLEND_COLOR = 0x8005,
204
205 /* Buffer Objects */
206 ARRAY_BUFFER = 0x8892,
207 ELEMENT_ARRAY_BUFFER = 0x8893,
208 ARRAY_BUFFER_BINDING = 0x8894,
209 ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,
210
211 STREAM_DRAW = 0x88E0,
212 STATIC_DRAW = 0x88E4,
213 DYNAMIC_DRAW = 0x88E8,
214
215 BUFFER_SIZE = 0x8764,
216 BUFFER_USAGE = 0x8765,
217
218 CURRENT_VERTEX_ATTRIB = 0x8626,
219
220 /* CullFaceMode */
221 FRONT = 0x0404,
222 BACK = 0x0405,
223 FRONT_AND_BACK = 0x0408,
224
225 /* DepthFunction */
226 /* NEVER */
227 /* LESS */
228 /* EQUAL */
229 /* LEQUAL */
230 /* GREATER */
231 /* NOTEQUAL */
232 /* GEQUAL */
233 /* ALWAYS */
234
235 /* EnableCap */
236 /* TEXTURE_2D */
237 CULL_FACE = 0x0B44,
238 BLEND = 0x0BE2,
239 DITHER = 0x0BD0,
240 STENCIL_TEST = 0x0B90,
241 DEPTH_TEST = 0x0B71,
242 SCISSOR_TEST = 0x0C11,
243 POLYGON_OFFSET_FILL = 0x8037,
244 SAMPLE_ALPHA_TO_COVERAGE = 0x809E,
245 SAMPLE_COVERAGE = 0x80A0,
246
247 /* Error Codes */
248 NO_ERROR = 0,
249 INVALID_ENUM = 0x0500,
250 INVALID_VALUE = 0x0501,
251 INVALID_OPERATION = 0x0502,
252 OUT_OF_MEMORY = 0x0505,
253
254 /* FrontFaceDirection */
255 CW = 0x0900,
256 CCW = 0x0901,
257
258 /* GetPName */
259 LINE_WIDTH = 0x0B21,
260 ALIASED_POINT_SIZE_RANGE = 0x846D,
261 ALIASED_LINE_WIDTH_RANGE = 0x846E,
262 CULL_FACE_MODE = 0x0B45,
263 FRONT_FACE = 0x0B46,
264 DEPTH_RANGE = 0x0B70,
265 DEPTH_WRITEMASK = 0x0B72,
266 DEPTH_CLEAR_VALUE = 0x0B73,
267 DEPTH_FUNC = 0x0B74,
268 STENCIL_CLEAR_VALUE = 0x0B91,
269 STENCIL_FUNC = 0x0B92,
270 STENCIL_FAIL = 0x0B94,
271 STENCIL_PASS_DEPTH_FAIL = 0x0B95,
272 STENCIL_PASS_DEPTH_PASS = 0x0B96,
273 STENCIL_REF = 0x0B97,
274 STENCIL_VALUE_MASK = 0x0B93,
275 STENCIL_WRITEMASK = 0x0B98,
276 STENCIL_BACK_FUNC = 0x8800,
277 STENCIL_BACK_FAIL = 0x8801,
278 STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,
279 STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,
280 STENCIL_BACK_REF = 0x8CA3,
281 STENCIL_BACK_VALUE_MASK = 0x8CA4,
282 STENCIL_BACK_WRITEMASK = 0x8CA5,
283 VIEWPORT = 0x0BA2,
284 SCISSOR_BOX = 0x0C10,
285 /* SCISSOR_TEST */
286 COLOR_CLEAR_VALUE = 0x0C22,
287 COLOR_WRITEMASK = 0x0C23,
288 UNPACK_ALIGNMENT = 0x0CF5,
289 PACK_ALIGNMENT = 0x0D05,
290 MAX_TEXTURE_SIZE = 0x0D33,
291 MAX_VIEWPORT_DIMS = 0x0D3A,
292 SUBPIXEL_BITS = 0x0D50,
293 RED_BITS = 0x0D52,
294 GREEN_BITS = 0x0D53,
295 BLUE_BITS = 0x0D54,
296 ALPHA_BITS = 0x0D55,
297 DEPTH_BITS = 0x0D56,
298 STENCIL_BITS = 0x0D57,
299 POLYGON_OFFSET_UNITS = 0x2A00,
300 /* POLYGON_OFFSET_FILL */
301 POLYGON_OFFSET_FACTOR = 0x8038,
302 TEXTURE_BINDING_2D = 0x8069,
303 SAMPLE_BUFFERS = 0x80A8,
304 SAMPLES = 0x80A9,
305 SAMPLE_COVERAGE_VALUE = 0x80AA,
306 SAMPLE_COVERAGE_INVERT = 0x80AB,
307
308 /* GetTextureParameter */
309 /* TEXTURE_MAG_FILTER */
310 /* TEXTURE_MIN_FILTER */
311 /* TEXTURE_WRAP_S */
312 /* TEXTURE_WRAP_T */
313
314 COMPRESSED_TEXTURE_FORMATS = 0x86A3,
315
316 /* HintMode */
317 DONT_CARE = 0x1100,
318 FASTEST = 0x1101,
319 NICEST = 0x1102,
320
321 /* HintTarget */
322 GENERATE_MIPMAP_HINT = 0x8192,
323
324 /* DataType */
325 BYTE = 0x1400,
326 UNSIGNED_BYTE = 0x1401,
327 SHORT = 0x1402,
328 UNSIGNED_SHORT = 0x1403,
329 INT = 0x1404,
330 UNSIGNED_INT = 0x1405,
331 FLOAT = 0x1406,
332
333 /* PixelFormat */
334 DEPTH_COMPONENT = 0x1902,
335 ALPHA = 0x1906,
336 RGB = 0x1907,
337 RGBA = 0x1908,
338 LUMINANCE = 0x1909,
339 LUMINANCE_ALPHA = 0x190A,
340
341 /* PixelType */
342 /* UNSIGNED_BYTE */
343 UNSIGNED_SHORT_4_4_4_4 = 0x8033,
344 UNSIGNED_SHORT_5_5_5_1 = 0x8034,
345 UNSIGNED_SHORT_5_6_5 = 0x8363,
346
347 /* Shaders */
348 FRAGMENT_SHADER = 0x8B30,
349 VERTEX_SHADER = 0x8B31,
350 MAX_VERTEX_ATTRIBS = 0x8869,
351 MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB,
352 MAX_VARYING_VECTORS = 0x8DFC,
353 MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D,
354 MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C,
355 MAX_TEXTURE_IMAGE_UNITS = 0x8872,
356 MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD,
357 SHADER_TYPE = 0x8B4F,
358 DELETE_STATUS = 0x8B80,
359 LINK_STATUS = 0x8B82,
360 VALIDATE_STATUS = 0x8B83,
361 ATTACHED_SHADERS = 0x8B85,
362 ACTIVE_UNIFORMS = 0x8B86,
363 ACTIVE_ATTRIBUTES = 0x8B89,
364 SHADING_LANGUAGE_VERSION = 0x8B8C,
365 CURRENT_PROGRAM = 0x8B8D,
366
367 /* StencilFunction */
368 NEVER = 0x0200,
369 LESS = 0x0201,
370 EQUAL = 0x0202,
371 LEQUAL = 0x0203,
372 GREATER = 0x0204,
373 NOTEQUAL = 0x0205,
374 GEQUAL = 0x0206,
375 ALWAYS = 0x0207,
376
377 /* StencilOp */
378 /* ZERO */
379 KEEP = 0x1E00,
380 REPLACE = 0x1E01,
381 INCR = 0x1E02,
382 DECR = 0x1E03,
383 INVERT = 0x150A,
384 INCR_WRAP = 0x8507,
385 DECR_WRAP = 0x8508,
386
387 /* StringName */
388 VENDOR = 0x1F00,
389 RENDERER = 0x1F01,
390 VERSION = 0x1F02,
391
392 /* TextureMagFilter */
393 NEAREST = 0x2600,
394 LINEAR = 0x2601,
395
396 /* TextureMinFilter */
397 /* NEAREST */
398 /* LINEAR */
399 NEAREST_MIPMAP_NEAREST = 0x2700,
400 LINEAR_MIPMAP_NEAREST = 0x2701,
401 NEAREST_MIPMAP_LINEAR = 0x2702,
402 LINEAR_MIPMAP_LINEAR = 0x2703,
403
404 /* TextureParameterName */
405 TEXTURE_MAG_FILTER = 0x2800,
406 TEXTURE_MIN_FILTER = 0x2801,
407 TEXTURE_WRAP_S = 0x2802,
408 TEXTURE_WRAP_T = 0x2803,
409
410 /* TextureTarget */
411 TEXTURE_2D = 0x0DE1,
412 TEXTURE = 0x1702,
413
414 TEXTURE_CUBE_MAP = 0x8513,
415 TEXTURE_BINDING_CUBE_MAP = 0x8514,
416 TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,
417 TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,
418 TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,
419 TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,
420 TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,
421 TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A,
422 MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C,
423
424 /* TextureUnit */
425 TEXTURE0 = 0x84C0,
426 TEXTURE1 = 0x84C1,
427 TEXTURE2 = 0x84C2,
428 TEXTURE3 = 0x84C3,
429 TEXTURE4 = 0x84C4,
430 TEXTURE5 = 0x84C5,
431 TEXTURE6 = 0x84C6,
432 TEXTURE7 = 0x84C7,
433 TEXTURE8 = 0x84C8,
434 TEXTURE9 = 0x84C9,
435 TEXTURE10 = 0x84CA,
436 TEXTURE11 = 0x84CB,
437 TEXTURE12 = 0x84CC,
438 TEXTURE13 = 0x84CD,
439 TEXTURE14 = 0x84CE,
440 TEXTURE15 = 0x84CF,
441 TEXTURE16 = 0x84D0,
442 TEXTURE17 = 0x84D1,
443 TEXTURE18 = 0x84D2,
444 TEXTURE19 = 0x84D3,
445 TEXTURE20 = 0x84D4,
446 TEXTURE21 = 0x84D5,
447 TEXTURE22 = 0x84D6,
448 TEXTURE23 = 0x84D7,
449 TEXTURE24 = 0x84D8,
450 TEXTURE25 = 0x84D9,
451 TEXTURE26 = 0x84DA,
452 TEXTURE27 = 0x84DB,
453 TEXTURE28 = 0x84DC,
454 TEXTURE29 = 0x84DD,
455 TEXTURE30 = 0x84DE,
456 TEXTURE31 = 0x84DF,
457 ACTIVE_TEXTURE = 0x84E0,
458
459 /* TextureWrapMode */
460 REPEAT = 0x2901,
461 CLAMP_TO_EDGE = 0x812F,
462 MIRRORED_REPEAT = 0x8370,
463
464 /* Uniform Types */
465 FLOAT_VEC2 = 0x8B50,
466 FLOAT_VEC3 = 0x8B51,
467 FLOAT_VEC4 = 0x8B52,
468 INT_VEC2 = 0x8B53,
469 INT_VEC3 = 0x8B54,
470 INT_VEC4 = 0x8B55,
471 BOOL = 0x8B56,
472 BOOL_VEC2 = 0x8B57,
473 BOOL_VEC3 = 0x8B58,
474 BOOL_VEC4 = 0x8B59,
475 FLOAT_MAT2 = 0x8B5A,
476 FLOAT_MAT3 = 0x8B5B,
477 FLOAT_MAT4 = 0x8B5C,
478 SAMPLER_2D = 0x8B5E,
479 SAMPLER_CUBE = 0x8B60,
480
481 /* Vertex Arrays */
482 VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,
483 VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,
484 VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,
485 VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,
486 VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A,
487 VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,
488 VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F,
489
490 /* Read Format */
491 IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A,
492 IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B,
493
494 /* Shader Source */
495 COMPILE_STATUS = 0x8B81,
496
497 /* OES_standard_derivatives */
498 FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B,
499
500 /* Shader Precision-Specified Types */
501 LOW_FLOAT = 0x8DF0,
502 MEDIUM_FLOAT = 0x8DF1,
503 HIGH_FLOAT = 0x8DF2,
504 LOW_INT = 0x8DF3,
505 MEDIUM_INT = 0x8DF4,
506 HIGH_INT = 0x8DF5,
507
508 /* Framebuffer Object. */
509 FRAMEBUFFER = 0x8D40,
510 RENDERBUFFER = 0x8D41,
511
512 RGBA4 = 0x8056,
513 RGB5_A1 = 0x8057,
514 RGB565 = 0x8D62,
515 DEPTH_COMPONENT16 = 0x81A5,
516 STENCIL_INDEX = 0x1901,
517 STENCIL_INDEX8 = 0x8D48,
518 DEPTH_STENCIL = 0x84F9,
519
520 RENDERBUFFER_WIDTH = 0x8D42,
521 RENDERBUFFER_HEIGHT = 0x8D43,
522 RENDERBUFFER_INTERNAL_FORMAT = 0x8D44,
523 RENDERBUFFER_RED_SIZE = 0x8D50,
524 RENDERBUFFER_GREEN_SIZE = 0x8D51,
525 RENDERBUFFER_BLUE_SIZE = 0x8D52,
526 RENDERBUFFER_ALPHA_SIZE = 0x8D53,
527 RENDERBUFFER_DEPTH_SIZE = 0x8D54,
528 RENDERBUFFER_STENCIL_SIZE = 0x8D55,
529
530 FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0,
531 FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1,
532 FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2,
533 FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3,
534
535 COLOR_ATTACHMENT0 = 0x8CE0,
536 DEPTH_ATTACHMENT = 0x8D00,
537 STENCIL_ATTACHMENT = 0x8D20,
538 DEPTH_STENCIL_ATTACHMENT = 0x821A,
539
540 NONE = 0,
541
542 FRAMEBUFFER_COMPLETE = 0x8CD5,
543 FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6,
544 FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7,
545 FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9,
546 FRAMEBUFFER_UNSUPPORTED = 0x8CDD,
547
548 FRAMEBUFFER_BINDING = 0x8CA6,
549 RENDERBUFFER_BINDING = 0x8CA7,
550 MAX_RENDERBUFFER_SIZE = 0x84E8,
551
552 INVALID_FRAMEBUFFER_OPERATION = 0x0506,
553
554 /* WebGL-specific enums */
555 UNPACK_FLIP_Y_WEBGL = 0x9240,
556 UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,
557 CONTEXT_LOST_WEBGL = 0x9242,
558 UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,
559 BROWSER_DEFAULT_WEBGL = 0x9244,
560
561 /* WEBGL_debug_renderer_info */
562 UNMASKED_VENDOR_WEBGL = 0x9245,
563 UNMASKED_RENDERER_WEBGL = 0x9246,
564
565 /* S3TC */
566 COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0,
567 COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1,
568 COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2,
569 COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3,
570
571 /* PVRTC */
572 COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00,
573 COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01,
574 COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02,
575 COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03
576 };
577
578 /* ClearBufferMask */
579 ENUM_AS_PROPERTY(DEPTH_BUFFER_BIT)
580 ENUM_AS_PROPERTY(STENCIL_BUFFER_BIT)
581 ENUM_AS_PROPERTY(COLOR_BUFFER_BIT)
582
583 /* BeginMode */
584 ENUM_AS_PROPERTY(POINTS)
585 ENUM_AS_PROPERTY(LINES)
586 ENUM_AS_PROPERTY(LINE_LOOP)
587 ENUM_AS_PROPERTY(LINE_STRIP)
588 ENUM_AS_PROPERTY(TRIANGLES)
589 ENUM_AS_PROPERTY(TRIANGLE_STRIP)
590 ENUM_AS_PROPERTY(TRIANGLE_FAN)
591
592 /* AlphaFunction (not supported in ES20) */
593 /* NEVER */
594 /* LESS */
595 /* EQUAL */
596 /* LEQUAL */
597 /* GREATER */
598 /* NOTEQUAL */
599 /* GEQUAL */
600 /* ALWAYS */
601
602 /* BlendingFactorDest */
603 ENUM_AS_PROPERTY(ZERO)
604 ENUM_AS_PROPERTY(ONE)
605 ENUM_AS_PROPERTY(SRC_COLOR)
606 ENUM_AS_PROPERTY(ONE_MINUS_SRC_COLOR)
607 ENUM_AS_PROPERTY(SRC_ALPHA)
608 ENUM_AS_PROPERTY(ONE_MINUS_SRC_ALPHA)
609 ENUM_AS_PROPERTY(DST_ALPHA)
610 ENUM_AS_PROPERTY(ONE_MINUS_DST_ALPHA)
611
612 /* BlendingFactorSrc */
613 /* ZERO */
614 /* ONE */
615 ENUM_AS_PROPERTY(DST_COLOR)
616 ENUM_AS_PROPERTY(ONE_MINUS_DST_COLOR)
617 ENUM_AS_PROPERTY(SRC_ALPHA_SATURATE)
618 /* SRC_ALPHA */
619 /* ONE_MINUS_SRC_ALPHA */
620 /* DST_ALPHA */
621 /* ONE_MINUS_DST_ALPHA */
622
623 /* BlendEquationSeparate */
624 ENUM_AS_PROPERTY(FUNC_ADD)
625 ENUM_AS_PROPERTY(BLEND_EQUATION)
626 ENUM_AS_PROPERTY(BLEND_EQUATION_RGB) /* same as BLEND_EQUATION */
627 ENUM_AS_PROPERTY(BLEND_EQUATION_ALPHA)
628
629 /* BlendSubtract */
630 ENUM_AS_PROPERTY(FUNC_SUBTRACT)
631 ENUM_AS_PROPERTY(FUNC_REVERSE_SUBTRACT)
632
633 /* Separate Blend Functions */
634 ENUM_AS_PROPERTY(BLEND_DST_RGB)
635 ENUM_AS_PROPERTY(BLEND_SRC_RGB)
636 ENUM_AS_PROPERTY(BLEND_DST_ALPHA)
637 ENUM_AS_PROPERTY(BLEND_SRC_ALPHA)
638 ENUM_AS_PROPERTY(CONSTANT_COLOR)
639 ENUM_AS_PROPERTY(ONE_MINUS_CONSTANT_COLOR)
640 ENUM_AS_PROPERTY(CONSTANT_ALPHA)
641 ENUM_AS_PROPERTY(ONE_MINUS_CONSTANT_ALPHA)
642 ENUM_AS_PROPERTY(BLEND_COLOR)
643
644 /* Buffer Objects */
645 ENUM_AS_PROPERTY(ARRAY_BUFFER)
646 ENUM_AS_PROPERTY(ELEMENT_ARRAY_BUFFER)
647 ENUM_AS_PROPERTY(ARRAY_BUFFER_BINDING)
648 ENUM_AS_PROPERTY(ELEMENT_ARRAY_BUFFER_BINDING)
649
650 ENUM_AS_PROPERTY(STREAM_DRAW)
651 ENUM_AS_PROPERTY(STATIC_DRAW)
652 ENUM_AS_PROPERTY(DYNAMIC_DRAW)
653
654 ENUM_AS_PROPERTY(BUFFER_SIZE)
655 ENUM_AS_PROPERTY(BUFFER_USAGE)
656
657 ENUM_AS_PROPERTY(CURRENT_VERTEX_ATTRIB)
658
659 /* CullFaceMode */
660 ENUM_AS_PROPERTY(FRONT)
661 ENUM_AS_PROPERTY(BACK)
662 ENUM_AS_PROPERTY(FRONT_AND_BACK)
663
664 /* DepthFunction */
665 /* NEVER */
666 /* LESS */
667 /* EQUAL */
668 /* LEQUAL */
669 /* GREATER */
670 /* NOTEQUAL */
671 /* GEQUAL */
672 /* ALWAYS */
673
674 /* EnableCap */
675 /* TEXTURE_2D */
676 ENUM_AS_PROPERTY(CULL_FACE)
677 ENUM_AS_PROPERTY(BLEND)
678 ENUM_AS_PROPERTY(DITHER)
679 ENUM_AS_PROPERTY(STENCIL_TEST)
680 ENUM_AS_PROPERTY(DEPTH_TEST)
681 ENUM_AS_PROPERTY(SCISSOR_TEST)
682 ENUM_AS_PROPERTY(POLYGON_OFFSET_FILL)
683 ENUM_AS_PROPERTY(SAMPLE_ALPHA_TO_COVERAGE)
684 ENUM_AS_PROPERTY(SAMPLE_COVERAGE)
685
686 /* ErrorCode */
687 ENUM_AS_PROPERTY(NO_ERROR)
688 ENUM_AS_PROPERTY(INVALID_ENUM)
689 ENUM_AS_PROPERTY(INVALID_VALUE)
690 ENUM_AS_PROPERTY(INVALID_OPERATION)
691 ENUM_AS_PROPERTY(OUT_OF_MEMORY)
692
693 /* FrontFaceDirection */
694 ENUM_AS_PROPERTY(CW)
695 ENUM_AS_PROPERTY(CCW)
696
697 /* GetPName */
698 ENUM_AS_PROPERTY(LINE_WIDTH)
699 ENUM_AS_PROPERTY(ALIASED_POINT_SIZE_RANGE)
700 ENUM_AS_PROPERTY(ALIASED_LINE_WIDTH_RANGE)
701 ENUM_AS_PROPERTY(CULL_FACE_MODE)
702 ENUM_AS_PROPERTY(FRONT_FACE)
703 ENUM_AS_PROPERTY(DEPTH_RANGE)
704 ENUM_AS_PROPERTY(DEPTH_WRITEMASK)
705 ENUM_AS_PROPERTY(DEPTH_CLEAR_VALUE)
706 ENUM_AS_PROPERTY(DEPTH_FUNC)
707 ENUM_AS_PROPERTY(STENCIL_CLEAR_VALUE)
708 ENUM_AS_PROPERTY(STENCIL_FUNC)
709 ENUM_AS_PROPERTY(STENCIL_FAIL)
710 ENUM_AS_PROPERTY(STENCIL_PASS_DEPTH_FAIL)
711 ENUM_AS_PROPERTY(STENCIL_PASS_DEPTH_PASS)
712 ENUM_AS_PROPERTY(STENCIL_REF)
713 ENUM_AS_PROPERTY(STENCIL_VALUE_MASK)
714 ENUM_AS_PROPERTY(STENCIL_WRITEMASK)
715 ENUM_AS_PROPERTY(STENCIL_BACK_FUNC)
716 ENUM_AS_PROPERTY(STENCIL_BACK_FAIL)
717 ENUM_AS_PROPERTY(STENCIL_BACK_PASS_DEPTH_FAIL)
718 ENUM_AS_PROPERTY(STENCIL_BACK_PASS_DEPTH_PASS)
719 ENUM_AS_PROPERTY(STENCIL_BACK_REF)
720 ENUM_AS_PROPERTY(STENCIL_BACK_VALUE_MASK)
721 ENUM_AS_PROPERTY(STENCIL_BACK_WRITEMASK)
722 ENUM_AS_PROPERTY(VIEWPORT)
723 ENUM_AS_PROPERTY(SCISSOR_BOX)
724 /* SCISSOR_TEST */
725 ENUM_AS_PROPERTY(COLOR_CLEAR_VALUE)
726 ENUM_AS_PROPERTY(COLOR_WRITEMASK)
727 ENUM_AS_PROPERTY(UNPACK_ALIGNMENT)
728 ENUM_AS_PROPERTY(PACK_ALIGNMENT)
729 ENUM_AS_PROPERTY(MAX_TEXTURE_SIZE)
730 ENUM_AS_PROPERTY(MAX_VIEWPORT_DIMS)
731 ENUM_AS_PROPERTY(SUBPIXEL_BITS)
732 ENUM_AS_PROPERTY(RED_BITS)
733 ENUM_AS_PROPERTY(GREEN_BITS)
734 ENUM_AS_PROPERTY(BLUE_BITS)
735 ENUM_AS_PROPERTY(ALPHA_BITS)
736 ENUM_AS_PROPERTY(DEPTH_BITS)
737 ENUM_AS_PROPERTY(STENCIL_BITS)
738 ENUM_AS_PROPERTY(POLYGON_OFFSET_UNITS)
739 /* POLYGON_OFFSET_FILL */
740 ENUM_AS_PROPERTY(POLYGON_OFFSET_FACTOR)
741 ENUM_AS_PROPERTY(TEXTURE_BINDING_2D)
742 ENUM_AS_PROPERTY(SAMPLE_BUFFERS)
743 ENUM_AS_PROPERTY(SAMPLES)
744 ENUM_AS_PROPERTY(SAMPLE_COVERAGE_VALUE)
745 ENUM_AS_PROPERTY(SAMPLE_COVERAGE_INVERT)
746
747 /* GetTextureParameter */
748 /* TEXTURE_MAG_FILTER */
749 /* TEXTURE_MIN_FILTER */
750 /* TEXTURE_WRAP_S */
751 /* TEXTURE_WRAP_T */
752
753 ENUM_AS_PROPERTY(COMPRESSED_TEXTURE_FORMATS)
754
755 /* HintMode */
756 ENUM_AS_PROPERTY(DONT_CARE)
757 ENUM_AS_PROPERTY(FASTEST)
758 ENUM_AS_PROPERTY(NICEST)
759
760 /* HintTarget */
761 ENUM_AS_PROPERTY(GENERATE_MIPMAP_HINT)
762
763 /* DataType */
764 ENUM_AS_PROPERTY(BYTE)
765 ENUM_AS_PROPERTY(UNSIGNED_BYTE)
766 ENUM_AS_PROPERTY(SHORT)
767 ENUM_AS_PROPERTY(UNSIGNED_SHORT)
768 ENUM_AS_PROPERTY(INT)
769 ENUM_AS_PROPERTY(UNSIGNED_INT)
770 ENUM_AS_PROPERTY(FLOAT)
771
772 /* PixelFormat */
773 ENUM_AS_PROPERTY(DEPTH_COMPONENT)
774 ENUM_AS_PROPERTY(ALPHA)
775 ENUM_AS_PROPERTY(RGB)
776 ENUM_AS_PROPERTY(RGBA)
777 ENUM_AS_PROPERTY(LUMINANCE)
778 ENUM_AS_PROPERTY(LUMINANCE_ALPHA)
779
780 /* PixelType */
781 /* UNSIGNED_BYTE */
782 ENUM_AS_PROPERTY(UNSIGNED_SHORT_4_4_4_4)
783 ENUM_AS_PROPERTY(UNSIGNED_SHORT_5_5_5_1)
784 ENUM_AS_PROPERTY(UNSIGNED_SHORT_5_6_5)
785
786 /* Shaders */
787 ENUM_AS_PROPERTY(FRAGMENT_SHADER)
788 ENUM_AS_PROPERTY(VERTEX_SHADER)
789 ENUM_AS_PROPERTY(MAX_VERTEX_ATTRIBS)
790 ENUM_AS_PROPERTY(MAX_VERTEX_UNIFORM_VECTORS)
791 ENUM_AS_PROPERTY(MAX_VARYING_VECTORS)
792 ENUM_AS_PROPERTY(MAX_COMBINED_TEXTURE_IMAGE_UNITS)
793 ENUM_AS_PROPERTY(MAX_VERTEX_TEXTURE_IMAGE_UNITS)
794 ENUM_AS_PROPERTY(MAX_TEXTURE_IMAGE_UNITS)
795 ENUM_AS_PROPERTY(MAX_FRAGMENT_UNIFORM_VECTORS)
796 ENUM_AS_PROPERTY(SHADER_TYPE)
797 ENUM_AS_PROPERTY(DELETE_STATUS)
798 ENUM_AS_PROPERTY(LINK_STATUS)
799 ENUM_AS_PROPERTY(VALIDATE_STATUS)
800 ENUM_AS_PROPERTY(ATTACHED_SHADERS)
801 ENUM_AS_PROPERTY(ACTIVE_UNIFORMS)
802 ENUM_AS_PROPERTY(ACTIVE_ATTRIBUTES)
803 ENUM_AS_PROPERTY(SHADING_LANGUAGE_VERSION)
804 ENUM_AS_PROPERTY(CURRENT_PROGRAM)
805
806 /* StencilFunction */
807 ENUM_AS_PROPERTY(NEVER)
808 ENUM_AS_PROPERTY(LESS)
809 ENUM_AS_PROPERTY(EQUAL)
810 ENUM_AS_PROPERTY(LEQUAL)
811 ENUM_AS_PROPERTY(GREATER)
812 ENUM_AS_PROPERTY(NOTEQUAL)
813 ENUM_AS_PROPERTY(GEQUAL)
814 ENUM_AS_PROPERTY(ALWAYS)
815
816 /* StencilOp */
817 /* ZERO */
818 ENUM_AS_PROPERTY(KEEP)
819 ENUM_AS_PROPERTY(REPLACE)
820 ENUM_AS_PROPERTY(INCR)
821 ENUM_AS_PROPERTY(DECR)
822 ENUM_AS_PROPERTY(INVERT)
823 ENUM_AS_PROPERTY(INCR_WRAP)
824 ENUM_AS_PROPERTY(DECR_WRAP)
825
826 /* StringName */
827 ENUM_AS_PROPERTY(VENDOR)
828 ENUM_AS_PROPERTY(RENDERER)
829 ENUM_AS_PROPERTY(VERSION)
830
831 /* TextureMagFilter */
832 ENUM_AS_PROPERTY(NEAREST)
833 ENUM_AS_PROPERTY(LINEAR)
834
835 /* TextureMinFilter */
836 /* NEAREST */
837 /* LINEAR */
838 ENUM_AS_PROPERTY(NEAREST_MIPMAP_NEAREST)
839 ENUM_AS_PROPERTY(LINEAR_MIPMAP_NEAREST)
840 ENUM_AS_PROPERTY(NEAREST_MIPMAP_LINEAR)
841 ENUM_AS_PROPERTY(LINEAR_MIPMAP_LINEAR)
842
843 /* TextureParameterName */
844 ENUM_AS_PROPERTY(TEXTURE_MAG_FILTER)
845 ENUM_AS_PROPERTY(TEXTURE_MIN_FILTER)
846 ENUM_AS_PROPERTY(TEXTURE_WRAP_S)
847 ENUM_AS_PROPERTY(TEXTURE_WRAP_T)
848
849 /* TextureTarget */
850 ENUM_AS_PROPERTY(TEXTURE_2D)
851 ENUM_AS_PROPERTY(TEXTURE)
852
853 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP)
854 ENUM_AS_PROPERTY(TEXTURE_BINDING_CUBE_MAP)
855 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_POSITIVE_X)
856 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_NEGATIVE_X)
857 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_POSITIVE_Y)
858 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_NEGATIVE_Y)
859 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_POSITIVE_Z)
860 ENUM_AS_PROPERTY(TEXTURE_CUBE_MAP_NEGATIVE_Z)
861 ENUM_AS_PROPERTY(MAX_CUBE_MAP_TEXTURE_SIZE)
862
863 /* TextureUnit */
864 ENUM_AS_PROPERTY(TEXTURE0)
865 ENUM_AS_PROPERTY(TEXTURE1)
866 ENUM_AS_PROPERTY(TEXTURE2)
867 ENUM_AS_PROPERTY(TEXTURE3)
868 ENUM_AS_PROPERTY(TEXTURE4)
869 ENUM_AS_PROPERTY(TEXTURE5)
870 ENUM_AS_PROPERTY(TEXTURE6)
871 ENUM_AS_PROPERTY(TEXTURE7)
872 ENUM_AS_PROPERTY(TEXTURE8)
873 ENUM_AS_PROPERTY(TEXTURE9)
874 ENUM_AS_PROPERTY(TEXTURE10)
875 ENUM_AS_PROPERTY(TEXTURE11)
876 ENUM_AS_PROPERTY(TEXTURE12)
877 ENUM_AS_PROPERTY(TEXTURE13)
878 ENUM_AS_PROPERTY(TEXTURE14)
879 ENUM_AS_PROPERTY(TEXTURE15)
880 ENUM_AS_PROPERTY(TEXTURE16)
881 ENUM_AS_PROPERTY(TEXTURE17)
882 ENUM_AS_PROPERTY(TEXTURE18)
883 ENUM_AS_PROPERTY(TEXTURE19)
884 ENUM_AS_PROPERTY(TEXTURE20)
885 ENUM_AS_PROPERTY(TEXTURE21)
886 ENUM_AS_PROPERTY(TEXTURE22)
887 ENUM_AS_PROPERTY(TEXTURE23)
888 ENUM_AS_PROPERTY(TEXTURE24)
889 ENUM_AS_PROPERTY(TEXTURE25)
890 ENUM_AS_PROPERTY(TEXTURE26)
891 ENUM_AS_PROPERTY(TEXTURE27)
892 ENUM_AS_PROPERTY(TEXTURE28)
893 ENUM_AS_PROPERTY(TEXTURE29)
894 ENUM_AS_PROPERTY(TEXTURE30)
895 ENUM_AS_PROPERTY(TEXTURE31)
896 ENUM_AS_PROPERTY(ACTIVE_TEXTURE)
897
898 /* TextureWrapMode */
899 ENUM_AS_PROPERTY(REPEAT)
900 ENUM_AS_PROPERTY(CLAMP_TO_EDGE)
901 ENUM_AS_PROPERTY(MIRRORED_REPEAT)
902
903 /* Uniform Types */
904 ENUM_AS_PROPERTY(FLOAT_VEC2)
905 ENUM_AS_PROPERTY(FLOAT_VEC3)
906 ENUM_AS_PROPERTY(FLOAT_VEC4)
907 ENUM_AS_PROPERTY(INT_VEC2)
908 ENUM_AS_PROPERTY(INT_VEC3)
909 ENUM_AS_PROPERTY(INT_VEC4)
910 ENUM_AS_PROPERTY(BOOL)
911 ENUM_AS_PROPERTY(BOOL_VEC2)
912 ENUM_AS_PROPERTY(BOOL_VEC3)
913 ENUM_AS_PROPERTY(BOOL_VEC4)
914 ENUM_AS_PROPERTY(FLOAT_MAT2)
915 ENUM_AS_PROPERTY(FLOAT_MAT3)
916 ENUM_AS_PROPERTY(FLOAT_MAT4)
917 ENUM_AS_PROPERTY(SAMPLER_2D)
918 ENUM_AS_PROPERTY(SAMPLER_CUBE)
919
920 /* Vertex Arrays */
921 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_ENABLED)
922 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_SIZE)
923 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_STRIDE)
924 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_TYPE)
925 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_NORMALIZED)
926 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_POINTER)
927 ENUM_AS_PROPERTY(VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)
928
929 /* Read Format */
930 ENUM_AS_PROPERTY(IMPLEMENTATION_COLOR_READ_TYPE)
931 ENUM_AS_PROPERTY(IMPLEMENTATION_COLOR_READ_FORMAT)
932
933 /* Shader Source */
934 ENUM_AS_PROPERTY(COMPILE_STATUS)
935
936 /* Shader Precision-Specified Types */
937 ENUM_AS_PROPERTY(LOW_FLOAT)
938 ENUM_AS_PROPERTY(MEDIUM_FLOAT)
939 ENUM_AS_PROPERTY(HIGH_FLOAT)
940 ENUM_AS_PROPERTY(LOW_INT)
941 ENUM_AS_PROPERTY(MEDIUM_INT)
942 ENUM_AS_PROPERTY(HIGH_INT)
943
944 /* Framebuffer Object. */
945 ENUM_AS_PROPERTY(FRAMEBUFFER)
946 ENUM_AS_PROPERTY(RENDERBUFFER)
947
948 ENUM_AS_PROPERTY(RGBA4)
949 ENUM_AS_PROPERTY(RGB5_A1)
950 ENUM_AS_PROPERTY(RGB565)
951 ENUM_AS_PROPERTY(DEPTH_COMPONENT16)
952 ENUM_AS_PROPERTY(STENCIL_INDEX)
953 ENUM_AS_PROPERTY(STENCIL_INDEX8)
954 ENUM_AS_PROPERTY(DEPTH_STENCIL)
955
956 ENUM_AS_PROPERTY(RENDERBUFFER_WIDTH)
957 ENUM_AS_PROPERTY(RENDERBUFFER_HEIGHT)
958 ENUM_AS_PROPERTY(RENDERBUFFER_INTERNAL_FORMAT)
959 ENUM_AS_PROPERTY(RENDERBUFFER_RED_SIZE)
960 ENUM_AS_PROPERTY(RENDERBUFFER_GREEN_SIZE)
961 ENUM_AS_PROPERTY(RENDERBUFFER_BLUE_SIZE)
962 ENUM_AS_PROPERTY(RENDERBUFFER_ALPHA_SIZE)
963 ENUM_AS_PROPERTY(RENDERBUFFER_DEPTH_SIZE)
964 ENUM_AS_PROPERTY(RENDERBUFFER_STENCIL_SIZE)
965
966 ENUM_AS_PROPERTY(FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)
967 ENUM_AS_PROPERTY(FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)
968 ENUM_AS_PROPERTY(FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL)
969 ENUM_AS_PROPERTY(FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE)
970
971 ENUM_AS_PROPERTY(COLOR_ATTACHMENT0)
972 ENUM_AS_PROPERTY(DEPTH_ATTACHMENT)
973 ENUM_AS_PROPERTY(STENCIL_ATTACHMENT)
974 ENUM_AS_PROPERTY(DEPTH_STENCIL_ATTACHMENT)
975
976 ENUM_AS_PROPERTY(NONE)
977
978 ENUM_AS_PROPERTY(FRAMEBUFFER_COMPLETE)
979 ENUM_AS_PROPERTY(FRAMEBUFFER_INCOMPLETE_ATTACHMENT)
980 ENUM_AS_PROPERTY(FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
981 ENUM_AS_PROPERTY(FRAMEBUFFER_INCOMPLETE_DIMENSIONS)
982 ENUM_AS_PROPERTY(FRAMEBUFFER_UNSUPPORTED)
983
984 ENUM_AS_PROPERTY(FRAMEBUFFER_BINDING)
985 ENUM_AS_PROPERTY(RENDERBUFFER_BINDING)
986 ENUM_AS_PROPERTY(MAX_RENDERBUFFER_SIZE)
987
988 ENUM_AS_PROPERTY(INVALID_FRAMEBUFFER_OPERATION)
989
990 /* WebGL-specific enums */
991 ENUM_AS_PROPERTY(UNPACK_FLIP_Y_WEBGL)
992 ENUM_AS_PROPERTY(UNPACK_PREMULTIPLY_ALPHA_WEBGL)
993 ENUM_AS_PROPERTY(CONTEXT_LOST_WEBGL)
994 ENUM_AS_PROPERTY(UNPACK_COLORSPACE_CONVERSION_WEBGL)
995 ENUM_AS_PROPERTY(BROWSER_DEFAULT_WEBGL)
996
997 CanvasContext(QQmlEngine *engine, bool isES2, int maxVertexAttribs, int contextVersion,
998 const QSet<QByteArray> &extensions, CanvasGlCommandQueue *commandQueue,
999 bool isCombinedDepthStencilSupported, QObject *parent = 0);
1000 ~CanvasContext();
1001
1002 void setCanvas(Canvas *canvas);
1003 Canvas *canvas();
1004
1005 uint drawingBufferWidth();
1006 uint drawingBufferHeight();
1007
1008 Q_INVOKABLE QVariantList getSupportedExtensions();
1009 Q_INVOKABLE QVariant getExtension(const QString &name);
1010
1011 Q_INVOKABLE bool isContextLost();
1012 Q_INVOKABLE QJSValue getContextAttributes();
1013 void setContextAttributes(const CanvasContextAttributes &attribs);
1014
1015 Q_INVOKABLE QJSValue getShaderPrecisionFormat(glEnums shadertype, glEnums precisiontype);
1016
1017 Q_INVOKABLE void flush();
1018 Q_INVOKABLE void finish();
1019
1020 Q_INVOKABLE QJSValue createTexture();
1021 Q_INVOKABLE void deleteTexture(QJSValue texture);
1022 Q_INVOKABLE void activeTexture(glEnums texture);
1023 Q_INVOKABLE void bindTexture(glEnums target, QJSValue texture);
1024 Q_INVOKABLE void generateMipmap(glEnums target);
1025 Q_INVOKABLE bool isTexture(QJSValue anyObject);
1026 Q_INVOKABLE void compressedTexImage2D(glEnums target, int level, glEnums internalformat,
1027 int width, int height, int border,
1028 QJSValue pixels);
1029 Q_INVOKABLE void compressedTexSubImage2D(glEnums target, int level,
1030 int xoffset, int yoffset,
1031 int width, int height,
1032 glEnums format,
1033 QJSValue pixels);
1034
1035 Q_INVOKABLE void copyTexImage2D(glEnums target, int level,
1036 glEnums internalformat,
1037 int x, int y, int width, int height,
1038 int border);
1039 Q_INVOKABLE void copyTexSubImage2D(glEnums target, int level,
1040 int xoffset, int yoffset,
1041 int x, int y,
1042 int width, int height);
1043
1044 Q_INVOKABLE void texImage2D(glEnums target, int level, glEnums internalformat,
1045 int width, int height, int border,
1046 glEnums format, glEnums type,
1047 QJSValue pixels);
1048 Q_INVOKABLE void texSubImage2D(glEnums target, int level,
1049 int xoffset, int yoffset,
1050 int width, int height,
1051 glEnums format, glEnums type,
1052 QJSValue pixels);
1053 Q_INVOKABLE void texImage2D(glEnums target, int level, glEnums internalformat,
1054 glEnums format, glEnums type, QJSValue image);
1055 Q_INVOKABLE void texSubImage2D(glEnums target, int level,
1056 int xoffset, int yoffset,
1057 glEnums format, glEnums type, QJSValue image);
1058 Q_INVOKABLE void texParameterf(glEnums target, glEnums pname, float param);
1059 Q_INVOKABLE void texParameteri(glEnums target, glEnums pname, int param);
1060
1061 Q_INVOKABLE QJSValue createFramebuffer();
1062 Q_INVOKABLE void deleteFramebuffer(QJSValue buffer);
1063 Q_INVOKABLE void bindFramebuffer(glEnums target, QJSValue framebuffer);
1064 Q_INVOKABLE glEnums checkFramebufferStatus(glEnums target);
1065 Q_INVOKABLE void framebufferRenderbuffer(glEnums target, glEnums attachment,
1066 glEnums renderbuffertarget,
1067 QJSValue renderbuffer);
1068 Q_INVOKABLE void framebufferTexture2D(glEnums target, glEnums attachment, glEnums textarget,
1069 QJSValue texture, int level);
1070 Q_INVOKABLE bool isFramebuffer(QJSValue anyObject);
1071
1072 Q_INVOKABLE QJSValue createRenderbuffer();
1073 Q_INVOKABLE void bindRenderbuffer(glEnums target, QJSValue renderbuffer);
1074 Q_INVOKABLE void renderbufferStorage(glEnums target, glEnums internalformat, int width,
1075 int height);
1076 Q_INVOKABLE bool isRenderbuffer(QJSValue anyObject);
1077 Q_INVOKABLE void deleteRenderbuffer(QJSValue renderbuffer);
1078
1079 Q_INVOKABLE void sampleCoverage(float value, bool invert);
1080
1081 Q_INVOKABLE QJSValue createShader(glEnums type);
1082 Q_INVOKABLE bool isShader(QJSValue shader3D);
1083 Q_INVOKABLE void deleteShader(QJSValue shader3D);
1084 Q_INVOKABLE void shaderSource(QJSValue shader3D, const QString &shaderSource);
1085 Q_INVOKABLE QJSValue getShaderSource(QJSValue shader3D);
1086 Q_INVOKABLE void compileShader(QJSValue shader3D);
1087
1088 Q_INVOKABLE void uniform1f(QJSValue location, float x);
1089 Q_INVOKABLE void uniform1i(QJSValue location, int x);
1090 Q_INVOKABLE void uniform2f(QJSValue location, float x, float y);
1091 Q_INVOKABLE void uniform2i(QJSValue location, int x, int y);
1092 Q_INVOKABLE void uniform3f(QJSValue location, float x, float y, float z);
1093 Q_INVOKABLE void uniform3i(QJSValue location, int x, int y, int z);
1094 Q_INVOKABLE void uniform4f(QJSValue location, float x, float y, float z, float w);
1095 Q_INVOKABLE void uniform4i(QJSValue location, int x, int y, int z, int w);
1096
1097 Q_INVOKABLE void uniform1fv(QJSValue location, QJSValue array);
1098 Q_INVOKABLE void uniform1iv(QJSValue location, QJSValue array);
1099 Q_INVOKABLE void uniform2fv(QJSValue location, QJSValue array);
1100 Q_INVOKABLE void uniform2iv(QJSValue location, QJSValue array);
1101 Q_INVOKABLE void uniform3fv(QJSValue location, QJSValue array);
1102 Q_INVOKABLE void uniform3iv(QJSValue location, QJSValue array);
1103 Q_INVOKABLE void uniform4fv(QJSValue location, QJSValue array);
1104 Q_INVOKABLE void uniform4iv(QJSValue location, QJSValue array);
1105
1106 Q_INVOKABLE void uniformMatrix2fv(QJSValue location, bool transpose, QJSValue value);
1107 Q_INVOKABLE void uniformMatrix3fv(QJSValue location, bool transpose, QJSValue value);
1108 Q_INVOKABLE void uniformMatrix4fv(QJSValue location, bool transpose, QJSValue value);
1109
1110 Q_INVOKABLE QJSValue createProgram();
1111 Q_INVOKABLE void attachShader(QJSValue program, QJSValue shader3D);
1112 Q_INVOKABLE void detachShader(QJSValue program, QJSValue shader3D);
1113 Q_INVOKABLE void linkProgram(QJSValue program);
1114 Q_INVOKABLE void useProgram(QJSValue program);
1115 Q_INVOKABLE void validateProgram(QJSValue program);
1116 Q_INVOKABLE QJSValue getUniformLocation(QJSValue program, const QString &name);
1117 Q_INVOKABLE int getAttribLocation(QJSValue program, const QString &name);
1118 Q_INVOKABLE void bindAttribLocation(QJSValue program, int index, const QString &name);
1119 Q_INVOKABLE QJSValue getProgramInfoLog(QJSValue program);
1120 Q_INVOKABLE bool isProgram(QJSValue anyObject);
1121 Q_INVOKABLE void deleteProgram(QJSValue program);
1122
1123 Q_INVOKABLE void disableVertexAttribArray(int index);
1124 Q_INVOKABLE void enableVertexAttribArray(int index);
1125 Q_INVOKABLE void vertexAttribPointer(int indx, int size, glEnums type,
1126 bool normalized, int stride, long offset);
1127 Q_INVOKABLE void vertexAttrib1f(unsigned int indx, float x);
1128 Q_INVOKABLE void vertexAttrib2f(unsigned int indx, float x, float y);
1129 Q_INVOKABLE void vertexAttrib3f(unsigned int indx, float x, float y, float z);
1130 Q_INVOKABLE void vertexAttrib4f(unsigned int indx, float x, float y, float z, float w);
1131
1132 Q_INVOKABLE void vertexAttrib1fv(unsigned int indx, QJSValue array);
1133 Q_INVOKABLE void vertexAttrib2fv(unsigned int indx, QJSValue array);
1134 Q_INVOKABLE void vertexAttrib3fv(unsigned int indx, QJSValue array);
1135 Q_INVOKABLE void vertexAttrib4fv(unsigned int indx, QJSValue array);
1136
1137 Q_INVOKABLE QJSValue getShaderParameter(QJSValue shader3D, glEnums paramName);
1138 Q_INVOKABLE QJSValue getProgramParameter(QJSValue program, glEnums paramName);
1139 Q_INVOKABLE QJSValue getShaderInfoLog(QJSValue shader3D);
1140
1141 /* Buffer object methods */
1142 Q_INVOKABLE QJSValue createBuffer();
1143 Q_INVOKABLE void bindBuffer(glEnums target, QJSValue buffer);
1144 Q_INVOKABLE void bufferData(glEnums target, long size, glEnums hint);
1145 Q_INVOKABLE void bufferData(glEnums target, QJSValue data, glEnums hint);
1146 Q_INVOKABLE void bufferSubData(glEnums target, int offset, QJSValue data);
1147
1148 Q_INVOKABLE QJSValue getBufferParameter(glEnums target, glEnums pname);
1149 Q_INVOKABLE bool isBuffer(QJSValue value);
1150 Q_INVOKABLE void deleteBuffer(QJSValue buffer);
1151
1152 Q_INVOKABLE glEnums getError();
1153
1154 Q_INVOKABLE void cullFace(glEnums mode);
1155 Q_INVOKABLE void frontFace(glEnums mode);
1156
1157 Q_INVOKABLE void lineWidth(float width);
1158 Q_INVOKABLE void pixelStorei(glEnums pname, int param);
1159 Q_INVOKABLE void polygonOffset(float factor, float units);
1160 Q_INVOKABLE void hint(glEnums target, glEnums mode);
1161 Q_INVOKABLE void enable(glEnums cap);
1162 Q_INVOKABLE bool isEnabled(glEnums cap);
1163 Q_INVOKABLE void disable(glEnums cap);
1164
1165 Q_INVOKABLE QJSValue getParameter(glEnums pname);
1166
1167 Q_INVOKABLE void clear(glEnums flags);
1168 Q_INVOKABLE void depthMask(bool flag);
1169 Q_INVOKABLE void depthFunc(glEnums func);
1170 Q_INVOKABLE void depthRange(float zNear, float zFar);
1171 Q_INVOKABLE void clearDepth(float depth);
1172 Q_INVOKABLE void clearColor(float red, float green, float blue, float alpha);
1173 Q_INVOKABLE void clearStencil(int s);
1174 Q_INVOKABLE void colorMask(bool red, bool green, bool blue, bool alpha);
1175
1176 Q_INVOKABLE void blendColor(float red, float green, float blue, float alpha);
1177 Q_INVOKABLE void blendEquation(glEnums mode);
1178 Q_INVOKABLE void blendEquationSeparate(glEnums modeRGB, glEnums modeAlpha);
1179 Q_INVOKABLE void blendFunc(glEnums sfactor, glEnums dfactor);
1180 Q_INVOKABLE void blendFuncSeparate(glEnums srcRGB, glEnums dstRGB, glEnums srcAlpha,
1181 glEnums dstAlpha);
1182
1183 Q_INVOKABLE void drawArrays(glEnums type, int first, int count);
1184 Q_INVOKABLE void drawElements(glEnums mode, int count, glEnums type, long offset);
1185
1186 Q_INVOKABLE void viewport(int x, int y, int width, int height);
1187
1188 Q_INVOKABLE void scissor(int x, int y, int width, int height);
1189
1190 Q_INVOKABLE void readPixels(int x, int y, long width, long height, glEnums format,
1191 glEnums type, QJSValue pixels);
1192
1193 Q_INVOKABLE CanvasActiveInfo *getActiveAttrib(QJSValue program, uint index);
1194 Q_INVOKABLE CanvasActiveInfo *getActiveUniform(QJSValue program, uint index);
1195 Q_INVOKABLE QJSValue getAttachedShaders(QJSValue program);
1196
1197 Q_INVOKABLE void stencilFunc(glEnums func, int ref, uint mask);
1198 Q_INVOKABLE void stencilFuncSeparate(glEnums face, glEnums func, int ref, uint mask);
1199 Q_INVOKABLE void stencilMask(uint mask);
1200 Q_INVOKABLE void stencilMaskSeparate(glEnums face, uint mask);
1201 Q_INVOKABLE void stencilOp(glEnums fail, glEnums zfail, glEnums zpass);
1202 Q_INVOKABLE void stencilOpSeparate(glEnums face, glEnums fail, glEnums zfail, glEnums zpass);
1203
1204 Q_INVOKABLE QJSValue getFramebufferAttachmentParameter(glEnums target,
1205 glEnums attachment,
1206 glEnums pname);
1207 Q_INVOKABLE QJSValue getRenderbufferParameter(glEnums target, glEnums pname);
1208 Q_INVOKABLE QJSValue getTexParameter(glEnums target, glEnums pname);
1209 Q_INVOKABLE QJSValue getUniform(QJSValue program, QJSValue location);
1210 Q_INVOKABLE uint getVertexAttribOffset(uint index, glEnums pname);
1211 Q_INVOKABLE QJSValue getVertexAttrib(uint index, glEnums pname);
1212
1213 QJSValue createTextureFromSource(QQuickItem *item);
1214 QMap<QQuickItem *, CanvasTexture *> &quickItemToTextureMap();
1215
1216 void scheduleSyncCommand(GlSyncCommand *command);
1217
1218 void setContextLostState(bool lost);
1219
1220 CanvasGlCommandQueue *commandQueue() { return m_commandQueue; }
1221 void setCommandQueue(CanvasGlCommandQueue *queue);
1222 void markQuickTexturesDirty();
1223
1224signals:
1225 void canvasChanged(Canvas *canvas);
1226 void drawingBufferWidthChanged();
1227 void drawingBufferHeightChanged();
1228
1229private slots:
1230 void handleFullCommandQueue();
1231 void handleTextureIdResolved(QQuickItem *item);
1232 void handleObjectDeletion(QObject *obj);
1233
1234private:
1235 uchar *getTypedArrayAsRawDataPtr(const QJSValue &jsValue, int &byteLength,
1236 QV4::TypedArrayType type);
1237 uchar *getTypedArrayAsRawDataPtr(const QJSValue &jsValue,
1238 QV4::TypedArrayType type);
1239 uchar *getTypedArrayAsRawDataPtr(const QJSValue &jsValue, int &byteLength);
1240 uchar *getArrayBufferAsRawDataPtr(const QJSValue &jsValue, int &byteLength);
1241
1242 CanvasTexture *getAsTexture3D(const QJSValue &anyObject);
1243 CanvasTextureImage* getAsTextureImage(const QJSValue &image);
1244 CanvasFrameBuffer *getAsFramebuffer(const QJSValue &anyObject);
1245 CanvasRenderBuffer *getAsRenderbuffer3D(const QJSValue &anyObject) const;
1246 CanvasShader *getAsShader3D(const QJSValue &shader3D, bool deadOrAlive = false) const;
1247 CanvasUniformLocation *getAsUniformLocation3D(const QJSValue &anyObject) const;
1248 CanvasProgram *getAsProgram3D(const QJSValue &anyObject, bool deadOrAlive = false) const;
1249 CanvasBuffer *getAsBuffer3D(const QJSValue &value) const;
1250
1251 QString glEnumToString(glEnums value) const;
1252 float devicePixelRatio();
1253 void setDevicePixelRatio(float ratio);
1254 int getSufficientSize(glEnums internalFormat, int width, int height);
1255
1256 QByteArray *unpackPixels(uchar *srcData, bool useSrcDataAsDst,
1257 int bytesPerPixel, int width, int height);
1258
1259 bool isOfType(const QJSValue &value, const char *classname) const;
1260
1261 bool isValidTextureBound(glEnums target, const QString &funcName, bool singleLayer = true);
1262 bool checkValidity(CanvasAbstractObject *jsObj, const char *function);
1263
1264 float *transposeMatrix(int dim, int count, float *src);
1265 void uniformMatrixNfv(int dim, const QJSValue &location3D, bool transpose,
1266 const QJSValue &array);
1267 void uniformMatrixNfva(int dim, CanvasUniformLocation *uniformLocation, bool transpose,
1268 const QVariantList &array);
1269 void vertexAttribNfv(int dim, unsigned int indx, const QJSValue &array);
1270 void vertexAttribNfva(CanvasGlCommandQueue::GlCommandId id, unsigned int indx,
1271 const QVariantList &values);
1272
1273 void uniformNf(int dim, const QJSValue &location,
1274 float x, float y = 0.0f, float z = 0.0f, float w = 0.0f);
1275 void uniformNi(int dim, const QJSValue &location, int x, int y = 0, int z = 0, int w = 0);
1276 void uniformNxva(int dim, bool typeFloat, CanvasGlCommandQueue::GlCommandId id,
1277 CanvasUniformLocation *location, const QVariantList &array);
1278 void uniformNxv(int dim, bool typeFloat, const QJSValue &location, const QJSValue &array);
1279
1280 bool isCapabilityValid(glEnums cap);
1281 bool checkBlendMode(glEnums mode);
1282 bool checkBufferTarget(glEnums target);
1283 bool checkBufferUsage(glEnums usage);
1284 bool checkTextureFormats(glEnums internalFormat, glEnums format);
1285 bool checkTextureTarget(glEnums target);
1286 bool checkContextLost();
1287
1288 void addObjectToValidList(CanvasAbstractObject *jsObj);
1289
1290 typedef enum {
1291 CANVAS_NO_ERRORS = 0,
1292 CANVAS_INVALID_ENUM = 1 << 0,
1293 CANVAS_INVALID_VALUE = 1 << 1,
1294 CANVAS_INVALID_OPERATION = 1 << 2,
1295 CANVAS_OUT_OF_MEMORY = 1 << 3,
1296 CANVAS_INVALID_FRAMEBUFFER_OPERATION = 1 << 4
1297 } errorBits;
1298
1299private:
1300 QQmlEngine *m_engine;
1301 QV4::ExecutionEngine *m_v4engine;
1302 bool m_unpackFlipYEnabled;
1303 bool m_unpackPremultiplyAlphaEnabled;
1304 int m_unpackAlignmentValue;
1305 qreal m_devicePixelRatio;
1306 CanvasProgram *m_currentProgram;
1307 CanvasBuffer *m_currentArrayBuffer;
1308 CanvasBuffer *m_currentElementArrayBuffer;
1309 CanvasTexture *m_currentTexture2D;
1310 CanvasTexture *m_currentTextureCubeMap;
1311 CanvasFrameBuffer *m_currentFramebuffer;
1312 CanvasRenderBuffer *m_currentRenderbuffer;
1313 QSet<QByteArray> m_extensions;
1314 CanvasContextAttributes m_contextAttributes;
1315 QMap<int, CanvasBuffer*> m_idToCanvasBufferMap;
1316 friend class Canvas;
1317 friend class CanvasRenderer;
1318 QString m_emptyString;
1319 int m_error;
1320 EnumToStringMap *m_map;
1321 Canvas *m_canvas;
1322 uint m_maxVertexAttribs;
1323 int m_contextVersion;
1324 float **m_vertexAttribPointers;
1325 bool m_isOpenGLES2;
1326 bool m_isCombinedDepthStencilSupported;
1327 CanvasGlCommandQueue *m_commandQueue; // Not owned
1328 QMutex m_renderJobMutex;
1329 QWaitCondition m_renderJobCondition;
1330 QMap<QQuickItem *, CanvasTexture *> m_quickItemToTextureMap;
1331 bool m_contextLost;
1332 QMap<CanvasAbstractObject *, int> m_validObjectMap;
1333 bool m_contextLostErrorReported;
1334
1335 // EXTENSIONS
1336 CanvasGLStateDump *m_stateDumpExt;
1337 CanvasTextureProvider *m_textureProviderExt;
1338 QObject *m_standardDerivatives;
1339 CompressedTextureS3TC *m_compressedTextureS3TC;
1340 CompressedTexturePVRTC *m_compressedTexturePVRTC;
1341};
1342
1343QT_CANVAS3D_END_NAMESPACE
1344QT_END_NAMESPACE
1345
1346#endif // CONTEXT3D_P_H
1347

source code of qtcanvas3d/src/imports/qtcanvas3d/context3d_p.h