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-2012 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 00035 namespace Ogre { 00036 00037 class GLSLESGpuProgram; 00038 00040 struct GLUniformReference 00041 { 00043 GLint mLocation; 00045 GpuProgramType mSourceProgType; 00047 const GpuConstantDefinition* mConstantDef; 00048 }; 00049 00050 typedef vector<GLUniformReference>::type GLUniformReferenceList; 00051 typedef GLUniformReferenceList::iterator GLUniformReferenceIterator; 00052 00057 class _OgreGLES2Export GLSLESProgramCommon 00058 { 00059 protected: 00061 GLUniformReferenceList mGLUniformReferences; 00062 00064 GLSLESGpuProgram* mVertexProgram; 00066 GLSLESGpuProgram* mFragmentProgram; 00068 bool mUniformRefsBuilt; 00070 GLuint mGLProgramHandle; 00072 GLint mLinked; 00074 bool mTriedToLinkAndFailed; 00076 bool mSkeletalAnimation; 00077 00079 void buildGLUniformReferences(void); 00080 typedef set<GLuint>::type AttributeSet; 00081 00083 GLint mCustomAttributesIndexes[VES_COUNT][OGRE_MAX_TEXTURE_COORD_SETS]; 00085 #define NULL_CUSTOM_ATTRIBUTES_INDEX -2 00086 00087 #define NOT_FOUND_CUSTOM_ATTRIBUTES_INDEX -1 00088 00089 Ogre::String getCombinedName(void); 00091 void getMicrocodeFromCache(void); 00093 virtual void compileAndLink(void) = 0; 00095 virtual void _useProgram(void) = 0; 00096 00097 typedef map<String, VertexElementSemantic>::type SemanticToStringMap; 00098 SemanticToStringMap mSemanticTypeMap; 00099 00100 VertexElementSemantic getAttributeSemanticEnum(String type); 00101 const char * getAttributeSemanticString(VertexElementSemantic semantic); 00102 00103 public: 00105 GLSLESProgramCommon(GLSLESGpuProgram* vertexProgram, GLSLESGpuProgram* fragmentProgram); 00106 virtual ~GLSLESProgramCommon(void); 00107 00110 virtual void activate(void) = 0; 00111 00115 virtual void updateUniforms(GpuProgramParametersSharedPtr params, uint16 mask, GpuProgramType fromProgType) = 0; 00119 virtual void updatePassIterationUniforms(GpuProgramParametersSharedPtr params) = 0; 00121 GLuint getGLProgramHandle(void) const { return mGLProgramHandle; } 00128 void setSkeletalAnimationIncluded(bool included) { mSkeletalAnimation = included; } 00129 00136 bool isSkeletalAnimationIncluded(void) const { return mSkeletalAnimation; } 00137 00139 virtual GLint getAttributeIndex(VertexElementSemantic semantic, uint index); 00141 bool isAttributeValid(VertexElementSemantic semantic, uint index); 00142 00143 GLSLESGpuProgram* getVertexProgram(void) const { return mVertexProgram; } 00144 GLSLESGpuProgram* getFragmentProgram(void) const { return mFragmentProgram; } 00145 }; 00146 } 00147 00148 #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 Fri May 25 2012 21:48:50