Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Glân de Brylan le Mars 30, 2015, 09:17:28 pm

Titre: RenderTexture, draw() et autres questions de ce genre
Posté par: Glân de Brylan le Mars 30, 2015, 09:17:28 pm
Bonjour,

J'ai commencé à me mettre sérieusement à la SFML, mais j'avoue que je n'y connais pas grand-chose en OpenGL ni en API graphiques en général. J'ai donc...un certain nombre de  questions :
– Quelle est la réelle utilité de sf::RenderTexture ? Est-ce que faire des calculs sur une RenderTexture, puis récupérer la texture pour la dessiner sur ma RenderWindow est vraiment plus rapide que de le faire directement sur la RenderWindow ?
– Dans le tuto, il est dit que "les performances sont directement liées au nombre d'appels à la fonction draw". Ça veut dire que si je dessine 1000 triangles en un appel, ça ira plus vite que si je dessine 50 fois 2 triangles (donc 100 en tout, mais en 50 appels) ?
– En utilisant les vues, est-ce que utiliser draw() sur une entité qui n'est au final pas visible à l'écran impactera les performances autant que si elle était visible ? Devrais-je faire en sorte de n'appeler draw() que sur les entités qui seront effectivement affichées ?

Et enfin, une question qui n'a pas vraiment de rapport : pourquoi dans le code des exemples y a-t-il un 'f' à la fin des nombres à virgule (enfin à point) ? Par exemple :
minimapView.setViewport(sf::FloatRect(0.75f, 0, 0.25f, 0.25f));
Moi, je n'en met pas, et ça ne me pose pas de problèmes...qu'est-ce que ça change ?


Merci d'avances pour vos réponses.
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: G. le Mars 30, 2015, 09:48:35 pm
Une render texture c'est juste une texture sur laquelle tu dessines plutôt que de dessiner sur une fenêtre.
Ça n'ira pas plus vite de dessiner à chaque frame sur une render texture puis de l'afficher, comme si c'était ta render window.
Là où ça devient intéressant c'est si tu veux appliquer un traitement global à cette texture grâce à un shader, ou si tu souhaites y dessiner une seule fois quelque chose de lourd que tu vas réutiliser tel quel. Par exemple t'as un décor assez gourmand en draw mais il est statique, plutôt que de faire beaucoup de draw sur ta render window à chaque frame, tu draw ça UNE FOIS sur une render texture, et tu affiches cette render texture. Au lieu d'avoir plein de trucs dessinés t'auras juste un sprite.

Ça ira plus vite de dessiner un vertex array de 5000 triangles que de dessiner 2000 sprites séparément ouais. Essaie. ;)

Draw des trucs hors écran c'est pas gratuit, donc oui si ça pose problème il vaut mieux ne draw que les trucs qui apparaissent à l'écran. (que tu utilises une vue ou pas c'est pareil, de toutes façons y'a toujours une vue par défaut sur la fenêtre)

0.25 c'est un double
0.25f c'est un float
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: Glân de Brylan le Mars 30, 2015, 10:01:47 pm
D'accord, merci pour toutes ces réponses précises !
Juste : L'intérêt de mettre le f pour avoir un float au lieu d'un double, c'est pour que ça prenne moins de place dans l'exécutable, que ce soit plus rapide à exécuter ou les deux ? Ou juste pour que ce soit plus propre dans la mesure où on demande un float et non un double ?
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: Laurent le Mars 30, 2015, 10:42:19 pm
C'est juste pour que le compilo ne te gueule pas dessus (s'il ne le fait pas, c'est que tu n'as pas suffisamment monté le niveau de warnings).
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: Glân de Brylan le Mars 30, 2015, 10:48:01 pm
D'accord merci !
Je vais donc régler mes warnings de ce pas...


EDIT :
J'ai pourtant tous les warnongs d'activés à part -Weffc++ et -Wswitch-enum qui me spamment avec SFML, donc je ne vois pas ce qui manque...
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: Laurent le Mars 31, 2015, 07:42:34 am
Est-ce que tu as -Wall -Wextra -Wpedantic etc. ?
Titre: Re : RenderTexture, draw() et autres questions de ce genre
Posté par: Glân de Brylan le Mars 31, 2015, 08:29:09 am
Oui. Alors j'ai exactement :
-Wall -Wextra -std=c++11 -Wzero-as-null-pointer-constant -pedantic -pedantic-errors -Wmain -Wswitch-default -Wmissing-include-dirs -Wmissing-declarations -Wunreachable-code -Winline -Wfloat-equal -Wundef -Wcast-align -Wredundant-decls -Winit-self -Wshadow et -Wnon-virtual-dtor