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 #ifndef __GLSLESProgramCommon_H__ 00029 #define __GLSLESProgramCommon_H__ 00030 00031 #include "OgreGLES2Prerequisites.h" 00032 #include "OgreGpuProgram.h" 00033 #include "OgreHardwareVertexBuffer.h" 00034 #include "OgreHardwareUniformBuffer.h" 00035 #include "OgreGLES2UniformCache.h" 00036 00037 namespace Ogre { 00038 00039 class GLSLESGpuProgram; 00040 00042 struct GLUniformReference 00043 { 00045 GLint mLocation; 00047 GpuProgramType mSourceProgType; 00049 const GpuConstantDefinition* mConstantDef; 00050 }; 00051 00052 typedef vector<GLUniformReference>::type GLUniformReferenceList; 00053 typedef GLUniformReferenceList::iterator GLUniformReferenceIterator; 00054 typedef vector<HardwareUniformBufferSharedPtr>::type GLUniformBufferList; 00055 00056 typedef GLUniformBufferList::iterator GLUniformBufferIterator; 00057 00062 class _OgreGLES2Export GLSLESProgramCommon 00063 { 00064 protected: 00066 GLUniformReferenceList mGLUniformReferences; 00068 GLUniformBufferList mGLUniformBufferReferences; 00069 00071 GLSLESGpuProgram* mVertexProgram; 00073 GLSLESGpuProgram* mFragmentProgram; 00074 GLES2UniformCache *mUniformCache; 00076 bool mUniformRefsBuilt; 00078 GLuint mGLProgramHandle; 00080 GLint mLinked; 00082 bool mTriedToLinkAndFailed; 00084 bool mSkeletalAnimation; 00085 00087 void buildGLUniformReferences(void); 00088 typedef set<GLuint>::type AttributeSet; 00089 00091 GLint mCustomAttributesIndexes[VES_COUNT][OGRE_MAX_TEXTURE_COORD_SETS]; 00093 #define NULL_CUSTOM_ATTRIBUTES_INDEX -2 00094 00095 #define NOT_FOUND_CUSTOM_ATTRIBUTES_INDEX -1 00096 00097 Ogre::String getCombinedName(void); 00099 void getMicrocodeFromCache(void); 00101 virtual void compileAndLink(void) = 0; 00103 virtual void _useProgram(void) = 0; 00104 00105 typedef map<String, VertexElementSemantic>::type SemanticToStringMap; 00106 SemanticToStringMap mSemanticTypeMap; 00107 00108 VertexElementSemantic getAttributeSemanticEnum(String type); 00109 const char * getAttributeSemanticString(VertexElementSemantic semantic); 00110 00111 public: 00113 GLSLESProgramCommon(GLSLESGpuProgram* vertexProgram, GLSLESGpuProgram* fragmentProgram); 00114 virtual ~GLSLESProgramCommon(void); 00115 00118 virtual void activate(void) = 0; 00119 00123 virtual void updateUniforms(GpuProgramParametersSharedPtr params, uint16 mask, GpuProgramType fromProgType) = 0; 00127 virtual void updateUniformBlocks(GpuProgramParametersSharedPtr params, uint16 mask, GpuProgramType fromProgType) = 0; 00131 virtual void updatePassIterationUniforms(GpuProgramParametersSharedPtr params) = 0; 00133 GLuint getGLProgramHandle(void) const { return mGLProgramHandle; } 00140 void setSkeletalAnimationIncluded(bool included) { mSkeletalAnimation = included; } 00141 00148 bool isSkeletalAnimationIncluded(void) const { return mSkeletalAnimation; } 00149 00151 virtual GLint getAttributeIndex(VertexElementSemantic semantic, uint index); 00153 bool isAttributeValid(VertexElementSemantic semantic, uint index); 00154 00155 GLSLESGpuProgram* getVertexProgram(void) const { return mVertexProgram; } 00156 GLSLESGpuProgram* getFragmentProgram(void) const { return mFragmentProgram; } 00157 GLES2UniformCache * getUniformCache(void) { return mUniformCache; } 00158 }; 00159 } 00160 00161 #endif // __GLSLESProgramCommon_H__
Copyright © 2012 Torus Knot Software Ltd

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Mon Jul 27 2020 13:40:43