30 settembre 2008
Irrlicht dentro ad una finestra Qt su Mac OS X… se po’ fa?
Brutta notizia per il mio simulatore di aeroplanini. Facendo qualche prova con Windows, le mie paure degli ultimi giorni si sono tramutate in una certezza. Il codice che stavo scrivendo, il quale sarebbe dovuto servire ad integrare il device di Irrlicht all’interno di un widget di una finestra Qt, non e’ sbagliato. Purtroppo, pero’, funziona bene soltanto su Windows e non su Mac OS X.

La richiesta di aiuto che avevo postato sul forum ufficiale di Irrlicht non ha ricevuto alcuna risposta. Ora le mie speranze sono tutte affidate a tale Karol Krizka, del quale ho ripescato una discussione dalla cache di Google, riguardante lo stesso tipo di problema. Il buon Karol sembra si stia ancora sbattendo su Irrlicht, almeno a giudicare da un post che ha lasciato sul suo blog lo scorso aprile. Ho provato a scrivergli (dopo esser provato a passare anche per l’inclusione del framework di Carbon, in maniera tale da poter utilizzare il sistema HiView) ed ora sono in attesa di una sua risposta. Fingers crossed…
Fermo restando che se qualcuno riuscisse a dirmi qualcosa a riguardo del mio codice, sarebbe una cosa oltremodo gradita. Posto il tutto qui sotto:
#include < QtGui >
#include < irrlicht/irrlicht.h >
#include < irrlicht/IMeshCache.h >
#include < carbon/Carbon.h >
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#ifdef _IRR_WINDOWS_
#pragma comment(lib, “Irrlicht.lib”)
#endif
int main(int argc, char *argv[]) {
// Create the QApplication
QApplication application(argc,argv);
// Create the main window
QMainWindow *mainWindow;
mainWindow = new QMainWindow();
// Create the central widget to be put into the main window
QWidget *centralWidget;
centralWidget = new QWidget(mainWindow);
mainWindow->setCentralWidget(centralWidget);
// Show the main window
mainWindow->resize(800,600);
mainWindow->show();
// Create the Irrlicht device
irr::SIrrlichtCreationParameters params;
params.DriverType = video::EDT_OPENGL;
//params.WindowId = (void *)centralWidget->winId();
params.WindowId = (void*)HIViewGetWindow(HIViewRef(centralWidget->winId()));
params.WindowSize.Width = centralWidget->width();
params.WindowSize.Height = centralWidget->height();
params.EventReceiver = 0;
params.AntiAlias = true;
IrrlichtDevice *device = irr::createDeviceEx( params );
while(device->run()) {
// Initialize the scene
driver->beginScene(true, true, SColor(255,100,101,140));
// Draw everything
smgr->drawAll();
guienv->drawAll();
// End the scene
driver->endScene();
}
// Delete the Irrlicht device
device->drop();
// Return the control of the application to the GUI
return application.exec();
}
UPDATE: il codice che ho postato funziona alla perfezione non solo su Windows, ma anche su Linux. Appena provato su una macchina virtuale Ubuntu creata allo scopo…
Comments(2)







