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 :

[Direct3D] D3DXCreateTextureFromFile, retourne toujours NULL


Sujet :

DirectX

  1. #1
    Membre averti

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut [Direct3D] D3DXCreateTextureFromFile, retourne toujours NULL
    Bonjour,

    débutant avec directx, j'ai crée une fonction pour charger un objet (Mesh) en me basant sur le bouquin "Beginning game programming" de Harbour.
    Je travaille avec une version française de Visual Studion 2003, Directx 9 v. Octobre 2005, et pour utiliser le CSoundManager fourni par Microsoft j'ai du définir le jeu de caractère à Unicode. Ca n'a pas posé de trop gros problèmes pour modifier tous les char en wchar_t jusqu'à cette fonction.

    Ci-dessous ma méthode

    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
    MODEL* LoadModel(wchar_t* filename)
    {
        MODEL* model = (MODEL*)malloc(sizeof(MODEL)) ;
        LPD3DXBUFFER matbuffer ;
        HRESULT result ;
     
        USES_CONVERSION ;
     
        result = D3DXLoadMeshFromX(filename, D3DXMESH_SYSTEMMEM, d3ddev, NULL, &matbuffer, NULL, &model->material_count, &model->mesh) ;
     
        if (result != D3D_OK)
            return NULL ;
     
        LPD3DXMATERIAL d3dxMaterials = (LPD3DXMATERIAL)matbuffer->GetBufferPointer() ;
        model->materials = new D3DMATERIAL9[model->material_count] ;
        model->textures  = new LPDIRECT3DTEXTURE9[model->material_count] ;
     
        //create the materials and textures
        for(DWORD i = 0 ; i < model->material_count ; i++)
        {
            model->materials[i] = d3dxMaterials[i].MatD3D ;
            model->materials[i].Ambient = model->materials[i].Diffuse ;
     
            model->textures[i] = NULL ;
            if(d3dxMaterials[i].pTextureFilename != NULL)
            {
    			result = D3DXCreateTextureFromFile(d3ddev, A2CW(d3dxMaterials[i].pTextureFilename), &model->textures[i]) ;
     
                if (result != D3D_OK)
    				return NULL ;
            }
        }
     
        matbuffer->Release() ;
     
        return model ;
    }
    la structure MODEL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    struct MODEL
    {
    	LPD3DXMESH mesh ;
    	D3DMATERIAL9* materials ;
    	LPDIRECT3DTEXTURE9* textures ;
    	DWORD material_count ;
    } ;
    Le problème : l'appel à la fonction D3DXCreateTextureFromFile(d3ddev, A2CW(d3dxMaterials[i].pTextureFilename), &model->textures[i]) ; ne me retourne jamais D3D_OK, échec à chaque fois. J'ai essayé avec les modèles tiger, airplane et landshark fournis dans le sdk, toujours la même chose.

    Je suppose que l'erreur provient de ma conversion avec la macro A2CW, mais je n'en suis pas sur.

    Quelqu'un a une idée ?

    Merci

  2. #2
    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
    Par défaut
    l'appel à la fonction D3DXCreateTextureFromFile(d3ddev, A2CW(d3dxMaterials[i].pTextureFilename), &model->textures[i]) ; ne me retourne jamais D3D_OK
    Il renvoie quoi ?

    Je suppose que l'erreur provient de ma conversion avec la macro A2CW, mais je n'en suis pas sur
    Comment est définie A2CW ?

  3. #3
    Membre averti

    Inscrit en
    Novembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 17
    Par défaut
    1) Lorsque j'ajoute un espion sur la variable result, j'ai recoit l'erreur "symbole result introuvable".
    Par contre dans l'affichage automatique des variables j'ai D3DXERR_INVALIDDATA et E_OUTOFMEMORY. Etonnant que les données ne soit pas valides puisque j'utilise des modèles fournis dans directx.


    2)A2CW, macro ATL 3.0, est défini dans le header (inclus) atlconv.h comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define A2CW(lpa) ((LPCWSTR)A2W(lpa))
    Et A2W :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define A2W(lpa) (\
    	((_lpa = lpa) == NULL) ? NULL : (\
    		_convert = (lstrlenA(_lpa)+1),\
    		ATLA2WHELPER((LPWSTR) alloca(_convert*2), _lpa, _convert, _acp)))
    cf ce guide assez interessant sur les strings en c++ http://www.codeproject.com/string/cppstringguide2.asp (à voire aussi les partie 1)

Discussions similaires

  1. getCodeBase() retourne toujours null
    Par adrien1 dans le forum Applets
    Réponses: 0
    Dernier message: 08/01/2014, 14h53
  2. Réponses: 5
    Dernier message: 23/02/2012, 08h48
  3. Réponses: 2
    Dernier message: 30/06/2011, 19h58
  4. ma fonction retourne toujours null
    Par haco28 dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 13/08/2009, 11h53
  5. [PB9] En exécutable, ImportFile retourne toujours NULL
    Par a_zoubir dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 20/12/2008, 19h02

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