15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Apple Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef GraphicsContext3D_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define GraphicsContext3D_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "core/platform/graphics/Extensions3D.h"
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/GraphicsTypes3D.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/Image.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/IntRect.h"
33521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
34521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#include "weborigin/KURL.h"
3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/HashMap.h"
3693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/HashSet.h"
3793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/ListHashSet.h"
3893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/Noncopyable.h"
3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/OwnArrayPtr.h"
4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/OwnPtr.h"
4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/PassOwnArrayPtr.h"
4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/RefCounted.h"
4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/text/WTFString.h"
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: Find a better way to avoid the name confliction for NO_ERROR.
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#if OS(WINDOWS)
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#undef NO_ERROR
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GrContext;
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)namespace WebKit {
5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebGraphicsContext3D;
5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class WebGraphicsContext3DProvider;
5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}
5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DrawingBuffer;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Extensions3D;
6093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class GraphicsContext3DContextLostCallbackAdapter;
6193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class GraphicsContext3DErrorMessageCallbackAdapter;
6293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class GrMemoryAllocationChangedCallbackAdapter;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Image;
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageBuffer;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageData;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntRect;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class IntSize;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct ActiveInfo {
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String name;
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Denum type;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dint size;
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class GraphicsContext3D : public RefCounted<GraphicsContext3D> {
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum {
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_BUFFER_BIT = 0x00000100,
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BUFFER_BIT = 0x00000400,
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COLOR_BUFFER_BIT = 0x00004000,
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        POINTS = 0x0000,
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINES = 0x0001,
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINE_LOOP = 0x0002,
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINE_STRIP = 0x0003,
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TRIANGLES = 0x0004,
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TRIANGLE_STRIP = 0x0005,
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TRIANGLE_FAN = 0x0006,
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ZERO = 0,
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE = 1,
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SRC_COLOR = 0x0300,
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_SRC_COLOR = 0x0301,
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SRC_ALPHA = 0x0302,
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_SRC_ALPHA = 0x0303,
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DST_ALPHA = 0x0304,
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_DST_ALPHA = 0x0305,
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DST_COLOR = 0x0306,
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_DST_COLOR = 0x0307,
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SRC_ALPHA_SATURATE = 0x0308,
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FUNC_ADD = 0x8006,
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_EQUATION = 0x8009,
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_EQUATION_RGB = 0x8009,
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_EQUATION_ALPHA = 0x883D,
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FUNC_SUBTRACT = 0x800A,
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FUNC_REVERSE_SUBTRACT = 0x800B,
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_DST_RGB = 0x80C8,
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_SRC_RGB = 0x80C9,
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_DST_ALPHA = 0x80CA,
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_SRC_ALPHA = 0x80CB,
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CONSTANT_COLOR = 0x8001,
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_CONSTANT_COLOR = 0x8002,
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CONSTANT_ALPHA = 0x8003,
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ONE_MINUS_CONSTANT_ALPHA = 0x8004,
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND_COLOR = 0x8005,
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ARRAY_BUFFER = 0x8892,
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ELEMENT_ARRAY_BUFFER = 0x8893,
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ARRAY_BUFFER_BINDING = 0x8894,
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STREAM_DRAW = 0x88E0,
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STATIC_DRAW = 0x88E4,
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DYNAMIC_DRAW = 0x88E8,
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BUFFER_SIZE = 0x8764,
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BUFFER_USAGE = 0x8765,
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CURRENT_VERTEX_ATTRIB = 0x8626,
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRONT = 0x0404,
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BACK = 0x0405,
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRONT_AND_BACK = 0x0408,
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_2D = 0x0DE1,
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CULL_FACE = 0x0B44,
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLEND = 0x0BE2,
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DITHER = 0x0BD0,
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_TEST = 0x0B90,
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_TEST = 0x0B71,
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SCISSOR_TEST = 0x0C11,
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        POLYGON_OFFSET_FILL = 0x8037,
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLE_ALPHA_TO_COVERAGE = 0x809E,
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLE_COVERAGE = 0x80A0,
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NO_ERROR = 0,
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INVALID_ENUM = 0x0500,
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INVALID_VALUE = 0x0501,
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INVALID_OPERATION = 0x0502,
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        OUT_OF_MEMORY = 0x0505,
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CW = 0x0900,
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CCW = 0x0901,
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINE_WIDTH = 0x0B21,
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ALIASED_POINT_SIZE_RANGE = 0x846D,
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ALIASED_LINE_WIDTH_RANGE = 0x846E,
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CULL_FACE_MODE = 0x0B45,
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRONT_FACE = 0x0B46,
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_RANGE = 0x0B70,
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_WRITEMASK = 0x0B72,
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_CLEAR_VALUE = 0x0B73,
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_FUNC = 0x0B74,
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_CLEAR_VALUE = 0x0B91,
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_FUNC = 0x0B92,
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_FAIL = 0x0B94,
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_PASS_DEPTH_FAIL = 0x0B95,
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_PASS_DEPTH_PASS = 0x0B96,
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_REF = 0x0B97,
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_VALUE_MASK = 0x0B93,
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_WRITEMASK = 0x0B98,
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_FUNC = 0x8800,
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_FAIL = 0x8801,
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_REF = 0x8CA3,
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_VALUE_MASK = 0x8CA4,
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BACK_WRITEMASK = 0x8CA5,
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VIEWPORT = 0x0BA2,
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SCISSOR_BOX = 0x0C10,
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COLOR_CLEAR_VALUE = 0x0C22,
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COLOR_WRITEMASK = 0x0C23,
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNPACK_ALIGNMENT = 0x0CF5,
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        PACK_ALIGNMENT = 0x0D05,
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_TEXTURE_SIZE = 0x0D33,
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_VIEWPORT_DIMS = 0x0D3A,
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SUBPIXEL_BITS = 0x0D50,
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RED_BITS = 0x0D52,
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GREEN_BITS = 0x0D53,
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BLUE_BITS = 0x0D54,
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ALPHA_BITS = 0x0D55,
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_BITS = 0x0D56,
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_BITS = 0x0D57,
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        POLYGON_OFFSET_UNITS = 0x2A00,
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        POLYGON_OFFSET_FACTOR = 0x8038,
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_BINDING_2D = 0x8069,
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLE_BUFFERS = 0x80A8,
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLES = 0x80A9,
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLE_COVERAGE_VALUE = 0x80AA,
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLE_COVERAGE_INVERT = 0x80AB,
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NUM_COMPRESSED_TEXTURE_FORMATS = 0x86A2,
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COMPRESSED_TEXTURE_FORMATS = 0x86A3,
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DONT_CARE = 0x1100,
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FASTEST = 0x1101,
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NICEST = 0x1102,
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GENERATE_MIPMAP_HINT = 0x8192,
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BYTE = 0x1400,
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_BYTE = 0x1401,
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHORT = 0x1402,
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_SHORT = 0x1403,
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INT = 0x1404,
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_INT = 0x1405,
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT = 0x1406,
203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HALF_FLOAT_OES = 0x8D61,
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FIXED = 0x140C,
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_COMPONENT = 0x1902,
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ALPHA = 0x1906,
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGB = 0x1907,
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGBA = 0x1908,
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BGRA = 0x80E1,
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LUMINANCE = 0x1909,
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LUMINANCE_ALPHA = 0x190A,
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_SHORT_4_4_4_4 = 0x8033,
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_SHORT_5_5_5_1 = 0x8034,
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_SHORT_5_6_5 = 0x8363,
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAGMENT_SHADER = 0x8B30,
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_SHADER = 0x8B31,
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_VERTEX_ATTRIBS = 0x8869,
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB,
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_VARYING_VECTORS = 0x8DFC,
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D,
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C,
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_TEXTURE_IMAGE_UNITS = 0x8872,
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD,
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHADER_TYPE = 0x8B4F,
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DELETE_STATUS = 0x8B80,
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINK_STATUS = 0x8B82,
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VALIDATE_STATUS = 0x8B83,
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ATTACHED_SHADERS = 0x8B85,
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ACTIVE_UNIFORMS = 0x8B86,
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ACTIVE_UNIFORM_MAX_LENGTH = 0x8B87,
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ACTIVE_ATTRIBUTES = 0x8B89,
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ACTIVE_ATTRIBUTE_MAX_LENGTH = 0x8B8A,
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHADING_LANGUAGE_VERSION = 0x8B8C,
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CURRENT_PROGRAM = 0x8B8D,
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NEVER = 0x0200,
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LESS = 0x0201,
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        EQUAL = 0x0202,
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LEQUAL = 0x0203,
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GREATER = 0x0204,
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NOTEQUAL = 0x0205,
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        GEQUAL = 0x0206,
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ALWAYS = 0x0207,
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        KEEP = 0x1E00,
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        REPLACE = 0x1E01,
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INCR = 0x1E02,
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DECR = 0x1E03,
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INVERT = 0x150A,
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INCR_WRAP = 0x8507,
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DECR_WRAP = 0x8508,
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VENDOR = 0x1F00,
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERER = 0x1F01,
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERSION = 0x1F02,
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        EXTENSIONS = 0x1F03,
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NEAREST = 0x2600,
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINEAR = 0x2601,
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NEAREST_MIPMAP_NEAREST = 0x2700,
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINEAR_MIPMAP_NEAREST = 0x2701,
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NEAREST_MIPMAP_LINEAR = 0x2702,
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LINEAR_MIPMAP_LINEAR = 0x2703,
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_MAG_FILTER = 0x2800,
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_MIN_FILTER = 0x2801,
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_WRAP_S = 0x2802,
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_WRAP_T = 0x2803,
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE = 0x1702,
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP = 0x8513,
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_BINDING_CUBE_MAP = 0x8514,
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A,
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C,
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE0 = 0x84C0,
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE1 = 0x84C1,
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE2 = 0x84C2,
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE3 = 0x84C3,
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE4 = 0x84C4,
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE5 = 0x84C5,
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE6 = 0x84C6,
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE7 = 0x84C7,
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE8 = 0x84C8,
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE9 = 0x84C9,
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE10 = 0x84CA,
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE11 = 0x84CB,
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE12 = 0x84CC,
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE13 = 0x84CD,
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE14 = 0x84CE,
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE15 = 0x84CF,
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE16 = 0x84D0,
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE17 = 0x84D1,
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE18 = 0x84D2,
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE19 = 0x84D3,
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE20 = 0x84D4,
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE21 = 0x84D5,
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE22 = 0x84D6,
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE23 = 0x84D7,
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE24 = 0x84D8,
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE25 = 0x84D9,
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE26 = 0x84DA,
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE27 = 0x84DB,
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE28 = 0x84DC,
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE29 = 0x84DD,
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE30 = 0x84DE,
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TEXTURE31 = 0x84DF,
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ACTIVE_TEXTURE = 0x84E0,
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        REPEAT = 0x2901,
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CLAMP_TO_EDGE = 0x812F,
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MIRRORED_REPEAT = 0x8370,
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_VEC2 = 0x8B50,
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_VEC3 = 0x8B51,
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_VEC4 = 0x8B52,
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INT_VEC2 = 0x8B53,
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INT_VEC3 = 0x8B54,
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INT_VEC4 = 0x8B55,
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BOOL = 0x8B56,
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BOOL_VEC2 = 0x8B57,
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BOOL_VEC3 = 0x8B58,
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BOOL_VEC4 = 0x8B59,
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_MAT2 = 0x8B5A,
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_MAT3 = 0x8B5B,
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FLOAT_MAT4 = 0x8B5C,
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLER_2D = 0x8B5E,
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SAMPLER_CUBE = 0x8B60,
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A,
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F,
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COMPILE_STATUS = 0x8B81,
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INFO_LOG_LENGTH = 0x8B84,
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHADER_SOURCE_LENGTH = 0x8B88,
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHADER_COMPILER = 0x8DFA,
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SHADER_BINARY_FORMATS = 0x8DF8,
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NUM_SHADER_BINARY_FORMATS = 0x8DF9,
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LOW_FLOAT = 0x8DF0,
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MEDIUM_FLOAT = 0x8DF1,
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        HIGH_FLOAT = 0x8DF2,
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        LOW_INT = 0x8DF3,
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MEDIUM_INT = 0x8DF4,
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        HIGH_INT = 0x8DF5,
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER = 0x8D40,
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER = 0x8D41,
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGBA4 = 0x8056,
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGB5_A1 = 0x8057,
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RGB565 = 0x8D62,
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_COMPONENT16 = 0x81A5,
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_INDEX = 0x1901,
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_INDEX8 = 0x8D48,
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_STENCIL = 0x84F9,
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNSIGNED_INT_24_8 = 0x84FA,
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH24_STENCIL8 = 0x88F0,
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_WIDTH = 0x8D42,
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_HEIGHT = 0x8D43,
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_INTERNAL_FORMAT = 0x8D44,
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_RED_SIZE = 0x8D50,
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_GREEN_SIZE = 0x8D51,
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_BLUE_SIZE = 0x8D52,
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_ALPHA_SIZE = 0x8D53,
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_DEPTH_SIZE = 0x8D54,
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_STENCIL_SIZE = 0x8D55,
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0,
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1,
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2,
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3,
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        COLOR_ATTACHMENT0 = 0x8CE0,
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_ATTACHMENT = 0x8D00,
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        STENCIL_ATTACHMENT = 0x8D20,
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DEPTH_STENCIL_ATTACHMENT = 0x821A,
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        NONE = 0,
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_COMPLETE = 0x8CD5,
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6,
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7,
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9,
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_UNSUPPORTED = 0x8CDD,
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        FRAMEBUFFER_BINDING = 0x8CA6,
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        RENDERBUFFER_BINDING = 0x8CA7,
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        MAX_RENDERBUFFER_SIZE = 0x84E8,
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        INVALID_FRAMEBUFFER_OPERATION = 0x0506,
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // WebGL-specific enums
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNPACK_FLIP_Y_WEBGL = 0x9240,
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        CONTEXT_LOST_WEBGL = 0x9242,
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        BROWSER_DEFAULT_WEBGL = 0x9244
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Context creation attributes.
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    struct Attributes {
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Attributes()
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            : alpha(true)
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , depth(true)
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , stencil(false)
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , antialias(true)
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , premultipliedAlpha(true)
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , preserveDrawingBuffer(false)
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , noExtensions(false)
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , shareResources(true)
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            , preferDiscreteGPU(false)
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool alpha;
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool depth;
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool stencil;
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool antialias;
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool premultipliedAlpha;
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool preserveDrawingBuffer;
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool noExtensions;
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool shareResources;
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        bool preferDiscreteGPU;
415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        KURL topDocumentURL;
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    class ContextLostCallback {
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public:
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual void onContextLost() = 0;
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual ~ContextLostCallback() {}
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    class ErrorMessageCallback {
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    public:
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual void onErrorMessage(const String& message, GC3Dint id) = 0;
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        virtual ~ErrorMessageCallback() { }
4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setContextLostCallback(PassOwnPtr<ContextLostCallback>);
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>);
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    static PassRefPtr<GraphicsContext3D> create(Attributes);
43493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
43593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Callers must make the context current before using it AND check that the context was created successfully
43693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // via ContextLost before using the context in any way. Once made current on a thread, the context cannot
43793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // be used on any other thread.
43893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    static PassRefPtr<GraphicsContext3D> createGraphicsContextFromWebContext(PassOwnPtr<WebKit::WebGraphicsContext3D>, bool preserveDrawingBuffer = false);
43993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    static PassRefPtr<GraphicsContext3D> createGraphicsContextFromProvider(PassOwnPtr<WebKit::WebGraphicsContext3DProvider>, bool preserveDrawingBuffer = false);
44093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~GraphicsContext3D();
4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GrContext* grContext();
44493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    WebKit::WebGraphicsContext3D* webContext() const { return m_impl; }
44593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool makeContextCurrent();
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Helper to texImage2D with pixel==0 case: pixels are initialized to 0.
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Return true if no GL error is synthesized.
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // By default, alignment is 4, the OpenGL default setting.
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint alignment = 4);
4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //----------------------------------------------------------------------
4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Helpers for texture uploading and pixel readback.
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //
4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Computes the components per pixel and bytes per component
4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // for the given format and type combination. Returns false if
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // either was an invalid enum.
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool computeFormatAndTypeParameters(GC3Denum format,
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                               GC3Denum type,
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                               unsigned int* componentsPerPixel,
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                               unsigned int* bytesPerComponent);
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Computes the image size in bytes. If paddingInBytes is not null, padding
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // is also calculated in return. Returns NO_ERROR if succeed, otherwise
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // return the suggested GL error indicating the cause of the failure:
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //   INVALID_VALUE if width/height is negative or overflow happens.
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //   INVALID_ENUM if format/type is illegal.
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static GC3Denum computeImageSizeInBytes(GC3Denum format,
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     GC3Denum type,
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     GC3Dsizei width,
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     GC3Dsizei height,
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     GC3Dint alignment,
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     unsigned int* imageSizeInBytes,
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                                     unsigned int* paddingInBytes);
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Attempt to enumerate all possible native image formats to
4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // reduce the amount of temporary allocations during texture
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // uploading. This enum must be public because it is accessed
4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // by non-member functions.
482926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    enum DataFormat {
483926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGBA8 = 0,
48453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        DataFormatRGBA16F,
485926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGBA32F,
486926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGB8,
48753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        DataFormatRGB16F,
488926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGB32F,
489926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatBGR8,
490926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatBGRA8,
491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatARGB8,
492926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatABGR8,
493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGBA5551,
494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGBA4444,
495926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRGB565,
496926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatR8,
49753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        DataFormatR16F,
498926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatR32F,
499926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRA8,
50053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        DataFormatRA16F,
501926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatRA32F,
502926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatAR8,
503926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatA8,
50453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        DataFormatA16F,
505926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatA32F,
506926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormatNumFormats
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
509926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    // Check if the format is one of the formats from the ImageData or DOM elements.
510926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    // The formats from ImageData is always RGBA8.
51181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    // The formats from DOM elements vary with Graphics ports. It can only be RGBA8 or BGRA8.
512926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData(DataFormat SrcFormat)
513926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    {
514926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8;
515926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
516926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //----------------------------------------------------------------------
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Entry points for WebGL.
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void activeTexture(GC3Denum texture);
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void attachShader(Platform3DObject program, Platform3DObject shader);
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bindAttribLocation(Platform3DObject, GC3Duint index, const String& name);
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bindBuffer(GC3Denum target, Platform3DObject);
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bindFramebuffer(GC3Denum target, Platform3DObject);
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bindRenderbuffer(GC3Denum target, Platform3DObject);
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bindTexture(GC3Denum target, Platform3DObject);
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void blendColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha);
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void blendEquation(GC3Denum mode);
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha);
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void blendFunc(GC3Denum sfactor, GC3Denum dfactor);
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha);
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage);
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bufferData(GC3Denum target, GC3Dsizeiptr size, const void* data, GC3Denum usage);
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void bufferSubData(GC3Denum target, GC3Dintptr offset, GC3Dsizeiptr size, const void* data);
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Denum checkFramebufferStatus(GC3Denum target);
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clear(GC3Dbitfield mask);
5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha);
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearDepth(GC3Dclampf depth);
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearStencil(GC3Dint s);
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha);
5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void compileShader(Platform3DObject);
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Dsizei imageSize, const void* data);
5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void compressedTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Dsizei imageSize, const void* data);
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border);
5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height);
5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cullFace(GC3Denum mode);
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void depthFunc(GC3Denum func);
5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void depthMask(GC3Dboolean flag);
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void depthRange(GC3Dclampf zNear, GC3Dclampf zFar);
5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void detachShader(Platform3DObject, Platform3DObject);
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void disable(GC3Denum cap);
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void disableVertexAttribArray(GC3Duint index);
5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count);
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset);
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void enable(GC3Denum cap);
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void enableVertexAttribArray(GC3Duint index);
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void finish();
5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void flush();
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, Platform3DObject);
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, Platform3DObject, GC3Dint level);
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void frontFace(GC3Denum mode);
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void generateMipmap(GC3Denum target);
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool getActiveAttrib(Platform3DObject program, GC3Duint index, ActiveInfo&);
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool getActiveUniform(Platform3DObject program, GC3Duint index, ActiveInfo&);
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getAttachedShaders(Platform3DObject program, GC3Dsizei maxCount, GC3Dsizei* count, Platform3DObject* shaders);
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dint getAttribLocation(Platform3DObject, const String& name);
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getBooleanv(GC3Denum pname, GC3Dboolean* value);
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getBufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value);
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Attributes getContextAttributes();
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Denum getError();
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getFloatv(GC3Denum pname, GC3Dfloat* value);
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getFramebufferAttachmentParameteriv(GC3Denum target, GC3Denum attachment, GC3Denum pname, GC3Dint* value);
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getIntegerv(GC3Denum pname, GC3Dint* value);
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getProgramiv(Platform3DObject program, GC3Denum pname, GC3Dint* value);
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String getProgramInfoLog(Platform3DObject);
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getRenderbufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value);
5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getShaderiv(Platform3DObject, GC3Denum pname, GC3Dint* value);
5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String getShaderInfoLog(Platform3DObject);
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getShaderPrecisionFormat(GC3Denum shaderType, GC3Denum precisionType, GC3Dint* range, GC3Dint* precision);
5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String getShaderSource(Platform3DObject);
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String getString(GC3Denum name);
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getTexParameterfv(GC3Denum target, GC3Denum pname, GC3Dfloat* value);
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getTexParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value);
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getUniformfv(Platform3DObject program, GC3Dint location, GC3Dfloat* value);
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getUniformiv(Platform3DObject program, GC3Dint location, GC3Dint* value);
5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dint getUniformLocation(Platform3DObject, const String& name);
5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getVertexAttribfv(GC3Duint index, GC3Denum pname, GC3Dfloat* value);
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void getVertexAttribiv(GC3Duint index, GC3Denum pname, GC3Dint* value);
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dsizeiptr getVertexAttribOffset(GC3Duint index, GC3Denum pname);
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void hint(GC3Denum target, GC3Denum mode);
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isBuffer(Platform3DObject);
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isEnabled(GC3Denum cap);
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isFramebuffer(Platform3DObject);
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isProgram(Platform3DObject);
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isRenderbuffer(Platform3DObject);
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isShader(Platform3DObject);
6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    GC3Dboolean isTexture(Platform3DObject);
6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void lineWidth(GC3Dfloat);
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void linkProgram(Platform3DObject);
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void pixelStorei(GC3Denum pname, GC3Dint param);
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void polygonOffset(GC3Dfloat factor, GC3Dfloat units);
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, void* data);
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void releaseShaderCompiler();
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);
6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void sampleCoverage(GC3Dclampf value, GC3Dboolean invert);
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height);
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void shaderSource(Platform3DObject, const String& string);
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask);
6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask);
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilMask(GC3Duint mask);
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilMaskSeparate(GC3Denum face, GC3Duint mask);
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass);
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass);
6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
62553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, const void* pixels);
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param);
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param);
6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, const void* pixels);
6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform1f(GC3Dint location, GC3Dfloat x);
6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform1fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v);
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform1i(GC3Dint location, GC3Dint x);
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform1iv(GC3Dint location, GC3Dsizei, GC3Dint* v);
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform2f(GC3Dint location, GC3Dfloat x, GC3Dfloat y);
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform2fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v);
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform2i(GC3Dint location, GC3Dint x, GC3Dint y);
6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform2iv(GC3Dint location, GC3Dsizei, GC3Dint* v);
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform3f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z);
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform3fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v);
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform3i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z);
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform3iv(GC3Dint location, GC3Dsizei, GC3Dint* v);
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform4f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w);
6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform4fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v);
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform4i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z, GC3Dint w);
6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniform4iv(GC3Dint location, GC3Dsizei, GC3Dint* v);
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniformMatrix2fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value);
6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniformMatrix3fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value);
6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void uniformMatrix4fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value);
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void useProgram(Platform3DObject);
6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void validateProgram(Platform3DObject);
6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib1f(GC3Duint index, GC3Dfloat x);
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib1fv(GC3Duint index, GC3Dfloat* values);
6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib2f(GC3Duint index, GC3Dfloat x, GC3Dfloat y);
6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib2fv(GC3Duint index, GC3Dfloat* values);
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib3f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z);
6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib3fv(GC3Duint index, GC3Dfloat* values);
6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w);
6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values);
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized,
6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                             GC3Dsizei stride, GC3Dintptr offset);
6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height);
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void reshape(int width, int height);
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void markContextChanged();
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void markLayerComposited();
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool layerComposited() const;
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void paintRenderingResultsToCanvas(ImageBuffer*, DrawingBuffer*);
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<ImageData> paintRenderingResultsToImageData(DrawingBuffer*);
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Support for buffer creation and deletion
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createBuffer();
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createFramebuffer();
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createProgram();
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createRenderbuffer();
6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createShader(GC3Denum);
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Platform3DObject createTexture();
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteBuffer(Platform3DObject);
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteFramebuffer(Platform3DObject);
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteProgram(Platform3DObject);
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteRenderbuffer(Platform3DObject);
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteShader(Platform3DObject);
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void deleteTexture(Platform3DObject);
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Synthesizes an OpenGL error which will be returned from a
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // later call to getError. This is used to emulate OpenGL ES
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // 2.0 behavior on the desktop and to enforce additional error
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // checking mandated by WebGL.
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Per the behavior of glGetError, this stores at most one
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // instance of any given error, and returns them from calls to
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // getError in the order they were added.
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void synthesizeGLError(GC3Denum error);
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Support for extensions. Returns a non-null object, though not
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // all methods it contains may necessarily be supported on the
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // current hardware. Must call Extensions3D::supports() to
7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // determine this.
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Extensions3D* getExtensions();
7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static unsigned getClearBitsByFormat(GC3Denum);
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum ChannelBits {
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelRed = 1,
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelGreen = 2,
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelBlue = 4,
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelAlpha = 8,
7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelDepth = 16,
7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelStencil = 32,
7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelRGB = ChannelRed | ChannelGreen | ChannelBlue,
7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ChannelRGBA = ChannelRGB | ChannelAlpha,
7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static unsigned getChannelBitsByFormat(GC3Denum);
7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Possible alpha operations that may need to occur during
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // pixel packing. FIXME: kAlphaDoUnmultiply is lossy and must
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // be removed.
7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum AlphaOp {
7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AlphaDoNothing = 0,
7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AlphaDoPremultiply = 1,
7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AlphaDoUnmultiply = 2
7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
730926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    enum ImageHtmlDomSource {
731926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HtmlDomImage = 0,
732926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HtmlDomCanvas = 1,
733926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HtmlDomVideo = 2,
734926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        HtmlDomNone = 3
735926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    };
736926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
737926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    class ImageExtractor {
738926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    public:
739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ImageExtractor(Image*, ImageHtmlDomSource, bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ~ImageExtractor();
742926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
743926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        bool extractSucceeded() { return m_extractSucceeded; }
744926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        const void* imagePixelData() { return m_imagePixelData; }
745926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned imageWidth() { return m_imageWidth; }
746926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned imageHeight() { return m_imageHeight; }
747926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormat imageSourceFormat() { return m_imageSourceFormat; }
748926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        AlphaOp imageAlphaOp() { return m_alphaOp; }
749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned imageSourceUnpackAlignment() { return m_imageSourceUnpackAlignment; }
750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ImageHtmlDomSource imageHtmlDomSource() { return m_imageHtmlDomSource; }
751926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    private:
75253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        // Extract the image and keeps track of its status, such as width, height, Source Alignment, format and AlphaOp etc.
75353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        // This needs to lock the resources or relevant data if needed and return true upon success
754926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        bool extractImage(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);
755926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
75653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        RefPtr<NativeImageSkia> m_nativeImage;
75753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        RefPtr<NativeImageSkia> m_skiaImage;
758926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        Image* m_image;
759926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ImageHtmlDomSource m_imageHtmlDomSource;
760926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        bool m_extractSucceeded;
761926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        const void* m_imagePixelData;
762926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned m_imageWidth;
763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned m_imageHeight;
764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        DataFormat m_imageSourceFormat;
765926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        AlphaOp m_alphaOp;
766926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        unsigned m_imageSourceUnpackAlignment;
767926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    };
768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
76993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // The Following functions are implemented in GraphicsContext3DImagePacking.cpp
77093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
77193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Packs the contents of the given Image which is passed in |pixels| into the passed Vector
77293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // according to the given format and type, and obeying the flipY and AlphaOp flags.
77393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Returns true upon success.
77493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    static bool packImageData(Image*, const void* pixels, GC3Denum format, GC3Denum type, bool flipY, AlphaOp, DataFormat sourceFormat, unsigned width, unsigned height, unsigned sourceUnpackAlignment, Vector<uint8_t>& data);
77593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
77693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Extracts the contents of the given ImageData into the passed Vector,
77793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // packing the pixel data according to the given format and type,
77893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // and obeying the flipY and premultiplyAlpha flags. Returns true
77993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // upon success.
78093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    static bool extractImageData(ImageData*, GC3Denum format, GC3Denum type, bool flipY, bool premultiplyAlpha, Vector<uint8_t>& data);
78193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
78293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Helper function which extracts the user-supplied texture
78393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // data, applying the flipY and premultiplyAlpha parameters.
78493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // If the data is not tightly packed according to the passed
78593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // unpackAlignment, the output data will be tightly packed.
78693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Returns true if successful, false if any error occurred.
78793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    static bool extractTextureData(unsigned width, unsigned height, GC3Denum format, GC3Denum type, unsigned unpackAlignment, bool flipY, bool premultiplyAlpha, const void* pixels, Vector<uint8_t>& data);
78893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
78993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // End GraphicsContext3DImagePacking.cpp functions
79093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
791e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // This is the order of bytes to use when doing a readback.
792e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    enum ReadbackOrder {
793e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        ReadbackRGBA,
794e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch        ReadbackSkia
795e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    };
796e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
797e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // Helper function which does a readback from the currently-bound
798e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // framebuffer into a buffer of a certain size with 4-byte pixels.
799e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    void readBackFramebuffer(unsigned char* pixels, int width, int height, ReadbackOrder, AlphaOp);
800e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
801926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)private:
80293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    friend class Extensions3D;
80393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
80493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    GraphicsContext3D(PassOwnPtr<WebKit::WebGraphicsContext3D>, bool preserveDrawingBuffer);
80593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    GraphicsContext3D(PassOwnPtr<WebKit::WebGraphicsContext3DProvider>, bool preserveDrawingBuffer);
806926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
807926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    // Helper for packImageData/extractImageData/extractTextureData which implement packing of pixel
8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // data into the specified OpenGL destination format and type.
8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // A sourceUnpackAlignment of zero indicates that the source
8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // data is tightly packed. Non-zero values may take a slow path.
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Destination data will have no gaps between rows.
81293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Implemented in GraphicsContext3DImagePacking.cpp
813926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    static bool packPixels(const uint8_t* sourceData, DataFormat sourceDataFormat, unsigned width, unsigned height, unsigned sourceUnpackAlignment, unsigned destinationFormat, unsigned destinationType, AlphaOp, void* destinationData, bool flipY);
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
81593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    void paintFramebufferToCanvas(int framebuffer, int width, int height, bool premultiplyAlpha, ImageBuffer*);
816e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // Helper function to flip a bitmap vertically.
817e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    void flipVertically(uint8_t* data, int width, int height);
81893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
81993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // Extensions3D support.
82093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool supportsExtension(const String& name);
82193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool ensureExtensionEnabled(const String& name);
82293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool isExtensionEnabled(const String& name);
82393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
82493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    void initializeExtensions();
82593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
82693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool preserveDrawingBuffer() const { return m_preserveDrawingBuffer; }
82793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
82893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    OwnPtr<WebKit::WebGraphicsContext3DProvider> m_provider;
82993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    WebKit::WebGraphicsContext3D* m_impl;
83093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    OwnPtr<GraphicsContext3DContextLostCallbackAdapter> m_contextLostCallbackAdapter;
83193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    OwnPtr<GraphicsContext3DErrorMessageCallbackAdapter> m_errorMessageCallbackAdapter;
832e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    OwnPtr<WebKit::WebGraphicsContext3D> m_ownedWebContext;
833e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    OwnPtr<Extensions3D> m_extensions;
83493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    OwnPtr<GrMemoryAllocationChangedCallbackAdapter> m_grContextMemoryAllocationCallbackAdapter;
83593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool m_initializedAvailableExtensions;
83693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    HashSet<String> m_enabledExtensions;
83793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    HashSet<String> m_requestableExtensions;
83893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool m_layerComposited;
83993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    bool m_preserveDrawingBuffer;
840e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    int m_packAlignment;
84193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
84293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    enum ResourceSafety {
84393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        ResourceSafetyUnknown,
84493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        ResourceSafe,
84593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)        ResourceUnsafe
84693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    };
84793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    ResourceSafety m_resourceSafety;
84893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
84993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // If the width and height of the Canvas's backing store don't
85093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // match those that we were given in the most recent call to
85193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // reshape(), then we need an intermediate bitmap to read back the
85293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // frame buffer into. This seems to happen when CSS styles are
85393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    // used to resize the Canvas.
85493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    SkBitmap m_resizingBitmap;
85593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
85693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    GrContext* m_grContext;
85793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    SkAutoTUnref<GrContext> m_ownedGrContext;
858e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
859e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // Used to flip a bitmap vertically.
860e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    Vector<uint8_t> m_scanline;
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // GraphicsContext3D_h
866