Historique des modifications - Message

Message #4385

Sujet: Erreur de segmentation irrlicht 1.4.1


Type Date Auteur Contenu
Création du message 02-07-2008 08:27:33 fredb219
Bonjour,

Je dévellope un petit jeu utilisant irrlicht. J'utilisais la version 1.4 et tout fonctionnait très bien. J'ai voulu testé la version 1.4.1 mais j'obtient une erreur de segmentation. J'utilise pourtant le même code.

L'erreur a lieu lors de l'appel de
driver->beginScene(true, true, irr::video::SColor(0,00,00,00));

Après quelque tests j'ai remarque que cette fonction fonctionnait si la boucle d'affichage se trouvait dans le même thread que l'initialisation. Dans mon cas, la boucle d'affichage se trouve dans un second thread.

Voici mon initialisation :
GraphicsEngine::GraphicsEngine(Game *g):Engine(g) {
    #ifdef DEBUG
        std::cout<<"GraphicsEngine : new"<<std::endl;
    #endif

   sg = new SceneGraph(this);
    parent->GetWorld()->SetGraphicsWorld(sg);

    receiver = new EventReceiver();

    //idevice = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::s32>(800, 600), 32, false, false, false);
    idevice = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::s32>(800, 600), 32, false, false, false,receiver);

    driver = idevice->getVideoDriver();
	sg->smgr = idevice->getSceneManager();

…
…
…


}

Voici le code de la frame appelé par un thread d'affichage :
void GraphicsEngine::frame(){

   	// on vérifie si l'utilisateur n'a pas fermé la fenêtre
	if (!driver || !idevice->run()){
		parent->Stop();
	}

	driver->beginScene(true, true, irr::video::SColor(0,00,00,00));

	boost::mutex::scoped_lock l(parent->GetWorld()->lockWorld);

	parent->GetWorld()->Syncronize();

	l.unlock();
	// on dessine le graphe de scène
	sg->Render();

	int fps = driver->getFPS();
	irr::core::stringw str = L"ALT-ernative ";
	str += " FPS:";
	str += fps;
	idevice->setWindowCaption(str.c_str());


	// on appelle l'affichage de l'interface

	driver->endScene();
}

Voici la déclaration de la classe :
class GraphicsEngine : public  Engine {

public:
	GraphicsEngine(Game*); // objet contenant et mode passif
	~GraphicsEngine();

	//bool OnEvent(irr::SEvent);
	irr::video::IVideoDriver *GetDriver();
  EventReceiver *GetEventReceiver();
	//Gui_system *get_gui();
protected:
//    GuiSystem *gui;

	irr::video::IVideoDriver *driver;
    void frame();
	irr::IrrlichtDevice *idevice;
	void processEvent(EngineEvent *);

    EventReceiver *receiver;
	SceneGraph *sg;
	//bool consoleVisible;
	// ...
};
#else

Est-ce un bug de la version 1.4.1 ?

Merci

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
151 invités en ligne
membre en ligne: -
RSS Feed