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.


Sujets - Zylann

Pages: [1]
1
Graphique / Limite de RenderTextures?
« le: Mai 01, 2014, 03:03:23 am »
Bonjour,
je développe un projet avec SFML.NET, et jusque là aucun problème, le binding fonctionne très bien...
Sauf lorsque j'ai commencé à instancier beaucoup de RenderTextures.

Dans mon projet, dès que j'arrive à plus de 90 RenderTexture de 128x128 pixels, tout se freeze et crash sur cette erreur :
"Failed to create an OpenGL context for this window"

Autre chose étrange: avant de crasher, mon application consommait 500Mo de RAM (Au lancement je n'ai que 50Mo environ)
. J'ai compté mes allocations, et compte tenu de la taille de mes RenderTexture (128x128), une centaine ne devraient pourtant pas dépasser les 10Mo au total :O

Je ne comprend pas ce qui se passe, y-a-til une limite au nombre de RenderTextures? Pourquoi semblent-elles peser aussi lourd?
J'utilise Visual Studio en C# sous Windows avec une carte graphique AMD, drivers fraîchement mis à jour.

2
Graphique / Performance de window.display(), RenderTexture et shader
« le: Février 14, 2014, 07:31:05 pm »
Bonjour,

je suis en train de tester un shader d'éclairage 2D avec SFML. Pour cela, je calcule une lightmap dans une sf::RenderTexture en utilisant le shader, puis je l'affiche dans la fenêtre pour voir sa tête.

Le hic, c'est que lorsque je redimensionne la fenêtre, je perd en FPS, alors que mon shader est sensé être exécuté sur la même résolution, celle de ma sf::RenderTexture...
Je me suis rendu compte que window.display() consommait plus de temps que mon code de rendu, et c'est là que le ralentissement arrive Oo

Quelqu'un aurait-il un avis sur ce souci de performance? Ai-je oublié quelque-chose?

Voici le projet complet (c'est pas très gros) : http://zylannprods.fr/dl/Light2D.zip
Ou le code C++ :
#include <SFML/Graphics.hpp>
#include <iostream>

#define SIZE 512

using namespace std;

int main()
{
    cout << "Hello world!" << endl;

    sf::RenderWindow window(sf::VideoMode(SIZE, SIZE), "Lights");

    //window.setFramerateLimit(60);

    const sf::View & view = window.getDefaultView();

    // Load filter map
    sf::Texture filterMap;
    if(!filterMap.loadFromFile("filterMap.png"))
    {
        std::cout << "E: couldn't load filterMap" << std::endl;
        return -1;
    }

    // Create light map
    sf::RenderTexture lightMap;
    if(!lightMap.create(SIZE,SIZE))
    {
        std::cout << "E: couldn't create light map" << std::endl;
        return -1;
    }
    lightMap.setView(view);
    lightMap.clear(sf::Color::Black);
    lightMap.display();

    // Load shader
    sf::Shader shader;
    if(!shader.loadFromFile("light.vert", "light.frag"))
    {
        std::cout << "E: failed to load shader" << std::endl;
        return -1;
    }

    sf::Vector2f lightPosition;

    sf::Sprite lightMapSprite;
    lightMap.setSmooth(true);
    lightMapSprite.setTexture(lightMap.getTexture());

    sf::Sprite filterMapSprite;
    filterMap.setSmooth(true);
    filterMapSprite.setTexture(filterMap);

    shader.setParameter("filterMap", filterMap);

    sf::Clock renderClock;
    sf::Clock secondClock;

    float renderTime = 0;
    float flipTime = 0;

    while(window.isOpen())
    {
        sf::Event event;

        while(window.pollEvent(event))
        {
            switch(event.type)
            {
            case sf::Event::Closed:
                window.close();
                break;

            default:
                break;
            }
        }

        sf::Vector2i mousePos = sf::Mouse::getPosition(window);
        mousePos.y = SIZE - mousePos.y;
        lightPosition = 0.9f*lightPosition + 0.1f*window.mapPixelToCoords(mousePos);

//
// Begin render
//

        renderClock.restart();

        // Calculate lightmap

// Activate shader
        sf::Shader::bind(&shader);

        shader.setParameter("lightPos", lightPosition);

// Use a white rect covering all the viewport to render the light
        sf::RectangleShape fillRect(sf::Vector2f(800,600));
        fillRect.setFillColor(sf::Color(255,255,255));
        lightMap.draw(fillRect);
        lightMap.display();

// Disable shader
        sf::Shader::bind(0);

        window.clear(sf::Color(8,8,8));

// Display filterMap or lightMap by pressing spacebar
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Space))
        {
        // Draw filterMap if space is pressed
            window.draw(filterMapSprite);
        }
        else
        {
        // Draw the lightmap otherwise
            window.draw(lightMapSprite);
        }

        renderTime = renderClock.getElapsedTime().asMilliseconds();

//
// End render, flip window
//

        renderClock.restart();

        window.display();

        flipTime = renderClock.getElapsedTime().asMilliseconds();

if(secondClock.getElapsedTime().asSeconds() >= 1)
{
std::cout << "I: "
"Render time: " << renderTime << "ms, "
"Flip time: " << flipTime << "ms" << std::endl;

secondClock.restart();
}
    }

    return 0;
}

