IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Automate cellulaire sur GPU


Sujet :

OpenGL

  1. #1
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    597
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 597
    Points : 2 439
    Points
    2 439
    Par défaut Automate cellulaire sur GPU
    Bonjour,
    Affin d'optimiser mon moteur, j'ai passé un algorithme a base d'automate cellulaire sur le GPU.
    J'utilise donc un fragment shader pour faire mes operations.

    Cet automate nécessite une dizaine d’itérations par frame, j'ai donc fait un système a base de deux FBO.
    La première FBO est affichée sur la deuxième en utilisant le dit shader, une fois cela fait je fait l'inverse et je blit la seconde sur la première, cela 10x de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    bool swap = true;
    for(int i=0; i<cellularPasses; i++)
    {
        if(swap) swapMap->setTarget();
        else cellularMap->setTarget();
     
            // Automate cellulaire
            cellularShader.use();
     
            if(swap) cellularMap->texture().bind();
            else swapMap->texture().bind();
     
            glBegin(GL_QUADS);
                glTexCoord2f(0, 0); glVertex2f(0, 0);
                glTexCoord2f(u, 0); glVertex2f(mapWid, 0);
                glTexCoord2f(u, v); glVertex2f(mapWid, mapHei);
                glTexCoord2f(0, v); glVertex2f(0, mapHei);
            glEnd();
     
            if(swap) cellularMap->texture().unbind();
            else swapMap->texture().unbind();
     
            cellularShader.unuse();
     
        if(swap) swapMap->resetTarget();
        else cellularMap->resetTarget();
     
        swap ^= 1;
    }

    Ma question est simple: Cette façon de faire est elle optimale?
    Je sais qu'un automate cellulaire standard n'as pas forcément besoin d'un tableau temporaire
    voir http://cell-auto.com/optimisation/#naive partie 5.
    Sauf que dans le cas d'un FBO je ne vois absolument pas de moyen d'optimiser ce que j'ai fait.
    Si quelqu'un a une idée.

    Merci par avance, et bonne journée.
    Circuits intégrés mis à nu: https://twitter.com/TICS_Game

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 287
    Points
    218 287
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    On peut auto feeder (nourrir la carte par elle même) la carte graphique. En effet, on peut faire en sorte que le tampon de sortie soit directement réutilisé en entrée. Alors, j'avais appris à le faire en Direct 10, mais pas en OpenGL. Je pense que cela se limite à OpenGL 4, comme méthode.
    Cela sera toujours mieux que de repasser par le CPU pour changer les tampons entre chaque passe.
    Si vous cherchez un tutoriel sur cela, il faudra aller voir du coté des particules entièrement gérées sur GPU
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    C'est avec le transform feedback ou si tu as le GPU avec les compute shaders, que tu pourrais atteindre ce but. (Pas sûr pour le transform feedback, mais LittleWhite m'a fait penser à ce tutoriel en parlant des particules sur le GPU)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Membre émérite Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    597
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 597
    Points : 2 439
    Points
    2 439
    Par défaut
    Oh, je ne connaissais pas tout ça, ça semble être très pratique.
    Merci d'avoir éclairé ma lanterne
    Circuits intégrés mis à nu: https://twitter.com/TICS_Game

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les automates cellulaire pour traitement d'image
    Par hanou88 dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 27/04/2009, 14h30
  2. Les automates cellulaires
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/08/2006, 18h35
  3. Parallelisme sur gpu
    Par chonos dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 08/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo