OgreGLES2StateCacheManagerImp.h
Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright (c) 2000-2013 Torus Knot Software Ltd
00008 
00009 Permission is hereby granted, free of charge, to any person obtaining a copy
00010 of this software and associated documentation files (the "Software"), to deal
00011 in the Software without restriction, including without limitation the rights
00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00013 copies of the Software, and to permit persons to whom the Software is
00014 furnished to do so, subject to the following conditions:
00015 
00016 The above copyright notice and this permission notice shall be included in
00017 all copies or substantial portions of the Software.
00018 
00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00025 THE SOFTWARE.
00026 -----------------------------------------------------------------------------
00027 */
00028 
00029 #ifndef __GLES2StateCacheManagerImp_H__
00030 #define __GLES2StateCacheManagerImp_H__
00031 
00032 #include "OgreGLES2Prerequisites.h"
00033 
00034 typedef Ogre::GeneralAllocatedObject StateCacheAlloc;
00035 
00036 namespace Ogre
00037 {
00041     class _OgreGLES2Export GLES2StateCacheManagerImp : public StateCacheAlloc
00042     {
00043     private:
00044         typedef HashMap<GLenum, GLuint> BindBufferMap;
00045         typedef HashMap<GLenum, GLint> TexParameteriMap;
00046         typedef HashMap<GLenum, GLfloat> TexParameterfMap;
00047 
00048         struct TextureUnitParams
00049         {
00050             ~TextureUnitParams()
00051             {
00052                 mTexParameteriMap.clear();
00053                 mTexParameterfMap.clear();
00054             }
00055 
00056             TexParameteriMap mTexParameteriMap;
00057             TexParameterfMap mTexParameterfMap;
00058         };
00059 
00060         typedef HashMap<GLuint, TextureUnitParams> TexUnitsMap;
00061 
00062         /* These variables are used for caching OpenGL state.
00063          They are cached because state changes can be quite expensive,
00064          which is especially important on mobile or embedded systems.
00065          */
00066 
00068         BindBufferMap mActiveBufferMap;
00070         TexUnitsMap mTexUnitsMap;
00072         vector<GLenum>::type mEnableVector;
00074         vector<GLclampf>::type mClearColour;
00076         vector<GLboolean>::type mColourMask;
00078         vector<GLuint>::type mEnabledVertexAttribs;
00080         GLboolean mDepthMask;
00082         GLenum mPolygonMode;
00084         GLenum mBlendEquation;
00086         GLenum mBlendFuncSource;
00088         GLenum mBlendFuncDest;
00090         GLenum mCullFace;
00092         GLenum mDepthFunc;
00094         GLuint mStencilMask;
00096         GLuint mLastBoundTexID;
00098         GLenum mActiveTextureUnit;
00100         unsigned int mDiscardBuffers;
00102         GLclampf mClearDepth;
00103         
00104     public:
00105         GLES2StateCacheManagerImp(void);
00106         ~GLES2StateCacheManagerImp(void);
00107         
00109         void initializeCache();
00110         
00112         void clearCache();
00113         
00115         void bindGLBuffer(GLenum target, GLuint buffer, GLenum attach = 0, bool force = false);
00116         
00118         void deleteGLBuffer(GLenum target, GLuint buffer, GLenum attach = 0, bool force = false);
00119         
00121         void bindGLTexture(GLenum target, GLuint texture);
00122         
00124         void setTexParameteri(GLenum target, GLenum pname, GLint param);
00125 
00127         void setTexParameterf(GLenum target, GLenum pname, GLfloat params);
00128 
00130         void getTexParameterfv(GLenum target, GLenum pname, GLfloat *params);
00131 
00133         void invalidateStateForTexture(GLuint texture);
00134 
00136         bool activateGLTextureUnit(size_t unit);
00137         
00139         GLenum getBlendEquation(void) const { return mBlendEquation; }
00140         
00142         void setBlendEquation(GLenum eq);
00143         
00145         void setBlendFunc(GLenum source, GLenum dest);
00146         
00148         GLboolean getDepthMask(void) const { return mDepthMask; }
00149         
00151         void setDepthMask(GLboolean mask);
00152         
00154         GLenum getDepthFunc(void) const { return mDepthFunc; }
00155         
00157         void setDepthFunc(GLenum func);
00158         
00160         GLclampf getClearDepth(void) const { return mClearDepth; }
00161         
00163         void setClearDepth(GLclampf depth);
00164         
00166         void setClearColour(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
00167         
00169         vector<GLboolean>::type & getColourMask(void) { return mColourMask; }
00170         
00172         void setColourMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
00173         
00175         GLuint getStencilMask(void) const { return mStencilMask; }
00176         
00178         void setStencilMask(GLuint mask);
00179         
00181         void setEnabled(GLenum flag);
00182         
00184         void setDisabled(GLenum flag);
00185 
00187         void setVertexAttribEnabled(GLuint attrib);
00188 
00190         void setVertexAttribDisabled(GLuint attrib);
00191 
00193         unsigned int getDiscardBuffers(void) const { return mDiscardBuffers; }
00194         
00196         void setDiscardBuffers(unsigned int flags) { mDiscardBuffers = flags; }
00197         
00199         GLenum getPolygonMode(void) const { return mPolygonMode; }
00200         
00202         void setPolygonMode(GLenum mode) { mPolygonMode = mode; }
00203         
00205         GLenum getCullFace(void) const { return mCullFace; }
00206         
00208         void setCullFace(GLenum face);
00209     };
00210 }
00211 
00212 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:42