Autre problème plus accessoire : j'affiche une texture ou la lightmap en fonction de l'appui sur la touche espace, mais dans les deux cas ça affiche toujours la lightmap Oo

3
Réseau / Recevoir plusieurs paquets via receive() ?
« le: Mai 13, 2013, 07:48:25 pm »
Bonjour,
pour clarifier, je voudrais savoir si un socket en mode non-bloquant peut recevoir plus d'un paquet?
Je m'explique : quand on appelle receive(), on reçoit un paquet, mais est-ce possible que plusieurs soient en attente? Les récupère-t-on en appelant receive jusqu'à ce qu'il n'y en aie plus?
Ou faut-il passer en non-bloquant?
Et même question pour les envois, peut on envoyer plusieurs paquets à la fois en non-bloquant?

4
Réseau / [Résolu] Envoi/Réception de structure et endianess
« le: Mai 13, 2013, 07:42:35 pm »
Bonjour,
J'ai commencé à coder une architecture client-serveur, et ai été tenté d'utiliser une méthode "paquet = structure" pour mes paquets réseau :
plutôt que d'utiliser sf::Packet, envoyer directement un tableau d'octets représentant des struct. Ainsi, le receveur n'aurait qu'à reconstruire la structure par l'opération inverse. Je trouve ça pratique car ça évite de se payer des lignes en plus pour << et >> les variables une par une dans un sf::Packet etc.

Cependant, est-ce que ça peut justement poser problème au niveau de l'endianess? Si oui, y-a-til un moyen de s'en débarasser sans avoir à repartir sur du variable-par-variable avec sf::Packet?

5
Général / Compiler/Lancer SFML2-RC avec MinGW-gcc-4.7.2
« le: Décembre 08, 2012, 09:33:47 pm »
Bonjour,
j'ai installé SFML2 RC sous Code::Blocks, avec le code d'exemple ça compile correctement, mais l'exécutable crash toujours Oo

Au début, j'ai vu qu'il manquait libgcc_s_dw2-1.dll, puis libstdc++-6.dll. J'ai été les chercher dans le dossier de mon compilateur (MinGW dernier du nom, pas celui livré avec C::B), mais à présent ça crash simplement sans autre explication :(

j'ai essayé avec ou sans l'option C++0x,
SFML2 Windows 32 bits - GCC DW2 ou encore
SFML2 Windows 32 bits - GCC SJLJ (Code::Blocks)...
mais ça ne change rien.

Voici la call stack :
#0 77D45898     ntdll!RtlQueryEnvironmentVariable_U() (C:\Windows\system32\ntdll.dll:??)
#1 77D43352     ntdll!RtlUnicodeStringToOemString() (C:\Windows\system32\ntdll.dll:??)
#2 77DB5AAB     ntdll!RtlpSetUserPreferredUILanguages() (C:\Windows\system32\ntdll.dll:??)
#3 77D77CDE     ntdll!RtlTraceDatabaseValidate() (C:\Windows\system32\ntdll.dll:??)
#4 77D43352     ntdll!RtlUnicodeStringToOemString() (C:\Windows\system32\ntdll.dll:??)
#5 777C9D45     msvcrt!malloc() (C:\Windows\system32\msvcrt.dll:??)
#6 6FCBD853     libstdc++-6!_Znwj() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#7 6FC59235     libstdc++-6!_ZN9__gnu_cxx12__atomic_addEPVii() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#8 6FC89FE2     libstdc++-6!_ZNSs4_Rep9_S_createEjjRKSaIcE() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#9 6FC897B5     libstdc++-6!_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#10 6FC89B97    libstdc++-6!_ZNSs15_M_replace_safeEjjPKcj() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#11 6FC896EB    libstdc++-6!_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcE() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#12 6FC8BE47    libstdc++-6!_ZNSsC1EPKcRKSaIcE() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\libstdc++-6.dll:??)
#13 00000000    0x00401d30 in ??() (??:??)
#14 00000000    0x004010fd in ??() (??:??)
#15 77D4B299    ntdll!RtlInsertElementGenericTableAvl() (C:\Windows\system32\ntdll.dll:??)
#16 77D4B26C    ntdll!RtlInsertElementGenericTableAvl() (C:\Windows\system32\ntdll.dll:??)
#17 00000000    0x00000000 in ??() (??:??)
 

Note : j'ai également pris le soin de retirer SFML 1.6 de mes répertoires de compilation, pour éviter les conflits...

Pages: [1]
anything