OgreGLESStateCacheManagerImp.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 __GLESStateCacheManagerImp_H__
00030 #define __GLESStateCacheManagerImp_H__
00031 
00032 #include "OgreGLESPrerequisites.h"
00033 
00034 typedef Ogre::GeneralAllocatedObject StateCacheAlloc;
00035 
00036 namespace Ogre
00037 {
00041     class _OgreGLESExport GLESStateCacheManagerImp : public StateCacheAlloc
00042     {
00043     private:
00044         typedef HashMap<GLuint, GLuint> GLBindingMap;
00045         typedef HashMap<GLenum, GLint> TexParameteriMap;
00046         
00047         struct TextureUnitParams
00048         {
00049             ~TextureUnitParams()
00050             {
00051                 mTexParameteriMap.clear();
00052             }
00053             
00054             TexParameteriMap mTexParameteriMap;
00055         };
00056         
00057         typedef HashMap<GLuint, TextureUnitParams> TexUnitsMap;
00058         
00059         /* These variables are used for caching OpenGL state.
00060          They are cached because state changes can be quite expensive,
00061          which is especially important on mobile or embedded systems.
00062          */
00063         
00065         GLBindingMap mActiveBufferMap;
00067         GLBindingMap mActiveTextureMap;
00069         TexUnitsMap mTexUnitsMap;
00071         vector<GLenum>::type mEnableVector;
00073         vector<GLclampf>::type mClearColour;
00075         vector<GLboolean>::type mColourMask;
00077         GLboolean mDepthMask;
00079         GLenum mPolygonMode;
00081         GLenum mBlendEquation;
00083         GLenum mBlendFuncSrc;
00084         GLenum mBlendFuncDest;
00086         GLuint mLastBoundedTexID;
00088         GLenum mCullFace;
00090         GLenum mDepthFunc;
00092         GLuint mStencilMask;
00094         unsigned char mActiveTextureUnit;
00096         unsigned int mDiscardBuffers;
00098         GLclampf mClearDepth;
00099         
00100     public:
00101         GLESStateCacheManagerImp(void);
00102         ~GLESStateCacheManagerImp(void);
00103         
00105         void initializeCache();
00106         
00108         void clearCache();
00109         
00111         void bindGLBuffer(GLenum target, GLuint buffer, GLenum attach = 0, bool force = false);
00112         
00114         void deleteGLBuffer(GLenum target, GLuint buffer, GLenum attach = 0, bool force = false);
00115         
00117         void bindGLTexture(GLenum target, GLuint texture);
00118         
00120         void setTexParameteri(GLenum target, GLenum pname, GLint param);
00121         
00123         bool activateGLTextureUnit(unsigned char unit);
00124         
00126         GLenum getBlendEquation(void) const { return mBlendEquation; }
00127         
00129         void setBlendEquation(GLenum eq);
00130         
00132         void setBlendFunc(GLenum source, GLenum dest);
00133         
00135         GLboolean getDepthMask(void) const { return mDepthMask; }
00136         
00138         void setDepthMask(GLboolean mask);
00139         
00141         GLenum getDepthFunc(void) const { return mDepthFunc; }
00142         
00144         void setDepthFunc(GLenum func);
00145         
00147         GLclampf getClearDepth(void) const { return mClearDepth; }
00148         
00150         void setClearDepth(GLclampf depth);
00151         
00153         void setClearColour(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
00154         
00156         vector<GLboolean>::type & getColourMask(void) { return mColourMask; }
00157         
00159         void setColourMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
00160         
00162         GLuint getStencilMask(void) const { return mStencilMask; }
00163         
00165         void setStencilMask(GLuint mask);
00166         
00168         void setEnabled(GLenum flag);
00169         
00171         void setDisabled(GLenum flag);
00172         
00174         unsigned int getDiscardBuffers(void) const { return mDiscardBuffers; }
00175         
00177         void setDiscardBuffers(unsigned int flags) { mDiscardBuffers = flags; }
00178         
00180         GLenum getPolygonMode(void) const { return mPolygonMode; }
00181         
00183         void setPolygonMode(GLenum mode) { mPolygonMode = mode; }
00184         
00186         GLenum getCullFace(void) const { return mCullFace; }
00187         
00189         void setCullFace(GLenum face);
00190     };
00191 }
00192 
00193 #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