Bonjour
J'aurais voulu inclure directx dans un programme utilisant les MFC. J'ai récuperé le code d'une application Win32 fonctionnelle avec une classe DirectX:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class DirectX
{
public:
DirectX();
~DirectX();
LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 device;
D3DPRESENT_PARAMETERS d3dpp;
int init(HWND hWnd);
void adjust(int largeur, int hauteur);
};
voila les fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
int DirectX::init(HWND hWnd)
{
D3DDISPLAYMODE d3ddm;
D3DDEVTYPE devtype;
D3DCAPS9 caps;
d3d=Direct3DCreate9(D3D_SDK_VERSION);
if(!d3d)
  return 0;
if(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)<0)
  return 0;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.EnableAutoDepthStencil=TRUE;
d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
d3dpp.BackBufferFormat=d3ddm.Format;
if(d3d->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps)<0)
{
 MessageBox(hWnd,"Pas de device HAL, le programme fonctionnnera,
 mais lentement","Attention",MB_OK|MB_ICONWARNING|MB_SETFOREGROUND);
 
 devtype=D3DDEVTYPE_REF;
}
else
{
 devtype=D3DDEVTYPE_HAL;
}
if (d3d->CreateDevice(D3DADAPTER_DEFAULT,devtype,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&device)<0)
 return 0;
return 1;
}
void DirectX::adjust(int largeur, int hauteur)
{
D3DXMATRIX proj;
d3dpp.BackBufferWidth=largeur;
d3dpp.BackBufferHeight=hauteur;
device->Reset(&d3dpp);
device->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);
device->SetRenderState(D3DRS_AMBIENT,0xffffff);
D3DXMatrixPerspectiveFovLH(&proj,D3DX_PI/4,((float largeur)/hauteur,1.0f,500.0f);
device->SetTransform(D3DTS_PROJECTION,&proj);
}
Seulement mystère une erreur se génère au niveau de la fonction adjust:
Pourquoi? Init est bien appelé et largeur et hauteur ne sont pas nulles.
Quelqu'un saurait-il comment m'aider?

raphchar