1 /* 2 ----------------------------------------------------------------------------- 3 This source file is part of OGRE 4 (Object-oriented Graphics Rendering Engine) 5 For the latest info, see http://www.ogre3d.org/ 6 7 Copyright (c) 2000-2013 Torus Knot Software Ltd 8 9 Permission is hereby granted, free of charge, to any person obtaining a copy 10 of this software and associated documentation files (the "Software"), to deal 11 in the Software without restriction, including without limitation the rights 12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 copies of the Software, and to permit persons to whom the Software is 14 furnished to do so, subject to the following conditions: 15 16 The above copyright notice and this permission notice shall be included in 17 all copies or substantial portions of the Software. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 THE SOFTWARE. 26 ----------------------------------------------------------------------------- 27 */ 28 29 #ifndef __GLES2NullStateCacheManagerImp_H__ 30 #define __GLES2NullStateCacheManagerImp_H__ 31 32 #include "OgreGLES2Prerequisites.h" 33 34 typedef Ogre::GeneralAllocatedObject StateCacheAlloc; 35 36 namespace Ogre 37 { 38 /** An in memory cache of the OpenGL ES state. 39 @see GLES2StateCacheManager 40 */ 41 class GLES2StateCacheManagerImp : public StateCacheAlloc 42 { 43 private: 44 /// Stores the current clear colour 45 vector<GLclampf>::type mClearColour; 46 /// Stores the current colour write mask 47 vector<GLboolean>::type mColourMask; 48 /// Stores the current depth write mask 49 GLboolean mDepthMask; 50 /// Stores the current polygon rendering mode 51 GLenum mPolygonMode; 52 /// Stores the current blend equation 53 GLenum mBlendEquation; 54 /// Stores the current face culling setting 55 GLenum mCullFace; 56 /// Stores the current depth test function 57 GLenum mDepthFunc; 58 /// Stores the current stencil mask 59 GLuint mStencilMask; 60 /// Stores the currently active texture unit 61 unsigned char mActiveTextureUnit; 62 /// Mask of buffers who contents can be discarded if GL_EXT_discard_framebuffer is supported 63 unsigned int mDiscardBuffers; 64 /// Stores the current depth clearing colour 65 GLclampf mClearDepth; 66 67 public: 68 GLES2StateCacheManagerImp(void); 69 ~GLES2StateCacheManagerImp(void); 70 71 /// See GLES2StateCacheManager.initializeCache. 72 void initializeCache(); 73 74 /// See GLES2StateCacheManager.clearCache. 75 void clearCache(); 76 77 /// See GLES2StateCacheManager.bindGLBuffer. 78 void bindGLBuffer(GLenum target, GLuint buffer, bool force = false); 79 80 /// See GLES2StateCacheManager.deleteGLBuffer. 81 void deleteGLBuffer(GLenum target, GLuint buffer, bool force = false); 82 83 /// See GLES2StateCacheManager.bindGLTexture. 84 void bindGLTexture(GLenum target, GLuint texture); 85 86 /// See GLES2StateCacheManager.invalidateStateForTexture. 87 void invalidateStateForTexture(GLuint texture); 88 89 /// See GLES2StateCacheManager.setTexParameteri. 90 void setTexParameteri(GLenum target, GLenum pname, GLint param); 91 92 /// See GLES2StateCacheManager.setTexParameterf. 93 void setTexParameterf(GLenum target, GLenum pname, GLfloat params); 94 95 /// See GLES2StateCacheManager.getTexParameterfv. 96 void getTexParameterfv(GLenum target, GLenum pname, GLfloat *params); 97 98 /// See GLES2StateCacheManager.activateGLTextureUnit. 99 bool activateGLTextureUnit(unsigned char unit); 100 101 /// See GLES2StateCacheManager.getBlendEquation. getBlendEquation(void)102 GLenum getBlendEquation(void) const { return mBlendEquation; } 103 104 /// See GLES2StateCacheManager.setBlendEquation. 105 void setBlendEquation(GLenum eq); 106 107 /// See GLES2StateCacheManager.setBlendFunc. 108 void setBlendFunc(GLenum source, GLenum dest); 109 110 /// See GLES2StateCacheManager.getDepthMask. getDepthMask(void)111 GLboolean getDepthMask(void) const { return mDepthMask; } 112 113 /// See GLES2StateCacheManager.setDepthMask. 114 void setDepthMask(GLboolean mask); 115 116 /// See GLES2StateCacheManager.getDepthFunc. getDepthFunc(void)117 GLenum getDepthFunc(void) const { return mDepthFunc; } 118 119 /// See GLES2StateCacheManager.setDepthFunc. 120 void setDepthFunc(GLenum func); 121 122 /// See GLES2StateCacheManager.getClearDepth. getClearDepth(void)123 GLclampf getClearDepth(void) const { return mClearDepth; } 124 125 /// See GLES2StateCacheManager.setClearDepth. 126 void setClearDepth(GLclampf depth); 127 128 /// See GLES2StateCacheManager.setClearColour. 129 void setClearColour(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); 130 131 /// See GLES2StateCacheManager.getColourMask. getColourMask(void)132 vector<GLboolean>::type & getColourMask(void) { return mColourMask; } 133 134 /// See GLES2StateCacheManager.setColourMask. 135 void setColourMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); 136 137 /// See GLES2StateCacheManager.getStencilMask. getStencilMask(void)138 GLuint getStencilMask(void) const { return mStencilMask; } 139 140 /// See GLES2StateCacheManager.setStencilMask. 141 void setStencilMask(GLuint mask); 142 143 /// See GLES2StateCacheManager.setEnabled. 144 void setEnabled(GLenum flag); 145 146 /// See GLES2StateCacheManager.setDisabled. 147 void setDisabled(GLenum flag); 148 149 /// See GLES2StateCacheManager.setVertexAttribEnabled. 150 void setVertexAttribEnabled(GLuint attrib); 151 152 /// See GLES2StateCacheManager.setVertexAttribDisabled. 153 void setVertexAttribDisabled(GLuint attrib); 154 155 /// See GLES2StateCacheManager.getDiscardBuffers. getDiscardBuffers(void)156 unsigned int getDiscardBuffers(void) const { return mDiscardBuffers; } 157 158 /// See GLES2StateCacheManager.setDiscardBuffers. setDiscardBuffers(unsigned int flags)159 void setDiscardBuffers(unsigned int flags) { mDiscardBuffers = flags; } 160 161 /// See GLES2StateCacheManager.getPolygonMode. getPolygonMode(void)162 GLenum getPolygonMode(void) const { return mPolygonMode; } 163 164 /// See GLES2StateCacheManager.setPolygonMode. setPolygonMode(GLenum mode)165 void setPolygonMode(GLenum mode) { mPolygonMode = mode; } 166 167 /// See GLES2StateCacheManager.getCullFace. getCullFace(void)168 GLenum getCullFace(void) const { return mCullFace; } 169 170 /// See GLES2StateCacheManager.setCullFace. 171 void setCullFace(GLenum face); 172 }; 173 } 174 175 #endif 176