CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(directX) Display Mode

Ruffi
Ruffi
Niveau 9
23 juillet 2004 à 14:51:41

Salut tout le monde !

Je poste ici plutot que dans " J´aide les personne en C/C++"

Probleme de passage de directX8 a directX9 :
Dans un tutorial ( http://www.andypike.com/tutorials/directx8/ ) , il y a une fonction qui permet de recuperer des information sur le mode d´affichage afin de creer le backbuffer. Mon probleme vien du fait que les parametre sont plus les meme sur Dx8 que sur Dx9. J´ai pas mal galerer pour finalement en plein desespoir ariver a une solution bourin en atendant de pouvoir demander de l´aide.

Je suis passe de cette fonction :

D3DFORMAT CGame::CheckDisplayMode(UINT nWidth, UINT nHeight, UINT nDepth){

UINT x;
D3DDISPLAYMODE d3ddm;

D3DFORMAT

format=m_pD3D->EnumAdapterModes(D3DADAPTER_DEFAULT

, D3DFMT_X8R8G8B8
for(x = 0; x < m_pD3D->GetAdapterModeCount(0); x++)
{
m_pD3D->EnumAdapterModes(0, x, &3ddm);
if(d3ddm.Width == nWidth)
{
if(d3ddm.Height == nHeight)
{
if((d3ddm.Format == D3DFMT_R5G6B5) ||
( d3ddm.Format == D3DFMT_X1R5G5B5) ||
( d3ddm.Format == D3DFMT_X4R4G4B4))
{
if(nDepth == 16)
{
return d3ddm.Format;
}
}
else if((d3ddm.Format == D3DFMT_R8G8B8) ||
( d3ddm.Format == D3DFMT_X8R8G8B8))
{
if(nDepth == 32)
{
return d3ddm.Format;
}
}
}
}
}

return D3DFMT_UNKNOWN;
}

a celle la :

D3DFORMAT CGame::CheckDisplayMode(UINT nWidth, UINT nHeight, UINT nDepth){
return D3DFMT_X8R8G8B8;
}

BEUUUURKK !

Si quelqu´un peu m´aider, ce serai simpa

Autre probleme : Je bosse sur . net chez moi, mais j´ai visual 6 au boulot : comment je peut creer un workspace pour le 6 a partir des fichier du 7 ( fichier . vcproj et . sln) ?

( desole pour l´ecriture : je suis en ecosse avec un clavier qwerty...)

Ruffi
Ruffi
Niveau 9
26 juillet 2004 à 12:17:29

Personne ?

Altonfrere
Altonfrere
Niveau 10
26 juillet 2004 à 12:28:53

Si tu as le SDK de DX9, un paquet d´exemples montrent comment faire...

MrGoTo
MrGoTo
Niveau 8
26 juillet 2004 à 14:36:11

T´as compris Altonfrere !
Va bouffer tes ongles d´orteils tout seul dans ton coin mdr!!!!
Bonne chance !

LGV
LGV
Niveau 28
26 juillet 2004 à 14:38:34

sinon, solution pratique, tu peux utiliser le code genere par le wizard DirectX, ca marche TRES bien pour ces trucs qui sont plutot chiants a faire...

Ruffi
Ruffi
Niveau 9
26 juillet 2004 à 17:11:33

Arg... je suis pas asez souple pour boufer mes ongles d´orteils

Le wizard fait une base directX a sa sauce. Je m´inspire d´une base sur le net pour creer la mienne, pour justement eviter d´avoir a faire les trucs chiant quand j´utiliserai ma base.

M´enfin, je vais essayer de me demerder tout seul.
La prochaine fois, je demanderai comment faire un jeu avec RPGmaker, j´aurai plus de reponses...

LGV
LGV
Niveau 28
26 juillet 2004 à 18:46:33

. .. dans le SDK y´a des dizaines d´exemples qui font ce que tu veux, et le code du wizard est beaucoup plus complet que ce que bcp ont la volonte de pondre ( parce des milliers de lignes pour tester les CAPS c´est chiant...).
pour les questions de " base" dsl mais on renvoit toujours a la doc... pour les choses plus fines, la on peut aider ( comme je ne sais plus qui avec ses ID3DXSprite il y a peu)

Ruffi
Ruffi
Niveau 9
28 juillet 2004 à 12:58:10

Je me heurte a un nouveau probleme. ( je suis un gros noob de DirectX :( )
La perte du device lorsque l´on fait alt tab :
avec m_pD3DDevice->TestCooperativeLevel() je verifie l´etat des devices.
Pour l´instant je fait un gros clean up general puis je recreer les objets... se qui me ramene au demarage de l´aplication!

Donc je me demande : qu´est ce qui est perdu lors de la perte du device, que faut-il netoyer et que faut-il reinitialier ?

lockscash
lockscash
Niveau 6
28 juillet 2004 à 13:18:25

Salut a tous, Je travaille avec Ruffi actuellement. On a reussit a resoudre un petit peu ce probleme mais de maniere pas tres conventionnelle on va dire.

Voici le code que l´on a mis a l´interieur de la fonction render()

/ /Test de l´etat du Device
HRESULT s;
s = m_pD3DDevice->TestCooperativeLevel();
if ( FAILED(s))
{

if ( s == D3DERR_DEVICELOST)
{
/ / Focus perdu par exemple
return false;
}

if ( s == D3DERR_DEVICENOTRESET)
{
/ /l´application recupere le Focus
ReleaseObjects();
/ /Desallocation mais de quoi exactement ? ??

if
(FAILED(m_pD3DDevice->Reset(d3dPresent_Parameters)
;
/ /La ca plante bien bien quand on essaye de faire le Reset
{return false;}

Init(); / /Reinitialisation du Device
}
}

Bon voila ce qu´on a code, si on commente le m_pD3DDevice->Reset(d3dPresent_Parameters); ben ca marche... :doute:

sachant que dans ReleaseObjects() on libere les deux variables LPDIRECT3D9 et LPDIRECT3DDEVICE9(m_pD3DDevice).

Voila, j´aimerai bien comprendre pourquoi le Reset du d3dPresent_parameters plante, a moins que quelqu´un ai une autre methode?

Merki ! :))

Ruffi
Ruffi
Niveau 9
28 juillet 2004 à 13:36:01

Pour plus de precision ( il va devenir complique ce topic) :
ReleaseObjects() est la fonction qui nous sert a tout effacer a la sortie du programme
Init() est la fonction qui nous sert a tout initialiser au debut du programme ( pas bon car sa nous remet la plupar des donnes memberes a leurs etats initialles)

Voila :)

LGV
LGV
Niveau 28
28 juillet 2004 à 15:06:01

dans un premier temps tu peux la jouer barbare en recreant TOUT a chaque perte du device ( les surfaces, les vertex/index buffer, les shaders, les meshes, etc.) ; apres, on peut jouer plus fin en faisant comme dans le code genere par le SDK, cad un init unique, deux methodes de creation/destruction des objets ( utilise a chaque perte du device), et un clean up unique. Dans l´idee, ca doit etre symetrique par paire : ce qu´on init qu´une seule fois, on le clean qu´une seule fois, et ce qu´on cree a chaque perte on le supprime de la meme maniere.
C´est assez fin de savoir ce qui survir ou ce qui ne survit pas ( les textures peuvent survire, selon leur mode de creation par exemple) donc dans l´immedait la premiere solution, ca n´a pas d´influence sur les perfs du programme ( c´est juste un peu plus long de recharger quand tu alt+tab par ex.)

Ruffi
Ruffi
Niveau 9
28 juillet 2004 à 15:31:52

Le probleme en detruisant tout est la perte des donnes membre ( par exemple les coordones d´un objet)

Un solution serai de faire une methode de destruction et reconstructions specifique a chaque objet qui detruirait que les choses necessaire ( les surfaces, les vertex/index buffer, les shaders, les meshes, etc) mais pas les donnes membres.

Mais si tu a une autre solution, je suis preneur :)

lockscash
lockscash
Niveau 6
28 juillet 2004 à 15:43:52

:d) LGV
Ben actuellement on fait la methode Barbare dont tu parle, c´est a dire que tout les objets sont recrees, pour un cube ca va, le Alt-Tab se fait vite, mais au plus tu surcharge ta scene et au plus ca met de temps pour revenir a l´affichage.
Mais peut etre qu´en reinitialisant seulement les Devices sant toucher aux Buffers ca peut marcher. ( L´application garde le meme Handle peut importe qu´elle soit en arriere plan ou en premier plan non?)

