Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Performance, sf::RenderTexture et nombreux Shaders  (Lu 10994 fois)

0 Membres et 2 Invités sur ce sujet

PetitPoney

  • Newbie
  • *
  • Messages: 44
    • Voir le profil
Re : Performance, sf::RenderTexture et nombreux Shaders
« Réponse #30 le: Octobre 24, 2013, 02:57:22 pm »
Je comprend tout à fait.

Cependant, je n'ai toujours pas trouvé de solutions pour appliquer mes shader de façon globale sur mon écran 1080p sans tomber à 30fps (si ce n'est utilisé de plus petit sf::RenderTexture ce qui donne un résultat moche).

Pensez vous que je gagnerais à passer directement par openGL et utiliser des VBO ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Performance, sf::RenderTexture et nombreux Shaders
« Réponse #31 le: Octobre 24, 2013, 03:11:08 pm »
Est-ce que c'est toujours 30 fps ? Ou bien des fois tu as des valeurs entre 30 et 60 ?

L'optimisation est un sujet délicat, tout ce que je peux te dire c'est qu'avant d'essayer tout et n'importe quoi (OpenGL + VBO ? pourquoi ça et pas autre chose ?), il faut identifier ce qui est optimisable.
Laurent Gomila - SFML developer

PetitPoney

  • Newbie
  • *
  • Messages: 44
    • Voir le profil
Re : Performance, sf::RenderTexture et nombreux Shaders
« Réponse #32 le: Octobre 24, 2013, 03:37:40 pm »
Non, ça peut descendre en dessous mais c'est "a vu d'oeil" la valeur maximale.

Pourquoi les VBO ?


J'ai déjà fait pas mal d'openGL + VBO pour un jeux en 3D qui avait plus d'affichage à faire que mon projet 2D actuel, pourtant celui-ci était plus rapide. Par contre il n'y avait en effet pas d'utilisation de shader.

Au niveau de l'optimisation.

Comme je l'ai dis précédement j'ai déjà fait un gros travail d'optimisation en rassemblant les objets du même groupe dans trois vertexArray afin de n'avoir que trois draw à utiliser pour plusieurs centaines d'objet.

Actuellement si je spam comme un sale pour avoir un maximum d'objet à l'écran, je monte au grand maxium à 20 draw/frame (en comprenant donc l'application de shader). En utilisant des sf::RenderTexture de la taille de ma fenêtre, je suis en fullscreen à ~25fps, en 1280*720 je monte à ~40pfs, en 800*600 c'est la fête je passe à ~70fps.

Je suppose donc que le problème vient des sf::RenderTexture.
Ce que je ne comprend pas c'est que j'utilise une texture (loadFromFile)  de 2048*2048 pour dessiner mon background étoilé dynamic (sf::VertexArray de 500 sf::Triangles) et je n'ai pas de soucis avec ça.

Pourquoi ça et pas autre chose ?
J'ai déjà pensé à multiThread mes mise à jour de sf::VertexArray, mais je n'ai pas vraiment approfondi le sujet.

EDIT : Les mises à jours des deux plus gros sf::VertexArray ont maintenant leur propre thread. Ce qui ne ralenti pas l'affichage lors de ces mises à jours.
Je n'ai pas gagner en fps, toujours à cause des sf::RenderTexture et de l'application de mes shaders.

En faisant quelques recherches je suis tomber sur ça http://www.jonathanhaehnel.fr/blog/article/render-to-texture-avec-opengl-3-et-glsl-shaders.html
Si mon problème vient bel et bien des sf::RenderTexture, cette technique pourrait-elle m'aider ?

EDIT 2 : D'après les sources de la SFML, les FBO sont déjà implémenté dans la sfml, je ne me trompe pas ?

EDIT3 : J'obtiens finalement des performances correcte en appliquant qu'un seul glow global à toute ma scène. J'utilise donc deux sf::RenderTexture de la taille de ma fenêtre (+ quelques plus petits pour l'application de petits shader locaux).
Je suis maintenant à ~55fps en 1920*1080 ce qui est satisfaisant.
« Modifié: Octobre 31, 2013, 01:54:27 am par PetitPoney »