-
#define D3D_DEBUG_INFO
Code:
1 2
|
#define D3D_DEBUG_INFO |
J'utilise ce define pour accéder aux différents éléments créés par COM dans la fenêtre de débuggeur.
Et bien bizarrement depuis que j'ai utilisé "start with direct3d debugging" de mon compil Visual C++, j'ai des erreurs d'accès aux interfaces COM dans mes programmes en mode debug mais pas en mode release. Evidemment puisque en mode release D3D_DEBUG_INFO n'est pas définit.
Est-ce que c'est un bug, ou il y a une manipulation à faire quelque part.
-
Il faut switcher DX en debug runtime.
-
Bonjour Laurent-USA ça fait plaisir. Je t'ai envoyé un mail aujourd'hui, une question au sujet de ton livre :wink: .
Pour mon histoire, il s'avère que je n'ai pas accès aux informations de débugging de D3D_DEBUG_INFO.
En effet dans la fenêtre de débug j'ai les messages suivants:
- Direct3D9: :====> ENTER: DLLMAIN(011416f0): Process Attach: 000004b0, tid=0000064c
Direct3D9: :====> EXIT: DLLMAIN(011416f0): Process Attach: 000004b0
Direct3D9: (INFO) :Direct3D9 Debug Runtime selected.
D3D9 Helper: Enhanced D3DDebugging disabled; Application was not compiled with D3D_DEBUG_INFO
Direct3D9: (INFO) :======================= Hal SWVP device selected
Direct3D9: (INFO) :HalDevice Driver Style 9
Direct3D9: :BackBufferCount not specified, considered default 1
Direct3D9: :DoneExclusiveMode
Ce qui est bizarre c'est que j'ai des infos de débug sur d3d9, mais j'ai aussi cette ligne étrange
- D3D9 Helper: Enhanced D3DDebugging disabled; Application was not compiled with D3D_DEBUG_INFO
J'ai vu sur les groupes qu'avec la version managée de directx on ne pouvait pas utiliser cette option.
Pourtant j'ai des infos?????
Est-ce que ça veut dire que je dois utiliser un ancien SDK de directX.
Est-ce que cette option ne sert à rien, bref je suis un peu perdu!!
Si j'active l'option "break on d3derror" du panneau "propriérés de directX" j'ai ce message dans la fenêtre de débug:
- Direct3D9: (ERROR) :Invalid format specified for texture
Mais si je désactive l'option, le programme ne présente pas d'erreur apparente. Comment tenir compte de ce message. Est-ce juste un warning ou une erreur réelle?
Merci à vous.
-
Application was not compiled with D3D_DEBUG_INFO :
Le build n'a pas ete fait dans les regles de l'art... :) Il doit y avoir des trucs en toujours en debug "normal". Essayer :
To enable debug information, the #define must get built before the D3d9.h file. If you are running a software development kit (SDK) sample, you can see this in Dxstdafx.h (which affects all the C++ samples). You must also be running the debug Direct3D runtime (which can be enabled from the Control Panel if necessary).
Direct3D9: (ERROR) :Invalid format specified for texture
Pour celle la, le seul cas que je connaisse ou c'est ( presque ) normal, c'est avec le VMR9 . Dans les autres cas, il y a probablement un probleme. Probablement des histoires de formats de backbuffer ou de surfaces mal declarees.
-
L'histoire de faire l'include avant d3d9.h, je l'avais bien vu. J'utilise aussi un en-tête précompilé et il n'y a pas d'inquiétude, le #define est en premier. Mais bon je vais pas trop me prendre la tête dessus finalement, c'est un peu trop obscur pour moi. :koi:
Sinon effectivement j'utilise la vmr9. Je texture des vidéos dans un environnement 3D.
-
Il est peut-être aussi nécessaire de devoir recompiler TOUS le projet après avoir ajouter ce DEFINE.
-
Je vois très bien ce que tu veux dire. En fait tous mes headers sont déclarés dans le fichier d'en-tête précompilé, même mes en-tête perso. Si je modifie un seul header alors le compilateur recréé l'en-tête précompilé (comportement par défaut).
De plus le #define est bien situé avant tous les headers directX. Comme je l'ai dit le probléme pourrait venir des fichiers managés de directX. Je n'en ai pas confirmation à l'heure actuelle. De plus je n'utilise pas le code managé mais les fichiers oui (dll, .h, .lib, etc...).
Je vais tenter une recompilation avec un SDK plus ancien, je verrais bien ce que ça donne.
-
Je crois que j'ai compris. Le d3debuginfo est fonctionnel. Le message d'erreur n'est là que pour signaler qu'il exécute une partie du code qui ne tiens pas compte de ce #define comme par exemple le header tchar.h (c'est un exemple bidon).
Les erreurs d'exécution que je peux rencontrer dans mon programme sont dues au comportement par défaut du débugeur de directX, j'ai comme l'impression que la moindre petite incohérence est considérée comme une erreur.
Donc d3debuginfo c'est bien pour voir ce qu'il se passe en profondeur mais c'est inutilisable pour tester un programme dans sa globalité.