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 | |
82 | QT_BEGIN_NAMESPACE |
83 | |
84 | #if Q_QML_PRIVATE_API_VERSION < 3 |
85 | namespace QV4 { |
86 | enum 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 | |
101 | QT_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 | |
105 | class Canvas; |
106 | class CanvasActiveInfo; |
107 | class CanvasTexture; |
108 | class CanvasShader; |
109 | class CanvasFrameBuffer; |
110 | class CanvasRenderBuffer; |
111 | class CanvasProgram; |
112 | class CanvasBuffer; |
113 | class CanvasUniformLocation; |
114 | class CanvasTextureImage; |
115 | class CanvasShaderPrecisionFormat; |
116 | class EnumToStringMap; |
117 | class CanvasGlCommandQueue; |
118 | class GlCommand; |
119 | class CompressedTextureS3TC; |
120 | class CompressedTexturePVRTC; |
121 | |
122 | class 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 | |
133 | public: |
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 | |
1224 | signals: |
1225 | void canvasChanged(Canvas *canvas); |
1226 | void drawingBufferWidthChanged(); |
1227 | void drawingBufferHeightChanged(); |
1228 | |
1229 | private slots: |
1230 | void handleFullCommandQueue(); |
1231 | void handleTextureIdResolved(QQuickItem *item); |
1232 | void handleObjectDeletion(QObject *obj); |
1233 | |
1234 | private: |
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 | |
1299 | private: |
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 | |
1343 | QT_CANVAS3D_END_NAMESPACE |
1344 | QT_END_NAMESPACE |
1345 | |
1346 | #endif // CONTEXT3D_P_H |
1347 | |