PROGRAMMATION DIRECTX 8 TUTORIAL 2 : CAPACITES DE L'ADAPTATEUR GRAPHIQUE

cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009 - 7 nov. 2003 à 00:07
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006 - 20 févr. 2004 à 13:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/17745-programmation-directx-8-tutorial-2-capacites-de-l-adaptateur-graphique

vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
20 févr. 2004 à 13:03
c pas un peu bourrin ???
cs_rachid777 Messages postés 12 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 17 mars 2004
20 févr. 2004 à 12:30
Bonjour,
Pour info, effectivement le programme plante à ce niveau "PDirect3D.GetDeviceCaps 0,D3DDEVTYPE_HAL,Pcapam" si on a pas de carte accélératrice, par contre pour éviter le plantage, on peut mettre On error Resume Next juste avant "PDirect3D.GetDeviceCaps 0,D3DDEVTYPE_HAL,Pcapam", et ça marche quand même.
a+
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
11 nov. 2003 à 15:05
verifie les conditions de lancement de ta routine qui enumere tes differents modes d'affichage, si ca se trouve ca vient de ca, sinon c kil y a 1 truc ki differe et la c pas forcement evident a voir
le mieux c ke tu rajoutes un msgbox qd tu selectionnes un item ki te donne toutes les prorpiétés du mode d'affichage retourne.
pseudoced Messages postés 3 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 14 mars 2004
11 nov. 2003 à 09:58
D'après l'aide de microsoft SDK, le mode SW permet d'utiliser des routines soft autre que celles inclus dans DirectX, mais je ne connais pas de plug-in de ce type.

Pour l'affichage des modes en double, cela ne viendrait-il pas du support multi-ecrans de la carte graphique.
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
11 nov. 2003 à 00:40
Salut à tous,
Je viens de terminer le tutorial 3. Il est sous forme de ZIP sur le site
Il n'inclut finalement pas l'énumération des modes graphiques, car je ferai au final un code rassemblant tous les tutoriaux.
A plus
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
10 nov. 2003 à 00:11
Salut à tous. Je suis en train d'élaborer le tutorial 3 qui va contenir un ZIP rassemblant à la fois le tutorial2 et les Dessins 3D texturés. Je viens de remarquer quelque chose, que je ne m'explique pas, mais peut être que quelqu'un pourra éclairer ma lanterne. L'énumération des modes graphiques fait apparaitre des modes en double et même en triple exemplaire sur certaines des bécanes sur lesquelles j'effectue les test (et cela ne semble pas venir du quatrième paramètre Refresh Rate du D3DDISPLAYMODE qui est partout à 0).

Pourquoi ????
Merci d'avance
cs_Mauricet Messages postés 89 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 28 juillet 2008
9 nov. 2003 à 17:55
Bonjour
J'ai essayé 'D3DCREATE_MIXED_VERTEXPROCESSING qui fonctionne toujours alors que 'D3DCREATE_SOFTWARE_VERTEXPROCESSING mène à un plantage chez moi.
A bientôt
Maurice
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
8 nov. 2003 à 08:48
En fait pour le Vertex Processing, il est plutot conseillé d'utiliser le MIXED_VERTEXPROCESSING, il détermine tout seul ce qui doit etre émulé sur le CPU et ce qui doit etre traité par le GPU (Graphic Processor Unit). Cela donne de bons rendus en général, mais attention, tous les devices ne le gèrent pas, donc ca complique encore notre procédure de sélection automatique du device.
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
7 nov. 2003 à 20:48
Salut et merci de consulter ce nouveau code.

