Mit Ogre in beliebige Controls rendern?
-
Ich mache gerade meine ersten Schritte mit Ogre und würde gerne (bzw. muss) die Renderausgabe auf ein Control in einer MFC-Dialog-Anwendung setzen. Die Tutorial-Applikation konnte ich schon so umbasteln, dass er in meinen Dialog rendert, statt in ein eigenes RenderWindow.
Das funktioniert aber leider nicht mehr, wenn ich das HWND eines beliebigen Controls auf dem Dialog, z.B. eines static controls, angebe. Es passiert dann einfach nichts. Die exe verbrät deutlich weniger speicher und lastet die CPU nicht mehr aus. Was genau da schief läuft, weiß ich noch nicht.
Generell sollte sowas doch funktionieren, oder? Wo mache ich einen Fehler?
Hier Auszüge vom Code, falls es hilft:
bool BaseApplication::configure(HWND hWnd) { // Show the configuration dialog and initialise the system // You can skip this and use root.restoreConfig() to load configuration // settings if you were sure there are valid ones saved in ogre.cfg if(mRoot->showConfigDialog()) { // If returned true, user clicked OK so initialise // Here we choose to let the system create a default rendering window by passing 'true' if(hWnd) { mRoot->initialise(false); Ogre::NameValuePairList misc; misc["externalWindowHandle"]=Ogre::StringConverter::toString((size_t)hWnd); mWindow = mRoot->createRenderWindow("TutorialApplication Render Window",320,240,false,&misc); }else { mWindow = mRoot->initialise(true, "TutorialApplication Render Window"); } return true; } else { return false; } }
void CTestOgreMFCDlg::StartOgreStuff() { TutorialApplication app; try { HWND hWnd=GetDlgItem(IDC_STATIC_1)->GetSafeHwnd(); app.go(hWnd); } catch( Ogre::Exception& e ) { MessageBox(e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); } }
Ziel des Ganzen soll sein, mehrere, kleine Render-Fenster auf einem Dialog darzustellen.