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-2009 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 
00257         void setCubicTextureName( const String& name, bool forUVW = false );
00258 
00305         void setCubicTextureName( const String* const names, bool forUVW = false );
00306 
00328         void setAnimatedTextureName( const String& name, unsigned int numFrames, Real duration = 0 );
00329 
00351         void setAnimatedTextureName( const String* const names, unsigned int numFrames, Real duration = 0 );
00352 
00355         std::pair< size_t, size_t > getTextureDimensions( unsigned int frame = 0 ) const;
00356 
00364         void setCurrentFrame( unsigned int frameNumber );
00365 
00370         unsigned int getCurrentFrame(void) const;
00371 
00377         const String& getFrameTextureName(unsigned int frameNumber) const;
00378 
00386         void setFrameTextureName(const String& name, unsigned int frameNumber);
00387 
00393         void addFrameTextureName(const String& name);
00401         void deleteFrameTextureName(const size_t frameNumber);
00406         unsigned int getNumFrames(void) const;
00407 
00408 
00410         enum BindingType
00411         {
00413             BT_FRAGMENT = 0,
00417             BT_VERTEX = 1
00418         };
00421         enum ContentType
00422         {
00424             CONTENT_NAMED = 0,
00426             CONTENT_SHADOW = 1,
00428             CONTENT_COMPOSITOR = 2
00429         };
00430 
00440         void setBindingType(BindingType bt);
00441 
00444         BindingType getBindingType(void) const;
00445 
00451         void setContentType(ContentType ct);
00453         ContentType getContentType(void) const;
00454 
00461         bool isCubic(void) const;
00462 
00467         bool is3D(void) const;
00468 
00473         TextureType getTextureType(void) const;
00474 
00477         void setDesiredFormat(PixelFormat desiredFormat);
00478 
00481         PixelFormat getDesiredFormat(void) const;
00482 
00485         void setNumMipmaps(int numMipmaps);
00486 
00489         int getNumMipmaps(void) const;
00490 
00493         void setIsAlpha(bool isAlpha);
00494 
00497         bool getIsAlpha(void) const;
00498 
00500         void setHardwareGammaEnabled(bool enabled);
00502         bool isHardwareGammaEnabled() const;
00503 
00508         unsigned int getTextureCoordSet(void) const;
00509 
00517         void setTextureCoordSet(unsigned int set);
00518 
00534         void setTextureTransform(const Matrix4& xform);
00535 
00543         const Matrix4& getTextureTransform(void) const;
00544 
00557         void setTextureScroll(Real u, Real v);
00558 
00563         void setTextureUScroll(Real value);
00564         // get texture uscroll value
00565         Real getTextureUScroll(void) const;
00566 
00571         void setTextureVScroll(Real value);
00572         // get texture vscroll value
00573         Real getTextureVScroll(void) const;
00574 
00579         void setTextureUScale(Real value);
00580         // get texture uscale value
00581         Real getTextureUScale(void) const;
00582 
00587         void setTextureVScale(Real value);
00588         // get texture vscale value
00589         Real getTextureVScale(void) const;
00590 
00604         void setTextureScale(Real uScale, Real vScale);
00605 
00615         void setTextureRotate(const Radian& angle);
00616         // get texture rotation effects angle value
00617         const Radian& getTextureRotate(void) const;
00618 
00624         const UVWAddressingMode& getTextureAddressingMode(void) const;
00625 
00635         void setTextureAddressingMode( TextureAddressingMode tam);
00636 
00643         void setTextureAddressingMode( TextureAddressingMode u, 
00644             TextureAddressingMode v, TextureAddressingMode w);
00645 
00652         void setTextureAddressingMode( const UVWAddressingMode& uvw);
00653 
00661         void setTextureBorderColour(const ColourValue& colour);
00662 
00668         const ColourValue& getTextureBorderColour(void) const;
00669 
00734         void setColourOperationEx(
00735             LayerBlendOperationEx op,
00736             LayerBlendSource source1 = LBS_TEXTURE,
00737             LayerBlendSource source2 = LBS_CURRENT,
00738 
00739             const ColourValue& arg1 = ColourValue::White,
00740             const ColourValue& arg2 = ColourValue::White,
00741 
00742             Real manualBlend = 0.0);
00743 
00762         void setColourOperation( const LayerBlendOperation op);
00763 
00783         void setColourOpMultipassFallback( const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor);
00784 
00787         const LayerBlendModeEx& getColourBlendMode(void) const;
00788 
00791         const LayerBlendModeEx& getAlphaBlendMode(void) const;
00792 
00795         SceneBlendFactor getColourBlendFallbackSrc(void) const;
00796 
00799         SceneBlendFactor getColourBlendFallbackDest(void) const;
00800 
00826         void setAlphaOperation(LayerBlendOperationEx op,
00827             LayerBlendSource source1 = LBS_TEXTURE,
00828             LayerBlendSource source2 = LBS_CURRENT,
00829             Real arg1 = 1.0,
00830             Real arg2 = 1.0,
00831             Real manualBlend = 0.0);
00832 
00844         void addEffect(TextureEffect& effect);
00845 
00873         void setEnvironmentMap(bool enable, EnvMapType envMapType = ENV_CURVED);
00874 
00885         void setScrollAnimation(Real uSpeed, Real vSpeed);
00886 
00895         void setRotateAnimation(Real speed);
00896 
00916         void setTransformAnimation( const TextureTransformType ttype,
00917             const WaveformType waveType, Real base = 0, Real frequency = 1, Real phase = 0, Real amplitude = 1 );
00918 
00919 
00938         void setProjectiveTexturing(bool enabled, const Frustum* projectionSettings = 0);
00939 
00942         void removeAllEffects(void);
00943 
00949         void removeEffect( const TextureEffectType type );
00950 
00956         bool isBlank(void) const;
00957 
00960         void setBlank(void);
00961 
00964         bool isTextureLoadFailing() const { return mTextureLoadFailed; }
00965 
00968         void retryTextureLoad() { mTextureLoadFailed = false; }
00969 
00970         // get texture effects in a multimap paired array
00971         const EffectMap& getEffects(void) const;
00972         // get the animated-texture animation duration
00973         Real getAnimationDuration(void) const;
00974 
00984         void setTextureFiltering(TextureFilterOptions filterType);
00989         void setTextureFiltering(FilterType ftype, FilterOptions opts);
00998         void setTextureFiltering(FilterOptions minFilter, FilterOptions magFilter, FilterOptions mipFilter);
00999         // get the texture filtering for the given type
01000         FilterOptions getTextureFiltering(FilterType ftpye) const;
01001 
01007         void setTextureAnisotropy(unsigned int maxAniso);
01008         // get this layer texture anisotropy level
01009         unsigned int getTextureAnisotropy() const;
01010 
01023         void setTextureMipmapBias(float bias) { mMipmapBias = bias; }
01027         float getTextureMipmapBias(void) const { return mMipmapBias; }
01028 
01036         void setCompositorReference(const String& compositorName, const String& textureName, size_t mrtIndex = 0);
01037 
01039         const String& getReferencedCompositorName() const { return mCompositorRefName; }
01041         const String& getReferencedTextureName() const { return mCompositorRefTexName; }
01043         size_t getReferencedMRTIndex() const { return mCompositorRefMrtIndex; }
01044     
01046         Pass* getParent(void) const { return mParent; }
01047 
01049         void _prepare(void);
01051         void _unprepare(void);
01053         void _load(void);
01055         void _unload(void);
01057         bool hasViewRelativeTextureCoordinateGeneration(void) const;
01058 
01059         // Is this loaded?
01060         bool isLoaded(void) const;
01062         void _notifyNeedsRecompile(void);
01063 
01069         void setName(const String& name);
01071         const String& getName(void) const { return mName; }
01072 
01076         void setTextureNameAlias(const String& name);
01079         const String& getTextureNameAlias(void) const { return mTextureNameAlias;}
01080 
01095         bool applyTextureAliases(const AliasTextureNamePairList& aliasList, const bool apply = true);
01096 
01098         void _notifyParent(Pass* parent);
01099 
01101         const TexturePtr& _getTexturePtr(void) const;
01103         const TexturePtr& _getTexturePtr(size_t frame) const;
01104     
01106         void _setTexturePtr(const TexturePtr& texptr);
01108         void _setTexturePtr(const TexturePtr& texptr, size_t frame);
01109 
01113         Controller<Real>* _getAnimController() const { return mAnimController; }
01114 protected:
01115         // State
01117         unsigned int mCurrentFrame;
01118 
01120         Real mAnimDuration;            
01121         bool mCubic; // is this a series of 6 2D textures to make up a cube?
01122         
01123         TextureType mTextureType; 
01124         PixelFormat mDesiredFormat;
01125         int mTextureSrcMipmaps; // Request number of mipmaps
01126 
01127         unsigned int mTextureCoordSetIndex;
01128         UVWAddressingMode mAddressMode;
01129         ColourValue mBorderColour;
01130 
01131         LayerBlendModeEx mColourBlendMode;
01132         SceneBlendFactor mColourBlendFallbackSrc;
01133         SceneBlendFactor mColourBlendFallbackDest;
01134 
01135         LayerBlendModeEx mAlphaBlendMode;
01136         mutable bool mTextureLoadFailed;
01137         bool mIsAlpha;
01138         bool mHwGamma;
01139 
01140         mutable bool mRecalcTexMatrix;
01141         Real mUMod, mVMod;
01142         Real mUScale, mVScale;
01143         Radian mRotate;
01144         mutable Matrix4 mTexModMatrix;
01145 
01147         FilterOptions mMinFilter;
01149         FilterOptions mMagFilter;
01151         FilterOptions mMipFilter;
01153         unsigned int mMaxAniso;
01155         float mMipmapBias;
01156 
01157         bool mIsDefaultAniso;
01158         bool mIsDefaultFiltering;
01160         BindingType mBindingType;
01162         ContentType mContentType;
01164         size_t mCompositorRefMrtIndex;
01165 
01166         //-----------------------------------------------------------------------------
01167         // Complex members (those that can't be copied using memcpy) are at the end to 
01168         // allow for fast copying of the basic members.
01169         //
01170         vector<String>::type mFrames;
01171         mutable vector<TexturePtr>::type mFramePtrs;
01172         String mName;               // optional name for the TUS
01173         String mTextureNameAlias;       // optional alias for texture frames
01174         EffectMap mEffects;
01176         String mCompositorRefName;
01177         String mCompositorRefTexName;
01178         //-----------------------------------------------------------------------------
01179 
01180         //-----------------------------------------------------------------------------
01181         // Pointer members (those that can't be copied using memcpy), and MUST
01182         // preserving even if assign from others
01183         //
01184         Pass* mParent;
01185         Controller<Real>* mAnimController;
01186         //-----------------------------------------------------------------------------
01187 
01188 
01191         void recalcTextureMatrix(void) const;
01192 
01195         void createAnimController(void);
01196 
01199         void createEffectController(TextureEffect& effect);
01200 
01202         void ensurePrepared(size_t frame) const;
01204         void ensureLoaded(size_t frame) const;
01205 
01206 
01207     };
01208 
01212 }
01213 
01214 #endif

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Wed Nov 3 2010 19:24:52