Pour Vr3h, tu as raison quand tu parles du SW, mais je n'ai rien mis pour ce mode, car lorsque je consulte l'aide du SDK, cela m'indique 'Non supporté'. J'ai également des erreurs lorsque je déclare mon device avec. le fait de coupler SW avec HAL ou REF ne produit pas de bonne recette non plus.
le HAL est le mode le meilleur lorsqu'il est supporté, pour travailler avec DirectX (De nos jours, toutes les cartes 3D le supportent). Dès qu'on va attaquer les animations 3D , vous verrez que le mode REF rame beaucoup trop.
Ensuite, pour ce qui est mon cas, bizarrement, et contrairement à Vr3h l'usage du SOFTWARE_VERTEXPROCESSING est plus rapide que le HARDWARE_VERTEXPROCESSING. Peut être est ce que dans les animations que je programme et que nous verrons plus tard, j'effectue des calculs que mon HARDWARE n'arrive pas à effectuer, et que l'émulation de ces calculs prends plus de temps que si je déclarait tout en SOFTWARE au début. Pour l'instant, je n'en sais rien, mais j'en ferai part dès que j'aurai la solution. pour info, mon processeur est un duron 1Ghz et ma CG une G-FORCE 2 MX 200 qui est en PCI pas en AGP. Peut être que le problème provient aussi de ce fait.

Pour Mauricet, les résultats que tu obtiens avec tes configurations rejoignent un peu les miens dans l'ensemble. Normalement, pour tous les Devices en REF, le MaxActiveLight doit être à -1. Pour ce qui est de ma config avec CG GForce, j'obtiens les mêmes résultats que toi avec ta CG Creatice GB

Le code de ce tutorial regroupe les capacités principales de l'adaptatreur graphique, il existe d'autres fonctions de Direct3D permettant de vérifier les autres possibilités (Le Bump-Mapping, par exemple...)

A plus à tout le monde et merci pour vos commentaires et précisions apportées à ces tutoriaux, cela m'aidant également.
cs_Mauricet Messages postés 89 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 28 juillet 2008
7 nov. 2003 à 15:53
Bonjour
J'ai essayé le logiciel, voici les résultats
Intel 82845G ialmmt5.dll
Primitives 65535 2097151
Textures 4 8
Lumières 0 -1

Creative GB0030 NVDD32.dll
Primitives 65535 2097151
Textures 2 8
Lumières 8 -1

