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 - Zylann

Pages: [1]
1
Graphique / Re : Limite de RenderTextures?
« le: Mai 01, 2014, 08:44:16 pm »
J'ai besoin de les garder car ce sont des lumières en grande partie statiques, je ne les recalcule qu'en cas de besoin (voire pas), donc je ne peux pas réutiliser mes RenderTextures aussi facilement.

Normalement, il me semble qu'une RenderTexture est juste une Texture, au final.
Je ne savais pas que SFML n'utilisait pas encore OpenGL 2, depuis le temps j'aurais cru, surtout depuis la version 2.1  :o
Une "upgrade" est prévue pour SFML 2.2 ou +?

En attendant, j'ai changé mon architecture pour utiliser une sorte d'atlas de lumières sur une seule RenderTexture. Au final c'est sans doute plus efficace...


2
Graphique / Re : Limite de RenderTextures?
« le: Mai 01, 2014, 01:24:55 pm »
Dans mon projet, je génère beaucoup de contenu procéduralement en temps réel, et pour chaque lumière 2D j'ai besoin d'une RenderTexture (deux plus précisément).
J'ai entendu qu'on n'était pas obligé de faire un nouveau contexte pour chaque RenderTexture en OpenGL, pourquoi toujours en créer un nouveau?

3
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.

4
Audio / Re : sf::Music ne fonctionne pas
« le: Février 14, 2014, 08:07:25 pm »
Cet extrait me semble correct, est-tu sûr que le fichier music.ogg est bien trouvé par ton programme? (Par défaut avec Code::Blocks le dossier racine est le même que le projet).
Sinon il faudrait voir le reste du code...

5
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

6
Réseau / Re : Envoi/Réception de structure et endianess
« le: Mai 13, 2013, 11:43:07 pm »
Ok, c'est bien ce que je pensais. Merci  :)

7
Réseau / Re : Recevoir plusieurs paquets via receive() ?
« le: Mai 13, 2013, 11:41:57 pm »
En fait je me pose ces questions car j'utilise le mode non-bloquant dans une boucle principale, et je me demande si il vaut mieux faire :
if(socket.receive(packet) == sf::Socket::Done)ou bien :
while(socket.receive(packet) == sf::Socket::Done)

8
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?

9
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?

10
Général / Re : Compiler/Lancer SFML2-RC avec MinGW-gcc-4.7.2
« le: Décembre 09, 2012, 04:31:09 pm »
 ;D silly me....
Donc ok, ça marche bien à présent, la fenêtre se lance, le sprite s'affiche et la musique se joue, nickel :)

Par contre, à la fermeture du programme en debugging, il se produit un sigsev :
#0 76AE4DCC ole32!CoVrfCheckThreadState() (C:\Windows\system32\ole32.dll:??)
#1 76AE4D36 ole32!CoVrfCheckThreadState() (C:\Windows\system32\ole32.dll:??)
#2 76AE4E4C ole32!CoVrfCheckThreadState() (C:\Windows\system32\ole32.dll:??)
#3 76AE5556 ole32!CoVrfCheckThreadState() (C:\Windows\system32\ole32.dll:??)
#4 76AE5B6B ole32!CoFileTimeToDosDateTime() (C:\Windows\system32\ole32.dll:??)
#5 76AE5A26 ole32!CoFileTimeToDosDateTime() (C:\Windows\system32\ole32.dll:??)
#6 76AE5987 ole32!CoFileTimeToDosDateTime() (C:\Windows\system32\ole32.dll:??)
#7 76AE5940 ole32!CoFileTimeNow() (C:\Windows\system32\ole32.dll:??)
#8 7476E880 DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#9 7476E668 DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#10 7476E43A DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#11 74773EA0 DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#12 7476E43A DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#13 747735E9 DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#14 74773A7C DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#15 74773646 DirectSoundCaptureCreate() (C:\Windows\system32\dsound.dll:??)
#16 707E5006 alcCloseDevice() (E:\PROJETS\INFO\Projets codeblocks\GridSys\bin\Release\openal32.dll:??)
#17 00000000 0x06010048 in ??() (??:??)
#18 00000000 0x0000ac44 in ??() (??:??)
#19 00000000 0x00000400 in ??() (??:??)
#20 00000000 0x00000004 in ??() (??:??)
#21 00000000 0x00000001 in ??() (??:??)
#22 00000000 0x00000002 in ??() (??:??)
#23 00000000 0x00570b80 in ??() (??:??)

11
Général / Re : Crash immédiat avec le code d'exemple (SFML2 RC)
« le: Décembre 09, 2012, 01:00:38 am »
Ok, merci, à présent le code de base fonctionne... mais pas le code de présentation :

     // Load a music to play
     sf::Music music;
     if (!music.openFromFile("shell_v2.ogg"))
         return EXIT_FAILURE;
obj\Release\main.o:main.cpp:(.text.startup+0x223)||undefined reference to `_imp___ZN2sf5MusicC1Ev'|
obj\Release\main.o:main.cpp:(.text.startup+0x250)||undefined reference to `_imp___ZN2sf5Music12openFromFileERKSs'|


12
Général / Re : Crash immédiat avec le code d'exemple (SFML2 RC)
« le: Décembre 08, 2012, 11:17:04 pm »
Hum... bonne question, comment puis-je vérifier la version?
EDIT: selon les noms des exécutables, j'ai du mingw32-gcc-4.7.2.exe.

13
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