Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Crone123 le Mai 09, 2013, 07:01:33 pm

Titre: Taille d'un sf::Vertex
Posté par: Crone123 le Mai 09, 2013, 07:01:33 pm
Bonjour,
J'ai codé un moteur de particules en utilisant la SFML, et plus particulièrement avec des sf::Vertex et sf::Vertex Array.

Le moteur de particules a de très bonnes performances (je suis a env 300 - 350FPS avec 8000 particules, je tombe a 15FPS vers 400000 particules, donc y a de la marge)
Il gère le déplacement vectoriel, supporte des courbes, changement de couleur, etc....

J'aimerais lui rajouter la possibilité d'avoir des particules de différentes tailles. Actuellement les particules sont toutes de 1px.

Existe t-il un moyen de créer des particules plus grosse avec des sf::Vertex? (et sans détruire les perfs)
Je met tous mes sf::Vertex dans un gros sf::VertexArray et je fais un draw.
Comment pourrais-je faire pour augmenter la taille des particules? (si possible des particules "rondes")
Merci :)
Titre: Re : Taille d'un sf::Vertex
Posté par: Laurent le Mai 09, 2013, 07:19:09 pm
Il faut utiliser des sf::Quads au lieu de sf::Points, et pour avoir des particules rondes, il faut les texturer (le faire géometriquement va tuer tes performances).
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 09, 2013, 07:31:34 pm
Si j'utilise des sf::Quads comme type de sf::VertexArray, je pourrais toujours mettre toutes les particules dedans puis faire un rendu, ou je dois faire un rendu pour chaque particule séparément?
ça risque d'être lourd si c'est séparé non?

sf::Quads, c'est pour un quadrilatère?
Comment j'utilise ça? Je met les 4 coins en sf::Vertex dedans?
Pour le texturer, j'utilise quoi?
Il n'existe pas un truc type "sf::Circle" pour les sf::VertexArray (bon, je demande, mais je ne l'ai pas vu ici (http://sfml-dev.org/documentation/2.0/group__graphics.php#ga5ee56ac1339984909610713096283b1b) donc je pense que non... )


Question tant que j'y suis: sf::VertexArray ne permet pas par hasard de générer des dégradé de barre de vie avec de meilleures perfs qu'un sf::RectangleShape ou sf::ConvexShape?
Merci :)
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 09, 2013, 08:03:55 pm
Les sf::Circle sont des lignes droites tracée en cercle, c'est pour ça que tu peux en choisir le nombre de points.

Il est possible de texturer un point, voilà un code qui me permet d'afficher des particules en utilisant des points :
(Je peux pas te dire par contre si c'est plus performant d'utiliser des points plutôt que des quads ou même si ce code ne génère tout simplement pas des quads.)

#include <GL/gl.h>
#include <GL/glext.h>

glEnable(GL_POINT_SPRITE_NV);
glPointSize(size);
glVertexPointer(2, GL_FLOAT, 0, positionsXY.data()); // positionsXY -> {x1, y1, x2, y2, ...}

for (unsigned int i = 0; i < its.size(); i += 2)
{
       glDrawArrays(GL_POINTS, its[i], its[i+1]-its[i]);
}

glDisable(GL_POINT_SPRITE_NV);
 
Tu peux y ajouter une texture à l'aide d'une shader.


Par contre personnellement j'ai laissé tombé... j'avais pourtant réussi à le linker avec de l'opencl qui calculait les positions des particules etc... Le soucis c'est les perfs de l'affichage des particules en soit, afficher 8000 particules c'est bien mais faut pas oublier que derrière tu vas faire tourner un jeu qui lui-même demandera de dessiner (et se sera même plus lourd). Donc bon... J'aimerais bien réussir le link opencl->texture pour avoir de réelles particules en masse mais franchement j'y arrive pas... (de toute façon rien que l'opencl c'est déjà une chiure pas possible).
Donc voilà bonne chance mais jte conseil de pas trop rêver sur le nombre de particules que tu pourras gérer avec sfml (enfin là en l'occurrence je devrais dire avec opengl) par des techniques standards si tu veux pas être déçu.
Titre: Re : Taille d'un sf::Vertex
Posté par: Laurent le Mai 09, 2013, 10:17:06 pm
Toutes les réponses à tes questions se trouvent dans le tutoriel sur les vertex arrays. L'as-tu lu ?
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 12:09:19 am
Je n'avais pas vu ce tuto :)

sf::Circle, je ne l'ai pas vu dans le tuto non plus...

Pour ton code Eroy, je ne pourrais pas te dire si il fonctionne ou pas, je n'arrive pas a utiliser moi même OpenGL je verrais ça plus tard je pense (Note: J'ai que 16 ans, 17 dans 1mois.., je suis en 1SSI)

