Cubemap D3DFMT_DXT1으로 저장하기.

반응형


렌더타겟으로 만든 큐브맵 1.
pDevice->CreateCubeTexture(iCubemapSize, 1, D3DUSAGE_RENDERTARGET, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &apCubeMapFp, NULL)

저장용으로 만든 큐브맵 2.
pDevice->CreateCubeTexture(iCubemapSize, 1, D3DUSAGE_DYNAMIC, D3DFMT_DXT1, D3DPOOL_DEFAULT, &apSaveCubeMapFp, NULL)

 LPDIRECT3DSURFACE9 pkSurfSrc;
  LPDIRECT3DSURFACE9 pkSurfDst;
  for(int i=0; i<6; i++)
  {
  apCubeMapFp->GetCubeMapSurface((D3DCUBEMAP_FACES)i, 0, &pkSurfSrc );
   apSaveCubeMapFp->GetCubeMapSurface((D3DCUBEMAP_FACES)i,  0, &pkSurfDst );

//  pDevice->StretchRect(pkSurfSrc,NULL,pkSurfDst,NULL,D3DTEXF_LINEAR );
   D3DXLoadSurfaceFromSurface( pkSurfDst, NULL, NULL, pkSurfSrc, NULL, NULL, D3DX_FILTER_NONE, 0 );
  pkSurfDst->Release();
  pkSurfSrc->Release();
  }

StretchRect 이 함수는 cubemap은 지원을 하지 않는다.
그래서 D3DXLoadSurfaceFromSurface 함수를 사용한다.
이 함수는 다른 서페이스에서 서페이스를 로드해 준다.
6면의 서페이스를 모두 로드해 준 후에
D3DXSaveTextureToFile(kDlg.GetFileName(), D3DXIFF_DDS, apSaveCubeMapFp, NULL); 
저장을 해주면 된다.

삽질의 원인
HRESULT CreateCubeTexture(
  UINT EdgeLength,
  UINT Levels,
  DWORD Usage,                             이녀석!!!!!
  D3DFORMAT Format,
  D3DPOOL Pool,
  IDirect3DCubeTexture9 ** ppCubeTexture,
  HANDLE* pSharedHandle
);

Usage를 습관적으로 0으로 해주었다.
그래서 파일로 저장시 실패를 했다.
Direct3D9: (ERROR) :The format is not supported by this device. CreateRenderTarget/CreateDepthStencil failed
Direct3D9: (ERROR) :Failure trying to create render-target
이런 에러가 뜨더란 말이지...

'유용한 것들_func' 카테고리의 다른 글

MultiByteToWideChar  (0) 2009.11.12
CString <-> int , CString <-> double 변환  (0) 2009.09.04
FreeType 을 이용한 TrueType Font 파일 읽기  (0) 2009.08.18
USES_CONVERSION  (0) 2009.08.09
vld 사용법  (0) 2009.07.26
TAGS.

Comments