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

Auteur Sujet: Chargement des ressources multi-threadé ne s'affiche pas.  (Lu 3281 fois)

0 Membres et 1 Invité sur ce sujet

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Chargement des ressources multi-threadé ne s'affiche pas.
« le: Février 16, 2014, 11:26:21 am »
Bonjour,

Je charge mes ressources via multi-thread, mais le Sprite est vide, rien s'affiche, pourtant je n'ai pas d'erreur lors du chargement...
Je ne comprend pas... voici le thread qui charge le code,et la fonction qui l'utilise (J'utilise le pattern Gamestate ;) )

void loadFiles (int &rtr)
{
    thread_mutex.lock();
   
   
    if(val.ld_bar_txt.loadFromFile(resourcePath()+"LC_LOAD.png")
       &&
       val.main_title_tex->loadFromFile(resourcePath() + "main_title.png")
   
       )
    {
        tex=true;
    }
    // Musics
    msc=true; // je n'ai rien à charger pour le moment

    // If musics & Textures loaded Successfully :
    if(msc && tex)
    {
        cout << "Sound :" << msc << endl << "Textures" << tex << endl;
        cout << "Game ressources successfully loaded " << endl;
        rtr=1;
    }
    // If not :
    else
    {
        cout << "Sound :" << msc << endl << "Textures" << tex << endl;
        cout << "Game will quit : [GRAVE] CANNOT LOAD MUSICS OR TEXTURES " << endl;
        rtr=-1;
    }
   
    thread_mutex.unlock();
    load_finish=true;
}

void CGmenu::Init()
{

    if(!menu_music.openFromFile(resourcePath() + "PIXL_Rat_Twist.ogg"))
    {
        cout << "Error while loading music" << endl;
        exit(-1);
    }
    //rsc->main_title_tex->loadFromFile(resourcePath() + "main_title.png");
    main_title.setTexture(*rsc->main_title_tex);
    main_title.setPosition(50,50);
   // main_title.setScale(0.4,0.4);
   
   
    menu_music.play();
    menu_music.setVolume(70);
    menu_music.setLoop(1);
   
    cop.setString(L"© Pixel Box Inc 2014");
    cop.setFont(Fonts.m_pixel7);
    cop.setPosition(1000,665);
    cop.setStyle(sf::Text::Italic);
    cop.setColor(sf::Color::White);
    cop.setCharacterSize(40);
   
    play.setFont(Fonts.m_pixel7);
    play.setPosition(125,175);
    play.setStyle(sf::Text::Italic);
    play.setColor(sf::Color::White);
    play.setCharacterSize(60);
    play.setString("_Play");
   
    play_bound = play.getGlobalBounds();
   
   
    cout << "Fonts are Okay" << endl;
}

Les 2 codes sont dans des classes différentes.

HELP :(
« Modifié: Février 16, 2014, 01:34:51 pm par Laurent »

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #1 le: Février 16, 2014, 12:41:40 pm »
Je comprend pas d'ou viens l'erreur.
Par hasard, cela ne viendrais-t-il pas d'OpenGL ? Je devrais pas Actualiser ou qqch comme ça ? (J'ai lu ça sur certains forums, mais rien de concret)

j'ai tenté un glFlush() à la fin du thread, mais voici l'erreur :
http://prntscr.com/2sz92y
« Modifié: Février 16, 2014, 01:16:25 pm par MyPix »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #2 le: Février 16, 2014, 01:37:56 pm »
Les codes complets minimaux, c'est vraiment mieux... pour toi et pour nous ;)

D'une part toi tu te perds dans ton gros code et tout ce que tu peux faire c'est nous en coller des morceaux parce que tu n'as aucune idée de ce qui déconne, et d'autre part nous on ne peut rien faire car l'erreur est trop diluée dans tout le reste. On n'a même pas envie de regarder parce qu'il y a trop de choses à décoder, qui n'ont rien à voir avec le problème.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #3 le: Février 16, 2014, 07:24:05 pm »
Je sais d'ou viens le problème;

Je crée une instance dans ma classe CLoad, ducoup c'est pas chargé dans la "vraie" classe.
Bref, comment faire en sorte que cela se charge dans CLoad sans devoir l'instancié ?

- Méthode Statique qui va être appelée et qui va charger dans CLoad (Le Thread qui charge en parallèle) ?
- Je mets toutes mes textures dans CLoad, mais ça risque d'être chaotique à moins de mettre plusieurs .h avec les variables

Quelle solution ?


PS : J'ai une question, sf::RenderTexture, la fonction draw est aussi lourde à appeler que sur une fenêtre ?
Donc je peux créer une tileMap qui se chargerais hyper rapidement ? (PS : J'utiliserais, si je crée une map, un système de chunck qui se chargeront lorsque le joueur s'en rapprochera (optimisation des performances globales))
« Modifié: Février 16, 2014, 07:38:12 pm par MyPix »

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #4 le: Février 17, 2014, 07:00:47 am »
Please, rien ne marche, comment faire ? :(

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #5 le: Février 17, 2014, 07:45:08 am »
Quel est ton problème exactement ? Si tu ne veux pas instancier ta classe, alors en effet il faut passer par des fonctions/variables statiques. Qu'est-ce qui te pose problème avec cette façon de faire ?
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #6 le: Février 17, 2014, 08:01:07 am »
Bah ça marche pas vraiment, je peux essayer mais en gros je veux charger des textures se trouvant dans une autre classe sans devoir l'instancier car sinon les "vraies" textures ne seront pas chargée.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #7 le: Février 17, 2014, 10:54:50 am »
C'est vraiment pas clair ta description du problème. N'oublie pas qu'on n'a pas le nez dans ton code, contrairement à toi. Simplifie le problème et pose le clairement.
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #8 le: Février 17, 2014, 04:19:49 pm »
Donc en gros.
- J'ai créé un écran de chargement, et j'aimerais que dans cet écran, tout soit chargé, les fichiers textures & sound de tous les gameStates.

Je ne peux pas instancier la classe car sinon, c'est les textures de l'instance qui seront chargées, et pas celles du Gamestate.

Comment faire pour charger les textures via une autre classe ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #9 le: Février 17, 2014, 04:21:35 pm »
Peu importe que tu instancies ta classe ou non, si les ressources sont statiques à la classe alors elles seront bien partagées entre toutes les instances.

Et pourquoi "via une autre classe" ? Quelle autre classe ?
Laurent Gomila - SFML developer

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #10 le: Février 17, 2014, 04:46:44 pm »
Dans CLoad, il y a le Thread, enfin, la fonction du thread ou je charge mes ressources, et quand j'essaie de les charger ça marche pas.. j'ai rien dans ma texture. Par contre si je les charges directement dans ma classe, ça les affiches.

Je fais quoi ? Attributs statiques + Méthode de chargement statique ?

MyPix

  • Full Member
  • ***
  • Messages: 117
    • Voir le profil
    • E-mail
Re : Chargement des ressources multi-threadé ne s'affiche pas.
« Réponse #11 le: Février 17, 2014, 06:17:31 pm »
Et Hop ! Attribut sf:Texture + méthode Statique de chargement des ressources appelé dans le thread et Bim ! :D
Merci :)

 

anything