Page 1 sur 2

Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 15:40
par Crystal Noir
Bonjour bonjour la compagnie,

bon malgré mes déboires avec la compilation en directx 9 j'ai juste une question, concernant les performances, parce que vous comprenez moi yen a un peu con con sur les bords, j'arrive à pondre des codes mais encore faut il comprendre certaines choses.

Vu que directx 9 ca gazouille à fond en dual screen, je m'amuse à faire des tests. j'ai pris un code que j'avais fait qui marche très bien mais qui utilise un grand nombre de sprites (et pas des sprites3D).

Je me suis amusé à le faire compiler en directx9 (en prenant le soin de désactiver mon second écran lol) et puis ensuite essayer de le compiler en subsystem directx7.

Et là je remarque un truc qui est carrément flagrant : en Directx 7 un grand nombre de sprites mais exécution très rapide, très fluide.

Par contre en Directx9 mon dieu que ca rame, avec le même code.

Il y a t'il une raison à cela ? au besoin je pourrais vous poster le code bien entendu mais je pense que la différence vient surtout du fait que dx9 ne doit pas y (à l'auvergnate) gérer de la même manière.

Merci pour vos précisions.

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 15:51
par Le Soldat Inconnu
DX9 ou DX7, je ne vois aucune différence en sprite3D
mais niveau sprite classique, le DX7 semble plus rapide :|

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 15:52
par Crystal Noir
Le Soldat Inconnu a écrit :DX9 ou DX7, je ne vois aucune différence en sprite3D
mais niveau sprite classique, le DX7 semble plus rapide :|
Voilà c'est que je dis, et je voulais savoir pourquoi. Pourquoi les sprites tout court ca rame rapidos avec dx9.

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 16:10
par Fred
un exemple ?

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 16:27
par Crystal Noir
Par exemple ce code qui permet de faire exploser une image en morceaux, je l'avais appelé explosion mosaique. Voici l'image que j'utilise, le code est juste après :

Image

Code : Tout sélectionner

;Effet mosaic + explosion

;Initialisation des composants 
InitSprite()
InitKeyboard() 
InitMouse()
UseJPEGImageDecoder()


;Constantes 
#Pingouin = 0

;Variables Globales
Global Mosaic