Par contre, j'ai lu le tuto des sf::VertexArray, et je dis chapeau :) Merci beaucoup pour ce tuto, je pensais pas qu'il était possible de faire des trucs aussi complets avec des sf::VertexArray :)
Je vais remplacer un bon nombre de sf::ConvexShape ou sf::RectangleShape par des sf::VertexArray, ça sera beaucoup plus performant, et je n'ai pas besoin de sf::ConvexShape, ou sf::RectangleShape, les textures sont des images gérées en C++ au lancement du jeu, avant j'utilisais des sf::Shape dans la version 1.6 pour faire un dégradé simplement. Je pense que je vais énormément augmenter les perfs de mon jeu grâce a ça :)


Pour les particules, je peux utiliser des sf::Quads pour avoir des particules carrées, ou bien des sf::Triangle pour des particules triangles, ou encore des triangleFan pour faire des imitations de cercles qui a mon sens seront tout aussi bien.
Reste a savoir si faire un draw de ces figures me permettra d'avoir des performances correctes.

Je vais essayer, on verra bien :) (Si vous savez déjà a l'avance ça m’intéresse aussi :) )
Merci :D
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 10, 2013, 01:26:00 am
De toute façon t'auras toujours la limite infranchissable qui t'empêchera d'utiliser des dizaines de milliers d'images, au font je ne pense pas qu'il y ai beaucoup de différences entre utiliser des sprites ou des shapes alors autant ne pas t'emmerder et utiliser des sprites... Après tests et tu verras bien.
Pour les particules il vaux mieux privilégier la qualité à la quantité : en utilisant des particules plus grosses, texturées et animées tu en auras besoin de beaucoup moins que pleins de petites et le résultat sera meilleur car dans tous les cas tu ne pourras jamais simuler de la fumée particule par particule (du moins pour une réelle utilisation et pas juste une demo).
Le plus intéressant dans les moteurs de particules basé cpu (et non pur gpu) c'est avant tout leurs gestions des déplacements et modifications et non leur performances.


Les particules c'est le truc que tu testeras le plus dans ta vie de programmeur... Juste parce que tu feras n'importe quoi avec pendant des heures sans te lasser. :D
https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-prn1/75019_515784541786989_321599495_n.png
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 01:53:56 am
Je suis d'accord avec toi, les particules c'est de quoi s'occuper pendant des heures sans jamais s'ennuyer :)

Ton rendu est magnifique :)

C'est fait avec ton code?
Il faudrait vraiment que j'arrive a avoir des particules rondes :)
Je vais essayer de comprendre ton code :)

Voici un test que j'ai fait avec les différents types de particules que je viens de coder (pas encore fini complètement):
http://dl.smglive.org/FJ_1368142250.104_View
http://dl.smglive.org/FJ_1368142713.2688_View
http://dl.smglive.org/FJ_1368142760.6659_View
http://dl.smglive.org/FJ_1368143021.4441_View

OK, le mélange de couleur c'est un peu trop, mais effectivement, plus les particules sont grosses, et moins on a besoin d'en créer, et niveau perfs ça change tout :)
Je vais voir aussi pour rajouter une rotation des Triangles et des Quads :)
Le rendu des grosses particules (25px entre le centre et le coté) est super fluide :)

Mais vraiment, ton rendu est magnifique, les particules rondes, ça fait vraiment quelque chose :)


