Может ли движок OGRE рендериться в любое окно? - PullRequest
0 голосов
/ 13 октября 2011

Я создаю небольшой плагин-интерфейс графического движка, который использует OGRE для внутреннего использования. Идея состоит в том, что человек, создающий программу в Windows или Linux, сможет использовать мой плагин для любого графического рендеринга, который ему необходим.

Фактически уже есть приложение для Windows, использующее вызовы GDI & D3D для рисования, которое мне нужно изменить, чтобы оно могло использовать OGRE для рисования.

Что меня удивляет, так это то, что приложение запрограммировано на VC ++ и, следовательно, имеет меню в стиле Windows и клиентскую область для рисования. Но так как OGRE создает свое собственное окно для рендеринга, могу ли я отправить OGRE дескриптор клиентской области окна приложения и будет ли OGRE выполнять рисование в клиентской области окна?

Я новичок в программировании для Windows и немного ограничен во времени, поэтому пришлось спросить здесь.

1 Ответ

2 голосов
/ 17 октября 2011

может быть, это может помочь:

Ogre::String winHandle;
  #ifdef WIN32
  // Windows code
  winHandle += Ogre::StringConverter::toString((unsigned long)(this->parentWidget()->winId()));
  #else
  // Unix code
  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)(this->parentWidget()->winId()));
  #endif

  Ogre::NameValuePairList params;
  params["parentWindowHandle"] = winHandle;

  mOgreWindow = mOgreRoot->createRenderWindow( "QOgreWidget_RenderWindow",
                           this->width(),
                           this->height(),
                           false,
                           &params );

QX11Info - класс Qt, используемый для получения дескриптора.Дескриптор вставляется в Ogre :: NameValuePairList как имя: «parentWindowHandle» значение: ваш дескриптор и десять отправляются в качестве аргумента в OgreRoot :: createRenderWindow ().Я попробовал этот код с Qt, и он работал.Если это не сработает, попробуйте использовать externalWindowHandle в качестве имени параметра.

source: http://www.ogre3d.org/tikiwiki/QtOgre

...