P.S. Je ne suis pas retissant avec les accents, c´est juste que sur un clavier qwerty, y´en a pas. Desole :(

LGV
LGV
Niveau 28
28 juillet 2004 à 18:50:34

pareil, clavier qwerty... ; )

bon, detruire/recreer vos objets, c´est BCP trop couteux, c´est clair ; comme Ruffi propose, il faut une paire de methode pour chaque objet lie a directX, qui ont pour but de releaser et d´initer les elements ayant besoin du device.
Mais ca, c´est ENCORE la methode barbare, car certains objets objets crees avec le device peuvent survivre a une perte de ce dernier... Mais deja, commencer par rajouter deux methodes a vos objets, pour ne pas les detruire mais reiniter les membres lies a DX devrait bcp faire gagner en temps de rechargement

lockscash
lockscash
Niveau 6
29 juillet 2004 à 15:51:33

Merci, on va voir ca. :)

Ruffi
Ruffi
Niveau 9
29 juillet 2004 à 16:13:02

Pour ceux que ca interesse, directX 9.0c est sorti, ainsi que son SDK :

http://www.microsoft.com/downloads/details.aspx?FamilyID=fd044a42-9912-42a3-9a9e-d857199f888e&DisplayLang=en

Ruffi
Ruffi
Niveau 9
29 juillet 2004 à 19:20:27

LGV : quand tu programme en directX, tu part de la base cree par visual ou tu t´es fait la tienne ?

Ruffi
Ruffi
Niveau 9
29 juillet 2004 à 19:31:13

Encore une chose : DirectMusic permet elle de lire les fichier mp3 ?
Sur tous les exemples du sdk, elle lit que les midi et les waves :(

Ruffi
Ruffi
Niveau 9
29 juillet 2004 à 19:50:55

En fait, on a plein de question. Si quelqu´un peu nous aider : http://membres.lycos.fr/brugevinboris/viewtopic.php?t=652

merci :)

Altonfrere
Altonfrere
Niveau 10
29 juillet 2004 à 19:57:01

pour les mp3 tu peux passer par DirectShow . .. ca serait trop long à expliquer mais renseigne toi sur ces interfaces : IGraphBuilder, IMediaControl, IMediaEventEx, IBasicAudio, IMediaSeeking

En attendant que LGV te réponde, le mieux pour débuter est de te servir des exemples et de faire ta sauce. Plus tard ( une fois que tu auras vu un peu tous les principaux problèmes que l´on peut rencontrer) tu seras capable de créer tes propres librairies, dll, environnement de développement pour DirectX.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment