Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Aeon

Pages: [1]
1
Système / Re : Ralentir l'utilisation du CPU
« le: Février 28, 2014, 09:23:38 am »
Tu voulais dire waitEvent. Ca marche beaucoup mieux. Je viens de regarder, c'est en effet display qui appelle sleep, du coup, le thread principal est en roue libre. Peut-être le préciser dans le tuto sur les threads ?

En tout cas, merci Laurent, toujours très réactif.

2
Système / Re : Ralentir l'utilisation du CPU
« le: Février 27, 2014, 10:00:40 pm »
Laurant > J'ai mis à jour les 2 exemples que je voulais te montrer:
- le premier sans thread fonctionne très bien ;
- le second avec thread fonctionne mais occupe le CPU.
As tu une idée du problème ?

Merci d'avance.

3
Système / Re : Ralentir l'utilisation du CPU
« le: Février 27, 2014, 02:03:35 pm »
Arf!! Quel con, c'est ça de faire des copier-coller à l'arrache. Bon du coup, ça marche beaucoup mieux, et j'ai plus d'occupation CPU trop importante. J'ai testé avec des threads, ça marche aussi très bien, du coup, faut que je vois ce qui cloche dans mon programme.

4
Système / Re : Ralentir l'utilisation du CPU
« le: Février 27, 2014, 12:13:02 pm »
GLdouble angleMZ = 0;
GLdouble angleMX = 0;

int ExampleFramerateSFML_Mono()
{
    sf::ContextSettings settings(24, 8, 4, 3, 0);
    sf::RenderWindow* window = new sf::RenderWindow(sf::VideoMode(640, 480),"OpenGL Base", sf::Style::Default, settings);
    window->setFramerateLimit(60);

    glViewport(0, 0, window->getSize().x, window->getSize().y);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective(70,(double)640/480,1,1000);
    glMatrixMode( GL_MODELVIEW );
    glEnable(GL_DEPTH_TEST);
    DrawCube(angleMX, angleMZ);
    sf::Clock clock;

    bool running = true;
    while (running)
    {

        sf::Event event;
        while (window->pollEvent(event))
        {
            switch(event.type)
            {
                case sf::Event::Closed:
                    running = false;
                    break;
            }
        }

        sf::Time elapsed = clock.restart();
        int elapsed_ms = elapsed.asMilliseconds();
        angleMZ += 0.05 * elapsed_ms;
        angleMX += 0.05 * elapsed_ms;
        DrawCube(angleMX, angleMZ);
        window->display();
    }

    window->close();

    delete window;

    return 0;
}
 

GLdouble angleTZ = 0;
GLdouble angleTX = 0;

void ThreadDrawingT(sf::RenderWindow* window)
{
    window->setActive(true);

    glViewport(0, 0, window->getSize().x, window->getSize().y);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective(70,(double)640/480,1,1000);
    glMatrixMode( GL_MODELVIEW );
    glEnable(GL_DEPTH_TEST);
    DrawCube(angleTX, angleTZ);

    sf::Clock clock;
    while(window->isOpen())
    {
        sf::Time elapsed = clock.restart();
        int elapsed_ms = elapsed.asMilliseconds();
        angleTZ += 0.05 * elapsed_ms;
        angleTX += 0.05 * elapsed_ms;
        DrawCube(angleTX, angleTZ);
        window->display();
    }
}

int ExampleFramerateSFML_Multi()
{
    XInitThreads();

    sf::ContextSettings settings(24, 8, 4, 3, 0);
    sf::RenderWindow* window = new sf::RenderWindow(sf::VideoMode(640, 480),"OpenGL Base", sf::Style::Default, settings);
    window->setFramerateLimit(60);

    window->setActive(false);
    std::thread* thread = new std::thread(ThreadDrawingT, window);

    bool running = true;
    while (running)
    {

        sf::Event event;
        while (window->pollEvent(event))
        {
            switch(event.type)
            {
                case sf::Event::Closed:
                    running = false;
                    break;
            }
        }
    }

    window->close();

    thread->join();
    delete thread;
    delete window;

    return 0;
}
 

5
Système / Re : Ralentir l'utilisation du CPU
« le: Février 26, 2014, 06:50:08 pm »
Je remonte le thread car j'ai le même problème, que ce soit setVerticalSyncEnabled ou setFramerateLimit (en prenant bien soin de ne pas activer les deux bien sûr), ça ne fonctionne pas.

J'ai essayé d'autres solutions:
- std::this_thread::sleep_for ;
- condition dans la boucle principale ;
etc.
Rien ne change, le core alloué au thread est toujours occupé à 100% et j'ai un framerate qui explose.

J'ai regardé la conf de fglrx pour désactiver le vsync mais ça ne change rien (en même temps, je ne suis pas sûr que le VSync est bien été désactivé, la conf via aticonfig est vraiment galère), mais en même temps, bizarre que ça dépende de ça ( setFramerateLimit n'ajoute-t-il pas simplement un délai dans la boucle ?). La limitation du framerate avec la SDL fonctionne très bien avec SDL_Delay (l'occupation du core descend à moins de 1% et j'ai bien 60 FPS constant).

Si quelqu'un a une idée...

Ma conf:
- Linux 3.13.5 (x86-64)
- ATI Radeon R7 260X avec drivers Catalyst 14.1
- SFML 2.1

6
Fenêtrage / Re : Resize et thread
« le: Février 25, 2014, 08:14:04 am »
Merci Laurent, réponse très claire. Je procède effectivement comme ça pour la gestion de la caméra mais je voulais savoir s'il y avait d'autres méthodes.

7
Fenêtrage / [Resolu]Resize et thread
« le: Février 24, 2014, 10:31:28 pm »
Bonjour à tous,

J'aimerais savoir comment vous faites pour traiter l'événement resize dans un contexte multi-threadé. En effet, j'ai besoin d'appeler glViewport et gluPerspective pour traiter mon événement resize et mon RenderWindow doit être actif. Sauf qu'il a été désactivé dans le thread principal pour qu'il soit actif dans le thread de dessin. Ma question est: est ce que vous synchronisez les 2 threads avec des mutex par exemple pour re activer le RenderWindow dans le thread principal ou avez vous une solution plus simple ?

Merci d'avance.

Pages: [1]
anything