14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
2eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file.
54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com//
64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Context.h: Defines the gl::Context class, managing all GL state and performing
84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// rendering operations. It is the GLES2 specific implementation of EGLContext.
94f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
10da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com#ifndef LIBGLESV2_CONTEXT_H_
11da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com#define LIBGLESV2_CONTEXT_H_
124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
13f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include <GLES3/gl3.h>
14f26ddae9acc05461792c8b1b6b35444ddf209de8shannon.woods%transgaming.com@gtempaccount.com#include <GLES3/gl3ext.h>
154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#include <GLES2/gl2.h>
16d303ef9a9961a9da9f80a7c4366ecc96aae18316alokp@chromium.org#include <GLES2/gl2ext.h>
174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#include <EGL/egl.h>
184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
19db2115d8b7082be98910a9cda033bf2c23eaeaa2daniel@transgaming.com#include <string>
20cdf22f94acaf86ebfb02e123deafcb41010cfccfGeoff Lang#include <set>
214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#include <map>
22db2115d8b7082be98910a9cda033bf2c23eaeaa2daniel@transgaming.com#include <unordered_map>
2343b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang#include <array>
244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
25ea0e1af4c3db538081d776e4ec1a588ca82cb9d9alokp@chromium.org#include "common/angleutils.h"
26b66a70156d33b0712fae267c6697af55e22bf8b6apatrick@chromium.org#include "common/RefCountObject.h"
271a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com#include "libGLESv2/HandleAllocator.h"
28d0db35080360ae03589dd366266eed0a9b1f422bdaniel@transgaming.com#include "libGLESv2/angletypes.h"
290d94d1f75d5cc6a740ed6729952c4cb138289936shannon.woods@transgaming.com#include "libGLESv2/Constants.h"
30879397104fa488dd59d9e318fd4b1f0ef65d17d0Jamie Madill#include "libGLESv2/VertexAttribute.h"
31d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com
32d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comnamespace rx
33d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com{
34d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comclass Renderer;
35d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com}
364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace egl
384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Surface;
404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comnamespace gl
434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Shader;
454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Program;
465ae3ccc34abd1ee0e29bd529a0544da240244f4bdaniel@transgaming.comclass ProgramBinary;
474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Texture;
484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Texture2D;
494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass TextureCubeMap;
50c416e1cc09f1404d3dbcf23cd55956d37ebe67d2shannon.woods%transgaming.com@gtempaccount.comclass Texture3D;
5190dbc44c79052a9ceaab2c782a67e7d149da5385shannon.woods%transgaming.com@gtempaccount.comclass Texture2DArray;
524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Framebuffer;
533c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madillclass FramebufferAttachment;
549ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.comclass RenderbufferStorage;
554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Colorbuffer;
564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Depthbuffer;
574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comclass Stencilbuffer;
58cdacc8e27117f22035bb56150899e1e52bb542d6daniel@transgaming.comclass DepthStencilbuffer;
5933dc84394ba08700d700a3da692e8de18433a031Jamie Madillclass FenceNV;
60cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madillclass FenceSync;
6186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.comclass Query;
62d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comclass ResourceManager;
63d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.comclass Buffer;
6457a8972e5ddf7611860d9767c8aed4793c3929afJamie Madillclass VertexAttribute;
6557a8972e5ddf7611860d9767c8aed4793c3929afJamie Madillclass VertexArray;
66dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madillclass Sampler;
67c8058451c87ec298683bf484813016b20bf36777Geoff Langclass TransformFeedback;
684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Helper structure to store all raw state
704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comstruct State
714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
722a64ee4479728d804e1ecd8d0d10e83f00cf4f29Geoff Lang    ColorF colorClearValue;
734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLclampf depthClearValue;
744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    int stencilClearValue;
754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
76f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com    RasterizerState rasterizer;
77d55e8c1b48f16f93cb89798fc3640047eb74d3fddaniel@transgaming.com    bool scissorTest;
78f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com    Rectangle scissor;
79f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com
80f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com    BlendState blend;
812a64ee4479728d804e1ecd8d0d10e83f00cf4f29Geoff Lang    ColorF blendColor;
824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool sampleCoverage;
834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLclampf sampleCoverageValue;
84a36f98efb5e70eec8763c0f11046b899929a04a4daniel@transgaming.com    bool sampleCoverageInvert;
85f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com
86f39967e136759e6d196793122638431c74db1d7fdaniel@transgaming.com    DepthStencilState depthStencil;
8708c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com    GLint stencilRef;
8808c331d42f31f8291238695d86db53d760e0b330daniel@transgaming.com    GLint stencilBackRef;
894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
9032e58cdedbee0b5add027c7d051faaac254724b8daniel@transgaming.com    GLfloat lineWidth;
9132e58cdedbee0b5add027c7d051faaac254724b8daniel@transgaming.com
925949aa10c60aeab86dcd32ee9d77d5b3fb8185e0daniel@transgaming.com    GLenum generateMipmapHint;
93d303ef9a9961a9da9f80a7c4366ecc96aae18316alokp@chromium.org    GLenum fragmentShaderDerivativeHint;
945949aa10c60aeab86dcd32ee9d77d5b3fb8185e0daniel@transgaming.com
953884e2c242e152999f7120c3368a8c3799566511daniel@transgaming.com    Rectangle viewport;
964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    float zNear;
974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    float zFar;
984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
99dfd5702063edc24b22b5a333e698b3c2d12798fcdaniel@transgaming.com    unsigned int activeSampler;   // Active texture unit selector - GL_TEXTURE0
1009ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com    BindingPointer<Buffer> arrayBuffer;
101ff8bdfb065ddd9202cc27df894ad39f1a024fdd4apatrick@chromium.org    GLuint readFramebuffer;
102ff8bdfb065ddd9202cc27df894ad39f1a024fdd4apatrick@chromium.org    GLuint drawFramebuffer;
1033c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madill    BindingPointer<FramebufferAttachment> renderbuffer;
1044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint currentProgram;
1054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
106a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill    VertexAttribCurrentValueData vertexAttribCurrentValues[MAX_VERTEX_ATTRIBS]; // From glVertexAttrib
10757a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    unsigned int vertexArray;
108a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill
109233fe9548a2b166d3ccb09a4a7af273fab6dbf2cshannon.woods@transgaming.com    BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS];
110dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    GLuint samplers[IMPLEMENTATION_MAX_COMBINED_TEXTURE_IMAGE_UNITS];
1114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
11237dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang    typedef std::map< GLenum, BindingPointer<Query> > ActiveQueryMap;
11337dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang    ActiveQueryMap activeQueries;
11437dde6929d79c9a523bd6c786d2b6c6544be8c9dGeoff Lang
115667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Buffer> genericUniformBuffer;
11634089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com    OffsetBindingPointer<Buffer> uniformBuffers[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
11734089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com
118c8058451c87ec298683bf484813016b20bf36777Geoff Lang    BindingPointer<TransformFeedback> transformFeedback;
119667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Buffer> genericTransformFeedbackBuffer;
12034089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com    OffsetBindingPointer<Buffer> transformFeedbackBuffers[IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS];
12134089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com
1225117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Buffer> copyReadBuffer;
1235117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Buffer> copyWriteBuffer;
1245117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com
125950a775ecc8d7352a5d2f76b719416acdc4706a0Jamie Madill    PixelUnpackState unpack;
126950a775ecc8d7352a5d2f76b719416acdc4706a0Jamie Madill    PixelPackState pack;
1274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com};
1284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
129428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.comclass Context
1304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{
1314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com  public:
132daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com    Context(int clientVersion, const gl::Context *shareContext, rx::Renderer *renderer, bool notifyResets, bool robustAccess);
1334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
134a4de2657518728cdd1919bbbc21d04b502aa31c5Geoff Lang    virtual ~Context();
1354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
136ad62987f1ef6e34ed362e7a7ee125ffcd1690241daniel@transgaming.com    void makeCurrent(egl::Surface *surface);
1374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
13809fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com    virtual void markContextLost();
13909fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com    bool isContextLost();
14009fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com
141428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    // State manipulation
1420550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    void setCap(GLenum cap, bool enabled);
1430550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    bool getCap(GLenum cap);
1440550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
1454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void setClearColor(float red, float green, float blue, float alpha);
146428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
1474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void setClearDepth(float depth);
148428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
1494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void setClearStencil(int stencil);
1504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
1510550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    void setRasterizerDiscard(bool enabled);
1520550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang    bool isRasterizerDiscardEnabled() const;
1530550d0389a59a50a1df0df3484ecefc864715e26Geoff Lang
154428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setCullFace(bool enabled);
155428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isCullFaceEnabled() const;
156428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
157428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setCullMode(GLenum mode);
158428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
159428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setFrontFace(GLenum front);
160428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
161428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setDepthTest(bool enabled);
162428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isDepthTestEnabled() const;
163428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
164428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setDepthFunc(GLenum depthFunc);
165428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
166428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setDepthRange(float zNear, float zFar);
167428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
168428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setBlend(bool enabled);
169428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isBlendEnabled() const;
170428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
171428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha);
172428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setBlendColor(float red, float green, float blue, float alpha);
173428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setBlendEquation(GLenum rgbEquation, GLenum alphaEquation);
174428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
175428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilTest(bool enabled);
176428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isStencilTestEnabled() const;
177428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
178428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilParams(GLenum stencilFunc, GLint stencilRef, GLuint stencilMask);
179428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilBackParams(GLenum stencilBackFunc, GLint stencilBackRef, GLuint stencilBackMask);
180428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilWritemask(GLuint stencilWritemask);
181428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilBackWritemask(GLuint stencilBackWritemask);
182428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilOperations(GLenum stencilFail, GLenum stencilPassDepthFail, GLenum stencilPassDepthPass);
183428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setStencilBackOperations(GLenum stencilBackFail, GLenum stencilBackPassDepthFail, GLenum stencilBackPassDepthPass);
184428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
185428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setPolygonOffsetFill(bool enabled);
186428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isPolygonOffsetFillEnabled() const;
187428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
188428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setPolygonOffsetParams(GLfloat factor, GLfloat units);
189428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
190428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setSampleAlphaToCoverage(bool enabled);
191428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isSampleAlphaToCoverageEnabled() const;
192428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
193428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setSampleCoverage(bool enabled);
194428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isSampleCoverageEnabled() const;
195428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
196a36f98efb5e70eec8763c0f11046b899929a04a4daniel@transgaming.com    void setSampleCoverageParams(GLclampf value, bool invert);
197428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
198428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setScissorTest(bool enabled);
199428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isScissorTestEnabled() const;
200428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
201428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setDither(bool enabled);
202428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    bool isDitherEnabled() const;
203428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
204428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setLineWidth(GLfloat width);
205428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
206428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setGenerateMipmapHint(GLenum hint);
207d303ef9a9961a9da9f80a7c4366ecc96aae18316alokp@chromium.org    void setFragmentShaderDerivativeHint(GLenum hint);
208428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
209428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height);
210428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
211428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setScissorParams(GLint x, GLint y, GLsizei width, GLsizei height);
212c832516a8735ea17b0fde335cd1160421e62e785Geoff Lang    void getScissorParams(GLint *x, GLint *y, GLsizei *width, GLsizei *height);
213428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
214428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setColorMask(bool red, bool green, bool blue, bool alpha);
215428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setDepthMask(bool mask);
216428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
217dfd5702063edc24b22b5a333e698b3c2d12798fcdaniel@transgaming.com    void setActiveSampler(unsigned int active);
218428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
219a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    GLuint getReadFramebufferHandle() const;
220a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    GLuint getDrawFramebufferHandle() const;
221428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    GLuint getRenderbufferHandle() const;
222d8db866a9cc272549ebc223d41610319f9ef0b09Jamie Madill    GLuint getVertexArrayHandle() const;
223dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    GLuint getSamplerHandle(GLuint textureUnit) const;
224893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    unsigned int getActiveSampler() const;
225428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
226428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    GLuint getArrayBufferHandle() const;
227428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
228db2f14c0b1133507215dd3b7a30155b70885973aJamie Madill    bool isQueryActive() const;
22945c785d35c270ca1d1168b6ca5517cb3a5a285ccJamie Madill    const Query *getActiveQuery(GLenum target) const;
23045c785d35c270ca1d1168b6ca5517cb3a5a285ccJamie Madill    GLuint getActiveQueryId(GLenum target) const;
23186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
23283921386363c71f582abd3e13d5f4d5f9d47cc86daniel@transgaming.com    void setEnableVertexAttribArray(unsigned int attribNum, bool enabled);
233a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill    const VertexAttribute &getVertexAttribState(unsigned int attribNum) const;
234a857c36bc1e9f1178c5eaa3e80bfe543a5408467Jamie Madill    const VertexAttribCurrentValueData &getVertexAttribCurrentValue(unsigned int attribNum) const;
2359ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com    void setVertexAttribState(unsigned int attribNum, Buffer *boundBuffer, GLint size, GLenum type,
2368de4e6af2bc4ec6a513602c6fb6dd7bc6f242bd2shannon.woods%transgaming.com@gtempaccount.com                              bool normalized, bool pureInteger, GLsizei stride, const void *pointer);
237428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    const void *getVertexAttribPointer(unsigned int attribNum) const;
238428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
239428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setUnpackAlignment(GLint alignment);
240428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    GLint getUnpackAlignment() const;
24188f18f458dec5c2aff302db93c57e51d89fbffa2Jamie Madill    const PixelUnpackState &getUnpackState() const;
242428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
243428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    void setPackAlignment(GLint alignment);
244428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com    GLint getPackAlignment() const;
24588f18f458dec5c2aff302db93c57e51d89fbffa2Jamie Madill    const PixelPackState &getPackState() const;
246428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
24756d46abe08c8a79786c3821e4e4336791f29883absalomon@google.com    void setPackReverseRowOrder(bool reverseRowOrder);
24856d46abe08c8a79786c3821e4e4336791f29883absalomon@google.com    bool getPackReverseRowOrder() const;
24956d46abe08c8a79786c3821e4e4336791f29883absalomon@google.com
250da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    // These create  and destroy methods are merely pass-throughs to
251da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    // ResourceManager, which owns these object types
2524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint createBuffer();
2534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint createShader(GLenum type);
2544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint createProgram();
2554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint createTexture();
2564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLuint createRenderbuffer();
257dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    GLuint createSampler();
258c8058451c87ec298683bf484813016b20bf36777Geoff Lang    GLuint createTransformFeedback();
259cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    GLsync createFenceSync(GLenum condition);
2604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
2614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void deleteBuffer(GLuint buffer);
2624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void deleteShader(GLuint shader);
2634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void deleteProgram(GLuint program);
2644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void deleteTexture(GLuint texture);
2654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void deleteRenderbuffer(GLuint renderbuffer);
266dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    void deleteSampler(GLuint sampler);
267c8058451c87ec298683bf484813016b20bf36777Geoff Lang    void deleteTransformFeedback(GLuint transformFeedback);
268cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    void deleteFenceSync(GLsync fenceSync);
2699ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com
270da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    // Framebuffers are owned by the Context, so these methods do not pass through
271da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    GLuint createFramebuffer();
272da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    void deleteFramebuffer(GLuint framebuffer);
2734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
274cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    // NV Fences are owned by the Context.
27533dc84394ba08700d700a3da692e8de18433a031Jamie Madill    GLuint createFenceNV();
27633dc84394ba08700d700a3da692e8de18433a031Jamie Madill    void deleteFenceNV(GLuint fence);
27786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
27886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    // Queries are owned by the Context;
27986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    GLuint createQuery();
28086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    void deleteQuery(GLuint query);
281d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
282be26b522bb07965b981f693d461a30a6f6a67df7Jamie Madill    // Vertex arrays are owned by the Context
283be26b522bb07965b981f693d461a30a6f6a67df7Jamie Madill    GLuint createVertexArray();
284be26b522bb07965b981f693d461a30a6f6a67df7Jamie Madill    void deleteVertexArray(GLuint vertexArray);
285be26b522bb07965b981f693d461a30a6f6a67df7Jamie Madill
2864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void bindArrayBuffer(GLuint buffer);
2874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void bindElementArrayBuffer(GLuint buffer);
2884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void bindTexture2D(GLuint texture);
2894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void bindTextureCubeMap(GLuint texture);
290c416e1cc09f1404d3dbcf23cd55956d37ebe67d2shannon.woods%transgaming.com@gtempaccount.com    void bindTexture3D(GLuint texture);
29190dbc44c79052a9ceaab2c782a67e7d149da5385shannon.woods%transgaming.com@gtempaccount.com    void bindTexture2DArray(GLuint texture);
292a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    void bindReadFramebuffer(GLuint framebuffer);
293a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    void bindDrawFramebuffer(GLuint framebuffer);
2944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void bindRenderbuffer(GLuint renderbuffer);
29557a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    void bindVertexArray(GLuint vertexArray);
296dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    void bindSampler(GLuint textureUnit, GLuint sampler);
297667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    void bindGenericUniformBuffer(GLuint buffer);
298667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    void bindIndexedUniformBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
299667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    void bindGenericTransformFeedbackBuffer(GLuint buffer);
300667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    void bindIndexedTransformFeedbackBuffer(GLuint buffer, GLuint index, GLintptr offset, GLsizeiptr size);
3015117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    void bindCopyReadBuffer(GLuint buffer);
3025117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    void bindCopyWriteBuffer(GLuint buffer);
303c926e5f1808efd73b617ac0f204f1455cf8f600dshannon.woods%transgaming.com@gtempaccount.com    void bindPixelPackBuffer(GLuint buffer);
304c926e5f1808efd73b617ac0f204f1455cf8f600dshannon.woods%transgaming.com@gtempaccount.com    void bindPixelUnpackBuffer(GLuint buffer);
3054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void useProgram(GLuint program);
30695d294247b8fe82dddc1e8ddcbb7449074112e5ddaniel@transgaming.com    void linkProgram(GLuint program);
30795d294247b8fe82dddc1e8ddcbb7449074112e5ddaniel@transgaming.com    void setProgramBinary(GLuint program, const void *binary, GLint length);
308c8058451c87ec298683bf484813016b20bf36777Geoff Lang    void bindTransformFeedback(GLuint transformFeedback);
3094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
31086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    void beginQuery(GLenum target, GLuint query);
31186bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    void endQuery(GLenum target);
31286bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
3134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void setFramebufferZero(Framebuffer *framebuffer);
3149ecb9f9d504e71672a610183c34ae33ab276aef4daniel@transgaming.com
31570062c98f7c62744f398dc0ba7a87c76e723cc48daniel@transgaming.com    void setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples);
3164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
317a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com    void setVertexAttribf(GLuint index, const GLfloat values[4]);
318a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com    void setVertexAttribu(GLuint index, const GLuint values[4]);
319a88858661d02687ae69835092420639d26e32d5fshannon.woods%transgaming.com@gtempaccount.com    void setVertexAttribi(GLuint index, const GLint values[4]);
320d2820bfb69ab94889f9477b5c9a4fafb7fc5ed13daniel@transgaming.com    void setVertexAttribDivisor(GLuint index, GLuint divisor);
321e4b08c8cf83571f832e4558e1a2cb539ed006f4fdaniel@transgaming.com
322e29d1672345b37f61f76a01fbaa63b5c12b57ab3Jamie Madill    void samplerParameteri(GLuint sampler, GLenum pname, GLint param);
323e29d1672345b37f61f76a01fbaa63b5c12b57ab3Jamie Madill    void samplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
3249675b80889202319355597a20e76c6f38b213cd1Jamie Madill    GLint getSamplerParameteri(GLuint sampler, GLenum pname);
3259675b80889202319355597a20e76c6f38b213cd1Jamie Madill    GLfloat getSamplerParameterf(GLuint sampler, GLenum pname);
326e29d1672345b37f61f76a01fbaa63b5c12b57ab3Jamie Madill
3274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    Buffer *getBuffer(GLuint handle);
32833dc84394ba08700d700a3da692e8de18433a031Jamie Madill    FenceNV *getFenceNV(GLuint handle);
329cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    FenceSync *getFenceSync(GLsync handle) const;
33048dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang    Shader *getShader(GLuint handle) const;
33148dcae7b217420a7387c84a76651989e6f5f3576Geoff Lang    Program *getProgram(GLuint handle) const;
3324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    Texture *getTexture(GLuint handle);
3331fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Framebuffer *getFramebuffer(GLuint handle) const;
3343c7fa226aeb81469b93142b54e339f13a46ab835Jamie Madill    FramebufferAttachment *getRenderbuffer(GLuint handle);
33557a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    VertexArray *getVertexArray(GLuint handle) const;
336dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    Sampler *getSampler(GLuint handle) const;
33786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    Query *getQuery(GLuint handle, bool create, GLenum type);
338c8058451c87ec298683bf484813016b20bf36777Geoff Lang    TransformFeedback *getTransformFeedback(GLuint handle) const;
3394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3408c96d58af5a5994c81b81032f775dc7d24cb5661Jamie Madill    Buffer *getTargetBuffer(GLenum target) const;
3414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    Buffer *getArrayBuffer();
3427a5f738bcf0773177a533c73bd51330a353e4004Jamie Madill    Buffer *getElementArrayBuffer() const;
34362a2846cfeb8f1d34f8c0182f9e0adf5e23f5832daniel@transgaming.com    ProgramBinary *getCurrentProgramBinary();
3441fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
3451fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Texture *getTargetTexture(GLenum target) const;
3461fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Texture2D *getTexture2D() const;
3471fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    TextureCubeMap *getTextureCubeMap() const;
3481fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Texture3D *getTexture3D() const;
3491fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Texture2DArray *getTexture2DArray() const;
3501fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
351667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    Buffer *getGenericUniformBuffer();
352667a29cf4c8dc2d0ccafd3b0464d2e6b01d087bcshannon.woods%transgaming.com@gtempaccount.com    Buffer *getGenericTransformFeedbackBuffer();
3535117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    Buffer *getCopyReadBuffer();
3545117188c23be8525da72c7672ff26ce7363824bbshannon.woods%transgaming.com@gtempaccount.com    Buffer *getCopyWriteBuffer();
355c926e5f1808efd73b617ac0f204f1455cf8f600dshannon.woods%transgaming.com@gtempaccount.com    Buffer *getPixelPackBuffer();
356c926e5f1808efd73b617ac0f204f1455cf8f600dshannon.woods%transgaming.com@gtempaccount.com    Buffer *getPixelUnpackBuffer();
3571fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Texture *getSamplerTexture(unsigned int sampler, TextureType type) const;
3581fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill
3591fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    Framebuffer *getTargetFramebuffer(GLenum target) const;
3601fc7e2c5961207aa2bd1a99978d661b4cbcbf144Jamie Madill    GLuint getTargetFramebufferHandle(GLenum target) const;
361a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    Framebuffer *getReadFramebuffer();
362a27ff1eeaf40f6d509ad8ec978f27f9fd55c4315daniel@transgaming.com    Framebuffer *getDrawFramebuffer();
36357a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    VertexArray *getCurrentVertexArray() const;
364c8058451c87ec298683bf484813016b20bf36777Geoff Lang    TransformFeedback *getCurrentTransformFeedback() const;
3654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
366dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    bool isSampler(GLuint samplerName) const;
367dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill
368893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    void getBooleanv(GLenum pname, GLboolean *params);
369893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    void getFloatv(GLenum pname, GLfloat *params);
370893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    void getIntegerv(GLenum pname, GLint *params);
371893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    void getInteger64v(GLenum pname, GLint64 *params);
372777f26727bd71c435f93387fd593e3790544bb49daniel@transgaming.com
3731b2fb85341de62622377aee456523f9805818955Shannon Woods    bool getIndexedIntegerv(GLenum target, GLuint index, GLint *data);
3741b2fb85341de62622377aee456523f9805818955Shannon Woods    bool getIndexedInteger64v(GLenum target, GLuint index, GLint64 *data);
3751b2fb85341de62622377aee456523f9805818955Shannon Woods
376777f26727bd71c435f93387fd593e3790544bb49daniel@transgaming.com    bool getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams);
3771b2fb85341de62622377aee456523f9805818955Shannon Woods    bool getIndexedQueryParameterInfo(GLenum target, GLenum *type, unsigned int *numParams);
378777f26727bd71c435f93387fd593e3790544bb49daniel@transgaming.com
3794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void clear(GLbitfield mask);
38042359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang    void clearBufferfv(GLenum buffer, int drawbuffer, const float *values);
38142359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang    void clearBufferuiv(GLenum buffer, int drawbuffer, const unsigned int *values);
38242359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang    void clearBufferiv(GLenum buffer, int drawbuffer, const int *values);
38342359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang    void clearBufferfi(GLenum buffer, int drawbuffer, float depth, int stencil);
38442359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang
38542359ca9f0b51aca23f07439109bd28a83c7f998Geoff Lang    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei *bufSize, void* pixels);
3868ca9c6e7cef35ce53b72f30c64cf0bd10662b964daniel@transgaming.com    void drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances);
3878ca9c6e7cef35ce53b72f30c64cf0bd10662b964daniel@transgaming.com    void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instances);
3880d86aa7bc27a9185e74317d4c1362bf8af77c457daniel@transgaming.com    void sync(bool block);   // flush/finish
3894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void recordInvalidEnum();
3914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void recordInvalidValue();
3924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void recordInvalidOperation();
3934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void recordOutOfMemory();
3944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void recordInvalidFramebufferOperation();
3954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
3964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    GLenum getError();
39717f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com    GLenum getResetStatus();
3984ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com    virtual bool isResetNotificationEnabled();
3994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
400daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com    virtual int getClientVersion() const;
401daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com
4029549bead5dc8bb07a21296ea8bea97939285c699daniel@transgaming.com    int getMajorShaderModel() const;
40313be3e43d5ec86021a920550df137d8de7f120f4daniel@transgaming.com    float getMaximumPointSize() const;
404dfd5702063edc24b22b5a333e698b3c2d12798fcdaniel@transgaming.com    unsigned int getMaximumCombinedTextureImageUnits() const;
40534089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com    unsigned int getMaximumCombinedUniformBufferBindings() const;
4065d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com    int getMaximumRenderbufferDimension() const;
407c1fdf6baa488d6bf4a16d68c5d83caf2c95563dcshannon.woods%transgaming.com@gtempaccount.com    int getMaximum2DTextureDimension() const;
4085d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com    int getMaximumCubeTextureDimension() const;
409c1fdf6baa488d6bf4a16d68c5d83caf2c95563dcshannon.woods%transgaming.com@gtempaccount.com    int getMaximum3DTextureDimension() const;
410a98a8111a4b82a2715de171fcf2c7417a9cbfc6fshannon.woods%transgaming.com@gtempaccount.com    int getMaximum2DArrayTextureLayers() const;
411ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int getMaximum2DTextureLevel() const;
412ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int getMaximumCubeTextureLevel() const;
413ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int getMaximum3DTextureLevel() const;
414ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int getMaximum2DArrayTextureLevel() const;
41589ae1133850885c5812a78e9f8d00447acfcbd55shannon.woods%transgaming.com@gtempaccount.com    unsigned int getMaximumRenderTargets() const;
4161f135d86ab03ef260de7d653625f916644ddd747daniel@transgaming.com    GLsizei getMaxSupportedSamples() const;
417005df41f8900641ed1df60700c8e2eca659a33cbGeoff Lang    GLsizei getMaxSupportedFormatSamples(GLenum internalFormat) const;
418005df41f8900641ed1df60700c8e2eca659a33cbGeoff Lang    GLsizei getNumSampleCounts(GLenum internalFormat) const;
419005df41f8900641ed1df60700c8e2eca659a33cbGeoff Lang    void getSampleCounts(GLenum internalFormat, GLsizei bufSize, GLint *params) const;
42034089354b04a78dc6a6c0bda15b4757a8f9a0401shannon.woods%transgaming.com@gtempaccount.com    unsigned int getMaxTransformFeedbackBufferBindings() const;
42197c3d501704adb4b41a0ef7374f684fb762ee11dshannonwoods@chromium.org    GLintptr getUniformBufferOffsetAlignment() const;
422302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org    const char *getCombinedExtensionsString() const;
423302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org    const char *getExtensionString(const GLuint index) const;
424302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org    unsigned int getNumExtensions() const;
425c23ff6439312f2c9e52742d2115f62ad665a6582daniel@transgaming.com    const char *getRendererString() const;
426d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    bool supportsEventQueries() const;
42786bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    bool supportsOcclusionQueries() const;
428bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com    bool supportsBGRATextures() const;
42950c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool supportsDXT1Textures() const;
43050c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool supportsDXT3Textures() const;
43150c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool supportsDXT5Textures() const;
432bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat32Textures() const;
433bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat32LinearFilter() const;
434bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat32RenderableTextures() const;
435bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat16Textures() const;
436bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat16LinearFilter() const;
437bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool supportsFloat16RenderableTextures() const;
438ed828e5b2acc9cb0c6ea30416919483b45cf911adaniel@transgaming.com    bool supportsLuminanceTextures() const;
439ed828e5b2acc9cb0c6ea30416919483b45cf911adaniel@transgaming.com    bool supportsLuminanceAlphaTextures() const;
440632192dd8098d303fbf4d66f5d61c7363039a818Geoff Lang    bool supportsRGTextures() const;
4411c49f79dd58f44e2192cf9137cfbe8109c34953bdaniel@transgaming.com    bool supportsDepthTextures() const;
44283921386363c71f582abd3e13d5f4d5f9d47cc86daniel@transgaming.com    bool supports32bitIndices() const;
4434f9ef0d66706a4bc3e467f2f9c49690b353c23fddaniel@transgaming.com    bool supportsNonPower2Texture() const;
444c6f7f9d504cdc62773a73114c1a202d1bade4ffcdaniel@transgaming.com    bool supportsInstancing() const;
44507ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    bool supportsTextureFilterAnisotropy() const;
446b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    bool supportsPBOs() const;
44707ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com
448893ab0878d3358c45ced6a6fb048ea048e1faa97Jamie Madill    void getCurrentReadFormatType(GLenum *internalFormat, GLenum *format, GLenum *type);
44942944b02334905a221eaf15f4f3d14747a60ee91daniel@transgaming.com
45007ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    float getTextureMaxAnisotropy() const;
4513e4c6004be276d5ec4a768d11f6b2f34b90450fcdaniel@transgaming.com
452758d5b2158ed4df145974c475df68a35bf476a00Geoff Lang    void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
453758d5b2158ed4df145974c475df68a35bf476a00Geoff Lang                         GLbitfield mask, GLenum filter);
4544cbc590fb59d7211ebb59b9bcfcc36f3880009d9daniel@transgaming.com
455d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org    void invalidateFrameBuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments,
456d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org                               GLint x, GLint y, GLsizei width, GLsizei height);
457d63ef891baa92ae174fbaa1be548e4c2292dfba8shannonwoods@chromium.org
4587a5f738bcf0773177a533c73bd51330a353e4004Jamie Madill    bool hasMappedBuffer(GLenum target) const;
4597a5f738bcf0773177a533c73bd51330a353e4004Jamie Madill
4602e559bbc134bc77c32c7ee0961154ca4639d8bafJamie Madill    rx::Renderer *getRenderer() { return mRenderer; }
4612e559bbc134bc77c32c7ee0961154ca4639d8bafJamie Madill
4624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com  private:
4634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(Context);
4644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
46543b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    // TODO: std::array may become unavailable using older versions of GCC
46643b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    typedef std::array<unsigned int, IMPLEMENTATION_MAX_FRAMEBUFFER_ATTACHMENTS> FramebufferTextureSerialArray;
46743b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang
4681298518804934fac7f8ecd37ad58a5ac100cff36daniel@transgaming.com    bool applyRenderTarget(GLenum drawMode, bool ignoreViewport);
469d4a35179bdf3b2ddf4457f0b3861f4e7d418989edaniel@transgaming.com    void applyState(GLenum drawMode);
4704c5c6bbb82f96de2d3abe0c7c7c7d72fba5217c9Geoff Lang    void applyShaders(ProgramBinary *programBinary, bool transformFeedbackActive);
47143b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    void applyTextures(SamplerType shaderType, Texture *textures[], TextureType *textureTypes, SamplerState *samplers,
47243b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang                       size_t textureCount, const FramebufferTextureSerialArray& framebufferSerials,
47343b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang                       size_t framebufferSerialCount);
4741bddfb984b4ce6f8422a877097e60aca956f5661shannonwoods@chromium.org    bool applyUniformBuffers();
475eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang    bool applyTransformFeedbackBuffers();
476eeba6e1e88a04ab30db442c2af77bf53034ef332Geoff Lang    void markTransformFeedbackUsage();
477d4a35179bdf3b2ddf4457f0b3861f4e7d418989edaniel@transgaming.com
4784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void detachBuffer(GLuint buffer);
4794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void detachTexture(GLuint texture);
4804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void detachFramebuffer(GLuint framebuffer);
4814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    void detachRenderbuffer(GLuint renderbuffer);
48257a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    void detachVertexArray(GLuint vertexArray);
483c8058451c87ec298683bf484813016b20bf36777Geoff Lang    void detachTransformFeedback(GLuint transformFeedback);
484dc35604b10728a6d85ba8dba7380ed30a92d6850Jamie Madill    void detachSampler(GLuint sampler);
4854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
48643b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    void generateSwizzles(Texture *textures[], size_t count);
48743b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    size_t getCurrentTexturesAndSamplerStates(ProgramBinary *programBinary, SamplerType type, Texture **outTextures,
48843b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang                                              TextureType *outTextureTypes, SamplerState *outSamplers);
4890e64dd6dc05a4d3e31f6cbc69ceeafc4a863a65edaniel@transgaming.com    Texture *getIncompleteTexture(TextureType type);
49012d5407ec2fd0725b1e0cae5af084056288c1e82daniel@transgaming.com
491087e57890abbf89bc36e8769abdb1354ba6aeb06daniel@transgaming.com    bool skipDraw(GLenum drawMode);
492ace5e6635884b86afb3997ab21e29b9af92e0c81daniel@transgaming.com
493c23ff6439312f2c9e52742d2115f62ad665a6582daniel@transgaming.com    void initExtensionString();
494c23ff6439312f2c9e52742d2115f62ad665a6582daniel@transgaming.com    void initRendererString();
495c23ff6439312f2c9e52742d2115f62ad665a6582daniel@transgaming.com
49643b004269af441999f2535cd1a9e7bb45e945b08Geoff Lang    size_t getBoundFramebufferTextureSerials(FramebufferTextureSerialArray *outSerialArray);
497cdf22f94acaf86ebfb02e123deafcb41010cfccfGeoff Lang
498dedd1a0f6c43d9db06537c782982090030270a45daniel@transgaming.com    rx::Renderer *const mRenderer;
4994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
500daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com    int mClientVersion;
501daea4b4584cdbd8c82dd9946eb07a32ab2f278b7shannon.woods%transgaming.com@gtempaccount.com
502baa7451e3545bdfcf0e4c640a23a474e394446d9daniel@transgaming.com    State mState;
503428d15873f44c7da878da9bb05da0276a6f7c1eedaniel@transgaming.com
5044e3bad4e639732bab6787aca9de5aa5ca3d3496aapatrick@chromium.org    BindingPointer<Texture2D> mTexture2DZero;
5054e3bad4e639732bab6787aca9de5aa5ca3d3496aapatrick@chromium.org    BindingPointer<TextureCubeMap> mTextureCubeMapZero;
506c416e1cc09f1404d3dbcf23cd55956d37ebe67d2shannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Texture3D> mTexture3DZero;
50790dbc44c79052a9ceaab2c782a67e7d149da5385shannon.woods%transgaming.com@gtempaccount.com    BindingPointer<Texture2DArray> mTexture2DArrayZero;
508ff8bdfb065ddd9202cc27df894ad39f1a024fdd4apatrick@chromium.org
5099b8f92ea05957ca90bbff3fe4c56e8ec7772b131Geoff Lang    typedef std::unordered_map<GLuint, Framebuffer*> FramebufferMap;
510ff8bdfb065ddd9202cc27df894ad39f1a024fdd4apatrick@chromium.org    FramebufferMap mFramebufferMap;
5111a23334f9536101cb777451bd6e5b9f13dd5c818benvanik@google.com    HandleAllocator mFramebufferHandleAllocator;
5124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
5139b8f92ea05957ca90bbff3fe4c56e8ec7772b131Geoff Lang    typedef std::unordered_map<GLuint, FenceNV*> FenceNVMap;
51433dc84394ba08700d700a3da692e8de18433a031Jamie Madill    FenceNVMap mFenceNVMap;
51533dc84394ba08700d700a3da692e8de18433a031Jamie Madill    HandleAllocator mFenceNVHandleAllocator;
516d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
5179b8f92ea05957ca90bbff3fe4c56e8ec7772b131Geoff Lang    typedef std::unordered_map<GLuint, Query*> QueryMap;
51886bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    QueryMap mQueryMap;
51986bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    HandleAllocator mQueryHandleAllocator;
52086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com
5219b8f92ea05957ca90bbff3fe4c56e8ec7772b131Geoff Lang    typedef std::unordered_map<GLuint, VertexArray*> VertexArrayMap;
52257a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    VertexArrayMap mVertexArrayMap;
52357a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill    HandleAllocator mVertexArrayHandleAllocator;
52457a8972e5ddf7611860d9767c8aed4793c3929afJamie Madill
525c8058451c87ec298683bf484813016b20bf36777Geoff Lang    BindingPointer<TransformFeedback> mTransformFeedbackZero;
526c8058451c87ec298683bf484813016b20bf36777Geoff Lang    typedef std::unordered_map<GLuint, TransformFeedback*> TransformFeedbackMap;
527c8058451c87ec298683bf484813016b20bf36777Geoff Lang    TransformFeedbackMap mTransformFeedbackMap;
528c8058451c87ec298683bf484813016b20bf36777Geoff Lang    HandleAllocator mTransformFeedbackAllocator;
529c8058451c87ec298683bf484813016b20bf36777Geoff Lang
530302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org    std::vector<std::string> mExtensionStringList;
531302df74cc22fdf426334aebd9dbad4d7b3df5be2shannonwoods@chromium.org    const char *mCombinedExtensionsString;
532ca1ac1f113e18815bab14a3465039bd57b41c10ddaniel@transgaming.com    const char *mRendererString;
533da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com
5340e64dd6dc05a4d3e31f6cbc69ceeafc4a863a65edaniel@transgaming.com    BindingPointer<Texture> mIncompleteTextures[TEXTURE_TYPE_COUNT];
53512d5407ec2fd0725b1e0cae5af084056288c1e82daniel@transgaming.com
5364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    // Recorded errors
5374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool mInvalidEnum;
5384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool mInvalidValue;
5394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool mInvalidOperation;
5404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool mOutOfMemory;
5414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com    bool mInvalidFramebufferOperation;
542159acdf5f6370e89f3deda77cd3752ad11d3f76cdaniel@transgaming.com
54309fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com    // Current/lost context flags
544159acdf5f6370e89f3deda77cd3752ad11d3f76cdaniel@transgaming.com    bool mHasBeenCurrent;
54509fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com    bool mContextLost;
54617f548cb6b08775353de38f468ba1ac58b668b6adaniel@transgaming.com    GLenum mResetStatus;
5474ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com    GLenum mResetStrategy;
5484ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com    bool mRobustAccess;
549296ca9cc4ad7c8891673d74cea7c75b8fe49bc92daniel@transgaming.com
550989c1c85b82277de2b080c0ce2174a668e1b96badaniel@transgaming.com    BindingPointer<ProgramBinary> mCurrentProgramBinary;
551040c4db30d2905762710d132e20a79ca261eacc3jbauman@chromium.org    Framebuffer *mBoundDrawFramebuffer;
5524fa08339e2f67491a1ed8af0862776c0e07b4a50daniel@transgaming.com
5539549bead5dc8bb07a21296ea8bea97939285c699daniel@transgaming.com    int mMajorShaderModel;
55413be3e43d5ec86021a920550df137d8de7f120f4daniel@transgaming.com    float mMaximumPointSize;
555af29cac91acdc574464e3966bf9da5c8cf24acd2daniel@transgaming.com    bool mSupportsVertexTexture;
5564f9ef0d66706a4bc3e467f2f9c49690b353c23fddaniel@transgaming.com    bool mSupportsNonPower2Texture;
557c6f7f9d504cdc62773a73114c1a202d1bade4ffcdaniel@transgaming.com    bool mSupportsInstancing;
5588ce2f8f8e9597c045e6cf0c150c9302e7f3466b6shannon.woods@transgaming.com    int  mMaxViewportDimension;
5595d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com    int  mMaxRenderbufferDimension;
560c1fdf6baa488d6bf4a16d68c5d83caf2c95563dcshannon.woods%transgaming.com@gtempaccount.com    int  mMax2DTextureDimension;
5615d752f29189bbeb3da84b66c7335192a4baf6528daniel@transgaming.com    int  mMaxCubeTextureDimension;
562c1fdf6baa488d6bf4a16d68c5d83caf2c95563dcshannon.woods%transgaming.com@gtempaccount.com    int  mMax3DTextureDimension;
563a98a8111a4b82a2715de171fcf2c7417a9cbfc6fshannon.woods%transgaming.com@gtempaccount.com    int  mMax2DArrayTextureLayers;
564ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int  mMax2DTextureLevel;
565ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int  mMaxCubeTextureLevel;
566ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int  mMax3DTextureLevel;
567ce6356958ba86c2b09e62e1250cabd6bab16a082Geoff Lang    int  mMax2DArrayTextureLevel;
56807ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    float mMaxTextureAnisotropy;
569d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    bool mSupportsEventQueries;
57086bdb824d516091ba1316675576aa8f511a0fd17daniel@transgaming.com    bool mSupportsOcclusionQueries;
571bec04bf43b2603f33a84c6eb6b6fa4b13ad10161shannon.woods@transgaming.com    bool mSupportsBGRATextures;
57250c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool mSupportsDXT1Textures;
57350c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool mSupportsDXT3Textures;
57450c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    bool mSupportsDXT5Textures;
575bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat32Textures;
576bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat32LinearFilter;
577bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat32RenderableTextures;
578bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat16Textures;
579bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat16LinearFilter;
580bbeffbb6772d2c1e324e7f8880ee14d992f464a6daniel@transgaming.com    bool mSupportsFloat16RenderableTextures;
581ed828e5b2acc9cb0c6ea30416919483b45cf911adaniel@transgaming.com    bool mSupportsLuminanceTextures;
582ed828e5b2acc9cb0c6ea30416919483b45cf911adaniel@transgaming.com    bool mSupportsLuminanceAlphaTextures;
583632192dd8098d303fbf4d66f5d61c7363039a818Geoff Lang    bool mSupportsRGTextures;
5841c49f79dd58f44e2192cf9137cfbe8109c34953bdaniel@transgaming.com    bool mSupportsDepthTextures;
58583921386363c71f582abd3e13d5f4d5f9d47cc86daniel@transgaming.com    bool mSupports32bitIndices;
58607ab841a88e2779dec5d5a347a8403c7d84f28e8daniel@transgaming.com    bool mSupportsTextureFilterAnisotropy;
587b3801744ed9df17a7d8d290e203938818ad90addShannon Woods    bool mSupportsPBOs;
58850c526d210cb65f66e2ad6b25cacdacc41e10796gman@chromium.org    int mNumCompressedTextureFormats;
589a79f9d18cba5a9c4b564d3d2f777b585f61f19b0daniel@transgaming.com
590da13f3e902a857ce2b9a6420347335de05696b08daniel@transgaming.com    ResourceManager *mResourceManager;
5914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com};
5924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com}
5934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com
5944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com#endif   // INCLUDE_CONTEXT_H_
595