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 :

Integration de directx 9 dans les MFC


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut Integration de directx 9 dans les MFC
    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:
    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?

    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

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    la création du device a du foirer, testes ta valeur de retour pour voir

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (d3d->CreateDevice(D3DADAPTER_DEFAULT,devtype,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&d3dpp,&device)<0)
    return 0;
    Pas d'erreur ici ni avant.

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    non mais est ce que tu la testes cette valeur de retour quand tu appelles ta fonction init, parce que ton erreur est claire : tu as un pointeur null.

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    Ca donne:
    d3d 0x...
    ->IUnknown {...}
    ->__vfptr 0x...
    [0] 0x...
    [1] 0x...
    [2] 0x00000000

    Ah la device les [0] [1] et [2] : impossible d'evaluer l'expression:

    C'est comment que je peux corriger cette erreur???

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par défaut
    Est-ce que le HWND de la fenêtre est valable ?
    Cela peut dépendre de cela.
    Regarde dans le SDK de Direct X il y a des exemples d'utilisation de MFC + Direct X

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2010, 12h58
  2. Réponses: 4
    Dernier message: 24/08/2009, 11h38
  3. barre d'outils dans les MFC de visual c++
    Par TDDev dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2009, 20h18
  4. stockages des informations dans les Mfc
    Par khafor dans le forum MFC
    Réponses: 1
    Dernier message: 25/02/2007, 19h16
  5. Réponses: 10
    Dernier message: 05/01/2007, 20h54

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