;Création de la fenêtre principale 
MaFenetre = OpenScreen(800,600,32,"Mosaic",#PB_Screen_WaitSynchronization,60)
If MaFenetre  = 0 
  MessageRequester("Erreur", "Impossible d'ouvrir une fenêtre DirectX", #PB_MessageRequester_Ok) 
EndIf 

;Chargement des images
LoadSprite(#Pingouin,"pingouin.jpg")

;Creation de la structure
Structure Morceau
  x.f
  y.f
  sourcex.f
  sourcey.f
  Explox.f
  Exploy.f
EndStructure
Global NewList Ping.Morceau()

;Procedures du programme

Procedure Mosaic()
  For posx = 0 To 400 Step 8
    For posy = 0 To 300 Step 8
      AddElement(Ping())
      Ping()\x = posx + 200
      Ping()\y = posy + 150
      Ping()\sourcex = sourcex
      Ping()\sourcey = sourcey
      Ping()\Explox = Random(30) - 15
      Ping()\Exploy = Random(30) - 15
      sourcey = sourcey + 8
    Next
    sourcex = sourcex + 8
    sourcey = 0
  Next
EndProcedure

Procedure AfficheExplo()
  ResetList(Ping())
  While NextElement(Ping())
    Ping()\x = Ping()\x + Ping()\Explox
    Ping()\y = Ping()\y + Ping()\Exploy
    ClipSprite(0,Ping()\sourcex,Ping()\sourcey,8,8)
    DisplaySprite(0,Ping()\x,Ping()\y)
    If Ping()\x > 800 Or Ping()\x < 0 Or Ping()\y > 600 Or Ping()\y < 0
      DeleteElement(Ping())
    EndIf
  Wend
EndProcedure

Procedure AfficheMos()
  ResetList(Ping())
  While NextElement(Ping())
    ClipSprite(0,Ping()\sourcex,Ping()\sourcey,8,8)
    DisplaySprite(0,Ping()\x,Ping()\y)
  Wend
EndProcedure

Procedure AfficheCrack()
  ResetList(Ping())
  While NextElement(Ping())
    a = Random(4) - 2
    b = Random(4) - 2
    Ping()\x = Ping()\x + a
    Ping()\y = Ping()\y + b
    ClipSprite(0,Ping()\sourcex,Ping()\sourcey,8,8)
    DisplaySprite(0,Ping()\x,Ping()\y)
  Wend
EndProcedure
 
Mosaic()
AfficheMos()
FlipBuffers()
Delay(2500)
AfficheCrack()
StartDrawing(ScreenOutput())
  BackColor(RGB(0,0,0))
  FrontColor(RGB(255,255,255))
  DrawText(300,500,"Attention ca va péter !")
StopDrawing()
FlipBuffers()
Delay(2000)

Repeat
  ClearScreen(RGB(0,0,0))
  AfficheExplo()
  ExamineKeyboard()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Compilez le en DirectX 7 c'est niquel rapide et fluide, faites le en directx 9 l'affichage de l'explosion sera beaucoup plus lent.

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 17:25
par venom
autre question bête :lol: comment fait ont pour choisir entre le DX 9 ou DX7 ???







@++

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 20:15
par Le Soldat Inconnu
Dans les options de compilation, il y a une case "subsystem", dedans, il faut choisir DX7 :)

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 20:55
par venom
:?: :!: :lol: je ne trouve pas désolé là






@++

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 22:47
par Le Soldat Inconnu
La ou tu coches "Support des thèmes XP", "unicode", "Mode user sous vista", etc ...
il y a un truc "sous-système", il faut choisir directX 7

Re: Question débile entre directx7 et directx9

Publié : lun. 01/mars/2010 23:09
par Crystal Noir
Alors vous avez testé avec mon exemple ? :mrgreen:

Re: Question débile entre directx7 et directx9

Publié : mar. 02/mars/2010 6:58
par venom
Ah d'accord c'est un stringgadget dans lequel tu ecrit "directX 7" :lol:
Moi je chercher un comboboxgadget :oops: :lol:

Et bien truck de fou, si je laisse vide ou si je met "directX 7" niquel, par contre si je met "directX 9" ou "directX 11" message d'erreur : "Le sous système est introuvable" :?

Donc Crystal Noir pour le moment ton code fonctionne bien en "directX 7" :mrgreen:







@++

Re: Question débile entre directx7 et directx9

Publié : mar. 02/mars/2010 9:55
par Crystal Noir
Il fonctionne bien aussi en Directx 9 chez moi...par contre ca rame grave et en directx7 c'est fluide.

Juste au cas où, dans les options du compilateur, si t'as mis "DirectX9" t'auras ce message d'erreur, car par défaut pb le compile en dx9 sans option.

Re: Question débile entre directx7 et directx9

Publié : mar. 02/mars/2010 17:21
par TARD
Pour moi c'est plutot directX 9 (Donc rien d'inscrit dans la case qui fonctionne le mieux)
sous une photo de 1280x1024 car je n'y voyais aucune différence avec ton image d'origine
et bien sur :
MaFenetre = OpenScreen(1280,1024,32,"Mosaic",#PB_Screen_WaitSynchronization,60)

For posx = 0 To 1280 Step 8
For posy = 0 To 1024 Step 8

puis

If Ping()\x > 1280 Or Ping()\x < 0 Or Ping()\y > 1024 Or Ping()\y < 0

que j'ai changer pour l'avoir en pleinne page

Re: Question débile entre directx7 et directx9

Publié : mar. 02/mars/2010 17:56
par venom
Moi c'est pareille l'explosion est plus fluide sous DX9 que DX7 surtout au début de l'explosion sous DX7 je voie un léger blocage au départ de l'explosion, que sous DX9 fluide du début a la fin.

il y a pas moyen d'ajouté les FPS pour voir il il n'y a pas de chute entre le DX7 et la DX9 ? Âpres ça n'a peut être rien a voir :?







@++

Re: Question débile entre directx7 et directx9

Publié : mar. 02/mars/2010 20:21
par Crystal Noir
venom a écrit :Moi c'est pareille l'explosion est plus fluide sous DX9 que DX7 surtout au début de l'explosion sous DX7 je voie un léger blocage au départ de l'explosion, que sous DX9 fluide du début a la fin.

il y a pas moyen d'ajouté les FPS pour voir il il n'y a pas de chute entre le DX7 et la DX9 ? Âpres ça n'a peut être rien a voir :?

Moi c'est l'inverse tout comme LSI c'est plus rapide avec DirectX 7.