Rage IIC AGP macxdd32.dll
Primitives rien 2097151
Textures rien 8
Lumières rien -1
Pas d'accélération matérielle
A bientôt
Maurice
cs_Mauricet Messages postés 89 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 28 juillet 2008
7 nov. 2003 à 14:32
Bonjour
Félicitations, c'est encore très bon.
Je me permets d'essayer d'être concis dans la suite car je n'y vois pas très clair.
Il existe 3 types de Device inclus dans le type D3DDEVTYPE :
un device exclusivement Hardware : le HAL - D3DDEVTYPE_HAL
un device software utilisant les fonctions spéciales du CPU quand elles sont disponibles : D3DDEVTYPE_REF
un device software utilisant un rendu software : D3DDEVTYPE_SW
Le HAL semble être le meilleur.
Il faut donc tester si le meilleur est compatible sinon les autres.
A bientôt
Maurice
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
7 nov. 2003 à 10:50
"Microsoft® Direct3D® supports an additional device type called a reference device or reference rasterizer. Unlike a software device, the reference rasterizer supports every Direct3D feature. Because these features are implemented for accuracy, rather than speed, and are implemented in software, the results are not very fast. The reference rasterizer does make use of special CPU instructions whenever it can, but it is not intended for retail applications. Use the reference rasterizer only for feature testing or demonstration purposes." (http://msdn.microsoft.com/directx)
Petite traduction de ceci : Direct3D supporte une autre sorte de Device appelée Reference Device. Contrairement au SoftWare Device, le Reference Device supporte toutes les fonctions de Direct3D, mais a cause de ça, il est plus lent que le SoftWare Device. Le Reference Device peut utiliser des instructions spécifiques au CPU (Processeur), mais il n'est pas conseillé pour les applications à distribuer. Utilisez le de préférence pour les tests ou les démonstrations.
Voilà j'espere que vous y verrez un peu plus clair dans tout ceci amusez vous bien
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
7 nov. 2003 à 08:35
Petite info pour LaPatoshe : Je viens de tester sur plusieurs exemples du SDK de DX9 la différence entre SOFTWARE ET HARDWARE VertexProcessing : dans tous les cas je gagne en FPS avec le HardWare VertexProcessing mais ca varie, selon les exemples ca va de 30 a 300 FPS de + qd je mets HardWare, les 300 FPS d'écart sont obtenues sur l'exemple utilisant le VertexBlending (et donc un VertexShader), après ca dépend des machines, j'ai un AMD Athlon XP 1800 + (1,5 Ghz) et une GeForce4 Ti 4200, mon processeur est un peu a la traine par rapport a ma CG, donc il faudrait dans l'idéal que chacun fasse des tests et donne les résultats pour pouvoir déterminer quel mode de "Vertex Processing" (Traitement des Vertices) est le plus adapté avec telle ou telle config.
vr3h Messages postés 164 Date d'inscription jeudi 6 mars 2003 Statut Membre Dernière intervention 9 octobre 2006
7 nov. 2003 à 08:10
Bonjour tt le monde,
bon alors effectivement il n'existe pas de mode HEL pour la création du device, mais cela ne change rien sur le fait ke le REF n'est dispo que pour les possesseurs du DevRuntime de DirectX (généralement vs avez du telecharger le sdk avec). Par contre je viens de voir 2 modes dont jignorais l'existence : Force Dword et SW. J'ignore ce que ForceDword veut dire mais SW serait sans doute l'émulation logicielle fournie par DirectX si la couche matérielle (donc la CG) ne supporte pas les paramètres requis pour la création du device. Autrement dit, si vous voulez faire un log qui fonctionne sur un max de machines, mm celles qui ne sont pas au top, il est conseillé de prendre en compte la possibilité que le log choisisse l'émulation plutot que l'accélération matérielle. Mais il faut noter qd mm que SW doit moins permettre de chose que le REF car en effet, le REF doit permettre au developpeur, qui na pas une machine supportant toutes les fonctions requises par son programme, de les tester malgré tout. Donc REF émule comme (théoriquement) SW, mais la qualité et la rapidité est moindre pour le REF car il permet d'émuler d'avantage de choses.
En résumé :
HAL = Accélération Matérielle
REF & SW = Emulation Logicielle
-> REF = Pour les développeurs en phase de test
-> SW = Pour les utilisateurs finaux n'ayant pas une machine assez puissante pour assurer en matériel les paramètres requis pour la création du device.
Voilà amusez vous bien :)
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
7 nov. 2003 à 00:07
RECTIFICATIF :
Désolé, mais je viens juste de m'apercevoir que la partie concernant l'examen de la carte en ce qui concerne ses modes d'usage de la D3D est fausse. Le test PDirect3D.GetDeviceCaps 0, D3DDEVTYPE_HAL, Pcapam plante complètement sur un ordinateur démuni d'accélération graphique.

Pour détecter la possibilité de support du HAL par Direct3D, il faut utiliser un test de Direct3D qui est :
CheckDeviceType. C'est une fonction qui renvoie D3D_OK lorsque le test est réussi.

Pour rectifier :
1)Effacez "PDirect3D.GetDeviceCaps 0,D3DDEVTYPE_HAL,Pcapam "
2) Remplacez "if err.Number=D3DERR_NOTAVAILABLE then" par
"If Pdirect3D.CheckDeviceType (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Pmode.Format ,Pmode.format, false)<>D3D_OK then"

Il s'agit d'une fonction qui teste si le Device créé en HAL supporte un format de couleur donné pour le Device et pour le Backbuffer en mode non fenêtré. False fait référence au mode plein écran. J'ai placé Pmode.Format car il contient le dernier format déclaré acceptable lors de l'énumération précédente, et donc, si la fonction renvoie qu'elle ne peut pas créer de Device avec tous les paramètres, cela ne sera pas à cause des paramètres de couleur donc, cela voudra dire que le mode HAL ne marche pas. Cette fonction ne fait pas planter le programme en cas d'échec du HAL.

3) Il faut maintenant remettre la fonction récupérant les capacités de l'adaptateur graphique déclaré en HAL si ce dernier est acceptable.
Juste avant la fonction "Pdirect3D.GetDeviceCaps 0, D3DDEVTYPE_REF, Pcapa" placez les lignes :
"if PHAL=true then
Pdirect3D.GetDeviceCaps 0, D3DDEVTYPE_HAL, Pcapam
end if"

Encore désolé pour cette erreur, je m'en suis aperçu juste après avoir envoyé le tutorial.
A bientôt a tous et bon courage
Rejoignez-nous