Bonjour ,
J'ai un projet MFC dialog based (pas le choix sur la techno') avec lequel j'aimerai utiliser DirectGraphics, pour simplement afficher point par point en plein écran.
J'avais déjà posé des questions sur le sujet dans la partie MFC : Ancien sujet ; mais depuis j'ai avancé (et je me dis que mon bonheur est peut-être par ici ) !
J'arrive maintenant à afficher une boite de dialogue (CDialog) qui me sors un rendu en fenêtré (m_D3D9PresentParameters.Windowed = TRUE).
Mais dès que j'active le plein écran (m_D3D9PresentParameters.Windowed = FALSE) j'ai une erreur :
result a la valeur : 2005530516 (0x8876086c) , ce qui ne correspond pas à une erreur donner dans msdn
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 HRESULT result = 0; m_pD3D9 = Direct3DCreate9(D3D_SDK_VERSION); if(!m_pD3D9) { MessageBox("Erreur lors de l'initialisation de DirectGraphics","Direct3DCreate9() - FAILED",MB_OK|MB_ICONERROR); return E_FAIL; } m_D3D9PresentParameters.BackBufferWidth = DX_WIDTH; m_D3D9PresentParameters.BackBufferHeight = DX_HEIGHT; m_D3D9PresentParameters.BackBufferFormat = D3DFMT_R5G6B5; m_D3D9PresentParameters.BackBufferCount = 1; m_D3D9PresentParameters.MultiSampleType = D3DMULTISAMPLE_NONE; m_D3D9PresentParameters.MultiSampleQuality = 0; m_D3D9PresentParameters.SwapEffect = D3DSWAPEFFECT_DISCARD; m_D3D9PresentParameters.hDeviceWindow = hWnd; m_D3D9PresentParameters.Windowed = FALSE; m_D3D9PresentParameters.EnableAutoDepthStencil = TRUE; m_D3D9PresentParameters.AutoDepthStencilFormat = D3DFMT_D16; m_D3D9PresentParameters.Flags = 0; m_D3D9PresentParameters.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; m_D3D9PresentParameters.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; // Erreur ici !!!!!!!! result = m_pD3D9->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&m_D3D9PresentParameters,&m_pD3D9Device); if( FAILED(result) ){ MessageBox("Erreur lors de l'initialisation de DirectGraphics","CreateDevice() - FAILED",MB_OK|MB_ICONERROR); return result; }
Voila ma fonction de rendu :
Ma fonction de remplissage du VertexBuffer :
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 render() { HRESULT result; m_pD3D9Device->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,0x00000000,1.0f,0); m_pD3D9Device->BeginScene(); result = m_pD3D9Device->SetStreamSource(0,m_pD3D9VertexBuffer,0,sizeof(DX_BIT)); if(result != S_OK) { MessageBox("Erreur lors du rendu des données","SetStreamSource() - FAILED",MB_OK|MB_ICONERROR); return result; } result = m_pD3D9Device->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE); if(result != S_OK) { MessageBox("Erreur lors du rendu des données","SetFVF() - FAILED",MB_OK|MB_ICONERROR); return result; } result = m_pD3D9Device->DrawPrimitive(D3DPT_POINTLIST,0,DX_BUFFER_SIZE); if(result != S_OK) { MessageBox("Erreur lors du rendu des données","DrawPrimitive() - FAILED",MB_OK|MB_ICONERROR); return result; } m_pD3D9Device->EndScene(); m_pD3D9Device->Present(NULL, NULL, NULL, NULL); return S_OK; }
Les Structures de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 update() { HRESULT result; VOID* data; result = m_pD3D9VertexBuffer->Lock(0,0,(void**)&data,0); if(result != S_OK) { MessageBox("Erreur lors du traitement des données","Lock() - FAILED",MB_OK|MB_ICONERROR); return result; } memcpy(data,m_bufferVertex,sizeof(m_bufferVertex)); m_pD3D9VertexBuffer->Unlock(); return S_OK; }
Voila si quelqu'un sait comment utiliser DirectGraphics en plein écran dans un projet DialogBased (si c'est possible au moins !), et voit une solution à mon problème ... ça serait sympa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct DX_BIT { FLOAT x, y, z, rhw; DWORD color; }; DX_BIT* m_bufferVertex;
J'ai essayé d'être complet, j'espère que je vous ai pas noyé !
Partager