Bonjour je reprends un sujet sur ce forum car il concerne aussi bien les MFC que directx:
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:
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 class DirectX { public: DirectX(); ~DirectX(); LPDIRECT3D9 d3d; LPDIRECT3DDEVICE9 device; D3DPRESENT_PARAMETERS d3dpp; int init(HWND hWnd); void adjust(int largeur, int hauteur); };
Seulement mystère une erreur se génère au niveau de la fonction adjust:
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); }
Pourquoi? Init est bien appelé et largeur et hauteur ne sont pas nulles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part device->Reset(&d3dpp);
Quelqu'un saurait-il comment m'aider?
L' erreur généré à l'execution est:Exception non gérée à 0x00a510ff dans DirectxApp.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
raphchar
Partager