source: NonGTP/ImageDebugger/include/imdebugd3d9.h @ 856

Revision 856, 2.5 KB checked in by igarcia, 18 years ago (diff)
Line 
1#ifndef __IMDEBUGD3D_H__
2#define __IMDEBUGD3D_H__
3
4#include <imdebug.h>
5#include <d3d9.h>
6#include <string>
7
8using namespace std;
9
10string format2string(D3DFORMAT format);
11
12inline HRESULT
13imdebugRenderTarget(IDirect3DSurface9 *pRenderTarget, IDirect3DDevice9 *pd3dDevice, char *argstring = NULL)
14{
15    HRESULT hr = S_OK;
16    IDirect3DTexture9 *pTempTex;
17    IDirect3DSurface9 *pData;
18    D3DSURFACE_DESC desc;
19    V( pRenderTarget->GetDesc(&desc) );
20
21    V( D3DXCreateTexture(pd3dDevice, desc.Width, desc.Height, 0, 0, desc.Format, D3DPOOL_SYSTEMMEM, &pTempTex) );
22    V( pTempTex->GetSurfaceLevel(0, &pData) );
23    V( pd3dDevice->GetRenderTargetData(pRenderTarget, pData));
24
25    D3DLOCKED_RECT lockedRect;
26    V( pData->LockRect(&lockedRect, NULL, D3DLOCK_READONLY) );
27
28    string s = (NULL == argstring) ? format2string(desc.Format) : argstring;
29
30    imdebug(s.append(" w=%d h=%d %p").c_str(), desc.Width, desc.Height, lockedRect.pBits);
31
32    pData->UnlockRect();
33
34    SAFE_RELEASE(pTempTex);
35    SAFE_RELEASE(pData);
36
37    return hr;
38}
39
40
41inline string format2string(D3DFORMAT format)
42{
43    switch(format)
44    {
45    case D3DFMT_R16F:
46    case D3DFMT_R32F:
47        return "lum b=32f";
48        break;
49    case D3DFMT_A8:
50    case D3DFMT_P8:
51    case D3DFMT_L8:
52    case D3DFMT_L16:
53    case D3DFMT_D16_LOCKABLE:
54    case D3DFMT_D32F_LOCKABLE:
55        return "lum";
56        break;
57    case D3DFMT_G16R16F:
58        return "luma b=32f";
59        break;
60    case D3DFMT_V8U8:
61    case D3DFMT_V16U16:
62    case D3DFMT_G16R16:
63    case D3DFMT_A8P8:
64    case D3DFMT_A8L8:
65    case D3DFMT_A4L4:
66        return "luma";
67        break;
68    case D3DFMT_R3G3B2:
69    case D3DFMT_R5G6B5:
70    case D3DFMT_R8G8B8:
71    case D3DFMT_CxV8U8:
72    case D3DFMT_L6V5U5:
73        return "rgb";
74        break;
75    case D3DFMT_X4R4G4B4:
76    case D3DFMT_A8R3G3B2:
77    case D3DFMT_A4R4G4B4:
78    case D3DFMT_A1R5G5B5:
79    case D3DFMT_X1R5G5B5:
80    case D3DFMT_X8R8G8B8:
81    case D3DFMT_A8R8G8B8:
82    case D3DFMT_Q16W16V16U16:
83    case D3DFMT_Q8W8V8U8:
84    case D3DFMT_A2W10V10U10:
85    case D3DFMT_X8L8V8U8:
86        return "rgba";
87        break;
88    case D3DFMT_X8B8G8R8:
89    case D3DFMT_A8B8G8R8:
90    case D3DFMT_A16B16G16R16:
91    case D3DFMT_A2R10G10B10:
92    case D3DFMT_A2B10G10R10:
93        return "abgr";
94        break;
95    case D3DFMT_A16B16G16R16F:
96    case D3DFMT_A32B32G32R32F:
97        return "abgr b=32f";
98        break;
99    default:
100        return "rgba";
101        break;
102    }
103}
104#endif
Note: See TracBrowser for help on using the repository browser.