Pozdrav,
evo dio koda gdje kreiram d3ddevice interfejs pa reko mozda ti i pomogne... veoma je vazno da popunis D3DPRESENT strukturu sa validnim vrijednostima (iako znam da znas to)... doduse kod checkdeviceformat funkcije sam koristi provjeru da li je moguce koristiti bar 16bit zbuffer kao minimum...
Code:
BOOL cD3DInit::CreateD3DWindow(int W, int H, HWND Hwnd, LPDIRECT3D9 D3D9)
{
D3DPRESENT_PARAMETERS PP;
memset(&PP,0,sizeof(PP));
if(FAILED(D3D9->CheckDeviceType(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8 ,D3DFMT_X8R8G8B8 ,FALSE)))
{
MessageBox(NULL,"Your video card is not supported!","Error!",MB_OK);
return FALSE;
}
if(FAILED(D3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DFMT_X8R8G8B8 ,D3DUSAGE_DEPTHSTENCIL,
D3DRTYPE_SURFACE,D3DFMT_D16)))
{
MessageBox(NULL,"Your video card is not supported! Need at least 16bit z-buffer!","Error!",MB_OK);
return FALSE;
}
HRESULT rez;
rez = D3D9->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &D3DCAPS);
if(rez==D3DERR_INVALIDCALL)
{
MessageBox(NULL,"GetDeviceCaps(): Invalid call!","Error",MB_OK);
}
else if(rez==D3DERR_INVALIDDEVICE)
{
MessageBox(NULL,"GetDeviceCaps(): Invalid device type!","Error",MB_OK);
}
else if(rez==D3DERR_OUTOFVIDEOMEMORY)
{
MessageBox(NULL,"GetDeviceCaps(): Out of memory!","Error",MB_OK);
}
if(FAILED(D3D9->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &D3DCAPS)))
{
MessageBox(NULL,"Could not get adapter capabilities!","Error",MB_OK);
return FALSE;
}
if((D3DCAPS.VertexShaderVersion < D3DVS_VERSION(1,1)) ||
(D3DCAPS.PixelShaderVersion < D3DPS_VERSION(1,1)))
{
MessageBox(NULL,"PS/VS shader version error!","Error",MB_OK);
return FALSE;
}
DWORD VP = 0;
if(D3DCAPS.VertexProcessingCaps != 0)
VP |= D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
VP |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
PP.Windowed = FALSE;
PP.SwapEffect = D3DSWAPEFFECT_DISCARD;
PP.BackBufferCount = 1;
PP.BackBufferFormat = D3DFMT_X8R8G8B8;
PP.BackBufferWidth = W;
PP.BackBufferHeight = H;
PP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
PP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
PP.MultiSampleType = D3DMULTISAMPLE_NONE;
PP.EnableAutoDepthStencil = TRUE;
PP.AutoDepthStencilFormat = D3DFMT_D24X8;
D3D9->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
Hwnd,
VP,
&PP,
&D3DDEVICE);
if(D3DDEVICE == NULL)
{
return FALSE;
}
// Get basic adapter information
D3DADAPTER_IDENTIFIER9 AdapInfo;
memset(&AdapInfo,0,sizeof(D3DADAPTER_IDENTIFIER9));
if(SUCCEEDED(D3D9->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &AdapInfo)))
{
wsprintf(AdapterName,"Adapter: %s",AdapInfo.Description);
wsprintf(AdapterDriver,"Driver: %s",AdapInfo.Driver);
}
// If everthing went ok set our default render states
//Turn off the Z-buffer
D3DDEVICE->SetRenderState(D3DRS_ZENABLE, TRUE);
// Turn light off
D3DDEVICE->SetRenderState(D3DRS_LIGHTING, FALSE);
// Turn ambient light on
D3DDEVICE->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(255,255,255));
// Disable culling
D3DDEVICE->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
// Bilinear texture filtering
D3DDEVICE->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
D3DDEVICE->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
return TRUE;
}
Nadam se da ce ti pomoci...