# 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://ogre.sourceforge.net/
    00006
    00007 Copyright (c) 2000-2005 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 __TextureUnitState_H__
    00026 #define __TextureUnitState_H__
    00027
    00028 #include "OgrePrerequisites.h"
    00029 #include "OgreCommon.h"
    00030 #include "OgreBlendMode.h"
    00031 #include "OgreMatrix4.h"
    00032 #include "OgreIteratorWrappers.h"
    00033 #include "OgreString.h"
    00034 #include "OgreTexture.h"
    00035
    00036 namespace Ogre {
    00052     class _OgreExport TextureUnitState
    00053     {
    00054         friend class RenderSystem;
    00055     public:
    00061         enum TextureEffectType
    00062         {
    00064             ET_ENVIRONMENT_MAP,
    00066             ET_PROJECTIVE_TEXTURE,
    00068             ET_UVSCROLL,
    00070             ET_USCROLL,
    00072             ET_VSCROLL,
    00074             ET_ROTATE,
    00076             ET_TRANSFORM
    00077
    00078         };
    00079
    00085         enum EnvMapType
    00086         {
    00088             ENV_PLANAR,
    00090             ENV_CURVED,
    00092             ENV_REFLECTION,
    00094             ENV_NORMAL
    00095         };
    00096
    00102         enum TextureTransformType
    00103         {
    00104             TT_TRANSLATE_U,
    00105             TT_TRANSLATE_V,
    00106             TT_SCALE_U,
    00107             TT_SCALE_V,
    00108             TT_ROTATE
    00109         };
    00110
    00116         enum TextureAddressingMode
    00117         {
    00119             TAM_WRAP,
    00121             TAM_MIRROR,
    00123             TAM_CLAMP,
    00125             TAM_BORDER
    00126         };
    00127
    00129         struct UVWAddressingMode
    00130         {
    00131             TextureAddressingMode u, v, w;
    00132         };
    00133
    00136         enum TextureCubeFace
    00137         {
    00138             CUBE_FRONT = 0,
    00139             CUBE_BACK = 1,
    00140             CUBE_LEFT = 2,
    00141             CUBE_RIGHT = 3,
    00142             CUBE_UP = 4,
    00143             CUBE_DOWN = 5
    00144         };
    00145
    00148         struct TextureEffect {
    00149             TextureEffectType type;
    00150             int subtype;
    00151             Real arg1, arg2;
    00152             WaveformType waveType;
    00153             Real base;
    00154             Real frequency;
    00155             Real phase;
    00156             Real amplitude;
    00157             Controller<Real>* controller;
    00158             const Frustum* frustum;
    00159         };
    00160
    00163         typedef std::multimap<TextureEffectType, TextureEffect> EffectMap;
    00164
    00167         TextureUnitState(Pass* parent);
    00168
    00169         TextureUnitState(Pass* parent, const TextureUnitState& oth );
    00170
    00171         TextureUnitState & operator = ( const TextureUnitState& oth );
    00172
    00175         ~TextureUnitState();
    00176
    00183         TextureUnitState( Pass* parent, const String& texName, unsigned int texCoordSet = 0);
    00184
    00193         const String& getTextureName(void) const;
    00194
    00200         void setTextureName( const String& name, TextureType ttype = TEX_TYPE_2D, int mipmaps = -1, bool isAlpha = false);
    00201
    00248         void setCubicTextureName( const String& name, bool forUVW = false );
    00249
    00296         void setCubicTextureName( const String* const names, bool forUVW = false );
    00297
    00319         void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
    00320
    00342         void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
    00343
    00346         std::pair< uint, uint > getTextureDimensions( unsigned int frame = 0 ) const;
    00347
    00355         void setCurrentFrame( unsigned int frameNumber );
    00356
    00361         unsigned int getCurrentFrame(void) const;
    00362
    00368         const String& getFrameTextureName(unsigned int frameNumber) const;
    00369
    00377         void setFrameTextureName(const String& name, unsigned int frameNumber);
    00378
    00384         void addFrameTextureName(const String& name);
    00392         void deleteFrameTextureName(const size_t frameNumber);
    00397         unsigned int getNumFrames(void) const;
    00398
    00405         bool isCubic(void) const;
    00406
    00411         bool is3D(void) const;
    00412
    00417         TextureType getTextureType(void) const;
    00418
    00423         unsigned int getTextureCoordSet(void) const;
    00424
    00432         void setTextureCoordSet(unsigned int set);
    00433
    00449         void setTextureTransform(const Matrix4& xform);
    00450
    00458         const Matrix4& getTextureTransform(void) const;
    00459
    00472         void setTextureScroll(Real u, Real v);
    00473
    00478         void setTextureUScroll(Real value);
    00479         // get texture uscroll value
    00480         Real getTextureUScroll(void) const;
    00481
    00486         void setTextureVScroll(Real value);
    00487         // get texture vscroll value
    00488         Real getTextureVScroll(void) const;
    00489
    00494         void setTextureUScale(Real value);
    00495         // get texture uscale value
    00496         Real getTextureUScale(void) const;
    00497
    00502         void setTextureVScale(Real value);
    00503         // get texture vscale value
    00504         Real getTextureVScale(void) const;
    00505
    00519         void setTextureScale(Real uScale, Real vScale);
    00520
    00530         void setTextureRotate(const Radian& angle);
    00531 #ifndef OGRE_FORCE_ANGLE_TYPES
    00532         inline void setTextureRotate(Real angle) {
    00533             setTextureRotate ( Degree(angle) );
    00534         }
    00535 #endif//OGRE_FORCE_ANGLE_TYPES
    00536         // get texture rotation effects angle value
    00537         const Radian& getTextureRotate(void) const;
    00538
    00544         const UVWAddressingMode& getTextureAddressingMode(void) const;
    00545
    00555         void setTextureAddressingMode( TextureAddressingMode tam);
    00556
    00563         void setTextureAddressingMode( TextureAddressingMode u,
    00564             TextureAddressingMode v, TextureAddressingMode w);
    00565
    00572         void setTextureAddressingMode( const UVWAddressingMode& uvw);
    00573
    00581         void setTextureBorderColour(const ColourValue& colour);
    00582
    00588         const ColourValue& getTextureBorderColour(void) const;
    00589
    00654         void setColourOperationEx(
    00655             LayerBlendOperationEx op,
    00656             LayerBlendSource source1 = LBS_TEXTURE,
    00657             LayerBlendSource source2 = LBS_CURRENT,
    00658
    00659             const ColourValue& arg1 = ColourValue::White,
    00660             const ColourValue& arg2 = ColourValue::White,
    00661
    00662             Real manualBlend = 0.0);
    00663
    00682         void setColourOperation( const LayerBlendOperation op);
    00683
    00703         void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
    00704
    00707         const LayerBlendModeEx& getColourBlendMode(void) const;
    00708
    00711         const LayerBlendModeEx& getAlphaBlendMode(void) const;
    00712
    00715         SceneBlendFactor getColourBlendFallbackSrc(void) const;
    00716
    00719         SceneBlendFactor getColourBlendFallbackDest(void) const;
    00720
    00746         void setAlphaOperation(LayerBlendOperationEx op,
    00747             LayerBlendSource source1 = LBS_TEXTURE,
    00748             LayerBlendSource source2 = LBS_CURRENT,
    00749             Real arg1 = 1.0,
    00750             Real arg2 = 1.0,
    00751             Real manualBlend = 0.0);
    00752
    00764         void addEffect(TextureEffect& effect);
    00765
    00793         void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
    00794
    00805         void setScrollAnimation(Real uSpeed, Real vSpeed);
    00806
    00815         void setRotateAnimation(Real speed);
    00816
    00836         void setTransformAnimation( const TextureTransformType ttype,
    00837             const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
    00838
    00839
    00858         void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
    00859
    00862         void removeAllEffects(void);
    00863
    00869         void removeEffect( const TextureEffectType type );
    00870
    00876         bool isBlank(void) const;
    00877
    00880         void setBlank(void);
    00881
    00882         // get texture effects in a multimap paired array
    00883         const EffectMap& getEffects(void) const;
    00884         // get the animated-texture animation duration
    00885         Real getAnimationDuration(void) const;
    00886
    00896         void setTextureFiltering(TextureFilterOptions filterType);
    00901         void setTextureFiltering(FilterType ftype, FilterOptions opts);
    00910         void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
    00911         // get the texture filtering for the given type
    00912         FilterOptions getTextureFiltering(FilterType ftpye) const;
    00913
    00919         void setTextureAnisotropy(unsigned int maxAniso);
    00920         // get this layer texture anisotropy level
    00921         unsigned int getTextureAnisotropy() const;
    00922
    00924         Pass* getParent(void) const { return mParent; }
    00925
    00927         void _load(void);
    00929         void _unload(void);
    00931         bool hasViewRelativeTextureCoordinateGeneration(void);
    00932
    00933         // Is this loaded?
    00934         bool isLoaded(void);
    00936         void _notifyNeedsRecompile(void);
    00937
    00943         void setName(const String& name);
    00945         const String& getName(void) const { return mName; }
    00946
    00950         void setTextureNameAlias(const String& name);
    00953         const String& getTextureNameAlias(void) const { return mTextureNameAlias;}
    00954
    00969         bool applyTextureAliases(const AliasTextureNamePairList& aliasList, const bool apply = true);
    00970
    00972         void _notifyParent(Pass* parent);
    00973
    00974 protected:
    00975         // State
    00977         unsigned int mCurrentFrame;
    00978
    00980         Real mAnimDuration;
    00981         bool mCubic; // is this a series of 6 2D textures to make up a cube?
    00982
    00983         TextureType mTextureType;
    00984         int mTextureSrcMipmaps; // Request number of mipmaps
    00985
    00986         unsigned int mTextureCoordSetIndex;
    00987         UVWAddressingMode mAddressMode;
    00988         ColourValue mBorderColour;
    00989
    00990         LayerBlendModeEx colourBlendMode;
    00991         SceneBlendFactor colourBlendFallbackSrc;
    00992         SceneBlendFactor colourBlendFallbackDest;
    00993
    00994         LayerBlendModeEx alphaBlendMode;
    00995         bool mIsBlank;
    00996         bool mIsAlpha;
    00997
    00998         mutable bool mRecalcTexMatrix;
    00999         Real mUMod, mVMod;
    01000         Real mUScale, mVScale;
    01001         Radian mRotate;
    01002         mutable Matrix4 mTexModMatrix;
    01003
    01005         FilterOptions mMinFilter;
    01007         FilterOptions mMagFilter;
    01009         FilterOptions mMipFilter;
    01011         unsigned int mMaxAniso;
    01012
    01013         bool mIsDefaultAniso;
    01014         bool mIsDefaultFiltering;
    01015
    01016
    01017         //-----------------------------------------------------------------------------
    01018         // Complex members (those that can't be copied using memcpy) are at the end to
    01019         // allow for fast copying of the basic members.
    01020         //
    01021         std::vector<String> mFrames;
    01022         String mName;               // optional name for the TUS
    01023         String mTextureNameAlias;       // optional alias for texture frames
    01024         EffectMap mEffects;
    01025         //-----------------------------------------------------------------------------
    01026
    01027         //-----------------------------------------------------------------------------
    01028         // Pointer members (those that can't be copied using memcpy), and MUST
    01029         // preserving even if assign from others
    01030         //
    01031         Pass* mParent;
    01032         Controller<Real>* mAnimController;
    01033         //-----------------------------------------------------------------------------
    01034
    01035
    01038         void recalcTextureMatrix(void) const;
    01039
    01042         void createAnimController(void);
    01043
    01046         void createEffectController(TextureEffect& effect);
    01047
    01048
    01049     };
    01050
    01051
    01052 }
    01053
    01054 #endif

Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 17 15:39:12 2006