#0 

18-04-2009 17:07:46

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Voila, j'ai un probleme avec un chargement de fichier. Pour lire un fichier, il faut un device et un filesystem. Jusque là, tout va bien. Maintenant il s'avère que ce fichier renferme les parametres de création de la fenetre de jeu... Un peu paradoxal tout ça! Mais bon, soit! Je créé une fenetre bidon pour le chargement du fichier, je la drop() puis je créé la deuxieme. Magnifique, ma fenetre apparait avec les bons parametres, donc le chargement a réussi smile. Et la, derriere ma seconde fenetre... la premiere qui n'a pas disparue!sad Je la ferme et la ça ferme les deux fenetres yikes. Prise de tete, decorticage de la demo fournie avec Irrlicht qui a le meme syteme, mais pas moyen de faire disparaitre la premiere sans fermer la deuxieme avec! Alors si quelqu'un à ne serait-ce qu'une idée, qu'il l'expose avant que je n'ai plus de cheveux wink.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#1 

18-04-2009 21:11:24

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

J'espère que tu n'es pas encore chauve smile.
Peut-être pourrais-tu poster ton code qu'on voit ce qui peut clocher ?


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

19-04-2009 09:33:42

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Voila le code :

Code:

bool Bibliotheque::load_config()
{
    device = createDevice();                // device est une variable de la classe Bibliotheque ainsi que fileSys
    fileSys = device->getFileSystem();  // device est la pour avoir fileSys (pour la lecture xml)

    // lecture du fichier config.xml et stockage dans les variables
    int a = 0;

    // vérification de l'existance du fichier
    if (!(fileSys->existFile(stringc("Configuration/config.xml").c_str())))
        return false;

    // ouverture du fichier en lecture
    IXMLReader *reader = fileSys->createXMLReader(stringc("Configuration/config.xml").c_str());

    // boucle de lecture
    while(reader && reader->read())
    {
        if(EXN_ELEMENT == reader->getNodeType())
        {    
            if(stringw("Graphismes") == reader->getNodeName())
                {
                    parametres.AntiAlias = vsBool(reader->getAttributeValueAsInt(L"AA"));
                    parametres.Bits = ((reader->getAttributeValueAsInt(L"bits") + 1) * 16);
                    parametres.DriverType = EDT_DIRECT3D9;
                    parametres.EventReceiver = 0;
                    parametres.Fullscreen = vsBool(reader->getAttributeValueAsInt(L"fullscreen"));
                    parametres.HighPrecisionFPU = true;
                    parametres.Vsync = vsBool(reader->getAttributeValueAsInt(L"vsync"));
                    switch(reader->getAttributeValueAsInt(L"resolution"))
                    {
                    case 0 :
                        {
                        parametres.WindowSize = dimension2d<s32>(640,480);
                        break;
                        }
                    case 1 :
                        {
                        parametres.WindowSize = dimension2d<s32>(800,600);
                        break;
                        }
                    case 2 :
                        {
                        parametres.WindowSize = dimension2d<s32>(1024,768);
                        break;
                        }
                    case 3 :
                        {
                        parametres.WindowSize = dimension2d<s32>(1280,1024);
                        break;
                        }
                    }
                    lod = reader->getAttributeValueAsInt(L"lod");
                    qualite_texture = reader->getAttributeValueAsInt(L"texture");
                } // chargement des parametres graphiques
            }// if
        }// while

    //libération du fichier
        reader->drop();

    // liberation de la fenetre
    device->drop(); // BIEN QUE JE LA DROP ELLE RESTE PRESENTE ET SI J'UTILISE closeDevice() JE FERME CETTE FENETRE EST CELLE
                                        // QUE J'OUVRE DERRIERE
    return true;
}

bool Bibliotheque::create_window()
{
    device = createDeviceEx(parametres); // VOICI LA 2e FENETRE, CELLE DU JEU
    if (device)
        return true;
    else
        return false;
}

bool Bibliotheque::create_environnement()
{
    driver  = device->getVideoDriver();
    smgr    = device->getSceneManager();
    env     = device->getGUIEnvironment();
    fileSys = device->getFileSystem();

    if(driver && smgr && env && fileSys)
        return true;
    else
        return false;
}

Donc je fais : load_config() puis create_window() et la traditionnelle boucle de rendu se trouve dans le fichier source les appelant.
J'espère que ça ira.
PS : Sinon pour mes cheveux, ça fais que je n'aurais pas besoin d'aller au coiffeur demain big_smile. Eh, hop! Une facture de plus en moins!( notez le subtile mélange de superlatifs wink).

Dernière modification par johnplayer (19-04-2009 09:39:36)


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#3 

19-04-2009 10:49:48

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Sinon, au lieu de m'obstiner à créer une fenetre pour en récupérer le fileSytem, ne pourrais-je pas en créer une instance pour mon chargement? Si oui, comment?

J'ai trouvé ça dans CFileSystem.cpp :

//! creates a filesystem which is able to open files from the ordinary file system,
//! and out of zipfiles, which are able to be added to the filesystem.
IFileSystem* createFileSystem()
{
    return new CFileSystem();
}

Mais comment l'utiliser?!

Dernière modification par johnplayer (19-04-2009 11:06:08)


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#4 

19-04-2009 12:47:14

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Pourquoi ne passes-tu pas directement par :
io::IrrXMLReader* xml = io::createIrrXMLReader("Configuration/config.xml");
ça t'éviterai de récupérer le fileSys pour ça smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#5 

19-04-2009 16:10:31

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Super ça marche nickel! Merci de m'avoir retirer cette épine du pied wink. Dur d'être autodidacte. Ah, maintenant que j'y pense, bonne continuation pour ton projet Copland.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#6 

19-04-2009 23:13:58

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Tant mieux si ça marche bien et content d'avoir pût t'aider smile.
Autodidacte je le suis également et j'en apprends encore tout les jours.
Merci pour la bonne continuation, à toi aussi.
@bientôt


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

21-04-2009 01:17:22

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

SInon pour la première fenetre d'utilisait le NULLDEVICE ou pas? car sinon le problème pourait venir de là.

Dernière modification par dark calculator (21-04-2009 01:19:17)

Hors ligne


#8 

21-04-2009 17:48:06

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Je ne vois pas ce que tu entends par "utiliser le NULLDEVICE". Pour ma fenetre je la créais comme suit :
device = createDevice();
Voilà.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#9 

23-04-2009 09:26:38

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

Si tu fais à la place de createDevice() un createDevice(EDT_NULL) il ne devrait pas avoir de fenètre qui s'ouvre.
Remarque je crois que moi sous linux il ferme bien la fenêtre après un drop device mais avec le même code sous win il la laisse ouverte, c'est assez bizarre enfin pas tant que ça mais embetant.

Hors ligne


#10 

23-04-2009 18:28:13

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Ah, ok! Merci de la précision wink. Je testerais ça pour vérifier.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
13 invités en ligne
Aucun membre connecté
RSS Feed