00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://ogre.sourceforge.net/ 00006 00007 Copyright © 2000-2003 The OGRE Team 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 ----------------------------------------------------------------------------- 00024 */ 00025 #ifndef __GpuProgram_H_ 00026 #define __GpuProgram_H_ 00027 00028 // Precompiler options 00029 #include "OgrePrerequisites.h" 00030 #include "OgreResource.h" 00031 #include "OgreSharedPtr.h" 00032 #include "OgreIteratorWrappers.h" 00033 00034 namespace Ogre { 00035 00037 enum GpuProgramType 00038 { 00039 GPT_VERTEX_PROGRAM, 00040 GPT_FRAGMENT_PROGRAM 00041 }; 00042 00043 00055 class _OgreExport GpuProgramParameters 00056 { 00057 public: 00061 enum AutoConstantType 00062 { 00064 ACT_WORLD_MATRIX, 00066 ACT_WORLD_MATRIX_ARRAY_3x4, 00068 ACT_WORLD_MATRIX_ARRAY, 00070 ACT_VIEW_MATRIX, 00072 ACT_PROJECTION_MATRIX, 00074 ACT_VIEWPROJ_MATRIX, 00076 ACT_WORLDVIEW_MATRIX, 00078 ACT_WORLDVIEWPROJ_MATRIX, 00080 ACT_INVERSE_WORLD_MATRIX, 00082 ACT_INVERSE_WORLDVIEW_MATRIX, 00084 ACT_LIGHT_DIFFUSE_COLOUR, 00086 ACT_LIGHT_SPECULAR_COLOUR, 00088 ACT_LIGHT_ATTENUATION, 00090 ACT_LIGHT_POSITION, 00092 ACT_LIGHT_DIRECTION, 00094 ACT_LIGHT_POSITION_OBJECT_SPACE, 00096 ACT_LIGHT_DIRECTION_OBJECT_SPACE, 00101 ACT_LIGHT_DISTANCE_OBJECT_SPACE, 00105 ACT_SHADOW_EXTRUSION_DISTANCE, 00107 ACT_CAMERA_POSITION_OBJECT_SPACE, 00109 ACT_AMBIENT_LIGHT_COLOUR, 00111 ACT_TEXTURE_VIEWPROJ_MATRIX, 00113 ACT_CUSTOM 00114 }; 00116 class AutoConstantEntry 00117 { 00118 public: 00120 AutoConstantType paramType; 00122 size_t index; 00124 size_t data; 00125 00126 AutoConstantEntry(AutoConstantType theType, size_t theIndex, size_t theData) 00127 : paramType(theType), index(theIndex), data(theData) {} 00128 00129 }; 00134 struct RealConstantEntry 00135 { 00136 Real val[4]; 00137 bool isSet; 00138 RealConstantEntry() : isSet(false) {} 00139 }; 00144 struct IntConstantEntry 00145 { 00146 int val[4]; 00147 bool isSet; 00148 IntConstantEntry() : isSet(false) {} 00149 }; 00150 protected: 00151 // Constant lists 00152 typedef std::vector<RealConstantEntry> RealConstantList; 00153 typedef std::vector<IntConstantEntry> IntConstantList; 00154 // Auto parameter storage 00155 typedef std::vector<AutoConstantEntry> AutoConstantList; 00157 RealConstantList mRealConstants; 00159 IntConstantList mIntConstants; 00161 AutoConstantList mAutoConstants; 00163 typedef std::map<String, size_t> ParamNameMap; 00164 ParamNameMap mParamNameMap; 00166 bool mTransposeMatrices; 00168 bool mAutoAddParamName; 00169 00170 public: 00171 GpuProgramParameters(); 00172 ~GpuProgramParameters() {} 00173 00179 void setConstant(size_t index, const Vector4& vec); 00187 void setConstant(size_t index, const Vector3& vec); 00194 void setConstant(size_t index, const Matrix4& m); 00202 void setConstant(size_t index, const Matrix4* m, size_t numEntries); 00209 void setConstant(size_t index, const Real *val, size_t count); 00215 void setConstant(size_t index, const ColourValue& colour); 00216 00231 void setConstant(size_t index, const int *val, size_t count); 00232 00234 void resetRealConstants(void) { mRealConstants.clear(); } 00236 void resetIntConstants(void) { mIntConstants.clear(); } 00237 00238 typedef ConstVectorIterator<RealConstantList> RealConstantIterator; 00239 typedef ConstVectorIterator<IntConstantList> IntConstantIterator; 00241 RealConstantIterator getRealConstantIterator(void) const; 00243 IntConstantIterator getIntConstantIterator(void) const; 00244 00249 RealConstantEntry* getRealConstantEntry(const size_t index); 00254 IntConstantEntry* getIntConstantEntry(const size_t index); 00255 00259 RealConstantEntry* getNamedRealConstantEntry(const String& name); 00263 IntConstantEntry* getNamedIntConstantEntry(const String& name); 00265 size_t getRealConstantCount(void) const { return mRealConstants.size(); } 00267 size_t getIntConstantCount(void) const { return mIntConstants.size(); } 00269 bool hasRealConstantParams(void) const { return !(mRealConstants.empty()); } 00271 bool hasIntConstantParams(void) const { return !(mIntConstants.empty()); } 00272 00286 void setAutoConstant(size_t index, AutoConstantType acType, size_t extraInfo = 0); 00291 void setConstantFromTime(size_t index, Real factor); 00292 00294 void clearAutoConstants(void); 00295 typedef ConstVectorIterator<AutoConstantList> AutoConstantIterator; 00297 AutoConstantIterator getAutoConstantIterator(void) const; 00299 bool hasAutoConstants(void) const { return !(mAutoConstants.empty()); } 00301 void _updateAutoParamsNoLights(const AutoParamDataSource& source); 00303 void _updateAutoParamsLightsOnly(const AutoParamDataSource& source); 00304 00316 void setAutoAddParamName(bool state) { mAutoAddParamName = state; } 00317 00337 void setNamedConstant(const String& name, Real val); 00357 void setNamedConstant(const String& name, int val); 00362 void setNamedConstant(const String& name, const Vector4& vec); 00375 void setNamedConstant(const String& name, const Vector3& vec); 00380 void setNamedConstant(const String& name, const Matrix4& m); 00388 void setNamedConstant(const String& name, const Matrix4* m, size_t numEntries); 00409 void setNamedConstant(const String& name, const Real *val, size_t count); 00414 void setNamedConstant(const String& name, const ColourValue& colour); 00415 00436 void setNamedConstant(const String& name, const int *val, size_t count); 00437 00452 void setNamedAutoConstant(const String& name, AutoConstantType acType, size_t extraInfo = 0); 00453 00461 void setNamedConstantFromTime(const String& name, Real factor); 00463 void _mapParameterNameToIndex(const String& name, size_t index); 00464 00466 size_t getParamIndex(const String& name); 00467 00468 00476 void setTransposeMatrices(bool val) { mTransposeMatrices = val; } 00478 bool getTransposeMatrices(void) const { return mTransposeMatrices; } 00479 00483 void copyConstantsFrom(const GpuProgramParameters& source); 00484 00485 }; 00486 00488 typedef SharedPtr<GpuProgramParameters> GpuProgramParametersSharedPtr; 00489 00499 class _OgreExport GpuProgram : public Resource 00500 { 00501 protected: 00503 GpuProgramType mType; 00505 String mFilename; 00507 String mSource; 00509 bool mLoadFromFile; 00511 String mSyntaxCode; 00513 bool mSkeletalAnimation; 00515 GpuProgramParametersSharedPtr mDefaultParams; 00517 bool mPassSurfaceAndLightStates; 00518 00519 public: 00520 00521 GpuProgram(const String& name, GpuProgramType gptype, const String& syntaxCode); 00522 virtual ~GpuProgram() {} 00523 00528 virtual void setSourceFile(const String& filename); 00529 00534 virtual void setSource(const String& source); 00535 00537 virtual const String& getSyntaxCode(void) const { return mSyntaxCode; } 00538 00540 virtual const String& getSourceFile(void) const { return mFilename; } 00542 virtual const String& getSource(void) const { return mSource; } 00544 virtual GpuProgramType getType(void) const { return mType; } 00545 00547 void load(void); 00552 virtual GpuProgram* _getBindingDelegate(void) { return this; } 00553 00555 virtual bool isSupported(void) const; 00556 00564 virtual GpuProgramParametersSharedPtr createParameters(void); 00565 00572 virtual void setSkeletalAnimationIncluded(bool included) 00573 { mSkeletalAnimation = included; } 00574 00581 virtual bool isSkeletalAnimationIncluded(void) const { return mSkeletalAnimation; } 00582 00593 virtual GpuProgramParametersSharedPtr getDefaultParameters(void); 00594 00603 virtual void setSurfaceAndPassLightStates(bool state) 00604 { mPassSurfaceAndLightStates = state; } 00605 00609 virtual bool getPassSurfaceAndLightStates(void) const { return mPassSurfaceAndLightStates; } 00610 00611 protected: 00613 virtual void loadFromSource(void) = 0; 00614 00615 }; 00616 00617 00618 } 00619 00620 #endif
Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:27 2004