EDIT: Les Shape ont l'avantage d'être redimensionnable de la forme que je veux :)
Pour les barres de vie c'est le mieux, mais maintenant je les ferais avec des sf::VertexArray, c'est beaucoup mieux :) (j'ai pas besoin de générer de texture avant, je gagne de la ram, de la vitesse, et je me simplifie la vie :) )
Par contre, les Sprite c'est dégueulasse niveau perfs pour un moteur de particules XD

EDIT2: Dans ton code, quel est le type de its? Comment je défini la couleur des particules?
Merci :)
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 03:33:48 am
En fait, j'ai réussi a faire des cercles avec la SFML:
case CIRCLE:
                    static float Angle(0), AngleAdd(0);
                    if(Pointeur->Vertices <= 0)
                    {
                        Pointeur->Vertices = 1;
                    }
                    Angle = 0;
                    AngleAdd = float(M_PI) / float(Pointeur->Vertices);
                    for(unsigned int C2(0);C2 < Pointeur->Vertices;++C2)
                    {
                        PV = new sf::Vertex(sf::Vector2f(Pointeur->Position.x + (cos(Angle) * Pointeur->Taille), Pointeur->Position.y + (sin(Angle) * Pointeur->Taille)), sf::Color(Pointeur->CR, Pointeur->CG, Pointeur->CB, Pointeur->CA));
                        PT.append(*PV);
                        AP.push_back(PV);
                        PV = new sf::Vertex(sf::Vector2f(Pointeur->Position.x + (cos(Angle + M_PI) * Pointeur->Taille), Pointeur->Position.y + (sin(Angle + M_PI) * Pointeur->Taille)), sf::Color(Pointeur->CR, Pointeur->CG, Pointeur->CB, Pointeur->CA));
                        PT.append(*PV);
                        AP.push_back(PV);
                        Angle += AngleAdd;
                    }

                    break;

Mon moteur de particules gère maintenant tous les types de sf::VertexArray, on peut faire des rendus vraiment variés :)
Pour les cercles par contre, c'est le type de particule qui bouffe le plus de processeur.
Si bien utilisé (pas trop de vertices), c'est fluide, mais si on commence a trop en mettre, y a intérêt a pas lancer 5000 particules d'un coup sinon les perfs ont quelques problèmes.

Par contre, des particules de taille inférieure a 5 avec quelques vertices donnent un visuel de cercle, et sans impacter les performances.

En mettant moins de vertice (et donc en améliorant les perfs), on peut donner des effets de flocon de neige, etc.. :D

En tout cas, merci a vous deux pour votre aide, et merci d'avoir crée des trucs aussi puissant dans la SFML :D
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 10, 2013, 08:59:36 am
Non les sprites n'ont pas de perfs dégueulasses car de toute façon tu utilises une texture qui elle est déjà sur la carte graphique donc ça doit pas être tellement plus lourd que tes quads...

Sur mon image j'utilise une texture composé de plusieurs points ce qui permet de "multiplier" les particules. :3
Titre: Re : Taille d'un sf::Vertex
Posté par: Laurent le Mai 10, 2013, 10:01:16 am
Vite fait car j'ai pas le temps d'en dire plus maintenant :

- les sprites c'est dégueu niveau perf pour les particules ; ce qui tue les performances c'est le nombre d'appels à draw, et entre 1 seul appel pour toutes tes particules, et 10000, franchement y a pas photo

- utilise des textures pour tes particules ! surtout pour les rondes ; ça ne coûtera pas beaucoup plus cher

- ton code est vraiment bizarre (des sf::Vertex alloués dynamiquement ?!), j'ai peur que tu ne fasses des choses très contre-productives :P
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 12:54:05 pm
Citer
Sur mon image j'utilise une texture composé de plusieurs points ce qui permet de "multiplier" les particules. :3
Une image contenant plusieurs particules?
Mais tu t'amuse a dessiner les particules sur GIMP ou bien tu met des points de base sur l'image qu'OpenGL dessine ensuite de la taille choisie? :)

Citer
- les sprites c'est dégueu niveau perf pour les particules ; ce qui tue les performances c'est le nombre d'appels à draw, et entre 1 seul appel pour toutes tes particules, et 10000, franchement y a pas photo
Oui, en fait il faudrait la possibilité de mettre des Array de Sprites comme des Vertex et ça résoudrait le problème :)

Citer
- utilise des textures pour tes particules ! surtout pour les rondes ; ça ne coûtera pas beaucoup plus cher
Comment rajouter des textures sur les particules?
Attention, la plupart des particules sont évolutives, donc leurs mettre une texture ne risque pas de tuer les performances?
Ceci dit, je peux créer un type de particule texturé juste pour ça, ça permettrait d'avoir un moteur complet selon ce qu'on veut faire :)

Citer
- ton code est vraiment bizarre (des sf::Vertex alloués dynamiquement ?!), j'ai peur que tu ne fasses des choses très contre-productives
Je ne pense pas :p
J'ai une classe (SMG::Gen_Part) contenant des SMG::Particule, le Gen_Part est le moteur en soit.
A l'utilisation, il suffit de rajouter des Particules dedans (pointeurs). Les particules contiennent en fait quelques variables de paramétrage de couleur, trajectoire, etc..
Le Gen_Part s'occupe de faire vivre les particules, les déplacer, les détruire, etc..c'est lui qui défini aussi la forme de toutes les particules. (On peut mettre plusieurs Gen_Part si on veut dessiner plusieurs formes différentes)

