• [^] # Re: Duck typing et implementation

    Posté par (site web personnel) . En réponse à la dépêche Je crée mon jeu vidéo E01 : les systèmes à entités. Évalué à 3.

    Je fais confiance à SFML pour ça. Il y a des trucs dans SFML qui me font dire que c'est bien foutu à ce niveau là. Ou plutôt pas trop mal foutu.

    Et bien je viens de regarder le code de SFML, tu fais bien de prendre des pincettes ;)

    SFML est bien codé, pas de soucis la dessus mais il ne fait pas les optims sus-citées.

    Les seules optimisations faites à ce niveau sont de ne pas changer une texture (ou blend mode) si elle est déjà celle courante (https://github.com/LaurentGomila/SFML/blob/master/src/SFML/Graphics/RenderTarget.cpp#L192-L198)

    Par contre, il n'y a aucun ordre de rendu géré par SFML. C'est le client (donc ton code) qui fait le rendu dans l'ordre qu'il veut.

    Si on suppose que ton jeu contient 10 entités identiques qui s'affiche avec deux quads identiques, chacun utilisant une texture différente.
    Tu vas donc avoir au total deux textures(A et B) et un quads qu'il faudra afficher 20 fois (10 avec la texture A, 10 avec la texture B)

    • Si tu t'y prends mal, tu parcours bêtement les entités et tu fais le rendu : quad_textureA, quad_textureB, quad_textureA, quad_textureB, ... À chaque fois, c'est un changement de texture et tes perfs en prennent un coup (derrière la nuque)
    • Si tu t'y prends bien, tu peux faire le rendu suivant : quad_textureA, ..., quad_textureA, quad_textureB, ..., quad_textureB. À ce moment, t'as que deux changement de texture et c'est la fête. Par contre ça t'oblige à avoir un algo/structure de donnée qui tient la route, tu ne peux plus parcourir dans l'ordre des entités.

    (Bien sur ne prend pas mes paroles pour des paroles d’évangile. Il y a beaucoup d'inconnus et ça m'étonnerai pas que les coûts de changement varient suivant les cartes graphiques et les drivers. On en revient à la base : Fais un truc qui marche, fais des tests, optimise. (mais pense quand même au problème de loin quand tu fais ton archi)

    Matthieu Gautier|irc:starmad