|
|

楼主 |
发表于 2007-7-17 19:52:00
|
显示全部楼层
Re:以MFC的SDI去??D3D的程式
附上我CreateDevice的Code,是不是初始化?r??档???
bool CAppDrawBase::Init3D(HWND hWnd,int width, int height,D3DDEVTYPE deviceType)
{
m_hWnd=hWnd;
m_nWidth=width;
m_nHeight=height;
m_BackBufferRect.SetRect(0,0,width,height);
//
// Init D3D:
//
HRESULT hr = 0;
// Step 1: Create the IDirect3D9 object.
m_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if( !m_pD3D )
{
::MessageBox(0, L"Direct3DCreate9() - FAILED", 0, 0);
return false;
}
// Step 2: Check for hardware vp.
D3DCAPS9 caps;
m_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);
int vp = 0;
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
// Step 3: Fill out the D3DPRESENT_PARAMETERS structure.
//#define _USE_ADAPTER_FORMAT_
#ifdef _USE_ADAPTER_FORMAT_
D3DDISPLAYMODE d3ddm;
if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
return FALSE;
#endif//_USE_ADAPTER_FORMAT_
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.BackBufferWidth = width;
d3dpp.BackBufferHeight = height;
#ifdef _USE_ADAPTER_FORMAT_
d3dpp.BackBufferFormat = d3ddm.Format;
#else
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
#endif//_USE_ADAPTER_FORMAT_
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = hWnd;
d3dpp.Windowed = TRUE;
d3dpp.EnableAutoDepthStencil = TRUE;
//d3dpp.EnableAutoDepthStencil = FALSE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
// Step 4: Create the device.
hr = m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, // primary adapter
deviceType, // device type
hWnd, // window associated with device
vp, // vertex processing
&d3dpp, // present parameters
&m_pD3DDevice); // return created device
if( FAILED(hr) )
{
// try again using a 16-bit depth buffer
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
hr = m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT,
deviceType,
hWnd,
vp,
&d3dpp,
&m_pD3DDevice);
if( FAILED(hr) )
{
m_pD3D->Release(); // done with d3d9 object
::MessageBox(0, L"CreateDevice() - FAILED", 0, 0);
return false;
}
}
//m_pD3D->Release(); // done with m_pD3D object
//#define _ALPHA_CHANNEL_
#ifdef _ALPHA_CHANNEL_
m_pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
m_pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
m_pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1,D3DTA_TEXTURE );
#endif//
InitFPSFornt();
m_lastTime = (float)timeGetTime();
return true;
} |
|