Les particules et les Vertex Alloués dynamiquement sont bien sûr supprimés après. (pas de fuite de mémoire)
L’intérêt est de me permettre de compter le nombre de particules présentes et les gérer plus simplement.
Enfin, ça doit pas être trop contre-performant étant donné les perfs que j'ai avec des points :) (Je suis sur une Nvidia GT 440 & I5 Quad Core a 3.2Ghz ou  Nvidia GT 220 & AMD Athlon II Dual Core a 2.7Ghz en fonction des fois, mais ça passe aussi bien sur l'un que l'autre :) )
Titre: Re : Taille d'un sf::Vertex
Posté par: domoi le Mai 10, 2013, 02:30:17 pm
Citer
Les particules et les Vertex Alloués dynamiquement sont bien sûr supprimés après. (pas de fuite de mémoire)
L’intérêt est de me permettre de compter le nombre de particules présentes et les gérer plus simplement.
Enfin, ça doit pas être trop contre-performant étant donné les perfs que j'ai avec des points  (Je suis sur une Nvidia GT 440 & I5 Quad Core a 3.2Ghz ou  Nvidia GT 220 & AMD Athlon II Dual Core a 2.7Ghz en fonction des fois, mais ça passe aussi bien sur l'un que l'autre  )

On évite le plus possible l'allocation de mémoire dynamique dans un jeux vidéo car ça affecte énormément les performances, en règle générale, on alloue toute la mémoire nécessaire au fonctionnement lors de l'initialisation du jeu.
Pour un système de particule, le pooling (http://en.wikipedia.org/wiki/Object_pool) se prête bien à ce système. Je fais cette remarque suite à la remarque de Laurent :
Citer
- ton code est vraiment bizarre (des sf::Vertex alloués dynamiquement ?!), j'ai peur que tu ne fasses des choses très contre-productives
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 10, 2013, 03:52:03 pm
Citer
en règle générale, on alloue toute la mémoire nécessaire au fonctionnement lors de l'initialisation du jeu
Tu travail avec du matos d'il y a 20 ans ?  ::)
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 07:53:19 pm
Perso j'alloue la mémoire nécessaire pour tout ce qui est textures/musiques, mais faut pas déconner, un jeu en réseau, des particules ou autres, c'est imprévisible, je vais pas m'amuser a allouer la masse de mémoire inutilement pour le cas où y ait des particules en plus.

Sinon, pour ma question de justement comment mettre une texture sur un sf::Quads, qu'un a une réponse?
Merci :)

EDIT: J'ai trouvé, c'est dans le tuto, et ça fonctionne, merci :D
Titre: Re : Re : Taille d'un sf::Vertex
Posté par: Lynix le Mai 10, 2013, 10:08:12 pm
Citer
en règle générale, on alloue toute la mémoire nécessaire au fonctionnement lors de l'initialisation du jeu
Tu travail avec du matos d'il y a 20 ans ?  ::)

C'est facile de dire ça quand ton ordinateur n'a aucun problème à gérer ce que tu lui donnes, cependant lorsque tu entres vraiment dans le temps réel, tu te retrouves très vite limité.

Pour un jeu à 60 FPS, tu n'as que 16ms pour générer une image, faire les calculs CPU et laisser la carte graphique faire ses propres calculs.

Une allocation dynamique est lourde, facilement plusieurs dizaines de microsecondes, tu te dis que ça n'est rien, mais même si ça ne prenait que 50us, ça signifie un vingtième de milliseconde, ça signifie qu'en enlevant tous les autres calculs et le rendu, tu ne pourrais faire que 320 allocations par frame pour tenir 60 FPS...

Bon après, le temps d'allocation varie de beaucoup, mais ça fait vraiment partie des opérations lourdes.
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 10, 2013, 11:10:49 pm
OK, et quelque soit l'ordi (Tour ou portable) je tourne a minimum 300FPS avec 8000particules, je sais qu'allouer n'importe comment ralentit énormément le jeu, mais faut pas trop chipoter non plus non? ;)
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 10, 2013, 11:55:30 pm
Là c'est pas du chipotage Crone, c'est pas très performant ce que tu as fais, c'est certain que pour gérer ce genre de chose il ne faut pas faire d'allocations dynamiques.

