Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OgreTextureUnitState.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-2006 Torus Knot Software Ltd
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 You may alternatively use this source under the terms of a specific version of
00025 the OGRE Unrestricted License provided you have obtained such a license from
00026 Torus Knot Software Ltd.
00027 -----------------------------------------------------------------------------
00028 */
00029 #ifndef __TextureUnitState_H__
00030 #define __TextureUnitState_H__
00031 
00032 #include "OgrePrerequisites.h"
00033 #include "OgreCommon.h"
00034 #include "OgreBlendMode.h"
00035 #include "OgreMatrix4.h"
00036 #include "OgreIteratorWrappers.h"
00037 #include "OgreString.h"
00038 #include "OgreTexture.h"
00039 
00040 namespace Ogre {
00056     class _OgreExport TextureUnitState
00057     {
00058         friend class RenderSystem;
00059     public:
00065         enum TextureEffectType
00066         {
00068             ET_ENVIRONMENT_MAP,
00070             ET_PROJECTIVE_TEXTURE,
00072             ET_UVSCROLL,
00074             ET_USCROLL,
00076             ET_VSCROLL,
00078             ET_ROTATE,
00080             ET_TRANSFORM
00081 
00082         };
00083 
00089         enum EnvMapType
00090         {
00092             ENV_PLANAR,
00094             ENV_CURVED,
00096             ENV_REFLECTION,
00098             ENV_NORMAL
00099         };
00100 
00106         enum TextureTransformType
00107         {
00108             TT_TRANSLATE_U,
00109             TT_TRANSLATE_V,
00110             TT_SCALE_U,
00111             TT_SCALE_V,
00112             TT_ROTATE
00113         };
00114 
00120         enum TextureAddressingMode
00121         {
00123             TAM_WRAP,
00125             TAM_MIRROR,
00127             TAM_CLAMP,
00129             TAM_BORDER
00130         };
00131 
00133         struct UVWAddressingMode
00134         {
00135             TextureAddressingMode u, v, w;
00136         };
00137 
00140         enum TextureCubeFace
00141         {
00142             CUBE_FRONT = 0,
00143             CUBE_BACK = 1,
00144             CUBE_LEFT = 2,
00145             CUBE_RIGHT = 3,
00146             CUBE_UP = 4,
00147             CUBE_DOWN = 5
00148         };
00149 
00152         struct TextureEffect {
00153             TextureEffectType type;
00154             int subtype;
00155             Real arg1, arg2;
00156             WaveformType waveType;
00157             Real base;
00158             Real frequency;
00159             Real phase;
00160             Real amplitude;
00161             Controller<Real>* controller;
00162             const Frustum* frustum;
00163         };
00164 
00167         typedef std::multimap<TextureEffectType, TextureEffect> EffectMap;
00168 
00171         TextureUnitState(Pass* parent);
00172 
00173         TextureUnitState(Pass* parent, const TextureUnitState& oth );
00174 
00175         TextureUnitState & operator = ( const TextureUnitState& oth );
00176 
00179         ~TextureUnitState();
00180 
00187         TextureUnitState( Pass* parent, const String& texName, unsigned int texCoordSet = 0);
00188 
00197         const String& getTextureName(void) const;
00198 
00204         void setTextureName( const String& name, TextureType ttype = TEX_TYPE_2D);
00205 
00252         void setCubicTextureName( const String& name, bool forUVW = false );
00253 
00300         void setCubicTextureName( const String* const names, bool forUVW = false );
00301 
00323         void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
00324 
00346         void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
00347 
00350         std::pair< size_t, size_t > getTextureDimensions( unsigned int frame = 0 ) const;
00351 
00359         void setCurrentFrame( unsigned int frameNumber );
00360 
00365         unsigned int getCurrentFrame(void) const;
00366 
00372         const String& getFrameTextureName(unsigned int frameNumber) const;
00373 
00381         void setFrameTextureName(const String& name, unsigned int frameNumber);
00382 
00388         void addFrameTextureName(const String& name);
00396         void deleteFrameTextureName(const size_t frameNumber);
00401         unsigned int getNumFrames(void) const;
00402 
00403 
00405         enum BindingType
00406         {
00408             BT_FRAGMENT = 0,
00412             BT_VERTEX = 1
00413         };
00416         enum ContentType
00417         {
00419             CONTENT_NAMED = 0,
00421             CONTENT_SHADOW = 1
00422         };
00423 
00433         void setBindingType(BindingType bt);
00434 
00437         BindingType getBindingType(void) const;
00438 
00444         void setContentType(ContentType ct);
00446         ContentType getContentType(void) const;
00447 
00454         bool isCubic(void) const;
00455 
00460         bool is3D(void) const;
00461 
00466         TextureType getTextureType(void) const;
00467 
00470         void setDesiredFormat(PixelFormat desiredFormat);
00471 
00474         PixelFormat getDesiredFormat(void) const;
00475 
00478         void setNumMipmaps(int numMipmaps);
00479 
00482         int getNumMipmaps(void) const;
00483 
00486         void setIsAlpha(bool isAlpha);
00487 
00490         bool getIsAlpha(void) const;
00491 
00496         unsigned int getTextureCoordSet(void) const;
00497 
00505         void setTextureCoordSet(unsigned int set);
00506 
00522         void setTextureTransform(const Matrix4& xform);
00523 
00531         const Matrix4& getTextureTransform(void) const;
00532 
00545         void setTextureScroll(Real u, Real v);
00546 
00551         void setTextureUScroll(Real value);
00552         // get texture uscroll value
00553         Real getTextureUScroll(void) const;
00554 
00559         void setTextureVScroll(Real value);
00560         // get texture vscroll value
00561         Real getTextureVScroll(void) const;
00562 
00567         void setTextureUScale(Real value);
00568         // get texture uscale value
00569         Real getTextureUScale(void) const;
00570 
00575         void setTextureVScale(Real value);
00576         // get texture vscale value
00577         Real getTextureVScale(void) const;
00578 
00592         void setTextureScale(Real uScale, Real vScale);
00593 
00603         void setTextureRotate(const Radian& angle);
00604 #ifndef OGRE_FORCE_ANGLE_TYPES
00605         inline void setTextureRotate(Real angle) {
00606             setTextureRotate ( Degree(angle) );
00607         }
00608 #endif//OGRE_FORCE_ANGLE_TYPES
00609         // get texture rotation effects angle value
00610         const Radian& getTextureRotate(void) const;
00611 
00617         const UVWAddressingMode& getTextureAddressingMode(void) const;
00618 
00628         void setTextureAddressingMode( TextureAddressingMode tam);
00629 
00636         void setTextureAddressingMode( TextureAddressingMode u, 
00637             TextureAddressingMode v, TextureAddressingMode w);
00638 
00645         void setTextureAddressingMode( const UVWAddressingMode& uvw);
00646 
00654         void setTextureBorderColour(const ColourValue& colour);
00655 
00661         const ColourValue& getTextureBorderColour(void) const;
00662 
00727         void setColourOperationEx(
00728             LayerBlendOperationEx op,
00729             LayerBlendSource source1 = LBS_TEXTURE,
00730             LayerBlendSource source2 = LBS_CURRENT,
00731 
00732             const ColourValue& arg1 = ColourValue::White,
00733             const ColourValue& arg2 = ColourValue::White,
00734 
00735             Real manualBlend = 0.0);
00736 
00755         void setColourOperation( const LayerBlendOperation op);
00756 
00776         void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
00777 
00780         const LayerBlendModeEx& getColourBlendMode(void) const;
00781 
00784         const LayerBlendModeEx& getAlphaBlendMode(void) const;
00785 
00788         SceneBlendFactor getColourBlendFallbackSrc(void) const;
00789 
00792         SceneBlendFactor getColourBlendFallbackDest(void) const;
00793 
00819         void setAlphaOperation(LayerBlendOperationEx op,
00820             LayerBlendSource source1 = LBS_TEXTURE,
00821             LayerBlendSource source2 = LBS_CURRENT,
00822             Real arg1 = 1.0,
00823             Real arg2 = 1.0,
00824             Real manualBlend = 0.0);
00825 
00837         void addEffect(TextureEffect& effect);
00838 
00866         void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
00867 
00878         void setScrollAnimation(Real uSpeed, Real vSpeed);
00879 
00888         void setRotateAnimation(Real speed);
00889 
00909         void setTransformAnimation( const TextureTransformType ttype,
00910             const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
00911 
00912 
00931         void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
00932 
00935         void removeAllEffects(void);
00936 
00942         void removeEffect( const TextureEffectType type );
00943 
00949         bool isBlank(void) const;
00950 
00953         void setBlank(void);
00954 
00957         bool isTextureLoadFailing() const { return mTextureLoadFailed; }
00958 
00961         void retryTextureLoad() { mTextureLoadFailed = false; }
00962 
00963         // get texture effects in a multimap paired array
00964         const EffectMap& getEffects(void) const;
00965         // get the animated-texture animation duration
00966         Real getAnimationDuration(void) const;
00967 
00977         void setTextureFiltering(TextureFilterOptions filterType);
00982         void setTextureFiltering(FilterType ftype, FilterOptions opts);
00991         void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
00992         // get the texture filtering for the given type
00993         FilterOptions getTextureFiltering(FilterType ftpye) const;
00994 
01000         void setTextureAnisotropy(unsigned int maxAniso);
01001         // get this layer texture anisotropy level
01002         unsigned int getTextureAnisotropy() const;
01003 
01016         void setTextureMipmapBias(float bias) { mMipmapBias = bias; }
01020         float getTextureMipmapBias(void) const { return mMipmapBias; }
01021 
01023         Pass* getParent(void) const { return mParent; }
01024 
01026         void _load(void);
01028         void _unload(void);
01030         bool hasViewRelativeTextureCoordinateGeneration(void) const;
01031 
01032         // Is this loaded?
01033         bool isLoaded(void) const;
01035         void _notifyNeedsRecompile(void);
01036 
01042         void setName(const String& name);
01044         const String& getName(void) const { return mName; }
01045 
01049         void setTextureNameAlias(const String& name);
01052         const String& getTextureNameAlias(void) const { return mTextureNameAlias;}
01053 
01068         bool applyTextureAliases(const AliasTextureNamePairList& aliasList, const bool apply = true);
01069 
01071         void _notifyParent(Pass* parent);
01072 
01074         const TexturePtr& _getTexturePtr(void) const;
01076         const TexturePtr& _getTexturePtr(size_t frame) const;
01077     
01079         void _setTexturePtr(const TexturePtr& texptr);
01081         void _setTexturePtr(const TexturePtr& texptr, size_t frame);
01082 
01086         Controller<Real>* _getAnimController() const { return mAnimController; }
01087 protected:
01088         // State
01090         unsigned int mCurrentFrame;
01091 
01093         Real mAnimDuration;            
01094         bool mCubic; // is this a series of 6 2D textures to make up a cube?
01095         
01096         TextureType mTextureType; 
01097         PixelFormat mDesiredFormat;
01098         int mTextureSrcMipmaps; // Request number of mipmaps
01099 
01100         unsigned int mTextureCoordSetIndex;
01101         UVWAddressingMode mAddressMode;
01102         ColourValue mBorderColour;
01103 
01104         LayerBlendModeEx mColourBlendMode;
01105         SceneBlendFactor mColourBlendFallbackSrc;
01106         SceneBlendFactor mColourBlendFallbackDest;
01107 
01108         LayerBlendModeEx mAlphaBlendMode;
01109         mutable bool mTextureLoadFailed;
01110         bool mIsAlpha;
01111 
01112         mutable bool mRecalcTexMatrix;
01113         Real mUMod, mVMod;
01114         Real mUScale, mVScale;
01115         Radian mRotate;
01116         mutable Matrix4 mTexModMatrix;
01117 
01119         FilterOptions mMinFilter;
01121         FilterOptions mMagFilter;
01123         FilterOptions mMipFilter;
01125         unsigned int mMaxAniso;
01127         float mMipmapBias;
01128 
01129         bool mIsDefaultAniso;
01130         bool mIsDefaultFiltering;
01132         BindingType mBindingType;
01134         ContentType mContentType;
01135 
01136         //-----------------------------------------------------------------------------
01137         // Complex members (those that can't be copied using memcpy) are at the end to 
01138         // allow for fast copying of the basic members.
01139         //
01140         std::vector<String> mFrames;
01141         mutable std::vector<TexturePtr> mFramePtrs;
01142         String mName;               // optional name for the TUS
01143         String mTextureNameAlias;       // optional alias for texture frames
01144         EffectMap mEffects;
01145         //-----------------------------------------------------------------------------
01146 
01147         //-----------------------------------------------------------------------------
01148         // Pointer members (those that can't be copied using memcpy), and MUST
01149         // preserving even if assign from others
01150         //
01151         Pass* mParent;
01152         Controller<Real>* mAnimController;
01153         //-----------------------------------------------------------------------------
01154 
01155 
01158         void recalcTextureMatrix(void) const;
01159 
01162         void createAnimController(void);
01163 
01166         void createEffectController(TextureEffect& effect);
01167 
01169         void ensureLoaded(size_t frame) const;
01170 
01171 
01172     };
01173 
01174 
01175 }
01176 
01177 #endif

Copyright © 2000-2005 by The OGRE Team
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 30 10:50:57 2007