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

Boost C++ Discussion :

Problème boost et DirectX9


Sujet :

Boost C++

  1. #1
    En attente de confirmation mail
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 56
    Points : 52
    Points
    52
    Par défaut Problème boost et DirectX9
    Bonjour à tous.
    D'abord je me présente je suis tout nouveau et voici mon premier poste.
    Et merci pour ce future accueil chaleureux ^^

    Voici mon problème : je possède une classe D3D9RenderSystem dans laquelle ce trouve cette propriété privée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDirect3D9* mD3D9Object;
    et une méthode SetupRenderSystem donc voici le code :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    bool D3D9RenderSystem::SetupRenderSystem(HWND Hwnd)
    {
     
    	HRESULT hr = 0;
     
    	// Etape 1 : Création de l'objet IDirect3D9
        mD3D9Object = Direct3DCreate9(D3D_SDK_VERSION);
        if(mD3D9Object == NULL)
        {
             ::MessageBox(Hwnd, "Direct3DCreate9 - Failed", "FAILED", MB_OK);
             return false;
        }
     
    	// Etape 2: Teste si la carte graphique supporte vertex processing
    	D3DCAPS9 caps;
     
    	// [para] D3DADAPTER_DEFAULT : physical display adapter
    	// [para] D3DDEVTYPE_HAL : type du device (D3DDEVTYPE_HAL -> hardware (cg) / D3DDEVTYPE_REF -> software (proc))
    	// [para] caps : structure D3DCAPS9
    	mD3D9Object->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps);
     
    	int vp = 0;
    	if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
    		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    	else
    		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
     
    	// Etape 3 : On récupère de la taille de la fenêtre
        RECT Rect;
        GetClientRect(Hwnd, &Rect);
     
    	// Etape 4: On renseigne la structure D3DPRESENT_PARAMETERS qui permet d'initialiser les paramètres du device 
    	D3DPRESENT_PARAMETERS d3dpp;
    	d3dpp.BackBufferWidth            = Rect.right - Rect.left;			// Largeur du back buffe en pixel
    	d3dpp.BackBufferHeight           = Rect.bottom - Rect.top;			// Hauter du back buffer en pixel
    	d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;					// Format de pixel du back buffer
    	d3dpp.BackBufferCount            = 1;								// Nombre de back buffer
    	d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;				// Type de l'échantillon
    	d3dpp.MultiSampleQuality         = 0;								// Qualité de l'échantillon
    	d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD;			// Mode d'échange avec le back buffer
    	d3dpp.hDeviceWindow              = Hwnd;							// Handle de la fenêtre associé avec le device (_d3d9)
    	d3dpp.Windowed                   = true;							// Fenêtré ou plein écran ?
    	d3dpp.EnableAutoDepthStencil     = true;							// Activation du stencil buffer et du depth buffer
    	d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;					// Format du depth/stencil buffer
    	d3dpp.Flags                      = 0;								// Flag additionnels concerant les buffers
    	d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;			// Taux de rafraichissement
    	d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;	//
     
    	// Etape 5: Création du device.
    	hr = mD3D9Object->CreateDevice(
    		D3DADAPTER_DEFAULT,					// Physical display adapter
    		D3DDEVTYPE_HAL,						// Type du device
    		Hwnd,								// Fenêtre associé au device
    		vp,									// vertex processing
    	    &d3dpp,								// Present parameters structure
    	    &mDevice);							// Retourne le device crée
     
    	if(FAILED(hr))
    	{
    		// On réessaie en réglant le buffer de profondeur sur 16 bits
    		d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
     
    		hr = mD3D9Object->CreateDevice(
    			D3DADAPTER_DEFAULT,
    			D3DDEVTYPE_HAL,
    			Hwnd,
    			vp,
    			&d3dpp,
    			&mDevice);
     
    		// Si la création échoue une nouvelle fois on supprime le device et l'application stoppe
    		if(FAILED(hr))
    		{
    			mD3D9Object->Release(); 
    			::MessageBox(0, L"CreateDevice() - FAILED", L"Failed", MB_OK);
    			return false;
    		}
    	}
            return true;
    }
    Maintenant j'utilise la librarie boost donc mon objet Direct3D devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shared_ptr<IDirect3D9> mD3D9Object;
    L'initialisation devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mD3D9Object.reset(Direct3DCreate9(D3D_SDK_VERSION));
    Seulement quand je lance mon application tous va bien, mais à la sortie le compilateur me lève une exception de type Assert

    Je pense que ca vient de l'initialisation de mon object Direct3D mais je ne vois pas comment le faire correctement et impossible avec un new.

    Can you help me ??

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    IDirect3D9 est une interface COM, nul besoin d'utiliser boost::shared_ptr
    CComPtr est bien plus adapté (avec QueryInterface automatique etc...).

    Je ne sais pas si boost propose une implémentation COM (qui contrairement à ce qu'on peut croire, n'a rien à voir avec windows).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as même directement (dans je ne sais plus quel en-tête Microsoft) des IDirect3D9Ptr (même chose pour tous les types COM DirectX).

  4. #4
    En attente de confirmation mail
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 56
    Points : 52
    Points
    52
    Par défaut
    Merci à vous deux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problèmes Boost et Eclipse (et MinGW ?)
    Par Avel13 dans le forum Threads & Processus
    Réponses: 10
    Dernier message: 09/01/2013, 22h04
  2. Problème boost::thread_group boost::signals2
    Par roy_44 dans le forum C++
    Réponses: 3
    Dernier message: 12/02/2012, 10h05
  3. [Boost] Problème de compilation (io_fwd.hpp)
    Par bigquick dans le forum MFC
    Réponses: 3
    Dernier message: 22/04/2005, 09h48
  4. Problème d'intégration de directX9...
    Par Coderm@n dans le forum DirectX
    Réponses: 4
    Dernier message: 12/03/2005, 23h52
  5. Problème d'image avec DirectX9 et c# VS.net...
    Par lilly_lilly dans le forum DirectX
    Réponses: 1
    Dernier message: 02/03/2004, 14h02

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