null Le 18/07/2004 à 20:00 Voilà, j'ai vu un topic crée par Orion_ qui disait que GpSurfaceFlip() est assez lent.
Alors je voulais savoir si vous avez d'autres méthodes plus rapides de double buffering qui fonctionnent tout aussi bien ?
www.wikio.fr/user1921&info=comments
> Pourquoi 53 FPS ?
parseque l'ecran se rafraichi 53 fois par secondes, tu as donc 20 milisecondes pour faire ce que tu doit faire,
si tu depasse le flip attend un rafraichissement de plus et le fps est divisé par 2
> Et il y a des programmeurs qui le font ?!
pas a ma connaissance mais je m'y interesse, marre de pas pouvoir regler les temps de mes anim exactement comme je veut ^^
et la le mec il le pécho par le bras et il lui dit '
null Le 18/07/2004 à 20:57 J'ai commencé un bout de moteur 2D et j'ai en effet (je copie en partie le sprite du dessus pour simuler une réflexion sur de l'eau) un peu gourmand et je suis tantôt à 30 FPS et tantôt à 60 ! Il n'y a pas e moment ou j'obtiens un FPS constant entre !
Pffff, c'est vraiment mal foutu !
www.wikio.fr/user1921&info=comments
si c pas constant, c que des fois tu depasse, des fois non
ou bien c parseque tu utilise un gprectfill pour effacer l'ecran
si tu as 60fps, c que tu tourne sur geepee comme le dis mad
pour certain truc geepee tourne plus vite que la gp, pour d'autre non, mais l'ecran simulé tourne a 60fps
ton jeux est peu etre stable sur vrai gp
et la le mec il le pécho par le bras et il lui dit '
null Le 18/07/2004 à 21:36 En plus oui je n'efface même pas l'écran ! J'en ai pas besoin pour le moment vu que tout est redessiné.
Et puis ce mode de double buffering est bien un swap et non pas une copie d'écran ?
En tout cas c'est bizare ces 20 ms, sur Ti il n'y a pas ce problème alors que c'est pas une console de jeu !
www.wikio.fr/user1921&info=comments
Sur ti on utilise le triple buffering.
non, la gp ne fait rien sans que tu le demande
elle flippe l'ecran si tu apelle le surfaceflip (c lui qui synchro ton prog ac l'ecran)
si tu l'appelle pas, le buffer affiché a l'ecran sera tj le mm,
ca ce vois qt tu ecrit dedans, mais de la a clignotter ^^ reessai ce que tu fesais hier, sans le surfaceflip
et la le mec il le pécho par le bras et il lui dit '
ca conciste en koi du triple buffering ?
le 1 est a l'ecran, tu affiche ds le 2 et la moitié du 3 ?
tu flippe le 2 a l'ecran, tu fini d'afficher le 3 et affiche ds le 1 ?
ect .. ??
et la le mec il le pécho par le bras et il lui dit '
?!!
> Je ne comprenais pas pourquoi mon affichage clignotait à mort alors que je voulais seulement afficher 2-3 trucs. Pb que j'ai résolu en dupliquant l'affichage dans le second buffer.
ca ct sans surfaceflip ??
qt tu dis seulement afficher 2 3 truc, c style un msg d'erreur ou c une map animée ac des truc qui bouge ?
par exemple, ds Gmod, j'affiche un msg a l'ecran pendans que ca liste le contenu du rar
GpTextOut(NULL, &gpDraw[!nflip],10,215,"Gmod 0.5 - use chn modlib and unrarlib",0x2A) ;
GpTextOut(NULL, &gpDraw[!nflip],30,110,"scanning archive ... please wait",15) ;
je l'affiche direct sur le buffer affiché a l'ecran, puis je fait ce que g a faire ds l'archive, mais je ne m'ocupe pas de flip d'ecran ou autre, mon message restera affiché, sans clignotter tant que g pas reflippé l'ecran.
et la le mec il le pécho par le bras et il lui dit '
Alors, première version du programme :
je définis les surfaces d'affichage, j'affiche le premier buffer (qui ne contient rien)
puis, je génére 256 rectangles dans le second buffer (pour voir à quoi ressemble la palette).
Je fais ensuite un flip des buffers pour voir ce que j'ai mis dans le 2nd buffer.
Je lance ensuite une boucle infinie.
Verdict : l'écran semble m'afficher en alternance mes rectangles une frame sur 2 et un écran blanc.
Je recode le source foireux pour voir où j'ai loupé une marche.
ben tu doit faire un flip d'ecran ds ta boucle ^^
et la le mec il le pécho par le bras et il lui dit '
Une petite question (toute mes confuses si ça a déjà été évoqué ailleurs) :
on peut définir jusqu'à 4 pages de buffer pour l'affichage. 4 pages, c'est largement plus qu'il ne m'en faut. Est-il possible d'utiliser l'espace des 2 buffers en trop pour avoir 2 buffers écran de + de 320x240 ?
(Ca semble à priori possible vu le contenu de la structure GPDRAWSURFACE mais ce n'est pas explicité dans la documentation que j'ai sur le SDK).
je savais pas qu'on etait limité a 4 ^^
> Est-il possible d'utiliser l'espace des 2 buffers en trop pour avoir 2 buffers écran de + de 320x240 ?
bah ui ^^ vu que tu choisi toi au moment du flip le buffer que tu va afficher
rien ne t'empeche aussi d'alouer une zone memoire de 320*240 et de l'utiliser comme un buffer video temporaire (bien sur pas ac les fct de blit de gp ^^)
et la le mec il le pécho par le bras et il lui dit '
justement en 16 bits comment on fait car ça bug, personne n'a la boucle de rafraichissement ?
c'est bon j'ai recup la routine de fliscreen du gdl et ça marche parfaitement merci rov ^^ ( et anata pour l'info ^^ )