2012-05-10 2 views
4

ogre3d 위젯을 우분투의 qt 위젯에 삽입하려고 시도했지만 검은 색 화면이 보입니다.Qt 4.8에서 OGRE 1.7.3 통합하기

ogre :: Root :: RenderWindow가 부모 창 부품없이 (메인 창으로) 사용되면 모든 것이 작동합니다. 그러나 ogre :: Root :: RenderWindow를 다른 메인 윈도우의 하위 창으로 만들면 오우거가 작동하지 않습니다. 여기

코드입니다 :

CPP : http://pastebin.com/Rbxa5btj

헤더 : 나는이 문제를 가지고 있었다, 나는 다음과 같이 XSync 메소드를 호출하는 데 필요한 http://pastebin.com/F4w5eQ7d

답변

0

. 이 메서드는 OgreWidget::initialize 메서드의 일부로 OgreWidget 하위 클래스 QWidget입니다. initializeOgreWidget의 구성 부분으로 호출되고 m_OgreRoot이 할당되고 렌더 시스템이 설정된 후에

setAttribute(Qt::WA_PaintOnScreen, true); 
setAttribute(Qt::WA_NoSystemBackground, true); 

setFocusPolicy(Qt::StrongFocus); 

Ogre::String winHandle; 
QX11Info info = x11Info(); 
winHandle = Ogre::StringConverter::toString((unsigned long)(info.display())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned int)(info.screen())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned long)(winId())); 

Ogre::NameValuePairList params; 
params["parentWindowHandle"] = winHandle; 
params["FSAA"] = Ogre::String("8"); 

int w = width(); 
int h = height(); 
// Need to call XSync or the window handles will be invalid. 
XSync(info.display(), False); 
m_OgreWindow = 
     m_OgreRoot->createRenderWindow("OgreWidget_RenderWindow", 
            qMax(w, 640), qMax(h, 480), false, &params); 

Qt 5.1.0과 동일한 코드가 수정되었습니다. QX11Info이 Qt 5.0.x에서 제거 된 후 Qt 5.1.0의 "extras"구성 요소에 추가되었습니다. 새 QX11Info 클래스에는 정적 메서드 만 있습니다.

#include <QtX11Extras/QX11Info> 
... 
setAttribute(Qt::WA_PaintOnScreen, true); 
setAttribute(Qt::WA_NoSystemBackground, true); 

setFocusPolicy(Qt::StrongFocus); 

Ogre::String winHandle; 
winHandle = Ogre::StringConverter::toString((unsigned long)(QX11Info::display())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned int)(QX11Info::appScreen())); 
winHandle += ":"; 
winHandle += Ogre::StringConverter::toString((unsigned long)(winId())); 

Ogre::NameValuePairList params; 
params["parentWindowHandle"] = winHandle; 
params["FSAA"] = Ogre::String("8"); 

int w = width(); 
int h = height(); 
// Need to call XSync or the window handles will be invalid. 
XSync(QX11Info::display(), False); 
m_OgreWindow = 
     m_OgreRoot->createRenderWindow("OgreWidget_RenderWindow", 
            qMax(w, 640), qMax(h, 480), false, &params);