Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreD3D7Texture.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 © 2000-2002 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 _D3DTexture_H__
00026 #define _D3DTexture_H__
00027 
00028 #include "OgreD3D7Prerequisites.h"
00029 #include "OgreTexture.h"
00030 #include "OgreRenderTarget.h"
00031 #include "OgreRenderTexture.h"
00032 #include "OgreRenderTargetListener.h"
00033 
00034 namespace Ogre {
00035 
00038     class D3DTexture : public Texture
00039     {
00040     public:
00041         // Constructor, called from D3DTextureManager
00042         D3DTexture( const String& name, TextureType texType, IDirect3DDevice7 * lpDirect3dDevice, TextureUsage usage );
00044         D3DTexture( 
00045             const String& name, 
00046             TextureType texType, 
00047             IDirect3DDevice7 * lpDirect3dDevice, 
00048             uint width, 
00049             uint height, 
00050             uint num_mips,
00051             PixelFormat format,
00052             TextureUsage usage );
00053         virtual ~D3DTexture();
00054 
00055         virtual void load(void);
00056         virtual void loadImage( const Image &img );
00057         virtual void loadImage3D( const Image imgs[]);
00058         virtual void blitToTexture( const Image &src, unsigned uStartX, unsigned uStartY );        
00059         virtual void blitImage( const Image& src, 
00060             const Image::Rect imgRect, const Image::Rect texRect );
00061         virtual void blitImage3D(const Image src[],
00062             const Image::Rect imgRect, const Image::Rect texRect );
00063         virtual void unload(void);
00064         virtual void copyToTexture( Texture * target );
00065 
00067         LPDIRECTDRAWSURFACE7 getDDSurface(void);
00068 
00069     protected:
00070         IDirect3DDevice7 * mD3DDevice;       
00071         IDirectDrawSurface7 * mSurface;      
00072 
00073         String mCubeFaceNames[6];
00074 
00075         
00076         void createSurface(void);
00077         void createSurface2D(void);
00078         void createSurface3D(void);
00079 
00081         void _chooseD3DFormat(DDPIXELFORMAT &ddpf);
00082 
00084         void _constructCubeFaceNames(const String name);
00085 
00087         String _getCubeFaceName(unsigned char face) const
00088         { assert(face < 6); return mCubeFaceNames[face]; }
00090         static unsigned short _getPFBpp(PixelFormat ogrePF)
00091         { return Image::getNumElemBits(ogrePF); }
00092     };
00093 
00094     class D3D7RenderTexture : public RenderTexture
00095     {
00096     public:
00097         D3D7RenderTexture( const String & name, uint width, uint height )
00098             : RenderTexture( name, width, height )
00099         {
00100             mPrivateTex = TextureManager::getSingleton().createManual( mName + 
00101                 "_PRIVATE##", TEX_TYPE_2D, mWidth, mHeight, 0, PF_R8G8B8, TU_RENDERTARGET );
00102         }
00103 
00104         virtual ~D3D7RenderTexture()
00105         {
00106             mPrivateTex->unload();
00107             delete mPrivateTex;
00108         }
00109 
00110         bool requiresTextureFlipping() const { return false; }
00111 
00112         virtual void getCustomAttribute( const String& name, void* pData )
00113         {
00114             if( name == "DDBACKBUFFER" )
00115             {
00116                 LPDIRECTDRAWSURFACE7 *pSurf = (LPDIRECTDRAWSURFACE7*)pData;
00117 
00118                 *pSurf = ((D3DTexture*)mPrivateTex)->getDDSurface();
00119                 return;
00120             }
00121             else if( name == "DDFRONTBUFFER" )
00122             {
00123                 LPDIRECTDRAWSURFACE7 *pSurf = (LPDIRECTDRAWSURFACE7*)pData;
00124 
00125                 *pSurf = ((D3DTexture*)mPrivateTex)->getDDSurface();
00126                 return;
00127             }
00128             else if( name == "HWND" )
00129             {
00130                 HWND *pHwnd = (HWND*)pData;
00131 
00132                 *pHwnd = NULL;
00133                 return;
00134             }
00135             else if( name == "isTexture" )
00136             {
00137                 bool *b = reinterpret_cast< bool * >( pData );
00138                 *b = true;
00139 
00140                 return;
00141             }
00142         }
00143         virtual void writeContentsToFile( const String & filename ) {}
00144 
00145     protected:
00147         Texture * mPrivateTex;
00148 
00149     protected:
00150         virtual void _copyToTexture()
00151         {
00152             // Copy the newly-rendered data to the public texture surface.
00153             mPrivateTex->copyToTexture( mTexture );
00154         }
00155     };
00156 }
00157 
00158 #endif

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:19 2004