Salut!
Les besoins de mon moteur devenant de plus en plus grand, opengl ne suffit plus, en effet, celui-ci ne permet pas de faire du dessin de manière parallèle, ce qui bouffe trop de perfs surtout pour faire de l'order independant transparency de manière simple.
En fait ce que je voudrais faire c'est ceci (dans cet ordre) :
-Ecrire un fragment avec un fragment shader dans un buffer.
-Lire le fragment précédent et écrire le fragment suivant avec un autre shader dans un autre buffer.
Pouvoir écrire dans plusieurs buffers avec un même shader, se serait encore mieux.
Le but final est de pouvoir effectuer des traitements au niveau du cpu en parallèle pendant que la frame courante se remet à jour.
Ainsi le CPU n'est plus obligé d'attendre après le GPU pour continuer les traitements qu'il a à faire, et le GPU n'est plus obligé d'attendre que le shader aie fini sont traitement avant de mettre le buffer à jour et lire les nouvelles valeurs dans le buffer.
Bref, je trouve que opengl n'est pas très performant et souffre beaucoup de son ancienneté.
J'ai entendu parlé de OpenCL malheureusement il faudra tout réapprendre et sans doute recoder tout le moteur.
Mais j'ai plusieurs questions avant de me lancer :
-Y a t'il moyen de faire des traitements par pixel de manière synchronisée au niveau du GPU c'est à dire écrire une donnée dans un buffer puis lire cette donnée dans ce même buffer avec deux shader différent jusqu'à ce que le dessin soit terminé. (Voir même écrire et lire dans plusieurs buffers avec un seul et même shader)
-Cet api me parait un peu complexe à utiliser, plus que opengl en tout cas, car il y a un tas de fonctions d'initialisation à appeler et pas mal de choses à initialiser mais au pire, je me débrouillerai.
Partager