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