Page 1 sur 2
Performances?
Publié : lun. 14/janv./2008 8:23
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.
Publié : lun. 14/janv./2008 8:57
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 >.<
Publié : lun. 14/janv./2008 10:01
par case
tu as un exemple de code ?
avec si possible les images ?
Publié : lun. 14/janv./2008 10:03
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).
Publié : lun. 14/janv./2008 10:39
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?
Publié : lun. 14/janv./2008 11:04
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.
Publié : lun. 14/janv./2008 11:14
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.
Publié : lun. 14/janv./2008 11:22
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

Publié : lun. 14/janv./2008 11:37
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.
Publié : lun. 14/janv./2008 11:47
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
Publié : lun. 14/janv./2008 12:07
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.
Publié : lun. 14/janv./2008 12:08
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
Publié : lun. 14/janv./2008 13:25
par beauregard

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
Publié : lun. 14/janv./2008 13:52
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) ?
Publié : lun. 14/janv./2008 15:53
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.