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.
Partager