DirectGraphics et MFC dialog based
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 :zoubi:) !
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 :
Code:
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;
} |
result a la valeur : 2005530516 (0x8876086c) :aie:, ce qui ne correspond pas à une erreur donner dans msdn :(
Voila ma fonction de rendu :
Code:
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;
} |
Ma fonction de remplissage du VertexBuffer :
Code:
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;
} |
Les Structures de données :
Code:
1 2 3 4 5 6
| struct DX_BIT {
FLOAT x, y, z, rhw;
DWORD color;
};
DX_BIT* m_bufferVertex; |
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 :ccool:
J'ai essayé d'être complet, j'espère que je vous ai pas noyé !