Hello !
Je crois comprendre ton raisonnement, ce serai un outil potentiellement difficile a comprendre.
Juste qu'apres lecture des source de la SFML, je pense que dans certain cas, ya moyen de faire tres rapide.
L'exemple le plus parlant sera surement une TileMap.
Mais cela peut s'etendre a tout objet de scene partageant la meme texture, projectile des bot/player.
Vu la taille/resolution de certaine texture, regroupper plusieurs image en une seule image est logique.
J'ai bien 20 projets utilisant un grand nombre de sprite qui se retrouve dans ce cas.
Apres je te l'ai dis, je comprend ton desir de faire une lib facile d'utilisation.
Mais certains sacrifice sont-ils vraiment necessaire ?
Tu mentionne plusieurs obstacle :
- on ne pourra pas mettre dans un même buffer des sprites utilisant différentes textures, mais on ne peut pas l'interdire proprement au niveau de l'API (du coup je vois déjà les milliers de posts sur le forum "ça marche pô !")
Exemple parfait, a ce stade la seule alternative que j'ai est d'indiquer le probleme avec un std::cerr.
Assert le programme si on push un Sprite avec une texture differente par exemple.
Box2D semble fan de cette technique, et je ne l'ai pas trouve si inabordable que cela.
- si on utilise un sf::Sprite il faut gérer tous ses attributs, donc notamment sa transformation courante (c'est pas la mort mais ça peut devenir assez vite inefficace pour des sprites qui ne bougent jamais).
Oui, c'est vrai que gerer le cas de maniere optimise/propre va complexifier le fonctionnement interne de la lib.
Probablement des modifications du Sprite (attribut bool) confirmant qu'il a subit une transformation.
Cela me fait penser qu'un ColorBuffer ne serait pas inutile dans une classe comme le SpriteBuffer.
- si on met des sf::Sprite dans le buffer, ce n'est à mon avis pas assez clair que ceux-ci sont copiés dans le vertex array ; je m'attend en outre à voir des gens changer leur sprite après ajout dans le buffer, et penser que le buffer va automatiquement prendre en compte ces changements
Vrai, mais a ce stade pourquoi ne pas rendre la chose possible ?
Au lieu de reset puis push des Sprites dans un SpriteBuffer, pourquoi ne pas les lier ?
Le SpriteBuffer attach/detach des Sprites qui sont update dans leur coin.
SpriteBuffer.Render() s'occuperai d'update la pool, qui a ce stade "pourrait" augmenter sa taille si besoin.
PS : dsl pour mon francais probablement mauvais.
PS : clavier QWERTY, pas d'accent pour moi.
PS : quelque soit ta decision, ce topic m'aura permit d'avoir une idee plus complete de ma "mySFML"