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

Auteur Sujet: RenderTexture - délai sur le clear()  (Lu 2042 fois)

0 Membres et 1 Invité sur ce sujet

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
RenderTexture - délai sur le clear()
« le: Avril 26, 2013, 02:20:36 pm »
Bonjour,

J'ai pas mal consulté le forum pour voir si des gens expérimentaient la même chose que moi mais il m'a semblé que non. N'hésitez pas à me rediriger vers le bon post le cas échéant.

Je suis passé récemment de la SFML 1.6 à la SFML 2.0 et j'ai essayé d'utiliser les nouvelles fonctionnalités au maximum.

Concernant un affichage des lumières pour mon écran, j'utilise donc (comme indiqué sur la doc si j'ai bien compris) sf::RenderTexture pour construire mon image des lumières puis je l'imprime en BlendMultiply pour un bon résultat.

Je dois donc la "clear" entre chaque image, et le problème c'est que cette opération semble prendre assez longtemps parfois (allant jusqu'à 40ms pour clear) mais seulement parfois...

J'utilise la SFML 2.0 avec Qt 4.8.2 compilée en static, sur Windows 8, avec une GeForce 640 de chez MSI.

void MyCanvas::OnUpdate()
{
    sf::Clock clock;
    // Clear screen
    clear(sf::Color(0, 0, 64));

    clock.restart();
    myRender->clear();
    float time = clock.restart().asMilliseconds();
    if ( time > 15 )
        qDebug() << "Clear RenderTexture took too much time (" << time << "ms)";

    // Process events
    sf::Event Event;
    while (pollEvent(Event))
    {
        if ( Event.type == sf::Event::Closed ) {
            sf::RenderWindow::close();
        }
    }
}
 

Avec une sortie console

Démarrage de .\demoClear.exe...Qt: Untested Windows version 6.2 detected!
Clear RenderTexture took too much time ( 32 ms)
Clear RenderTexture took too much time ( 16 ms)
Clear RenderTexture took too much time ( 23 ms)
 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : RenderTexture - délai sur le clear()
« Réponse #1 le: Avril 26, 2013, 03:29:08 pm »
Pas sûr que ce soit clear() qui prenne du temps. Essaye un myRender->setActive(true) juste avant, et mesure les deux. C'est setActive qui devrait prendre du temps.
Laurent Gomila - SFML developer

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : RenderTexture - délai sur le clear()
« Réponse #2 le: Avril 26, 2013, 05:08:58 pm »
En effet, c'est bien setActive() qui prend le temps. Merci pour la réponses très rapide

J'en conclue que c'est normal ? le setActive signifie que l'on recharge la renderTexture pour openGL, j'imagine que c'est appelé implicitement quand on fait le clear ?

Peut-être devrais-je trouver une autre solution, comme écrire directement sur RenderWindow puis sauvegarder le résultat pour ensuite écrire réellement dessus, plutôt que d'appeler une RenderTexture ?

Est-ce qu'il y a un autre moyen plus propre ou efficace de faire les choses ?

« Modifié: Avril 26, 2013, 05:13:26 pm par gostron »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : RenderTexture - délai sur le clear()
« Réponse #3 le: Avril 26, 2013, 05:36:36 pm »
setActive change de contexte OpenGL, donc ça prend du temps. Ceci-dit, ça ne devrait pas prendre autant de temps, c'est quand même pas normal.

Si tu fais la même chose dans un petit code minimal sans Qt, juste une RenderWindow et une RenderTexture, est-ce que le problème se reproduit ?
Laurent Gomila - SFML developer

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : RenderTexture - délai sur le clear()
« Réponse #4 le: Avril 28, 2013, 07:36:47 pm »
Sans utiliser de fenêtre Qt, il n'y a que le premier chargement de la RenderTexture qui prend dans les 30ms, mais après on dépasse jamais la milliseconde, contrairement à avec où il arrive qu'il y ait des valeurs qui pouvaient monter entre 5 et 15ms en général.

Je ne sais pas si cela peut venir de mon ordinateur vu que j'ai déjà observé des problèmes de DPC latency, cependant, j'ai arrêté d'utiliser RenderTexture pour mon programme.

Merci de votre aide et désolé pour la réponse tardive, je ne peux pas emmener mon ordinateur fixe partout ^^
« Modifié: Avril 29, 2013, 11:54:49 am par gostron »