Bon par contre je savais pas qu'on trouvait encore des pcs capables de ne faire que 320 allocations par 16ms, c'est une pièce de collection là carrément. Tu sauvegardes ton taff sur disquette ? (ouais ok je troll x) mais faut reconnaître que tes chiffres sont quand même vachement marseillais).
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 11, 2013, 12:02:23 am
Citer
Là c'est pas du chipotage Crone, c'est pas très performant ce que tu as fais, c'est certain que pour gérer ce genre de chose il ne faut pas faire d'allocations dynamiques.
Alors, je gère ça comment?
En sachant que sf::VertexArray est basé sur un std::vector<sf::Vertex>, et que std::vector est un tableau dynamique, j'en ferais dans tous les cas non?

Je vois pas trop où est le problème entre allouer des Vertex dans un tableau et devoir les copier si on veut les modifier, ou allouer des Vertex dans des pointeurs qui sont dans un tableau, et pouvoir utiliser directement le pointeur pour les modifier...

Si quelqu'un peut m'expliquer simplement l'exact problème de mon code ça serait sympa :)
Merci :)


EDIT:
Citer
Bon par contre je savais pas qu'on trouvait encore des pcs capables de ne faire que 320 allocations par 16ms, c'est une pièce de collection là carrément. Tu sauvegardes ton taff sur disquette ? (ouais ok je troll x) mais faut reconnaître que tes chiffres sont quand même vachement marseillais).
J'avoue, 320 c'est rien du tout. Mon PC en supporte bien 15000 - 30000 par seconde en dépassant les 250FPS...
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 11, 2013, 12:13:22 am
En fait souvent quand tu vas gérer des particules, par exemple avec des emitters tu sais de combien de particules tu auras besoin donc il vaux mieux jouer avec des particules active ou non pour les dessiner que d'en créer et supprimer à chaque foi. Après bon, on a pas le code sous les yeux non plus.

(non mais cherches pas pour les alloc, tu remplis un vecteur de string de 100k strings de cardinalité 50 en 23ms et on me dit là aussi 4Mo en 48ms donc oui il a dût se tromper)
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 11, 2013, 12:21:21 am
Niveau alloc j'en fais pas de trop.
Mais effectivement, trouver un système qui ré-utilise des anciens vertex ça peut être intéressant.
Mais bon, le recyclage monstre que ça ferait risque de générer pas mal de bugs....et au final le traitement des déchets sera peut être plus long que leurs allocation...

Si je fais ça, OK je garde des Vertex alloués, mais ça change rien dans le fait que de toutes façon il me faudra quand même un sf::VertexArray a allouer...


J'ai une idée en tête:
Je pourrais avoir un tableau qui alloue des Vertex vide la première fois, et les conserve.
Ensuite, je ne met dans mon sf::VertexArray que les Vertex dont j'ai besoin (par pointeurs) provenant du tableau de base.

Au second draw, si le nombre de particules est identique, les Vertex sont ressortit en pointant du tableau de stock.
Si il en manque, le moteur de particules en recréera.
Si il y en a en trop, le moteur de particules ne sortira que ce dont il a besoin.

Je rajouterais donc une fonction pour vider les stock alloué, histoire de faire face au problème du surplus dans le stock (si l'utilisateur alloue beaucoup de particules, puis n'en utilise plus, il peut alors vider le stock pour économiser la ram)

J'essaie ça dès que je peux :)
Titre: Re : Taille d'un sf::Vertex
Posté par: gostron le Mai 11, 2013, 11:25:42 am
Je dirais que tout est dans le tuto sur les vertex ou les vertexArray.

Je crois qu'il suffit de faire un setTexture() sur ton vertex, puis de donner les coordonnées de texture sur chacun  des points.
Titre: Re : Re : Taille d'un sf::Vertex
Posté par: Lynix le Mai 11, 2013, 11:44:48 am
J'avoue, 320 c'est rien du tout. Mon PC en supporte bien 15000 - 30000 par seconde en dépassant les 250FPS...

Bon déjà, 320 c'était par frame et pas par seconde...

Dans mon scénario, 60 frames et 320 allocations par frame ça fait 19200 allocations par seconde.

Ce qui entre dans tes nombres (Quant aux 250 FPS, je rappelle qu'il s'agit d'une échelle logarithmique)

Pour reprendre ceci:
Tu sauvegardes ton taff sur disquette ? (ouais ok je troll x) mais faut reconnaître que tes chiffres sont quand même vachement marseillais).

