153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods//
253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods// Use of this source code is governed by a BSD-style license that can be
453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods// found in the LICENSE file.
553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods//
653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods// State.h: Defines the State class, encapsulating raw GL state
853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#ifndef LIBGLESV2_STATE_H_
1053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#define LIBGLESV2_STATE_H_
1153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
1253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "common/angleutils.h"
1353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "common/RefCountObject.h"
1453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/angletypes.h"
1553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/VertexAttribute.h"
1653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/Renderbuffer.h"
1753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/Texture.h"
1853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/TransformFeedback.h"
1953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/Program.h"
2053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#include "libGLESv2/Sampler.h"
2153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
2253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woodsnamespace gl
2353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods{
2453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woodsclass Query;
2553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woodsclass VertexArray;
2653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woodsclass Context;
2776b10c9a9735c27627065d9fe68f78374ef48934Geoff Langstruct Caps;
2853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
2953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woodsclass State
3053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods{
3153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods  public:
3253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    State();
3353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ~State();
3453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
3576b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    void initialize(const Caps& caps, GLuint clientVersion);
3676b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    void reset();
3776b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang
3853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setContext(Context *context) { mContext = context; }
3953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
4053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // State chunk getters
4153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const RasterizerState &getRasterizerState() const;
4253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const BlendState &getBlendState() const;
4353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const DepthStencilState &getDepthStencilState() const;
4453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
4553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Clear behavior setters & state parameter block generation function
4653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setClearColor(float red, float green, float blue, float alpha);
4753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setClearDepth(float depth);
4853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setClearStencil(int stencil);
4953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ClearParameters getClearParameters(GLbitfield mask) const;
5053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
5153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Write mask manipulation
5253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setColorMask(bool red, bool green, bool blue, bool alpha);
5353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDepthMask(bool mask);
5453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
5553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Discard toggle & query
5653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isRasterizerDiscardEnabled() const;
5753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setRasterizerDiscard(bool enabled);
5853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
5953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Face culling state manipulation
6053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isCullFaceEnabled() const;
6153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCullFace(bool enabled);
6253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCullMode(GLenum mode);
6353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setFrontFace(GLenum front);
6453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
6553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Depth test state manipulation
6653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isDepthTestEnabled() const;
6753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDepthTest(bool enabled);
6853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDepthFunc(GLenum depthFunc);
6953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDepthRange(float zNear, float zFar);
7053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void getDepthRange(float *zNear, float *zFar) const;
7153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
7253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Blend state manipulation
7353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isBlendEnabled() const;
7453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setBlend(bool enabled);
7553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha);
7653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setBlendColor(float red, float green, float blue, float alpha);
7753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setBlendEquation(GLenum rgbEquation, GLenum alphaEquation);
7853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const ColorF &getBlendColor() const;
7953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
8053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Stencil state maniupulation
8153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isStencilTestEnabled() const;
8253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilTest(bool enabled);
8353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilParams(GLenum stencilFunc, GLint stencilRef, GLuint stencilMask);
8453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilBackParams(GLenum stencilBackFunc, GLint stencilBackRef, GLuint stencilBackMask);
8553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilWritemask(GLuint stencilWritemask);
8653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilBackWritemask(GLuint stencilBackWritemask);
8753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilOperations(GLenum stencilFail, GLenum stencilPassDepthFail, GLenum stencilPassDepthPass);
8853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setStencilBackOperations(GLenum stencilBackFail, GLenum stencilBackPassDepthFail, GLenum stencilBackPassDepthPass);
8953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint getStencilRef() const;
9053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint getStencilBackRef() const;
9153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
9253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Depth bias/polygon offset state manipulation
9353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isPolygonOffsetFillEnabled() const;
9453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPolygonOffsetFill(bool enabled);
9553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPolygonOffsetParams(GLfloat factor, GLfloat units);
9653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
9753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Multisample coverage state manipulation
9853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isSampleAlphaToCoverageEnabled() const;
9953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setSampleAlphaToCoverage(bool enabled);
10053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isSampleCoverageEnabled() const;
10153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setSampleCoverage(bool enabled);
10253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setSampleCoverageParams(GLclampf value, bool invert);
10353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void getSampleCoverageParams(GLclampf *value, bool *invert);
10453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
10553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Scissor test state toggle & query
10653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isScissorTestEnabled() const;
10753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setScissorTest(bool enabled);
10853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setScissorParams(GLint x, GLint y, GLsizei width, GLsizei height);
10953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const Rectangle &getScissor() const;
11053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
11153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Dither state toggle & query
11253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isDitherEnabled() const;
11353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDither(bool enabled);
11453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
11553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Generic state toggle & query
11653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setEnableFeature(GLenum feature, bool enabled);
11753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool getEnableFeature(GLenum feature);
11853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
11953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Line width state setter
12053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setLineWidth(GLfloat width);
12153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
12253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Hint setters
12353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setGenerateMipmapHint(GLenum hint);
12453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setFragmentShaderDerivativeHint(GLenum hint);
12553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
12653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Viewport state setter/getter
12753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height);
12853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const Rectangle &getViewport() const;
12953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
13053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Texture binding & active texture unit manipulation
13153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setActiveSampler(unsigned int active);
13253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    unsigned int getActiveSampler() const;
13376b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    void setSamplerTexture(GLenum type, Texture *texture);
13476b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    Texture *getSamplerTexture(unsigned int sampler, GLenum type) const;
13576b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    GLuint getSamplerTextureId(unsigned int sampler, GLenum type) const;
13653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void detachTexture(GLuint texture);
13753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
13853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Sampler object binding manipulation
13953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setSamplerBinding(GLuint textureUnit, Sampler *sampler);
14053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getSamplerId(GLuint textureUnit) const;
14153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Sampler *getSampler(GLuint textureUnit) const;
14253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void detachSampler(GLuint sampler);
14353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
14453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Renderbuffer binding manipulation
14553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setRenderbufferBinding(Renderbuffer *renderbuffer);
14653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getRenderbufferId() const;
14753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Renderbuffer *getCurrentRenderbuffer();
14853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void detachRenderbuffer(GLuint renderbuffer);
14953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
15053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Framebuffer binding manipulation
15153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setReadFramebufferBinding(Framebuffer *framebuffer);
15253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setDrawFramebufferBinding(Framebuffer *framebuffer);
15353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Framebuffer *getTargetFramebuffer(GLenum target) const;
15453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Framebuffer *getReadFramebuffer();
15553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Framebuffer *getDrawFramebuffer();
15653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const Framebuffer *getReadFramebuffer() const;
15753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const Framebuffer *getDrawFramebuffer() const;
15853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool removeReadFramebufferBinding(GLuint framebuffer);
15953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool removeDrawFramebufferBinding(GLuint framebuffer);
16053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
16153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Vertex array object binding manipulation
16253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setVertexArrayBinding(VertexArray *vertexArray);
16353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getVertexArrayId() const;
16453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    VertexArray *getVertexArray() const;
16553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool removeVertexArrayBinding(GLuint vertexArray);
16653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
16753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Program binding manipulation
16853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCurrentProgram(GLuint programId, Program *newProgram);
16953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCurrentProgramBinary(ProgramBinary *binary);
17053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getCurrentProgramId() const;
17153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ProgramBinary *getCurrentProgramBinary() const;
17253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
17353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Transform feedback object (not buffer) binding manipulation
17453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setTransformFeedbackBinding(TransformFeedback *transformFeedback);
17553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    TransformFeedback *getCurrentTransformFeedback() const;
17653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void detachTransformFeedback(GLuint transformFeedback);
17753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
17853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Query binding manipulation
17953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool isQueryActive() const;
18053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setActiveQuery(GLenum target, Query *query);
18153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getActiveQueryId(GLenum target) const;
18253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Query *getActiveQuery(GLenum target) const;
18353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
18453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    //// Typed buffer binding point manipulation ////
18553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // GL_ARRAY_BUFFER
18653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setArrayBufferBinding(Buffer *buffer);
18753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getArrayBufferId() const;
18853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool removeArrayBufferBinding(GLuint buffer);
18953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
19053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // GL_UNIFORM_BUFFER - Both indexed and generic targets
19153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setGenericUniformBufferBinding(Buffer *buffer);
19253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintptr offset, GLsizeiptr size);
19353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getIndexedUniformBufferId(GLuint index) const;
19453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Buffer *getIndexedUniformBuffer(GLuint index) const;
19553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
19653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // GL_TRANSFORM_FEEDBACK_BUFFER - Both indexed and generic targets
19753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setGenericTransformFeedbackBufferBinding(Buffer *buffer);
19853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setIndexedTransformFeedbackBufferBinding(GLuint index, Buffer *buffer, GLintptr offset, GLsizeiptr size);
19953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getIndexedTransformFeedbackBufferId(GLuint index) const;
20053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Buffer *getIndexedTransformFeedbackBuffer(GLuint index) const;
20153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint getIndexedTransformFeedbackBufferOffset(GLuint index) const;
20253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
20353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // GL_COPY_[READ/WRITE]_BUFFER
20453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCopyReadBufferBinding(Buffer *buffer);
20553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setCopyWriteBufferBinding(Buffer *buffer);
20653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
20753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // GL_PIXEL[PACK/UNPACK]_BUFFER
20853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPixelPackBufferBinding(Buffer *buffer);
20953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPixelUnpackBufferBinding(Buffer *buffer);
21053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
21153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Retrieve typed buffer by target (non-indexed)
21253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Buffer *getTargetBuffer(GLenum target) const;
21353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
21453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Vertex attrib manipulation
21553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setEnableVertexAttribArray(unsigned int attribNum, bool enabled);
21653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setVertexAttribf(GLuint index, const GLfloat values[4]);
21753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setVertexAttribu(GLuint index, const GLuint values[4]);
21853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setVertexAttribi(GLuint index, const GLint values[4]);
21953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setVertexAttribState(unsigned int attribNum, Buffer *boundBuffer, GLint size, GLenum type,
22053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods                              bool normalized, bool pureInteger, GLsizei stride, const void *pointer);
22153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const VertexAttribute &getVertexAttribState(unsigned int attribNum) const;
22253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const VertexAttribCurrentValueData &getVertexAttribCurrentValue(unsigned int attribNum) const;
22353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const VertexAttribCurrentValueData *getVertexAttribCurrentValues() const;
22453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const void *getVertexAttribPointer(unsigned int attribNum) const;
22553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
22653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Pixel pack state manipulation
22753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPackAlignment(GLint alignment);
22853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint getPackAlignment() const;
22953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setPackReverseRowOrder(bool reverseRowOrder);
23053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool getPackReverseRowOrder() const;
23153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const PixelPackState &getPackState() const;
23253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
23353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // Pixel unpack state manipulation
23453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void setUnpackAlignment(GLint alignment);
23553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint getUnpackAlignment() const;
23653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    const PixelUnpackState &getUnpackState() const;
23753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
23853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    // State query functions
23953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void getBooleanv(GLenum pname, GLboolean *params);
24053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void getFloatv(GLenum pname, GLfloat *params);
24153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    void getIntegerv(GLenum pname, GLint *params);
24253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool getIndexedIntegerv(GLenum target, GLuint index, GLint *data);
24353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool getIndexedInteger64v(GLenum target, GLuint index, GLint64 *data);
24453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
245d9ba4f7318979e927c7a3320c5746c25381eae90Jamie Madill    bool hasMappedBuffer(GLenum target) const;
246d9ba4f7318979e927c7a3320c5746c25381eae90Jamie Madill
24753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods  private:
24853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    DISALLOW_COPY_AND_ASSIGN(State);
24953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
25053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Context *mContext;
25153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
25253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ColorF mColorClearValue;
25353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLclampf mDepthClearValue;
25453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    int mStencilClearValue;
25553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
25653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    RasterizerState mRasterizer;
25753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool mScissorTest;
25853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Rectangle mScissor;
25953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
26053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BlendState mBlend;
26153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ColorF mBlendColor;
26253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool mSampleCoverage;
26353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLclampf mSampleCoverageValue;
26453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    bool mSampleCoverageInvert;
26553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
26653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    DepthStencilState mDepthStencil;
26753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint mStencilRef;
26853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLint mStencilBackRef;
26953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
27053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLfloat mLineWidth;
27153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
27253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLenum mGenerateMipmapHint;
27353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLenum mFragmentShaderDerivativeHint;
27453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
27553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Rectangle mViewport;
27653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    float mNearZ;
27753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    float mFarZ;
27853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
27953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Buffer> mArrayBuffer;
28053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Framebuffer *mReadFramebuffer;
28153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    Framebuffer *mDrawFramebuffer;
28253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Renderbuffer> mRenderbuffer;
28353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    GLuint mCurrentProgramId;
28453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<ProgramBinary> mCurrentProgramBinary;
28553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
28653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    VertexAttribCurrentValueData mVertexAttribCurrentValues[MAX_VERTEX_ATTRIBS]; // From glVertexAttrib
28753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    VertexArray *mVertexArray;
28853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
28976b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    // Texture and sampler bindings
29076b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    size_t mActiveSampler;   // Active texture unit selector - GL_TEXTURE0
29176b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang
29276b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    typedef std::vector< BindingPointer<Texture> > TextureBindingVector;
29376b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    typedef std::map<GLenum, TextureBindingVector> TextureBindingMap;
29476b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    TextureBindingMap mSamplerTextures;
29576b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang
29676b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    typedef std::vector< BindingPointer<Sampler> > SamplerBindingVector;
29776b10c9a9735c27627065d9fe68f78374ef48934Geoff Lang    SamplerBindingVector mSamplers;
29853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
29953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    typedef std::map< GLenum, BindingPointer<Query> > ActiveQueryMap;
30053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    ActiveQueryMap mActiveQueries;
30153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
30253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Buffer> mGenericUniformBuffer;
30353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    OffsetBindingPointer<Buffer> mUniformBuffers[IMPLEMENTATION_MAX_COMBINED_SHADER_UNIFORM_BUFFERS];
30453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
30553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<TransformFeedback> mTransformFeedback;
30653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Buffer> mGenericTransformFeedbackBuffer;
30753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    OffsetBindingPointer<Buffer> mTransformFeedbackBuffers[IMPLEMENTATION_MAX_TRANSFORM_FEEDBACK_BUFFERS];
30853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
30953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Buffer> mCopyReadBuffer;
31053a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    BindingPointer<Buffer> mCopyWriteBuffer;
31153a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
31253a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    PixelUnpackState mUnpack;
31353a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods    PixelPackState mPack;
31453a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods};
31553a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
31653a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods}
31753a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
31853a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods#endif // LIBGLESV2_STATE_H_
31953a94a8238621e36e437975e7a17a91cf995aed9Shannon Woods
320