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 |