# 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_SCROLL,
    00070             ET_ROTATE,
    00072             ET_TRANSFORM
    00073
    00074         };
    00075
    00081         enum EnvMapType
    00082         {
    00084             ENV_PLANAR,
    00086             ENV_CURVED,
    00088             ENV_REFLECTION,
    00090             ENV_NORMAL
    00091         };
    00092
    00098         enum TextureTransformType
    00099         {
    00100             TT_TRANSLATE_U,
    00101             TT_TRANSLATE_V,
    00102             TT_SCALE_U,
    00103             TT_SCALE_V,
    00104             TT_ROTATE
    00105         };
    00106
    00112         enum TextureAddressingMode
    00113         {
    00115             TAM_WRAP,
    00117             TAM_MIRROR,
    00119             TAM_CLAMP
    00120         };
    00121
    00124         enum TextureCubeFace
    00125         {
    00126             CUBE_FRONT = 0,
    00127             CUBE_BACK = 1,
    00128             CUBE_LEFT = 2,
    00129             CUBE_RIGHT = 3,
    00130             CUBE_UP = 4,
    00131             CUBE_DOWN = 5
    00132         };
    00133
    00136         struct TextureEffect {
    00137             TextureEffectType type;
    00138             int subtype;
    00139             Real arg1, arg2;
    00140             WaveformType waveType;
    00141             Real base;
    00142             Real frequency;
    00143             Real phase;
    00144             Real amplitude;
    00145             Controller<Real>* controller;
    00146             const Frustum* frustum;
    00147         };
    00148
    00149
    00152         TextureUnitState(Pass* parent);
    00153
    00154         TextureUnitState(Pass* parent, const TextureUnitState& oth );
    00155
    00156         TextureUnitState & operator = ( const TextureUnitState& oth );
    00157
    00160         ~TextureUnitState();
    00161
    00168         TextureUnitState( Pass* parent, const String& texName, unsigned int texCoordSet = 0);
    00169
    00178         const String& getTextureName(void) const;
    00179
    00185         void setTextureName( const String& name, TextureType ttype = TEX_TYPE_2D, int mipmaps = -1 );
    00186
    00233         void setCubicTextureName( const String& name, bool forUVW = false );
    00234
    00281         void setCubicTextureName( const String* const names, bool forUVW = false );
    00282
    00304         void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
    00305
    00327         void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
    00328
    00331         std::pair< uint, uint > getTextureDimensions( unsigned int frame = 0 ) const;
    00332
    00340         void setCurrentFrame( unsigned int frameNumber );
    00341
    00346         unsigned int getCurrentFrame(void) const;
    00347
    00352         const String& getFrameTextureName(unsigned int frameNumber) const;
    00353
    00358         unsigned int getNumFrames(void) const;
    00359
    00366         bool isCubic(void) const;
    00367
    00372         bool is3D(void) const;
    00373
    00378         TextureType getTextureType(void) const;
    00379
    00384         unsigned int getTextureCoordSet(void) const;
    00385
    00393         void setTextureCoordSet(unsigned int set);
    00394
    00410         void setTextureTransform(const Matrix4& xform);
    00411
    00419         const Matrix4& getTextureTransform(void) const;
    00420
    00433         void setTextureScroll(Real u, Real v);
    00434
    00439         void setTextureUScroll(Real value);
    00440         // get texture uscroll value
    00441         Real getTextureUScroll(void) const;
    00442
    00447         void setTextureVScroll(Real value);
    00448         // get texture vscroll value
    00449         Real getTextureVScroll(void) const;
    00450
    00455         void setTextureUScale(Real value);
    00456         // get texture uscale value
    00457         Real getTextureUScale(void) const;
    00458
    00463         void setTextureVScale(Real value);
    00464         // get texture vscale value
    00465         Real getTextureVScale(void) const;
    00466
    00480         void setTextureScale(Real uScale, Real vScale);
    00481
    00491         void setTextureRotate(const Radian& angle);
    00492 #ifndef OGRE_FORCE_ANGLE_TYPES
    00493         inline void setTextureRotate(Real angle) {
    00494             setTextureRotate ( Degree(angle) );
    00495         }
    00496 #endif//OGRE_FORCE_ANGLE_TYPES
    00497         // get texture rotation effects angle value
    00498         const Radian& getTextureRotate(void) const;
    00499
    00504         TextureAddressingMode getTextureAddressingMode(void) const;
    00505
    00512         void setTextureAddressingMode( TextureAddressingMode tam);
    00513
    00578         void setColourOperationEx(
    00579             LayerBlendOperationEx op,
    00580             LayerBlendSource source1 = LBS_TEXTURE,
    00581             LayerBlendSource source2 = LBS_CURRENT,
    00582
    00583             const ColourValue& arg1 = ColourValue::White,
    00584             const ColourValue& arg2 = ColourValue::White,
    00585
    00586             Real manualBlend = 0.0);
    00587
    00606         void setColourOperation( const LayerBlendOperation op);
    00607
    00627         void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
    00628
    00631         const LayerBlendModeEx& getColourBlendMode(void) const;
    00632
    00635         const LayerBlendModeEx& getAlphaBlendMode(void) const;
    00636
    00639         SceneBlendFactor getColourBlendFallbackSrc(void) const;
    00640
    00643         SceneBlendFactor getColourBlendFallbackDest(void) const;
    00644
    00670         void setAlphaOperation(LayerBlendOperationEx op,
    00671             LayerBlendSource source1 = LBS_TEXTURE,
    00672             LayerBlendSource source2 = LBS_CURRENT,
    00673             Real arg1 = 1.0,
    00674             Real arg2 = 1.0,
    00675             Real manualBlend = 0.0);
    00676
    00688         void addEffect(TextureEffect& effect);
    00689
    00717         void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
    00718
    00729         void setScrollAnimation(Real uSpeed, Real vSpeed);
    00730
    00739         void setRotateAnimation(Real speed);
    00740
    00760         void setTransformAnimation( const TextureTransformType ttype,
    00761             const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
    00762
    00763
    00782         void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
    00783
    00786         void removeAllEffects(void);
    00787
    00793         void removeEffect( const TextureEffectType type );
    00794
    00800         bool isBlank(void) const;
    00801
    00804         void setBlank(void);
    00805
    00806         // get texture effects in a multimap paired array
    00807         std::multimap<TextureEffectType, TextureEffect> getEffects(void) const;
    00808         // get the animated-texture animation duration
    00809         Real getAnimationDuration(void) const;
    00810
    00820         void setTextureFiltering(TextureFilterOptions filterType);
    00825         void setTextureFiltering(FilterType ftype, FilterOptions opts);
    00834         void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
    00835         // get the texture filtering for the given type
    00836         FilterOptions getTextureFiltering(FilterType ftpye) const;
    00837
    00843         void setTextureAnisotropy(unsigned int maxAniso);
    00844         // get this layer texture anisotropy level
    00845         unsigned int getTextureAnisotropy() const;
    00846
    00848         Pass* getParent(void) { return mParent; }
    00849
    00851         void _load(void);
    00853         void _unload(void);
    00855         bool hasViewRelativeTextureCoordinateGeneration(void);
    00856
    00857         // Is this loaded?
    00858         bool isLoaded(void);
    00860         void _notifyNeedsRecompile(void);
    00861
    00863         void _notifyParent(Pass* parent);
    00864
    00865
    00866
    00867 protected:
    00868         // State
    00869 #define OGRE_MAX_TEXTURE_FRAMES 32
    00870
    00872         unsigned int mNumFrames;
    00874         unsigned int mCurrentFrame;
    00875         // String mFrames[OGRE_MAX_TEXTURE_FRAMES] is at the end of the class
    00876
    00878         Real mAnimDuration;
    00879         bool mCubic; // is this a series of 6 2D textures to make up a cube?
    00880
    00881         TextureType mTextureType;
    00882         int mTextureSrcMipmaps; // Request number of mipmaps
    00883
    00884         unsigned int mTextureCoordSetIndex;
    00885         TextureAddressingMode mAddressMode;
    00886
    00887         LayerBlendModeEx colourBlendMode;
    00888         SceneBlendFactor colourBlendFallbackSrc;
    00889         SceneBlendFactor colourBlendFallbackDest;
    00890
    00891         LayerBlendModeEx alphaBlendMode;
    00892         bool mIsBlank;
    00893
    00894         mutable bool mRecalcTexMatrix;
    00895         Real mUMod, mVMod;
    00896         Real mUScale, mVScale;
    00897         Radian mRotate;
    00898         mutable Matrix4 mTexModMatrix;
    00899
    00900         // Animation, will be set up as Controllers
    00901         Real mUScrollAnim, mVScrollAnim;
    00902         Real mRotateAnim;
    00903
    00905         FilterOptions mMinFilter;
    00907         FilterOptions mMagFilter;
    00909         FilterOptions mMipFilter;
    00911         unsigned int mMaxAniso;
    00912
    00913         bool mIsDefaultAniso;
    00914         bool mIsDefaultFiltering;
    00915
    00916
    00917         //-----------------------------------------------------------------------------
    00918         // Complex members (those that can't be copied using memcpy) are at the end to
    00919         // allow for fast copying of the basic members.
    00920         //
    00921         String mFrames[OGRE_MAX_TEXTURE_FRAMES]; // Names of frames
    00922
    00923         typedef std::multimap<TextureEffectType, TextureEffect> EffectMap;
    00924         EffectMap mEffects;
    00925         //-----------------------------------------------------------------------------
    00926
    00927         //-----------------------------------------------------------------------------
    00928         // Pointer members (those that can't be copied using memcpy), and MUST
    00929         // preserving even if assign from others
    00930         //
    00931         Pass* mParent;
    00932         Controller<Real>* mAnimController;
    00933         //-----------------------------------------------------------------------------
    00934
    00935
    00938         void recalcTextureMatrix(void) const;
    00939
    00942         void createAnimController(void);
    00943
    00946         void createEffectController(TextureEffect& effect);
    00947
    00948
    00949     };
    00950
    00951
    00952 }
    00953
    00954 #endif

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