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-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 __TextureUnitState_H__
00029 #define __TextureUnitState_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 #include "OgreCommon.h"
00033 #include "OgreBlendMode.h"
00034 #include "OgreMatrix4.h"
00035 #include "OgreIteratorWrappers.h"
00036 #include "OgreString.h"
00037 #include "OgreTexture.h"
00038 
00039 namespace Ogre {
00061     class _OgreExport TextureUnitState : public TextureUnitStateAlloc
00062     {
00063         friend class RenderSystem;
00064     public:
00070         enum TextureEffectType
00071         {
00073             ET_ENVIRONMENT_MAP,
00075             ET_PROJECTIVE_TEXTURE,
00077             ET_UVSCROLL,
00079             ET_USCROLL,
00081             ET_VSCROLL,
00083             ET_ROTATE,
00085             ET_TRANSFORM
00086 
00087         };
00088 
00094         enum EnvMapType
00095         {
00097             ENV_PLANAR,
00099             ENV_CURVED,
00101             ENV_REFLECTION,
00103             ENV_NORMAL
00104         };
00105 
00111         enum TextureTransformType
00112         {
00113             TT_TRANSLATE_U,
00114             TT_TRANSLATE_V,
00115             TT_SCALE_U,
00116             TT_SCALE_V,
00117             TT_ROTATE
00118         };
00119 
00125         enum TextureAddressingMode
00126         {
00128             TAM_WRAP,
00130             TAM_MIRROR,
00132             TAM_CLAMP,
00134             TAM_BORDER
00135         };
00136 
00138         struct UVWAddressingMode
00139         {
00140             TextureAddressingMode u, v, w;
00141         };
00142 
00145         enum TextureCubeFace
00146         {
00147             CUBE_FRONT = 0,
00148             CUBE_BACK = 1,
00149             CUBE_LEFT = 2,
00150             CUBE_RIGHT = 3,
00151             CUBE_UP = 4,
00152             CUBE_DOWN = 5
00153         };
00154 
00157         struct TextureEffect {
00158             TextureEffectType type;
00159             int subtype;
00160             Real arg1, arg2;
00161             WaveformType waveType;
00162             Real base;
00163             Real frequency;
00164             Real phase;
00165             Real amplitude;
00166             Controller<Real>* controller;
00167             const Frustum* frustum;
00168         };
00169 
00172         typedef multimap<TextureEffectType, TextureEffect>::type EffectMap;
00173 
00176         TextureUnitState(Pass* parent);
00177 
00178         TextureUnitState(Pass* parent, const TextureUnitState& oth );
00179 
00180         TextureUnitState & operator = ( const TextureUnitState& oth );
00181 
00184         ~TextureUnitState();
00185 
00192         TextureUnitState( Pass* parent, const String& texName, unsigned int texCoordSet = 0);
00193 
00202         const String& getTextureName(void) const;
00203 
00209         void setTextureName( const String& name, TextureType ttype = TEX_TYPE_2D);
00210 
00216         void setTexture( const TexturePtr& texPtr);
00217 
00264         void setCubicTextureName( const String& name, bool forUVW = false );
00265 
00310         void setCubicTextureName( const String* const names, bool forUVW = false );
00311 
00356         void setCubicTexture( const TexturePtr* const texPtrs, bool forUVW = false );
00357 
00379         void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
00380 
00402         void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
00403 
00406         std::pair< size_t, size_t > getTextureDimensions( unsigned int frame = 0 ) const;
00407 
00415         void setCurrentFrame( unsigned int frameNumber );
00416 
00421         unsigned int getCurrentFrame(void) const;
00422 
00428         const String& getFrameTextureName(unsigned int frameNumber) const;
00429 
00437         void setFrameTextureName(const String& name, unsigned int frameNumber);
00438 
00444         void addFrameTextureName(const String& name);
00452         void deleteFrameTextureName(const size_t frameNumber);
00457         unsigned int getNumFrames(void) const;
00458 
00459 
00461         enum BindingType
00462         {
00464             BT_FRAGMENT = 0,
00468             BT_VERTEX = 1
00469         };
00472         enum ContentType
00473         {
00475             CONTENT_NAMED = 0,
00477             CONTENT_SHADOW = 1,
00479             CONTENT_COMPOSITOR = 2
00480         };
00481 
00491         void setBindingType(BindingType bt);
00492 
00495         BindingType getBindingType(void) const;
00496 
00502         void setContentType(ContentType ct);
00504         ContentType getContentType(void) const;
00505 
00512         bool isCubic(void) const;
00513 
00518         bool is3D(void) const;
00519 
00524         TextureType getTextureType(void) const;
00525 
00528         void setDesiredFormat(PixelFormat desiredFormat);
00529 
00532         PixelFormat getDesiredFormat(void) const;
00533 
00536         void setNumMipmaps(int numMipmaps);
00537 
00540         int getNumMipmaps(void) const;
00541 
00544         void setIsAlpha(bool isAlpha);
00545 
00548         bool getIsAlpha(void) const;
00549 
00551         void setHardwareGammaEnabled(bool enabled);
00553         bool isHardwareGammaEnabled() const;
00554 
00559         unsigned int getTextureCoordSet(void) const;
00560 
00568         void setTextureCoordSet(unsigned int set);
00569 
00585         void setTextureTransform(const Matrix4& xform);
00586 
00594         const Matrix4& getTextureTransform(void) const;
00595 
00608         void setTextureScroll(Real u, Real v);
00609 
00614         void setTextureUScroll(Real value);
00615         // Get texture uscroll value
00616         Real getTextureUScroll(void) const;
00617 
00622         void setTextureVScroll(Real value);
00623         // Get texture vscroll value
00624         Real getTextureVScroll(void) const;
00625 
00630         void setTextureUScale(Real value);
00632         Real getTextureUScale(void) const;
00633 
00638         void setTextureVScale(Real value);
00640         Real getTextureVScale(void) const;
00641 
00655         void setTextureScale(Real uScale, Real vScale);
00656 
00666         void setTextureRotate(const Radian& angle);
00668         const Radian& getTextureRotate(void) const;
00669 
00675         const UVWAddressingMode& getTextureAddressingMode(void) const;
00676 
00686         void setTextureAddressingMode( TextureAddressingMode tam);
00687 
00694         void setTextureAddressingMode( TextureAddressingMode u, 
00695             TextureAddressingMode v, TextureAddressingMode w);
00696 
00703         void setTextureAddressingMode( const UVWAddressingMode& uvw);
00704 
00712         void setTextureBorderColour(const ColourValue& colour);
00713 
00719         const ColourValue& getTextureBorderColour(void) const;
00720 
00785         void setColourOperationEx(
00786             LayerBlendOperationEx op,
00787             LayerBlendSource source1 = LBS_TEXTURE,
00788             LayerBlendSource source2 = LBS_CURRENT,
00789 
00790             const ColourValue& arg1 = ColourValue::White,
00791             const ColourValue& arg2 = ColourValue::White,
00792 
00793             Real manualBlend = 0.0);
00794 
00813         void setColourOperation( const LayerBlendOperation op);
00814 
00834         void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
00835 
00838         const LayerBlendModeEx& getColourBlendMode(void) const;
00839 
00842         const LayerBlendModeEx& getAlphaBlendMode(void) const;
00843 
00846         SceneBlendFactor getColourBlendFallbackSrc(void) const;
00847 
00850         SceneBlendFactor getColourBlendFallbackDest(void) const;
00851 
00877         void setAlphaOperation(LayerBlendOperationEx op,
00878             LayerBlendSource source1 = LBS_TEXTURE,
00879             LayerBlendSource source2 = LBS_CURRENT,
00880             Real arg1 = 1.0,
00881             Real arg2 = 1.0,
00882             Real manualBlend = 0.0);
00883 
00895         void addEffect(TextureEffect& effect);
00896 
00924         void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
00925 
00936         void setScrollAnimation(Real uSpeed, Real vSpeed);
00937 
00946         void setRotateAnimation(Real speed);
00947 
00967         void setTransformAnimation( const TextureTransformType ttype,
00968             const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
00969 
00970 
00989         void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
00990 
00993         void removeAllEffects(void);
00994 
01000         void removeEffect( const TextureEffectType type );
01001 
01007         bool isBlank(void) const;
01008 
01011         void setBlank(void);
01012 
01015         bool isTextureLoadFailing() const { return mTextureLoadFailed; }
01016 
01019         void retryTextureLoad() { mTextureLoadFailed = false; }
01020 
01022         const EffectMap& getEffects(void) const;
01024         Real getAnimationDuration(void) const;
01025 
01035         void setTextureFiltering(TextureFilterOptions filterType);
01040         void setTextureFiltering(FilterType ftype, FilterOptions opts);
01049         void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
01051         FilterOptions getTextureFiltering(FilterType ftpye) const;
01052 
01058         void setTextureAnisotropy(unsigned int maxAniso);
01060         unsigned int getTextureAnisotropy() const;
01061 
01074         void setTextureMipmapBias(float bias) { mMipmapBias = bias; }
01078         float getTextureMipmapBias(void) const { return mMipmapBias; }
01079 
01087         void setCompositorReference(const String& compositorName, const String& textureName, size_t mrtIndex = 0);
01088 
01090         const String& getReferencedCompositorName() const { return mCompositorRefName; }
01092         const String& getReferencedTextureName() const { return mCompositorRefTexName; }
01094         size_t getReferencedMRTIndex() const { return mCompositorRefMrtIndex; }
01095     
01097         Pass* getParent(void) const { return mParent; }
01098 
01100         void _prepare(void);
01102         void _unprepare(void);
01104         void _load(void);
01106         void _unload(void);
01108         bool hasViewRelativeTextureCoordinateGeneration(void) const;
01109 
01111         bool isLoaded(void) const;
01113         void _notifyNeedsRecompile(void);
01114 
01120         void setName(const String& name);
01122         const String& getName(void) const { return mName; }
01123 
01127         void setTextureNameAlias(const String& name);
01130         const String& getTextureNameAlias(void) const { return mTextureNameAlias;}
01131 
01146         bool applyTextureAliases(const AliasTextureNamePairList& aliasList, const bool apply = true);
01147 
01149         void _notifyParent(Pass* parent);
01150 
01152         const TexturePtr& _getTexturePtr(void) const;
01154         const TexturePtr& _getTexturePtr(size_t frame) const;
01155     
01157         void _setTexturePtr(const TexturePtr& texptr);
01159         void _setTexturePtr(const TexturePtr& texptr, size_t frame);
01160 
01164         Controller<Real>* _getAnimController() const { return mAnimController; }
01165 protected:
01166         // State
01168         unsigned int mCurrentFrame;
01169 
01171         Real mAnimDuration;            
01172         bool mCubic; // is this a series of 6 2D textures to make up a cube?
01173         
01174         TextureType mTextureType; 
01175         PixelFormat mDesiredFormat;
01176         int mTextureSrcMipmaps; // Request number of mipmaps
01177 
01178         unsigned int mTextureCoordSetIndex;
01179         UVWAddressingMode mAddressMode;
01180         ColourValue mBorderColour;
01181 
01182         LayerBlendModeEx mColourBlendMode;
01183         SceneBlendFactor mColourBlendFallbackSrc;
01184         SceneBlendFactor mColourBlendFallbackDest;
01185 
01186         LayerBlendModeEx mAlphaBlendMode;
01187         mutable bool mTextureLoadFailed;
01188         bool mIsAlpha;
01189         bool mHwGamma;
01190 
01191         mutable bool mRecalcTexMatrix;
01192         Real mUMod, mVMod;
01193         Real mUScale, mVScale;
01194         Radian mRotate;
01195         mutable Matrix4 mTexModMatrix;
01196 
01198         FilterOptions mMinFilter;
01200         FilterOptions mMagFilter;
01202         FilterOptions mMipFilter;
01204         unsigned int mMaxAniso;
01206         float mMipmapBias;
01207 
01208         bool mIsDefaultAniso;
01209         bool mIsDefaultFiltering;
01211         BindingType mBindingType;
01213         ContentType mContentType;
01215         size_t mCompositorRefMrtIndex;
01216 
01217         //-----------------------------------------------------------------------------
01218         // Complex members (those that can't be copied using memcpy) are at the end to 
01219         // allow for fast copying of the basic members.
01220         //
01221         vector<String>::type mFrames;
01222         mutable vector<TexturePtr>::type mFramePtrs;
01223         String mName;               // optional name for the TUS
01224         String mTextureNameAlias;       // optional alias for texture frames
01225         EffectMap mEffects;
01227         String mCompositorRefName;
01228         String mCompositorRefTexName;
01229         //-----------------------------------------------------------------------------
01230 
01231         //-----------------------------------------------------------------------------
01232         // Pointer members (those that can't be copied using memcpy), and MUST
01233         // preserving even if assign from others
01234         //
01235         Pass* mParent;
01236         Controller<Real>* mAnimController;
01237         //-----------------------------------------------------------------------------
01238 
01239 
01242         void recalcTextureMatrix(void) const;
01243 
01246         void createAnimController(void);
01247 
01250         void createEffectController(TextureEffect& effect);
01251 
01253         void ensurePrepared(size_t frame) const;
01255         void ensureLoaded(size_t frame) const;
01256 
01257 
01258     };
01259 
01263 }
01264 
01265 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:36:28 2012