1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
HRESULT CDoomD3D9View::InitD3D9(HWND hWnd)
{
HRESULT hr;
D3DFORMAT d3dformat; // format de surface
D3DDISPLAYMODE d3ddm; // structure displaymode
D3DPRESENT_PARAMETERS d3dpp; // structure pour création objet D3D
if ((lpD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL) return E_FAIL;
// Utilise le mode d'affichage courant
if (FAILED(lpD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))return E_FAIL;
// remplissage de la structure de device D3D9
ZeroMemory(&d3dpp, sizeof(d3dpp)); // raz descripteur de surface
d3dpp.hDeviceWindow = hWnd;
d3dpp.BackBufferWidth = 1280;
d3dpp.BackBufferHeight = 1024;
// d3dpp.BackBufferFormat = d3ddm.Format; // Format du back buffer
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.Windowed = TRUE; // Mode fenêtré
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; // Pas deffet
d3dpp.Flags =D3DPRESENTFLAG_LOCKABLE_BACKBUFFER ; // backbuffer verrouillable pour écriture directe
d3dpp.BackBufferCount = 1; // nbre de backbuffer : 1 seul
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.EnableAutoDepthStencil = false;
// d3dpp.AutoDepthStencilFormat = NULL;
d3dpp.Flags = D3DPRESENTFLAG_DEVICECLIP|D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
// Création du device D3D
if (FAILED(lpD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd
,D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,&lpD3DDevice)))
{OutputDebugString( TEXT("CreateDevice échoué\n"));return E_FAIL;} // Echec
else {OutputDebugString( TEXT("CreateDevice ok\n") );}
//Pour la transparence
hr=lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
if (hr!=D3D_OK) DXTRACE_ERR( "Erreur SetRenderState D3DRS_ALPHABLENDENABLE", hr );
hr=lpD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
if (hr!=D3D_OK) DXTRACE_ERR( "Erreur SetRenderState D3DBLEND_SRCALPHA", hr );
hr=lpD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
if (hr!=D3D_OK) DXTRACE_ERR( "Erreur SetRenderState D3DBLEND_INVSRCALPHA", hr );
// création backbuffer au format écran
d3dformat=D3DFMT_X8R8G8B8 ;
lpD3DBackBuffer=CreateSurface(LE,HE,d3dformat);
if (lpD3DBackBuffer==NULL){ OutputDebugString( TEXT("Initialisations() lpD3DBackBuffer non créée\n"));}
hr=lpD3DDevice->GetBackBuffer(0, 0,D3DBACKBUFFER_TYPE_MONO,&lpD3DBackBuffer); //acquisition du backbuffer
if (hr!=D3D_OK)DXTRACE_ERR( "Erreur Init GetBackBuffer", hr );
hr=lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET,D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);// Effacement backbuffer
if (hr!=D3D_OK)DXTRACE_ERR( "Erreur Initialisations() lpD3DDevice->Clear ",hr);
OutputDebugString( TEXT("Objet D3D9 créé\n") );
return S_OK;
} |