1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Apple Inc. All rights reserved. 3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Redistribution and use in source and binary forms, with or without 5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * modification, are permitted provided that the following conditions 6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * are met: 7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 1. Redistributions of source code must retain the above copyright 8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * notice, this list of conditions and the following disclaimer. 9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 2. Redistributions in binary form must reproduce the above copyright 10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * notice, this list of conditions and the following disclaimer in the 11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * documentation and/or other materials provided with the distribution. 12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */ 25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifndef GraphicsContext3D_h 27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#define GraphicsContext3D_h 28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 29cad810f21b803229eb11403f9209855525a25d57Steve Block#include "IntSize.h" 3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "GraphicsLayer.h" 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "GraphicsTypes3D.h" 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "PlatformString.h" 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/HashMap.h> 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/ListHashSet.h> 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/Noncopyable.h> 37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// FIXME: Find a better way to avoid the name confliction for NO_ERROR. 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ((PLATFORM(CHROMIUM) && OS(WINDOWS)) || PLATFORM(WIN) || (PLATFORM(QT) && OS(WINDOWS))) 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#undef NO_ERROR 41cad810f21b803229eb11403f9209855525a25d57Steve Block#elif PLATFORM(GTK) 42cad810f21b803229eb11403f9209855525a25d57Steve Block// This define is from the X11 headers, but it's used below, so we must undefine it. 43cad810f21b803229eb11403f9209855525a25d57Steve Block#undef VERSION 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) || PLATFORM(GTK) 47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "ANGLEWebKitBridge.h" 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <OpenGL/OpenGL.h> 5206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include <wtf/RetainPtr.h> 5306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifdef __OBJC__ 5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen@class CALayer; 5506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen@class WebGLLayer; 5606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#else 572bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass CALayer; 582bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebGLLayer; 5906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif PLATFORM(QT) 61cad810f21b803229eb11403f9209855525a25d57Steve BlockQT_BEGIN_NAMESPACE 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochclass QPainter; 63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochclass QRect; 64cad810f21b803229eb11403f9209855525a25d57Steve BlockQT_END_NAMESPACE 65cad810f21b803229eb11403f9209855525a25d57Steve Block#elif PLATFORM(GTK) 66cad810f21b803229eb11403f9209855525a25d57Steve Blocktypedef unsigned int GLuint; 67cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 68cad810f21b803229eb11403f9209855525a25d57Steve Block 69cad810f21b803229eb11403f9209855525a25d57Steve Block#if PLATFORM(MAC) 70cad810f21b803229eb11403f9209855525a25d57Steve Blocktypedef CGLContextObj PlatformGraphicsContext3D; 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocktypedef void* PlatformGraphicsContext3D; 73cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 74cad810f21b803229eb11403f9209855525a25d57Steve Block 75cad810f21b803229eb11403f9209855525a25d57Steve Block// These are currently the same among all implementations. 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochconst PlatformGraphicsContext3D NullPlatformGraphicsContext3D = 0; 77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockconst Platform3DObject NullPlatform3DObject = 0; 78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG) 80967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include <CoreGraphics/CGContext.h> 81967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 82967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocknamespace WebCore { 84dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass CanvasRenderingContext; 85a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass DrawingBuffer; 8628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass Extensions3D; 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) || PLATFORM(GTK) 8828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuclass Extensions3DOpenGL; 8928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif 90dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass HostWindow; 91dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass Image; 92dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass ImageData; 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CAIRO) 942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass PlatformContextCairo; 952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 96dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 97dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochstruct ActiveInfo { 98dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String name; 99cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type; 100cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dint size; 101dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}; 102dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 103dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// FIXME: ideally this would be used on all platforms. 1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(CHROMIUM) || PLATFORM(QT) || PLATFORM(GTK) 105dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochclass GraphicsContext3DInternal; 106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 108a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochclass GraphicsContext3D : public RefCounted<GraphicsContext3D> { 109dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochpublic: 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block enum { 111dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_BUFFER_BIT = 0x00000100, 112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BUFFER_BIT = 0x00000400, 113dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COLOR_BUFFER_BIT = 0x00004000, 114dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch POINTS = 0x0000, 115dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINES = 0x0001, 116dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINE_LOOP = 0x0002, 117dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINE_STRIP = 0x0003, 118dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TRIANGLES = 0x0004, 119dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TRIANGLE_STRIP = 0x0005, 120dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TRIANGLE_FAN = 0x0006, 121dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ZERO = 0, 122dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE = 1, 123dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SRC_COLOR = 0x0300, 124dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_SRC_COLOR = 0x0301, 125dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SRC_ALPHA = 0x0302, 126dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_SRC_ALPHA = 0x0303, 127dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DST_ALPHA = 0x0304, 128dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_DST_ALPHA = 0x0305, 129dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DST_COLOR = 0x0306, 130dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_DST_COLOR = 0x0307, 131dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SRC_ALPHA_SATURATE = 0x0308, 132dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FUNC_ADD = 0x8006, 133dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_EQUATION = 0x8009, 134dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_EQUATION_RGB = 0x8009, 135dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_EQUATION_ALPHA = 0x883D, 136dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FUNC_SUBTRACT = 0x800A, 137dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FUNC_REVERSE_SUBTRACT = 0x800B, 138dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_DST_RGB = 0x80C8, 139dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_SRC_RGB = 0x80C9, 140dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_DST_ALPHA = 0x80CA, 141dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_SRC_ALPHA = 0x80CB, 142dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CONSTANT_COLOR = 0x8001, 143dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_CONSTANT_COLOR = 0x8002, 144dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CONSTANT_ALPHA = 0x8003, 145dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ONE_MINUS_CONSTANT_ALPHA = 0x8004, 146dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND_COLOR = 0x8005, 147dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ARRAY_BUFFER = 0x8892, 148dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ELEMENT_ARRAY_BUFFER = 0x8893, 149dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ARRAY_BUFFER_BINDING = 0x8894, 150dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ELEMENT_ARRAY_BUFFER_BINDING = 0x8895, 151dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STREAM_DRAW = 0x88E0, 152dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STATIC_DRAW = 0x88E4, 153dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DYNAMIC_DRAW = 0x88E8, 154dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BUFFER_SIZE = 0x8764, 155dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BUFFER_USAGE = 0x8765, 156dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CURRENT_VERTEX_ATTRIB = 0x8626, 157dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRONT = 0x0404, 158dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BACK = 0x0405, 159dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRONT_AND_BACK = 0x0408, 160dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_2D = 0x0DE1, 161dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CULL_FACE = 0x0B44, 162dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLEND = 0x0BE2, 163dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DITHER = 0x0BD0, 164dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_TEST = 0x0B90, 165dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_TEST = 0x0B71, 166dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SCISSOR_TEST = 0x0C11, 167dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch POLYGON_OFFSET_FILL = 0x8037, 168dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLE_ALPHA_TO_COVERAGE = 0x809E, 169dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLE_COVERAGE = 0x80A0, 170dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NO_ERROR = 0, 171dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INVALID_ENUM = 0x0500, 172dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INVALID_VALUE = 0x0501, 173dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INVALID_OPERATION = 0x0502, 174dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch OUT_OF_MEMORY = 0x0505, 175dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CW = 0x0900, 176dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CCW = 0x0901, 177dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINE_WIDTH = 0x0B21, 178dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ALIASED_POINT_SIZE_RANGE = 0x846D, 179dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ALIASED_LINE_WIDTH_RANGE = 0x846E, 180dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CULL_FACE_MODE = 0x0B45, 181dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRONT_FACE = 0x0B46, 182dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_RANGE = 0x0B70, 183dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_WRITEMASK = 0x0B72, 184dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_CLEAR_VALUE = 0x0B73, 185dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_FUNC = 0x0B74, 186dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_CLEAR_VALUE = 0x0B91, 187dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_FUNC = 0x0B92, 188dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_FAIL = 0x0B94, 189dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_PASS_DEPTH_FAIL = 0x0B95, 190dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_PASS_DEPTH_PASS = 0x0B96, 191dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_REF = 0x0B97, 192dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_VALUE_MASK = 0x0B93, 193dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_WRITEMASK = 0x0B98, 194dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_FUNC = 0x8800, 195dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_FAIL = 0x8801, 196dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802, 197dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_PASS_DEPTH_PASS = 0x8803, 198dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_REF = 0x8CA3, 199dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_VALUE_MASK = 0x8CA4, 200dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BACK_WRITEMASK = 0x8CA5, 201dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VIEWPORT = 0x0BA2, 202dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SCISSOR_BOX = 0x0C10, 203dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COLOR_CLEAR_VALUE = 0x0C22, 204dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COLOR_WRITEMASK = 0x0C23, 205dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNPACK_ALIGNMENT = 0x0CF5, 206dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PACK_ALIGNMENT = 0x0D05, 207dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_TEXTURE_SIZE = 0x0D33, 208dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_VIEWPORT_DIMS = 0x0D3A, 209dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SUBPIXEL_BITS = 0x0D50, 210dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RED_BITS = 0x0D52, 211dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch GREEN_BITS = 0x0D53, 212dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BLUE_BITS = 0x0D54, 213dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ALPHA_BITS = 0x0D55, 214dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_BITS = 0x0D56, 215dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_BITS = 0x0D57, 216dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch POLYGON_OFFSET_UNITS = 0x2A00, 217dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch POLYGON_OFFSET_FACTOR = 0x8038, 218dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_BINDING_2D = 0x8069, 219dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLE_BUFFERS = 0x80A8, 220dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLES = 0x80A9, 221dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLE_COVERAGE_VALUE = 0x80AA, 222dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLE_COVERAGE_INVERT = 0x80AB, 223dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2, 224dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COMPRESSED_TEXTURE_FORMATS = 0x86A3, 225dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DONT_CARE = 0x1100, 226dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FASTEST = 0x1101, 227dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NICEST = 0x1102, 228dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch GENERATE_MIPMAP_HINT = 0x8192, 229dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BYTE = 0x1400, 230dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_BYTE = 0x1401, 231dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHORT = 0x1402, 232dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_SHORT = 0x1403, 233dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INT = 0x1404, 234dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_INT = 0x1405, 235dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT = 0x1406, 236dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FIXED = 0x140C, 237dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_COMPONENT = 0x1902, 238dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ALPHA = 0x1906, 239dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RGB = 0x1907, 240dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RGBA = 0x1908, 241dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LUMINANCE = 0x1909, 242dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LUMINANCE_ALPHA = 0x190A, 243dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_SHORT_4_4_4_4 = 0x8033, 244dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_SHORT_5_5_5_1 = 0x8034, 245dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNSIGNED_SHORT_5_6_5 = 0x8363, 246dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAGMENT_SHADER = 0x8B30, 247dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_SHADER = 0x8B31, 248dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_VERTEX_ATTRIBS = 0x8869, 249dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB, 250dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_VARYING_VECTORS = 0x8DFC, 251dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D, 252dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C, 253dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_TEXTURE_IMAGE_UNITS = 0x8872, 254dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD, 255dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHADER_TYPE = 0x8B4F, 256dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DELETE_STATUS = 0x8B80, 257dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINK_STATUS = 0x8B82, 258dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VALIDATE_STATUS = 0x8B83, 259dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ATTACHED_SHADERS = 0x8B85, 260dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ACTIVE_UNIFORMS = 0x8B86, 261dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87, 262dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ACTIVE_ATTRIBUTES = 0x8B89, 263dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A, 264dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHADING_LANGUAGE_VERSION = 0x8B8C, 265dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CURRENT_PROGRAM = 0x8B8D, 266dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NEVER = 0x0200, 267dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LESS = 0x0201, 268dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch EQUAL = 0x0202, 269dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LEQUAL = 0x0203, 270dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch GREATER = 0x0204, 271dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NOTEQUAL = 0x0205, 272dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch GEQUAL = 0x0206, 273dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ALWAYS = 0x0207, 274dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch KEEP = 0x1E00, 275dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch REPLACE = 0x1E01, 276dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INCR = 0x1E02, 277dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DECR = 0x1E03, 278dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INVERT = 0x150A, 279dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INCR_WRAP = 0x8507, 280dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DECR_WRAP = 0x8508, 281dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VENDOR = 0x1F00, 282dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERER = 0x1F01, 283dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERSION = 0x1F02, 284dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch EXTENSIONS = 0x1F03, 285dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NEAREST = 0x2600, 286dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINEAR = 0x2601, 287dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NEAREST_MIPMAP_NEAREST = 0x2700, 288dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINEAR_MIPMAP_NEAREST = 0x2701, 289dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NEAREST_MIPMAP_LINEAR = 0x2702, 290dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LINEAR_MIPMAP_LINEAR = 0x2703, 291dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_MAG_FILTER = 0x2800, 292dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_MIN_FILTER = 0x2801, 293dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_WRAP_S = 0x2802, 294dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_WRAP_T = 0x2803, 295dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE = 0x1702, 296dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP = 0x8513, 297dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_BINDING_CUBE_MAP = 0x8514, 298dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515, 299dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516, 300dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517, 301dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518, 302dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519, 303dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A, 304dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C, 305dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE0 = 0x84C0, 306dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE1 = 0x84C1, 307dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE2 = 0x84C2, 308dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE3 = 0x84C3, 309dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE4 = 0x84C4, 310dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE5 = 0x84C5, 311dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE6 = 0x84C6, 312dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE7 = 0x84C7, 313dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE8 = 0x84C8, 314dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE9 = 0x84C9, 315dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE10 = 0x84CA, 316dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE11 = 0x84CB, 317dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE12 = 0x84CC, 318dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE13 = 0x84CD, 319dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE14 = 0x84CE, 320dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE15 = 0x84CF, 321dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE16 = 0x84D0, 322dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE17 = 0x84D1, 323dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE18 = 0x84D2, 324dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE19 = 0x84D3, 325dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE20 = 0x84D4, 326dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE21 = 0x84D5, 327dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE22 = 0x84D6, 328dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE23 = 0x84D7, 329dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE24 = 0x84D8, 330dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE25 = 0x84D9, 331dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE26 = 0x84DA, 332dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE27 = 0x84DB, 333dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE28 = 0x84DC, 334dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE29 = 0x84DD, 335dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE30 = 0x84DE, 336dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch TEXTURE31 = 0x84DF, 337dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ACTIVE_TEXTURE = 0x84E0, 338dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch REPEAT = 0x2901, 339dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch CLAMP_TO_EDGE = 0x812F, 340dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MIRRORED_REPEAT = 0x8370, 341dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_VEC2 = 0x8B50, 342dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_VEC3 = 0x8B51, 343dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_VEC4 = 0x8B52, 344dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INT_VEC2 = 0x8B53, 345dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INT_VEC3 = 0x8B54, 346dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INT_VEC4 = 0x8B55, 347dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BOOL = 0x8B56, 348dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BOOL_VEC2 = 0x8B57, 349dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BOOL_VEC3 = 0x8B58, 350dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch BOOL_VEC4 = 0x8B59, 351dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_MAT2 = 0x8B5A, 352dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_MAT3 = 0x8B5B, 353dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FLOAT_MAT4 = 0x8B5C, 354dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLER_2D = 0x8B5E, 355dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SAMPLER_CUBE = 0x8B60, 356dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622, 357dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_SIZE = 0x8623, 358dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624, 359dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_TYPE = 0x8625, 360dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A, 361dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_POINTER = 0x8645, 362dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F, 363dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COMPILE_STATUS = 0x8B81, 364dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INFO_LOG_LENGTH = 0x8B84, 365dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHADER_SOURCE_LENGTH = 0x8B88, 366dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHADER_COMPILER = 0x8DFA, 367dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SHADER_BINARY_FORMATS = 0x8DF8, 368dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NUM_SHADER_BINARY_FORMATS = 0x8DF9, 369dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LOW_FLOAT = 0x8DF0, 370dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MEDIUM_FLOAT = 0x8DF1, 371dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch HIGH_FLOAT = 0x8DF2, 372dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch LOW_INT = 0x8DF3, 373dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MEDIUM_INT = 0x8DF4, 374dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch HIGH_INT = 0x8DF5, 375dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER = 0x8D40, 376dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER = 0x8D41, 377dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RGBA4 = 0x8056, 378dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RGB5_A1 = 0x8057, 379dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RGB565 = 0x8D62, 380dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_COMPONENT16 = 0x81A5, 381dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_INDEX = 0x1901, 382dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_INDEX8 = 0x8D48, 383dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_STENCIL = 0x84F9, 384dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_WIDTH = 0x8D42, 385dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_HEIGHT = 0x8D43, 386dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_INTERNAL_FORMAT = 0x8D44, 387dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_RED_SIZE = 0x8D50, 388dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_GREEN_SIZE = 0x8D51, 389dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_BLUE_SIZE = 0x8D52, 390dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_ALPHA_SIZE = 0x8D53, 391dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_DEPTH_SIZE = 0x8D54, 392dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_STENCIL_SIZE = 0x8D55, 393dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0, 394dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1, 395dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2, 396dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3, 397dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch COLOR_ATTACHMENT0 = 0x8CE0, 398dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_ATTACHMENT = 0x8D00, 399dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch STENCIL_ATTACHMENT = 0x8D20, 400dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch DEPTH_STENCIL_ATTACHMENT = 0x821A, 401dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch NONE = 0, 402dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_COMPLETE = 0x8CD5, 403dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6, 404dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7, 405dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9, 406dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_UNSUPPORTED = 0x8CDD, 407dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch FRAMEBUFFER_BINDING = 0x8CA6, 408dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch RENDERBUFFER_BINDING = 0x8CA7, 409dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch MAX_RENDERBUFFER_SIZE = 0x84E8, 410dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch INVALID_FRAMEBUFFER_OPERATION = 0x0506, 411dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 412dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // WebGL-specific enums 413dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch UNPACK_FLIP_Y_WEBGL = 0x9240, 414f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241, 41528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu CONTEXT_LOST_WEBGL = 0x9242, 4166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243, 4176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner BROWSER_DEFAULT_WEBGL = 0x9244 418dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch }; 419dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 420dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Context creation attributes. 421dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch struct Attributes { 422dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Attributes() 423dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch : alpha(true) 424dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , depth(true) 425dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , stencil(false) 426dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , antialias(true) 427dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch , premultipliedAlpha(true) 42828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu , canRecoverFromContextLoss(true) 4292bde8e466a4451c7319e3a072d118917957d6554Steve Block , preserveDrawingBuffer(false) 430dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch { 431dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch } 432dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 433dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool alpha; 434dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool depth; 435dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool stencil; 436dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool antialias; 437dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool premultipliedAlpha; 43828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu bool canRecoverFromContextLoss; 4392bde8e466a4451c7319e3a072d118917957d6554Steve Block bool preserveDrawingBuffer; 440dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch }; 441dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 44268513a70bcd92384395513322f1b801e7bf9c729Steve Block enum RenderStyle { 44368513a70bcd92384395513322f1b801e7bf9c729Steve Block RenderOffscreen, 44468513a70bcd92384395513322f1b801e7bf9c729Steve Block RenderDirectlyToHostWindow 44568513a70bcd92384395513322f1b801e7bf9c729Steve Block }; 44668513a70bcd92384395513322f1b801e7bf9c729Steve Block 4472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block class ContextLostCallback { 4482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block public: 4492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void onContextLost() = 0; 4502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual ~ContextLostCallback() {} 4512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }; 4522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void setContextLostCallback(PassOwnPtr<ContextLostCallback>); 4542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 455a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch static PassRefPtr<GraphicsContext3D> create(Attributes, HostWindow*, RenderStyle = RenderOffscreen); 456a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ~GraphicsContext3D(); 457231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 458231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if PLATFORM(MAC) 459dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformGraphicsContext3D platformGraphicsContext3D() const { return m_contextObj; } 4602bde8e466a4451c7319e3a072d118917957d6554Steve Block Platform3DObject platformTexture() const { return m_compositorTexture; } 4612bde8e466a4451c7319e3a072d118917957d6554Steve Block CALayer* platformLayer() const { return reinterpret_cast<CALayer*>(m_webGLLayer.get()); } 462231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#elif PLATFORM(CHROMIUM) 463dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformGraphicsContext3D platformGraphicsContext3D() const; 464dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Platform3DObject platformTexture() const; 46506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if USE(ACCELERATED_COMPOSITING) 466dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformLayer* platformLayer() const; 46706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif PLATFORM(QT) 469dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformGraphicsContext3D platformGraphicsContext3D(); 470dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Platform3DObject platformTexture() const; 47106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if USE(ACCELERATED_COMPOSITING) 4722bde8e466a4451c7319e3a072d118917957d6554Steve Block PlatformLayer* platformLayer() const; 47306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 4742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif PLATFORM(GTK) 4752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch PlatformGraphicsContext3D platformGraphicsContext3D(); 4762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Platform3DObject platformTexture() const { return m_texture; } 477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else 478dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformGraphicsContext3D platformGraphicsContext3D() const { return NullPlatformGraphicsContext3D; } 479dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Platform3DObject platformTexture() const { return NullPlatform3DObject; } 48006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if USE(ACCELERATED_COMPOSITING) 481dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch PlatformLayer* platformLayer() const { return 0; } 48206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 484dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void makeContextCurrent(); 485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 486a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch PassRefPtr<DrawingBuffer> createDrawingBuffer(const IntSize& = IntSize()); 487a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 4882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) || PLATFORM(CHROMIUM) || PLATFORM(GTK) 489dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // With multisampling on, blit from multisampleFBO to regular FBO. 490dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void prepareTexture(); 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 493f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Helper to texImage2D with pixel==0 case: pixels are initialized to 0. 494f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Return true if no GL error is synthesized. 49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // By default, alignment is 4, the OpenGL default setting. 49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint alignment = 4); 497f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 498dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool isGLES2Compliant() const; 499dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 500dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch //---------------------------------------------------------------------- 501dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Helpers for texture uploading and pixel readback. 502dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 503dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 504dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Computes the components per pixel and bytes per component 505dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // for the given format and type combination. Returns false if 506dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // either was an invalid enum. 507cad810f21b803229eb11403f9209855525a25d57Steve Block bool computeFormatAndTypeParameters(GC3Denum format, 508cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type, 509cad810f21b803229eb11403f9209855525a25d57Steve Block unsigned int* componentsPerPixel, 510cad810f21b803229eb11403f9209855525a25d57Steve Block unsigned int* bytesPerComponent); 511dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Computes the image size in bytes. If paddingInBytes is not null, padding 51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // is also calculated in return. Returns NO_ERROR if succeed, otherwise 51465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // return the suggested GL error indicating the cause of the failure: 51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // INVALID_VALUE if width/height is negative or overflow happens. 51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // INVALID_ENUM if format/type is illegal. 51765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum computeImageSizeInBytes(GC3Denum format, 51865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Denum type, 51965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei width, 52065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dsizei height, 52165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch GC3Dint alignment, 52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned int* imageSizeInBytes, 52365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch unsigned int* paddingInBytes); 52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 525dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Extracts the contents of the given Image into the passed Vector, 526dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // packing the pixel data according to the given format and type, 5276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // and obeying the flipY, premultiplyAlpha, and ignoreGammaAndColorProfile 5286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // flags. Returns true upon success. 529dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool extractImageData(Image* image, 530cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum format, 531cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type, 532dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool flipY, 533dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool premultiplyAlpha, 5346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool ignoreGammaAndColorProfile, 535dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<uint8_t>& data); 536dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 537dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Extracts the contents of the given ImageData into the passed Vector, 538dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // packing the pixel data according to the given format and type, 539dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // and obeying the flipY and premultiplyAlpha flags. Returns true 540dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // upon success. 541dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool extractImageData(ImageData*, 542cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum format, 543cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type, 544dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool flipY, 545dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool premultiplyAlpha, 546dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<uint8_t>& data); 547dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 548dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Helper function which extracts the user-supplied texture 549dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // data, applying the flipY and premultiplyAlpha parameters. 550dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // If the data is not tightly packed according to the passed 551dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // unpackAlignment, the output data will be tightly packed. 552dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Returns true if successful, false if any error occurred. 553dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool extractTextureData(unsigned int width, unsigned int height, 554cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum format, GC3Denum type, 555dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int unpackAlignment, 556dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool flipY, bool premultiplyAlpha, 557e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block const void* pixels, 558dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<uint8_t>& data); 559dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 560dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Flips the given image data vertically, in-place. 561dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void flipVertically(void* imageData, 562dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int width, 563dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int height, 564dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int bytesPerPixel, 565dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int unpackAlignment); 566dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 567dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Attempt to enumerate all possible native image formats to 568dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // reduce the amount of temporary allocations during texture 569dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // uploading. This enum must be public because it is accessed 570dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // by non-member functions. 571dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch enum SourceDataFormat { 57228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGBA8 = 0, 57328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGBA16Little, 57428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGBA16Big, 575f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SourceFormatRGBA32F, 57628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGB8, 57728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGB16Little, 57828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGB16Big, 579f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SourceFormatRGB32F, 58028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatBGR8, 58128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatBGRA8, 58228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatBGRA16Little, 58328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatBGRA16Big, 58428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatARGB8, 58528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatARGB16Little, 58628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatARGB16Big, 58728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatABGR8, 58828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGBA5551, 58928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGBA4444, 59028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRGB565, 59128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatR8, 59228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatR16Little, 59328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatR16Big, 594f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SourceFormatR32F, 59528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRA8, 59628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRA16Little, 59728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatRA16Big, 598f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SourceFormatRA32F, 59928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatAR8, 60028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatAR16Little, 60128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatAR16Big, 60228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatA8, 60328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatA16Little, 60428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatA16Big, 605f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch SourceFormatA32F, 60628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SourceFormatNumFormats 607dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch }; 608dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 609dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch //---------------------------------------------------------------------- 610dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Entry points for WebGL. 611dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 612dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 613cad810f21b803229eb11403f9209855525a25d57Steve Block void activeTexture(GC3Denum texture); 614dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void attachShader(Platform3DObject program, Platform3DObject shader); 615cad810f21b803229eb11403f9209855525a25d57Steve Block void bindAttribLocation(Platform3DObject, GC3Duint index, const String& name); 616cad810f21b803229eb11403f9209855525a25d57Steve Block void bindBuffer(GC3Denum target, Platform3DObject); 617cad810f21b803229eb11403f9209855525a25d57Steve Block void bindFramebuffer(GC3Denum target, Platform3DObject); 618cad810f21b803229eb11403f9209855525a25d57Steve Block void bindRenderbuffer(GC3Denum target, Platform3DObject); 619cad810f21b803229eb11403f9209855525a25d57Steve Block void bindTexture(GC3Denum target, Platform3DObject); 620cad810f21b803229eb11403f9209855525a25d57Steve Block void blendColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha); 621cad810f21b803229eb11403f9209855525a25d57Steve Block void blendEquation(GC3Denum mode); 622cad810f21b803229eb11403f9209855525a25d57Steve Block void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha); 623cad810f21b803229eb11403f9209855525a25d57Steve Block void blendFunc(GC3Denum sfactor, GC3Denum dfactor); 624cad810f21b803229eb11403f9209855525a25d57Steve Block void blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha); 625cad810f21b803229eb11403f9209855525a25d57Steve Block 626cad810f21b803229eb11403f9209855525a25d57Steve Block void bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage); 627cad810f21b803229eb11403f9209855525a25d57Steve Block void bufferData(GC3Denum target, GC3Dsizeiptr size, const void* data, GC3Denum usage); 628cad810f21b803229eb11403f9209855525a25d57Steve Block void bufferSubData(GC3Denum target, GC3Dintptr offset, GC3Dsizeiptr size, const void* data); 629cad810f21b803229eb11403f9209855525a25d57Steve Block 630cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum checkFramebufferStatus(GC3Denum target); 631cad810f21b803229eb11403f9209855525a25d57Steve Block void clear(GC3Dbitfield mask); 632cad810f21b803229eb11403f9209855525a25d57Steve Block void clearColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha); 633cad810f21b803229eb11403f9209855525a25d57Steve Block void clearDepth(GC3Dclampf depth); 634cad810f21b803229eb11403f9209855525a25d57Steve Block void clearStencil(GC3Dint s); 635cad810f21b803229eb11403f9209855525a25d57Steve Block void colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha); 636dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void compileShader(Platform3DObject); 637dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 638cad810f21b803229eb11403f9209855525a25d57Steve Block // void compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Dsizei imageSize, const void* data); 639cad810f21b803229eb11403f9209855525a25d57Steve Block // void compressedTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Dsizei imageSize, const void* data); 640dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 641cad810f21b803229eb11403f9209855525a25d57Steve Block void copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border); 642cad810f21b803229eb11403f9209855525a25d57Steve Block void copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); 643cad810f21b803229eb11403f9209855525a25d57Steve Block void cullFace(GC3Denum mode); 644cad810f21b803229eb11403f9209855525a25d57Steve Block void depthFunc(GC3Denum func); 645cad810f21b803229eb11403f9209855525a25d57Steve Block void depthMask(GC3Dboolean flag); 646cad810f21b803229eb11403f9209855525a25d57Steve Block void depthRange(GC3Dclampf zNear, GC3Dclampf zFar); 647dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void detachShader(Platform3DObject, Platform3DObject); 648cad810f21b803229eb11403f9209855525a25d57Steve Block void disable(GC3Denum cap); 649cad810f21b803229eb11403f9209855525a25d57Steve Block void disableVertexAttribArray(GC3Duint index); 650cad810f21b803229eb11403f9209855525a25d57Steve Block void drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count); 651cad810f21b803229eb11403f9209855525a25d57Steve Block void drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset); 652231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 653cad810f21b803229eb11403f9209855525a25d57Steve Block void enable(GC3Denum cap); 654cad810f21b803229eb11403f9209855525a25d57Steve Block void enableVertexAttribArray(GC3Duint index); 655dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void finish(); 656dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void flush(); 657cad810f21b803229eb11403f9209855525a25d57Steve Block void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, Platform3DObject); 658cad810f21b803229eb11403f9209855525a25d57Steve Block void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, Platform3DObject, GC3Dint level); 659cad810f21b803229eb11403f9209855525a25d57Steve Block void frontFace(GC3Denum mode); 660cad810f21b803229eb11403f9209855525a25d57Steve Block void generateMipmap(GC3Denum target); 661cad810f21b803229eb11403f9209855525a25d57Steve Block 662cad810f21b803229eb11403f9209855525a25d57Steve Block bool getActiveAttrib(Platform3DObject program, GC3Duint index, ActiveInfo&); 663cad810f21b803229eb11403f9209855525a25d57Steve Block bool getActiveUniform(Platform3DObject program, GC3Duint index, ActiveInfo&); 664cad810f21b803229eb11403f9209855525a25d57Steve Block void getAttachedShaders(Platform3DObject program, GC3Dsizei maxCount, GC3Dsizei* count, Platform3DObject* shaders); 665cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dint getAttribLocation(Platform3DObject, const String& name); 666cad810f21b803229eb11403f9209855525a25d57Steve Block void getBooleanv(GC3Denum pname, GC3Dboolean* value); 667cad810f21b803229eb11403f9209855525a25d57Steve Block void getBufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); 668dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Attributes getContextAttributes(); 669cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum getError(); 670cad810f21b803229eb11403f9209855525a25d57Steve Block void getFloatv(GC3Denum pname, GC3Dfloat* value); 671cad810f21b803229eb11403f9209855525a25d57Steve Block void getFramebufferAttachmentParameteriv(GC3Denum target, GC3Denum attachment, GC3Denum pname, GC3Dint* value); 672cad810f21b803229eb11403f9209855525a25d57Steve Block void getIntegerv(GC3Denum pname, GC3Dint* value); 673cad810f21b803229eb11403f9209855525a25d57Steve Block void getProgramiv(Platform3DObject program, GC3Denum pname, GC3Dint* value); 674dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String getProgramInfoLog(Platform3DObject); 675cad810f21b803229eb11403f9209855525a25d57Steve Block void getRenderbufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); 676cad810f21b803229eb11403f9209855525a25d57Steve Block void getShaderiv(Platform3DObject, GC3Denum pname, GC3Dint* value); 677dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String getShaderInfoLog(Platform3DObject); 678dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 679dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // TBD 680cad810f21b803229eb11403f9209855525a25d57Steve Block // void glGetShaderPrecisionFormat (GC3Denum shadertype, GC3Denum precisiontype, GC3Dint* range, GC3Dint* precision); 681dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 682dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch String getShaderSource(Platform3DObject); 683cad810f21b803229eb11403f9209855525a25d57Steve Block String getString(GC3Denum name); 684cad810f21b803229eb11403f9209855525a25d57Steve Block void getTexParameterfv(GC3Denum target, GC3Denum pname, GC3Dfloat* value); 685cad810f21b803229eb11403f9209855525a25d57Steve Block void getTexParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); 686cad810f21b803229eb11403f9209855525a25d57Steve Block void getUniformfv(Platform3DObject program, GC3Dint location, GC3Dfloat* value); 687cad810f21b803229eb11403f9209855525a25d57Steve Block void getUniformiv(Platform3DObject program, GC3Dint location, GC3Dint* value); 688cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dint getUniformLocation(Platform3DObject, const String& name); 689cad810f21b803229eb11403f9209855525a25d57Steve Block void getVertexAttribfv(GC3Duint index, GC3Denum pname, GC3Dfloat* value); 690cad810f21b803229eb11403f9209855525a25d57Steve Block void getVertexAttribiv(GC3Duint index, GC3Denum pname, GC3Dint* value); 691cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dsizeiptr getVertexAttribOffset(GC3Duint index, GC3Denum pname); 692cad810f21b803229eb11403f9209855525a25d57Steve Block 693cad810f21b803229eb11403f9209855525a25d57Steve Block void hint(GC3Denum target, GC3Denum mode); 694cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isBuffer(Platform3DObject); 695cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isEnabled(GC3Denum cap); 696cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isFramebuffer(Platform3DObject); 697cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isProgram(Platform3DObject); 698cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isRenderbuffer(Platform3DObject); 699cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isShader(Platform3DObject); 700cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dboolean isTexture(Platform3DObject); 701cad810f21b803229eb11403f9209855525a25d57Steve Block void lineWidth(GC3Dfloat); 702dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void linkProgram(Platform3DObject); 703cad810f21b803229eb11403f9209855525a25d57Steve Block void pixelStorei(GC3Denum pname, GC3Dint param); 704cad810f21b803229eb11403f9209855525a25d57Steve Block void polygonOffset(GC3Dfloat factor, GC3Dfloat units); 705dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 706cad810f21b803229eb11403f9209855525a25d57Steve Block void readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, void* data); 707dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 708dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void releaseShaderCompiler(); 709cad810f21b803229eb11403f9209855525a25d57Steve Block 710cad810f21b803229eb11403f9209855525a25d57Steve Block void renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height); 711cad810f21b803229eb11403f9209855525a25d57Steve Block void sampleCoverage(GC3Dclampf value, GC3Dboolean invert); 712cad810f21b803229eb11403f9209855525a25d57Steve Block void scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); 713dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void shaderSource(Platform3DObject, const String& string); 714cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask); 715cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask); 716cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilMask(GC3Duint mask); 717cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilMaskSeparate(GC3Denum face, GC3Duint mask); 718cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass); 719cad810f21b803229eb11403f9209855525a25d57Steve Block void stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass); 720cad810f21b803229eb11403f9209855525a25d57Steve Block 721cad810f21b803229eb11403f9209855525a25d57Steve Block bool texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, const void* pixels); 722cad810f21b803229eb11403f9209855525a25d57Steve Block void texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param); 723cad810f21b803229eb11403f9209855525a25d57Steve Block void texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param); 724cad810f21b803229eb11403f9209855525a25d57Steve Block void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, const void* pixels); 725cad810f21b803229eb11403f9209855525a25d57Steve Block 726cad810f21b803229eb11403f9209855525a25d57Steve Block // FIXME: change the argument orders to match OpenGL's. 727cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform1f(GC3Dint location, GC3Dfloat x); 728cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform1fv(GC3Dint location, GC3Dfloat* v, GC3Dsizei size); 729cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform1i(GC3Dint location, GC3Dint x); 730cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform1iv(GC3Dint location, GC3Dint* v, GC3Dsizei size); 731cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform2f(GC3Dint location, GC3Dfloat x, float y); 732cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform2fv(GC3Dint location, GC3Dfloat* v, GC3Dsizei size); 733cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform2i(GC3Dint location, GC3Dint x, GC3Dint y); 734cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform2iv(GC3Dint location, GC3Dint* v, GC3Dsizei size); 735cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform3f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z); 736cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform3fv(GC3Dint location, GC3Dfloat* v, GC3Dsizei size); 737cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform3i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z); 738cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform3iv(GC3Dint location, GC3Dint* v, GC3Dsizei size); 739cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform4f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w); 740cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform4fv(GC3Dint location, GC3Dfloat* v, GC3Dsizei size); 741cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform4i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z, GC3Dint w); 742cad810f21b803229eb11403f9209855525a25d57Steve Block void uniform4iv(GC3Dint location, GC3Dint* v, GC3Dsizei size); 743cad810f21b803229eb11403f9209855525a25d57Steve Block void uniformMatrix2fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size); 744cad810f21b803229eb11403f9209855525a25d57Steve Block void uniformMatrix3fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size); 745cad810f21b803229eb11403f9209855525a25d57Steve Block void uniformMatrix4fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size); 746dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 747dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void useProgram(Platform3DObject); 748dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void validateProgram(Platform3DObject); 749dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 750cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib1f(GC3Duint index, GC3Dfloat x); 751cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib1fv(GC3Duint index, GC3Dfloat* values); 752cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib2f(GC3Duint index, GC3Dfloat x, GC3Dfloat y); 753cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib2fv(GC3Duint index, GC3Dfloat* values); 754cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib3f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z); 755cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib3fv(GC3Duint index, GC3Dfloat* values); 756cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w); 757cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values); 758cad810f21b803229eb11403f9209855525a25d57Steve Block void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized, 759cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Dsizei stride, GC3Dintptr offset); 760dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 761cad810f21b803229eb11403f9209855525a25d57Steve Block void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); 762dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 763dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void reshape(int width, int height); 764967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 7652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG) 766dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void paintToCanvas(const unsigned char* imagePixels, int imageWidth, int imageHeight, 767dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch int canvasWidth, int canvasHeight, CGContextRef context); 7682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif PLATFORM(GTK) 7692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void paintToCanvas(const unsigned char* imagePixels, int imageWidth, int imageHeight, 7702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch int canvasWidth, int canvasHeight, PlatformContextCairo* context); 771967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 772967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 7732bde8e466a4451c7319e3a072d118917957d6554Steve Block void markContextChanged(); 7742bde8e466a4451c7319e3a072d118917957d6554Steve Block void markLayerComposited(); 7752bde8e466a4451c7319e3a072d118917957d6554Steve Block bool layerComposited() const; 7762bde8e466a4451c7319e3a072d118917957d6554Steve Block 777dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void paintRenderingResultsToCanvas(CanvasRenderingContext* context); 7782bde8e466a4451c7319e3a072d118917957d6554Steve Block PassRefPtr<ImageData> paintRenderingResultsToImageData(); 779967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 78021939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(QT) 781f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick bool paintsIntoCanvasBuffer() const { return true; } 782f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#elif PLATFORM(CHROMIUM) 783f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick bool paintsIntoCanvasBuffer() const; 7842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif PLATFORM(GTK) 7852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool paintsIntoCanvasBuffer() const { return true; } 786f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#else 787f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick bool paintsIntoCanvasBuffer() const { return false; } 78821939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 789231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 790dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Support for buffer creation and deletion 791cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createBuffer(); 792cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createFramebuffer(); 793cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createProgram(); 794cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createRenderbuffer(); 795cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createShader(GC3Denum); 796cad810f21b803229eb11403f9209855525a25d57Steve Block Platform3DObject createTexture(); 797cad810f21b803229eb11403f9209855525a25d57Steve Block 798cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteBuffer(Platform3DObject); 799cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteFramebuffer(Platform3DObject); 800cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteProgram(Platform3DObject); 801cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteRenderbuffer(Platform3DObject); 802cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteShader(Platform3DObject); 803cad810f21b803229eb11403f9209855525a25d57Steve Block void deleteTexture(Platform3DObject); 804dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 805dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Synthesizes an OpenGL error which will be returned from a 806dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // later call to getError. This is used to emulate OpenGL ES 807dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 2.0 behavior on the desktop and to enforce additional error 808dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // checking mandated by WebGL. 809dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 810dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Per the behavior of glGetError, this stores at most one 811dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // instance of any given error, and returns them from calls to 812dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // getError in the order they were added. 813cad810f21b803229eb11403f9209855525a25d57Steve Block void synthesizeGLError(GC3Denum error); 814dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 81528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // Support for extensions. Returns a non-null object, though not 81628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // all methods it contains may necessarily be supported on the 81728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // current hardware. Must call Extensions3D::supports() to 81828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu // determine this. 81928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu Extensions3D* getExtensions(); 820a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 821cad810f21b803229eb11403f9209855525a25d57Steve Block IntSize getInternalFramebufferSize(); 822cad810f21b803229eb11403f9209855525a25d57Steve Block 823dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch private: 82468513a70bcd92384395513322f1b801e7bf9c729Steve Block GraphicsContext3D(Attributes attrs, HostWindow* hostWindow, bool renderDirectlyToHostWindow); 825dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 826dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Each platform must provide an implementation of this method. 827dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 828dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Gets the data for the given Image into outputVector in the 829dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // format specified by the (OpenGL-style) format and type 830dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // arguments. Despite the fact that the outputVector contains 831dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // uint8_t, if the format and type specify packed pixels, then 832dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // it will essentially contain uint16_t after the extraction 833dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // process. 834dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 835dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // If premultiplyAlpha is true, the alpha channel, if any, 836dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // will be multiplied into the color channels during the 837dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // extraction process. This premultiplication occurs before 838dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // any packing of pixel data. 839dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // 8406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // If ignoreGammaAndColorProfile is true, gamma correction and ICC 8416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // profile won't be applied. 8426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // 843dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // No vertical flip of the image data is performed by this 844dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // method. 845dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool getImageData(Image* image, 846cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum format, 847cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type, 848dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool premultiplyAlpha, 8496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool ignoreGammaAndColorProfile, 850dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<uint8_t>& outputVector); 851dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 852dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Possible alpha operations that may need to occur during 853dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // pixel packing. FIXME: kAlphaDoUnmultiply is lossy and must 854dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // be removed. 855dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch enum AlphaOp { 85628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu AlphaDoNothing = 0, 85728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu AlphaDoPremultiply = 1, 85828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu AlphaDoUnmultiply = 2 859dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch }; 860dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 861dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Helper for getImageData which implements packing of pixel 862dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // data into the specified OpenGL destination format and type. 863dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // A sourceUnpackAlignment of zero indicates that the source 864dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // data is tightly packed. Non-zero values may take a slow path. 865dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Destination data will have no gaps between rows. 866dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch bool packPixels(const uint8_t* sourceData, 867dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch SourceDataFormat sourceDataFormat, 868dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int width, 869dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int height, 870dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int sourceUnpackAlignment, 871dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int destinationFormat, 872dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch unsigned int destinationType, 873dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch AlphaOp alphaOp, 874dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void* destinationData); 875692e5dbf12901edacf14812a6fae25462920af42Steve Block 8762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) || PLATFORM(GTK) 877dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Take into account the user's requested context creation attributes, 878dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // in particular stencil and antialias, and determine which could or 879dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // could not be honored based on the capabilities of the OpenGL 880dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // implementation. 881dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void validateAttributes(); 8822bde8e466a4451c7319e3a072d118917957d6554Steve Block 8832bde8e466a4451c7319e3a072d118917957d6554Steve Block // Read rendering results into a pixel array with the same format as the 8842bde8e466a4451c7319e3a072d118917957d6554Steve Block // backbuffer. 8852bde8e466a4451c7319e3a072d118917957d6554Steve Block void readRenderingResults(unsigned char* pixels, int pixelsSize); 886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 888dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch int m_currentWidth, m_currentHeight; 889dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 890bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if PLATFORM(MAC) 8912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch CGLContextObj m_contextObj; 8922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RetainPtr<WebGLLayer> m_webGLLayer; 8932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 8942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 8952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) || PLATFORM(GTK) 896bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen typedef struct { 897bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen String source; 898bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen String log; 899f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick bool isValid; 900f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick } ShaderSourceEntry; 901f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick HashMap<Platform3DObject, ShaderSourceEntry> m_shaderSourceMap; 902f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 903ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch friend class Extensions3DOpenGL; 904f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick ANGLEWebKitBridge m_compiler; 905f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 90628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu OwnPtr<Extensions3DOpenGL> m_extensions; 90728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 908dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Attributes m_attrs; 909dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch Vector<Vector<float> > m_vertexArray; 910dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 9112bde8e466a4451c7319e3a072d118917957d6554Steve Block GC3Duint m_texture, m_compositorTexture; 912cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_fbo; 913cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_depthStencilBuffer; 9142bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_layerComposited; 9152bde8e466a4451c7319e3a072d118917957d6554Steve Block GC3Duint m_internalColorFormat; 916dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 9172bde8e466a4451c7319e3a072d118917957d6554Steve Block // For tracking which FBO/texture is bound 918cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_boundFBO; 9192bde8e466a4451c7319e3a072d118917957d6554Steve Block GC3Denum m_activeTexture; 9202bde8e466a4451c7319e3a072d118917957d6554Steve Block GC3Duint m_boundTexture0; 921dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 922dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // For multisampling 923cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_multisampleFBO; 924cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_multisampleDepthStencilBuffer; 925cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Duint m_multisampleColorBuffer; 926dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 927dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // Errors raised by synthesizeGLError(). 928cad810f21b803229eb11403f9209855525a25d57Steve Block ListHashSet<GC3Denum> m_syntheticErrors; 929dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#endif 930dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 931dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch // FIXME: ideally this would be used on all platforms. 9322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(CHROMIUM) || PLATFORM(QT) || PLATFORM(GTK) 933dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch friend class GraphicsContext3DInternal; 934dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch OwnPtr<GraphicsContext3DInternal> m_internal; 935231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 936dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch}; 937231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 938231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} // namespace WebCore 939231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 940231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // GraphicsContext3D_h 941