IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

DirectGraphics et MFC dialog based


Sujet :

DirectX

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut 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 ) !

    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 : 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;
    	}
    result a la valeur : 2005530516 (0x8876086c) , ce qui ne correspond pas à une erreur donner dans msdn

    Voila ma fonction de rendu :

    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;
    }
    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
    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 : 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;
    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

    J'ai essayé d'être complet, j'espère que je vous ai pas noyé !

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Ok au temps pour moi, le problème venait de

    m_D3D9PresentParameters.BackBufferWidth = DX_WIDTH;
    m_D3D9PresentParameters.BackBufferHeight = DX_HEIGHT;

    qu'il fallait mettre au bonne dimension (la résolution de l'écran quoi !).

    m_D3D9PresentParameters.BackBufferWidth = 1280;
    m_D3D9PresentParameters.BackBufferHeight = 960;



    J'vais finir par y arriver !

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    En fait je vais reprendre ce topic !

    Y aurait-il un moyen pour justement lancer le mode plein écran avec une résolution perso' (du genre 800*500) ?

    Parce que maintenant que tout marche avec les résolutions proposées par la fonction j'aimerai pouvoir retourner à une résolution plus bâtarde tout en restant en plein écran.

    Edit : j'ai essayer de mettre une résolution bâtarde à l'aide de PowerStrip et ensuite de la récupérer avec DirectX.

    J'arrive à passer mon écran à la résolution souhaité avec PowerStrip, ensuite j'arrive a récupérer le DisplayMode correspondant avec mon objet Direct3D9, mais après je fais crashé mon drivers graphique lors de la création du device

    Y'a-t-il une solution ? Dois-je modifier mon pilote graphique ( ? Y'a-t-il un moyen d'ajouter une résolution dans EnumAdapterModes() ?

    Je travaille sur une ATI 9250.

Discussions similaires

  1. [MFC] Dialog base / SDI
    Par Nergaahl dans le forum MFC
    Réponses: 12
    Dernier message: 26/04/2007, 14h12
  2. Question sur MFC DIALOG BASED
    Par beb30 dans le forum MFC
    Réponses: 10
    Dernier message: 20/04/2006, 16h30
  3. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  4. "Tree Control" pour "Dialog Based"
    Par bigboomshakala dans le forum MFC
    Réponses: 4
    Dernier message: 22/04/2004, 10h32
  5. [MFC] Driver base de donnée
    Par kor dans le forum MFC
    Réponses: 5
    Dernier message: 07/01/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo