topical media & game development

talk show tell print

graphic-directx-game-22-DisplacementMap-DrawableTex2D.cpp / cpp



  //=============================================================================
  // DrawableTex2D.cpp by Frank Luna (C) 2005 All Rights Reserved.
  //=============================================================================
  
  include <DrawableTex2D.h>
  include <d3dApp.h>
  
  DrawableTex2D::DrawableTex2D(UINT width, UINT height, UINT mipLevels,
                  D3DFORMAT texFormat, bool useDepthBuffer,
                  D3DFORMAT depthFormat, D3DVIEWPORT9& viewport,  bool autoGenMips)
  : mTex(0), mRTS(0), mTopSurf(0), mWidth(width), mHeight(height), 
    mMipLevels(mipLevels), mTexFormat(texFormat), mUseDepthBuffer(useDepthBuffer),
    mDepthFormat(depthFormat), mViewPort(viewport), mAutoGenMips(autoGenMips)
  {
  }
  
  DrawableTex2D::~DrawableTex2D()
  {
          onLostDevice();
  }
  
  IDirect3DTexture9* DrawableTex2D::d3dTex()
  {
          return mTex;
  }
  
  void DrawableTex2D::onLostDevice()
  {
          ReleaseCOM(mTex);
          ReleaseCOM(mRTS);
          ReleaseCOM(mTopSurf);
  }
  
  void DrawableTex2D::onResetDevice()
  {
          UINT usage = D3DUSAGE_RENDERTARGET;
          if(mAutoGenMips)
                  usage |= D3DUSAGE_AUTOGENMIPMAP;
  
          HR(D3DXCreateTexture(gd3dDevice, mWidth, mHeight, mMipLevels, usage, mTexFormat, D3DPOOL_DEFAULT, &mTex));
          HR(D3DXCreateRenderToSurface(gd3dDevice, mWidth, mHeight, mTexFormat, mUseDepthBuffer, mDepthFormat, &mRTS));
          HR(mTex->GetSurfaceLevel(0, &mTopSurf));
  }
  
  void DrawableTex2D::beginScene()
  {
          mRTS->BeginScene(mTopSurf, &mViewPort);
  }
  
  void DrawableTex2D::endScene()
  {
          mRTS->EndScene(D3DX_FILTER_NONE);
  }


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.