Performances?

Programmation avancée de jeux en PureBasic
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Performances?

Message par poshu »

J'ai un pc assez puissant (Q6600 + 8800 GTX) et pure me fait très peur niveau performances:
Si j'affiche une image en PNG 32 bits de 342*480 dans un écran (fullscreen) en 640*480, et une autre image contenant des pixels transparents (toujours en png et de la même taille) je n'ai plus que 32 images secondes, et un core de mon processeur se retrouve utilisé à 100%.

C'est normal???? Comment éviter cette horreur?

Merci d'avance.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Après test, un sprite est bien plus rapide encore plus si j'utilise le format *.bmp, mais ce n'est pas suffisant @_@
J'obtiens de meilleurs performances avec dark basic >.<
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

tu as un exemple de code ?
avec si possible les images ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

On peut voir le code? Je te signale qu'avec Purebreaker 3, j'affiche beaucoup plus d'images que ça, au format PNG 32 (couche alpha).
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Ma connexion est catastrophique.
Enfin bon, sur mon pc, avec ce code qui n'affiche rien, je n'ai "que" 1900 fps

Code : Tout sélectionner

InitSprite()
InitSound()
InitKeyboard()
OpenScreen(640,480,32,"test")

Repeat
  FlipBuffers(0)
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
  
  If Val(FormatDate("%ss", Date()))=sek
    fps+1
  Else
    FPS$=Str(fps)
    fps=0
    sek=Val(FormatDate("%ss", Date()))
  EndIf
  


  StartDrawing(ScreenOutput())
  DrawText(1,1,FPS$)
  StopDrawing()
ForEver
pendant qu'un exemple comme celui là (trouvé sur le forum US) en affiche 3000.
Alors quoi, c'est ma méthode pour compter les FPS (pompé sur Dobro) qui n'est pas bonne?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Rien que ton drawtext te bouffe un max de fps. J'ai déjà parlé à des gars qui travaillaient en Opengl qui se plaignaient aussi de la lenteur de l'affichage du texte (pour leur debugage), sans même imaginer ce qu'il y a derrière.

Je rappelle qu'une police TTF ou Postscript est composée de vecteurs, que chaque lettre est DESSINEE à chaque appel (tracé de lignes+remplissage+masquage), que même si c'est fait de façon transparente par le système, certaines polices sont complexes et que c'est une opération LOURDE!

Aussi on préférera utiliser une police BITMAP ou dessiner ses caractères soi-même. Bien sûr, en 2008 on est en droit de s'attendre à mieux, mais dans un jeu, il faut optimiser...

Sinon, pour ton calcul de FPS, cherche un peu, il y a mille exemples sur les forums.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

je ne pensais pas qu'afficher du texte était un travail lourd @_@ je débute totalement dans l'affichage ^^;

Une fois remplacé ma fonction fps par une plus performante, j'atteind 19k FPS écran vide. Ouf.

Par contre, l'affichage de quelques sprites fixes(qui appartiennent à un contact qui voudrait éviter que je ne les diffuse) fait tomber très très vite l'affichage.

Je me retrouve avec une autre question:
comment utiliser correctement startspecialfx()?
Je voudrais afficher des effets spéciaux par dessus une image déjà déssinée, mais starspecialfx() doit être appelé avant tout effet:
Standard sprites should be displayed after StopSpecialFX() to use the hardware acceleration, as usual. If you are using ClearScreen(), place it inside the StartSpecialFX() : ... : StopSpecialFX() block. The current display is not copied into the buffer (would be too slow), so be sure to don't call any display functions before calling StartSpecialFX() as they will be ignored.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Franchement, si tu veux de la rapidité, évite les specialfx. On peut faire de jolies choses, mais ça bouffe un max de temps processeur. Essaye plutôt de travailler avec plus de sprites3d, en utilisant Sprite3DBlendingMode(). Tu verras que c'est beaucoup plus efficace :)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Oki, merci pour l'aide, j'y retourne.

/me met son masque
/me plonge
/me nage vers le fond
/me s'aperçoit qu'il a pas pris de bouteille d'oxygène!
/me meurt noyé comme un con.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

djes a écrit :Franchement, si tu veux de la rapidité, évite les specialfx. On peut faire de jolies choses, mais ça bouffe un max de temps processeur. Essaye plutôt de travailler avec plus de sprites3d, en utilisant Sprite3DBlendingMode(). Tu verras que c'est beaucoup plus efficace :)
Malheureusement Sprite3DBlendingMode() n'est pas supporté par le subsystem DX9. (c'est DX9 qui ne gère pas cette fonction)

Sinon le subsystem directX9 est plus rapide selon les tests que j'ai pu faire, d'autres disent que c'est plus lent, ça doit dépendre des fonctions utilisées ?
Par contre pour l'instant c'est inutilisable, faut attendre les prochaines beta de la 4.20
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

comtois a écrit :
djes a écrit :Franchement, si tu veux de la rapidité, évite les specialfx. On peut faire de jolies choses, mais ça bouffe un max de temps processeur. Essaye plutôt de travailler avec plus de sprites3d, en utilisant Sprite3DBlendingMode(). Tu verras que c'est beaucoup plus efficace :)
Malheureusement Sprite3DBlendingMode() n'est pas supporté par le subsystem DX9. (c'est DX9 qui ne gère pas cette fonction)

Sinon le subsystem directX9 est plus rapide selon les tests que j'ai pu faire, d'autres disent que c'est plus lent, ça doit dépendre des fonctions utilisées ?
Par contre pour l'instant c'est inutilisable, faut attendre les prochaines beta de la 4.20
Oui, je suis en standby aussi.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

poshu a écrit :Oki, merci pour l'aide, j'y retourne.

/me met son masque
/me plonge
/me nage vers le fond
/me s'aperçoit qu'il a pas pris de bouteille d'oxygène!
/me meurt noyé comme un con.
T'es prêt pour les awards? http://darwinawards.com/darwin/darwin2007-03.html
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Code : Tout sélectionner

FlipBuffers(60)
;) j'ai fait des recherches l'été dernier afin de trouver la meilleure solution( merci à tout les menbres), et le résultat:
sprite classique + sprite3D
exemple avec un shump:
affichage vaisseau du joueur: sprite classique
affichage nuage: sprite3D

le blème avec le mode graphique, c'est que sur un écran wide(16/10ème), l'image est étirée, ce qui déforme l'oeuvre originale.
Le mode fenêtré est des plus fluide, à la condition de ne pas mettre de delay:http://www.purebasic.fr/french/viewtopi ... 52&start=0
Dernière modification par beauregard le lun. 14/janv./2008 13:58, modifié 1 fois.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

comtois a écrit :Essaye plutôt de travailler avec plus de sprites3d, en utilisant Sprite3DBlendingMode().
heu, si vous pouviez expliquer dans quel but précis vous utilisez cette commande de haute volée( jeux ou application 3D) ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

beauregard a écrit :
comtois a écrit :Essaye plutôt de travailler avec plus de sprites3d, en utilisant Sprite3DBlendingMode().
heu, si vous pouviez expliquer dans quel but précis vous utilisez cette commande de haute volée( jeux ou application 3D) ?
Ca dépend; ça permet de combiner des effets (de transparence) sur plusieurs sprites. Rien de mieux pour faire du feu par exemple.
Répondre