食人魔和快板direct3d设备9冲突

我一直在试图编写一个程序,使用Allegro 5来处理2D渲染和Ogre的3D渲染,但是我在初始化时遇到了问题,我得到的大部分问题都是窗口的实例,但是现在的问题是, Ogre::D3D9RenderWindow::setDevice()只采用Ogre的types,这是由ID3Device9根据Ogre API参考设置,而不是al_get_d3d9_device()返回哪个是LPDIRECT3DDEVICE9 。 我需要帮助,试图找出如何将LPDIRECT3DDEVICE9转换为ID3Device9

这是我迄今为止的代码:

 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { ALLEGRO_DISPLAY *al_display = NULL; if(!al_init()) { fprintf(stderr, "Cannot initialize allegro"); return -1; } al_display = al_create_display(640, 480); if(!al_display) { fprintf(stderr,"Cannot initialize the display"); return -1; } HWND hWnd = al_get_win_window_handle(al_display); HINSTANCE hInst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE); Ogre::D3D9RenderWindow ogre_window(hInst); ogre_window.setDevice(al_get_d3d_device(al_display)); // Function only takes an Ogre::D3D9Device return 0; } 

如果你使用OpenGL,这是可能的。 Allegro就是一个例子 。

不知道D3D。

在Matthew的回答帮助下,经过了许多工作和繁琐的学习之后,我通过指针的几个指针找到了解决问题的办法。

这是最后的代码:

 int _tmain(int argc, _TCHAR* argv[]) { ALLEGRO_DISPLAY *al_display = NULL; if(!al_init()) { fprintf(stderr, "Cannot initialize allegro"); return -1; } al_display = al_create_display(640, 480); if(!al_display) { fprintf(stderr,"Cannot initialize the display"); return -1; } HWND hWnd = al_get_win_window_handle(al_display); HINSTANCE hInst = (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE); Ogre::D3D9RenderWindow ogre_window(hInst); LPDIRECT3DDEVICE9 D3dDev = al_get_d3d_device(al_display); IDirect3DDevice9 *iD3dDev = D3dDev; Ogre::D3D9DeviceManager D3dDevManager; Ogre::D3D9Device *OD3dDev = D3dDevManager.getDeviceFromD3D9Device(iD3dDev); ogre_window.setDevice(OD3dDev); return 0; }