Troller c'est bien mais réfléchir c'est encore mieux.

Surtout que, pour me citer moi-même:
Bon après, le temps d'allocation varie de beaucoup, mais ça fait vraiment partie des opérations lourdes.
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 11, 2013, 12:30:58 pm
Réfléchir c'est mieux... Ok c'est la meilleur quand même, on parle de particules, d'allocations dynamiques serte, mais sur de petits objets. Là dessus tu balances "une allocation dynamique c'est lourd, on peut en faire que 320 par frame". Sans préciser à quelle taille d'objet tu te réfères on ne part pas du principe que tu te bases sur des gros objets, et même avec tes objets auxquels tu te réfères tu étais quand même 3 fois au dessus. Sinon dans ce cas je vais te dire qu'on ne peut faire qu'une allocation dynamique par frame sans préciser la taille de mon objet et j'aurais forcément raison mais se sera complètement hs... Bref, je pense pas que tu puisses me blâmer pour ce troll.
Titre: Re : Taille d'un sf::Vertex
Posté par: Lynix le Mai 11, 2013, 12:40:33 pm
Mon premier post contenait "par exemple (http://fr.wiktionary.org/wiki/exemple)", mon second "sensibilisation (http://fr.wiktionary.org/wiki/sensibilisation)".

Faut arrêter de déconner, j'ai pas dis qu'on ne pouvait en faire qu'un nombre X par seconde, j'ai dis que c'était lourd et j'ai présenté un exemple qui, en comptant 50us par allocation, montrait que tu te retrouvais rapidement limité.

Au passage, j'ai aussi dit dans mon premier post que ça variait beaucoup, et ça varie tellement que j'ai préféré enlever mes chiffres du dernier post.

Edit: Gros objets ? Mes tests se sont basé sur du 64 octets, je doute même que tu puisses en obtenir moins de la part de l'OS.
Titre: Re : Taille d'un sf::Vertex
Posté par: germinolegrand le Mai 11, 2013, 01:15:10 pm
Bon, je vous suggère d'arrêter là ce troll.
A titre de comparaison, il est plus rapide d'allouer de grandes quantités de mémoire que plein de petites pour une même quantité finale. C'est la raison même d'existence du pooling.
La quantité minimum que peut vous allouer l'OS est d'une page. L'allocation dynamique n'est pas seulement le travail de l'OS, bien plus de votre programme qui va devoir gérer toutes les tailles allouées pour savoir combien il doit libérer.
Titre: Re : Taille d'un sf::Vertex
Posté par: Eroy le Mai 11, 2013, 01:30:30 pm
J'ai bien compris ce que tu disais hein x). Un troll c'est pas forcément motif à la prise de tête hein, c'était pas une insulte (surtout venant de moi), juste ma façon de dire que je trouvais que ton exemple était un peu trop sensibilisateur et qu'heureusement la marge de manoeuvre est un peu plus importante en réalité. Cela ne change bien sûr en rien le fait de devoir faire attention.
Enfin bref...
Titre: Re : Re : Taille d'un sf::Vertex
Posté par: domoi le Mai 11, 2013, 03:38:36 pm
Bon, je vous suggère d'arrêter là ce troll.
A titre de comparaison, il est plus rapide d'allouer de grandes quantités de mémoire que plein de petites pour une même quantité finale. C'est la raison même d'existence du pooling.

C'est plus ou moins juste. L'allocation de petits blocs de mémoire peut rompre la consistance de ton cache si ton jeu essaie d'y accéder de manière séquentielle. Je ferme cette parenthèse.
Je me dois de nuancer mon propos précédent, que ce soit un petit jeu en 2d ou un jeu 3d AAA, tu gagneras toujours a utiliser les bonnes méthodes et les bons patterns notamment lorsqu'il s'agit de la gestion de la mémoire. Selon la complexité de ton jeu, ton budget et le temps qu'il t'es accordé, tu pourras toujours complexifier ton implémentation pour répondre aux contraintes imposés.
Si l'auteur du thread a eu les réponses désirées alors on peut clore ce sujet.
Titre: Re : Taille d'un sf::Vertex
Posté par: Crone123 le Mai 12, 2013, 03:09:27 pm
J'ai pas eu le temps de répondre plus tôt ce Week end, ni de tester le système dont j'ai parlé.
Donc je pourrais poster le résultat ici si ça intéresse quelqu'un.

Sinon oui, concernant les tailles et formes de sf::Vertex j'ai eu effectivement des réponses claires je vous en remercie :)