[Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi -
I created a new patch for the D3D9 Render system - it adds multiple device support.
This patch is based on the latest version of Ogre 1.6 updated to the 26.1.09.
Main features -
- Supports generic number of devices.
- Up to (N) full screen render windows allowed.
- On the fly device switch when dragging windowed render window to different disaply monitor
- Multi head feature support when using mutliple full screen windows on multi head cards.
You can get it from https://sourceforge.net/tracker2/?func= ... tid=302997
Nir
I created a new patch for the D3D9 Render system - it adds multiple device support.
This patch is based on the latest version of Ogre 1.6 updated to the 26.1.09.
Main features -
- Supports generic number of devices.
- Up to (N) full screen render windows allowed.
- On the fly device switch when dragging windowed render window to different disaply monitor
- Multi head feature support when using mutliple full screen windows on multi head cards.
You can get it from https://sourceforge.net/tracker2/?func= ... tid=302997
Nir
-
- Halfling
- Posts: 59
- Joined: Thu Aug 23, 2007 8:09 pm
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Nir,
As a user of Thieum's original patch, I'd like to thank you for your first 1.6 patch. I finally had a chance to update our project to 1.6.1 + your patch and the multihead features are working perfectly. My only question is what is the comment about adding 'D3DCREATE_MULTITHREADED' for the fullscreen multihead case? I cannot see that in your patch. I played with adding that flag myself and it offers no speed improvement anyway. Regardless, thanks.
Now you have a second patch that sounds very interesting. I plan to give it a try shortly. Question: when you say it supports a generic number of devices, does that mean even multiple cards (adapters)?
As a user of Thieum's original patch, I'd like to thank you for your first 1.6 patch. I finally had a chance to update our project to 1.6.1 + your patch and the multihead features are working perfectly. My only question is what is the comment about adding 'D3DCREATE_MULTITHREADED' for the fullscreen multihead case? I cannot see that in your patch. I played with adding that flag myself and it offers no speed improvement anyway. Regardless, thanks.
Now you have a second patch that sounds very interesting. I plan to give it a try shortly. Question: when you say it supports a generic number of devices, does that mean even multiple cards (adapters)?
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi -
Thanx for the compliments - I''m happy to know that someone use this patch and that it works for you.
The 'D3DCREATE_MULTITHREADED' flag is required only if you want to use different thread to load you resources, otherwise you will not gain any performance improvement and even suffer from slight performance hit since this flag forces D3D to spend a significant amount of time on synchronization, thus slowing down the render thread (as the D3D9 SDK docs says).
In the new patch it comes in the #ifdef OGRE_THREAD support define - so if ogre complies in multi thread support configuration it will automatically added to the device creation flags.
Regarding your second question the answer is yes - I needed it to support multiple cards and tested it on 4 display monitors - meaning using 4 different devices.
Nir
Thanx for the compliments - I''m happy to know that someone use this patch and that it works for you.
The 'D3DCREATE_MULTITHREADED' flag is required only if you want to use different thread to load you resources, otherwise you will not gain any performance improvement and even suffer from slight performance hit since this flag forces D3D to spend a significant amount of time on synchronization, thus slowing down the render thread (as the D3D9 SDK docs says).
In the new patch it comes in the #ifdef OGRE_THREAD support define - so if ogre complies in multi thread support configuration it will automatically added to the device creation flags.
Regarding your second question the answer is yes - I needed it to support multiple cards and tested it on 4 display monitors - meaning using 4 different devices.
Nir
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
wow, this is impressive !
when you says "- Up to (N) full screen render windows allowed.", do you mean that you can create less render window that the number of attached display device ?
And in the patch I see you don't patch OgreRoot. Does that mean that this patch is cummulative with the previous one or that you can now create multiple fullscreen windows with the default Root::createRenderWindow method ? (it would be awesome)
when you says "- Up to (N) full screen render windows allowed.", do you mean that you can create less render window that the number of attached display device ?
And in the patch I see you don't patch OgreRoot. Does that mean that this patch is cummulative with the previous one or that you can now create multiple fullscreen windows with the default Root::createRenderWindow method ? (it would be awesome)
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Thanx -
I mean that you can create any number between 1 to N full screen render windows where N is the number of of display monitors.
I didn't patch root since my previous interface in no longer needed - you can simply call Root::createRenderWindow multiple times.
I will release another patch based on user comments and some other resource management improvements in the near future.
I mean that you can create any number between 1 to N full screen render windows where N is the number of of display monitors.
I didn't patch root since my previous interface in no longer needed - you can simply call Root::createRenderWindow multiple times.
I will release another patch based on user comments and some other resource management improvements in the near future.
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Great, I will be able to support the dual output mode in the StereoPlugin!
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
I tried to use your patch but I get get an exception :
when I try to create two windows with this code
the debug runtime od DirectX also gives this error :
I have a geforce 8800 with both outputs connected to the same monitor (vga and dvi)
Code: Select all
[...]
15:08:02: D3D9RenderSystem::_createRenderWindow "Left window", 1280x1024 fullscreen miscParams: vsync=1280 x 1024 @ 32-bit colour
15:08:02: D3D9 : Created D3D9 Rendering Window 'Left window' : 1280x1024, 32bpp
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT16_RGB
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT16_RGBA
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT32_RGB
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT32_RGBA
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT16_R
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT32_R
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT16_GR
15:08:02: D3D9: Vertex texture format supported - PF_FLOAT32_GR
15:08:02: RenderSystem capabilities
15:08:02: -------------------------
15:08:02: RenderSystem Name: Direct3D9 Rendering Subsystem
15:08:02: GPU Vendor: nvidia
15:08:02: Device Name: Adapter-0-NVIDIA GeForce 8800 GTX
15:08:02: Driver Version: 6.14.11.8120
15:08:02: * Fixed function pipeline: yes
15:08:02: * Hardware generation of mipmaps: yes
15:08:02: * Texture blending: yes
15:08:02: * Anisotropic texture filtering: yes
15:08:02: * Dot product texture operation: yes
15:08:02: * Cube mapping: yes
15:08:02: * Hardware stencil buffer: yes
15:08:02: - Stencil depth: 8
15:08:02: - Two sided stencil support: yes
15:08:02: - Wrap stencil values: yes
15:08:02: * Hardware vertex / index buffers: yes
15:08:02: * Vertex programs: yes
15:08:02: * Fragment programs: yes
15:08:02: * Geometry programs: no
15:08:02: * Supported Shader Profiles: hlsl ps_1_1 ps_1_2 ps_1_3 ps_1_4 ps_2_0 ps_2_a ps_2_b ps_2_x ps_3_0 vs_1_1 vs_2_0 vs_2_a vs_2_x vs_3_0
15:08:02: * Texture Compression: yes
15:08:02: - DXT: yes
15:08:02: - VTC: no
15:08:02: * Scissor Rectangle: yes
15:08:02: * Hardware Occlusion Query: yes
15:08:02: * User clip planes: yes
15:08:02: * VET_UBYTE4 vertex element type: yes
15:08:02: * Infinite far plane projection: yes
15:08:02: * Hardware render-to-texture: yes
15:08:02: * Floating point textures: yes
15:08:02: * Non-power-of-two textures: yes
15:08:02: * Volume textures: yes
15:08:02: * Multiple Render Targets: 4
15:08:02: - With different bit depths: yes
15:08:02: * Point Sprites: yes
15:08:02: * Extended point parameters: yes
15:08:02: * Max Point Size: 10
15:08:02: * Vertex texture fetch: yes
15:08:02: - Max vertex textures: 4
15:08:02: - Vertex textures shared: no
15:08:02: * Render to Vertex Buffer : no
15:08:02: * DirectX per stage constants: yes
15:08:02: ResourceBackgroundQueue - threading disabled
15:08:02: Particle Renderer Type 'billboard' registered
15:08:02: SceneManagerFactory for type 'BspSceneManager' registered.
15:08:02: Registering ResourceManager for type BspLevel
15:08:02: SceneManagerFactory for type 'PCZSceneManager' registered.
15:08:02: MovableObjectFactory for type 'PCZLight' registered.
15:08:02: PCZone Factory Type 'ZoneType_Octree' registered
15:08:02: PCZone Factory Type 'ZoneType_Terrain' registered
15:08:02: SceneManagerFactory for type 'OctreeSceneManager' registered.
15:08:02: SceneManagerFactory for type 'TerrainSceneManager' registered.
15:08:02: D3D9RenderSystem::_createRenderWindow "Right window", 1280x1024 fullscreen miscParams: vsync=1280 x 1024 @ 32-bit colour
15:08:02: D3D9 : Created D3D9 Rendering Window 'Right window' : 1280x1024, 32bpp
15:08:03: OGRE EXCEPTION(3:RenderingAPIException): Unable to get the swap chain in D3D9RenderWindow::acquireRenderWindowResources at d:\dev\okatra\ogre1.6svn\rendersystems\direct3d9\src\ogred3d9device.cpp (line 879)
[...]
Code: Select all
bool configure(void)
{
if(mRoot->showConfigDialog())
{
// get the resolution choosen with the config dialog
ConfigOptionMap options = mRoot->getRenderSystem()->getConfigOptions();
String mode = options.find( "Video Mode" )->second.currentValue;
std::vector<String> tab = StringUtil::split(mode," x@");
int w,h;
w = StringConverter::parseInt(tab[0]);
h = StringConverter::parseInt(tab[1]);
NameValuePairList miscParams;
miscParams["vsync"] = options.find( "Video Mode" )->second.currentValue;
mRoot->initialise(false); // init ogre but do not create windows
mWindow = mRoot->createRenderWindow("Left window", w, h, true, &miscParams);
mWindow2 = mRoot->createRenderWindow("Right window", w, h, true, &miscParams);
// tells the listener to change the focus of the second window when the focus
// of the first windows has changed
mFocusListener.setTargetWindow(mWindow2);
WindowEventUtilities::addWindowEventListener(mWindow,&mFocusListener);
// gives the focus to the second window because when created, only the first window has the focus
mFocusListener.windowFocusChange(mWindow);
return true;
}
else
{
return false;
}
}
Code: Select all
Direct3D9: (ERROR) :iSwapChainOrdinal is out of range
D3D9 Helper: IDirect3DDevice9::GetSwapChain failed: D3DERR_INVALIDCALL
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi -
Sorry for the lake of docs - I'll post a sample code next time -
From what I can see here - you tried to create two full screen rendering windows on the same place,
Current version detects the matching adapter by window location, it's not so convinience, but for now you'll have to pass
the "top" and "left" params in the misc parameters. In future version I plan to add another misc parameter - the display monitor index - so it will be more easy and clear to use.
Anyway try to use the following code instead -
miscParams["top"] = StringConverter::toString((int)0);
miscParams["left"] = StringConverter::toString((int)0);
mWindow = mRoot->createRenderWindow("Left window", w, h, true, &miscParams);
miscParams["top"] = StringConverter::toString((int)0);
miscParams["left"] = StringConverter::toString((int)1280);
mWindow2 = mRoot->createRenderWindow("Right window", w, h, true, &miscParams);
You can enumarate the display monitors instead and grab there working area rect and use it instead of the nasty hard coded -
Nir
Sorry for the lake of docs - I'll post a sample code next time -
From what I can see here - you tried to create two full screen rendering windows on the same place,
Current version detects the matching adapter by window location, it's not so convinience, but for now you'll have to pass
the "top" and "left" params in the misc parameters. In future version I plan to add another misc parameter - the display monitor index - so it will be more easy and clear to use.
Anyway try to use the following code instead -
miscParams["top"] = StringConverter::toString((int)0);
miscParams["left"] = StringConverter::toString((int)0);
mWindow = mRoot->createRenderWindow("Left window", w, h, true, &miscParams);
miscParams["top"] = StringConverter::toString((int)0);
miscParams["left"] = StringConverter::toString((int)1280);
mWindow2 = mRoot->createRenderWindow("Right window", w, h, true, &miscParams);
You can enumarate the display monitors instead and grab there working area rect and use it instead of the nasty hard coded -
Nir
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
is there still a "head" parameters for the windows ? can it be used to position the windows on the right display ?
And is there a way to know the number of attached device in ogre ? something in RenderSystemCapabilities ?
(in the 1.4 patch, sinbad added a method getAdapterCount in Ogre::Root)
And is there a way to know the number of attached device in ogre ? something in RenderSystemCapabilities ?
(in the 1.4 patch, sinbad added a method getAdapterCount in Ogre::Root)
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Noop - no "head" parameter,
As I said in future patches i'll add the display adapter index as parameter and i'll take your advise and expose some API from root
to get the displat monitor count.
As I said in future patches i'll add the display adapter index as parameter and i'll take your advise and expose some API from root
to get the displat monitor count.
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
maybe an additional field in renderSystemCapabilities ?
anyway, your patch works well. Now my StereoPlugin can turn any ogre demo in stereo demo rendering the left view on one screen and the right view on the other
Many thanks, Nir !
anyway, your patch works well. Now my StereoPlugin can turn any ogre demo in stereo demo rendering the left view on one screen and the right view on the other
Many thanks, Nir !
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
I tried to use the patch in openGL but it didn"t worked correctly
If I create two fullscreen windows, the first creen is fine but i only see a bit a windows on the left of the second screen
If I create two windowed windows (yay!) on two screens, the rendering is non synchronized and the rtt seems swapped. if I move one widonw ion the same screen as the other, everything become fine
I read that the multi monitor support in opengl is minimal and the patch does the maximum it can. What can I expect to work in openGL ? Did you used quad buffer if the card supports it ?
If I create two fullscreen windows, the first creen is fine but i only see a bit a windows on the left of the second screen
If I create two windowed windows (yay!) on two screens, the rendering is non synchronized and the rtt seems swapped. if I move one widonw ion the same screen as the other, everything become fine
I read that the multi monitor support in opengl is minimal and the patch does the maximum it can. What can I expect to work in openGL ? Did you used quad buffer if the card supports it ?
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi - I really didn't get a chance to dig into OpenGL, infect I just did the minimum I could and I hope that someone will "pick the gloves" and make it work.
From my little knowledge in GL I understood that the current mechanism of shared render context will only work on the same graphic card - so if we want to support generic number of monitors this render system should be patched heavily.
Another issue - performance - from what I know on GL (not really much) you can not address specific adapter (unless it's quadro of NVIDIA) so all draw commands go to all cards
Again - I'll be happy if you can handle the OpenGL render system.
From my little knowledge in GL I understood that the current mechanism of shared render context will only work on the same graphic card - so if we want to support generic number of monitors this render system should be patched heavily.
Another issue - performance - from what I know on GL (not really much) you can not address specific adapter (unless it's quadro of NVIDIA) so all draw commands go to all cards
This is taken from here http://www.equalizergraphics.com/docume ... GLFAQ.htmlQ: How do OpenGL programs behave with multiple graphics cards on Windows 2000/XP?
A: The operating system dispatches the OpenGL commands to all cards. This allows to move the window across cards, but incurs a small performance overhead.
Again - I'll be happy if you can handle the OpenGL render system.
- Thieum
- Gnome
- Posts: 342
- Joined: Wed Apr 26, 2006 5:13 pm
- Location: Bordeaux, France
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
I don't have much knowledge of openGL either. I cannot promise I can handle the GL rendersystem but I will see what I can do. The problem is that I don't have a second screen at home.
I would like to remove the stereo stuff from the quad buffer patch because it was hard-coded it in the scene manager and because my stereo manager has much more flexibility. And then move the quad buffer (if supported) and multiple contexts support in your patch.
Anyway, I made some researches about the quad buffer mode yesterday (I wanted to know if I could merge the quad buffer patch with your patch) and It is very difficult to find documentation such specific subjects in openGL (thanks for your link, btw)
I would like to remove the stereo stuff from the quad buffer patch because it was hard-coded it in the scene manager and because my stereo manager has much more flexibility. And then move the quad buffer (if supported) and multiple contexts support in your patch.
Anyway, I made some researches about the quad buffer mode yesterday (I wanted to know if I could merge the quad buffer patch with your patch) and It is very difficult to find documentation such specific subjects in openGL (thanks for your link, btw)
-
- Halfling
- Posts: 58
- Joined: Mon May 26, 2008 9:32 pm
- Location: St. Petersburg, Russia
- x 1
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi, Nir
I tried to apply your second patch and I have some errors during linking:
Do you know how to solve this problem?
If not, can you send me .dll and .lib files to sheen[a]thedays.ru ? I need to get multimonitor working by tomorrow and don't have much time.
Hope you can help.
I tried to apply your second patch and I have some errors during linking:
Code: Select all
1>Linking...
1> Creating library ..\..\..\lib/RenderSystem_Direct3D9.lib and object ..\..\..\lib/RenderSystem_Direct3D9.exp
1>OgreD3D9GpuProgram.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall Ogre::D3D9Resource::~D3D9Resource(void)" (??1D3D9Resource@Ogre@@UAE@XZ)
1>OgreD3D9GpuProgram.obj : error LNK2001: unresolved external symbol "public: __thiscall Ogre::D3D9Resource::D3D9Resource(void)" (??0D3D9Resource@Ogre@@QAE@XZ)
1>OgreD3D9HardwareIndexBuffer.obj : error LNK2001: unresolved external symbol "public: enum Ogre::D3D9ResourceCreationPolicy __thiscall Ogre::D3D9ResourceManager::getCreationPolicy(void)const " (?getCreationPolicy@D3D9ResourceManager@Ogre@@QBE?AW4D3D9ResourceCreationPolicy@2@XZ)
1>OgreD3D9MultiRenderTarget.obj : error LNK2001: unresolved external symbol "public: class Ogre::D3D9Device * __thiscall Ogre::D3D9DeviceManager::getDevice(unsigned int)" (?getDevice@D3D9DeviceManager@Ogre@@QAEPAVD3D9Device@2@I@Z)
1>OgreD3D9MultiRenderTarget.obj : error LNK2001: unresolved external symbol "public: unsigned int __thiscall Ogre::D3D9DeviceManager::getDeviceCount(void)" (?getDeviceCount@D3D9DeviceManager@Ogre@@QAEIXZ)
1>OgreD3D9MultiRenderTarget.obj : error LNK2001: unresolved external symbol "public: class Ogre::D3D9Device * __thiscall Ogre::D3D9DeviceManager::getActiveRenderTargetDevice(void)" (?getActiveRenderTargetDevice@D3D9DeviceManager@Ogre@@QAEPAVD3D9Device@2@XZ)
1>OgreD3D9MultiRenderTarget.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9DeviceManager::setActiveRenderTargetDevice(class Ogre::D3D9Device *)" (?setActiveRenderTargetDevice@D3D9DeviceManager@Ogre@@QAEXPAVD3D9Device@2@@Z)
1>OgreD3D9MultiRenderTarget.obj : error LNK2001: unresolved external symbol "public: bool __thiscall Ogre::D3D9Device::isDeviceLost(void)" (?isDeviceLost@D3D9Device@Ogre@@QAE_NXZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: __thiscall Ogre::D3D9DeviceManager::~D3D9DeviceManager(void)" (??1D3D9DeviceManager@Ogre@@QAE@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: __thiscall Ogre::D3D9DeviceManager::D3D9DeviceManager(void)" (??0D3D9DeviceManager@Ogre@@QAE@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9DeviceManager::destroyInactiveRenderDevices(void)" (?destroyInactiveRenderDevices@D3D9DeviceManager@Ogre@@QAEXXZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9DeviceManager::linkRenderWindow(class Ogre::D3D9RenderWindow *)" (?linkRenderWindow@D3D9DeviceManager@Ogre@@QAEXPAVD3D9RenderWindow@2@@Z)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: class Ogre::D3D9Device * __thiscall Ogre::D3D9DeviceManager::getActiveDevice(void)" (?getActiveDevice@D3D9DeviceManager@Ogre@@QAEPAVD3D9Device@2@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9ResourceManager::setCreationPolicy(enum Ogre::D3D9ResourceCreationPolicy)" (?setCreationPolicy@D3D9ResourceManager@Ogre@@QAEXW4D3D9ResourceCreationPolicy@2@@Z)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: __thiscall Ogre::D3D9ResourceManager::~D3D9ResourceManager(void)" (??1D3D9ResourceManager@Ogre@@QAE@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: __thiscall Ogre::D3D9ResourceManager::D3D9ResourceManager(void)" (??0D3D9ResourceManager@Ogre@@QAE@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "protected: class Ogre::D3D9RenderWindow * __thiscall Ogre::D3D9Device::getPrimaryWindow(void)" (?getPrimaryWindow@D3D9Device@Ogre@@IAEPAVD3D9RenderWindow@2@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: struct _D3DCAPS9 const & __thiscall Ogre::D3D9Device::getD3D9DeviceCaps(void)const " (?getD3D9DeviceCaps@D3D9Device@Ogre@@QBEABU_D3DCAPS9@@XZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: unsigned int __thiscall Ogre::D3D9Device::getAdapterNumber(void)const " (?getAdapterNumber@D3D9Device@Ogre@@QBEIXZ)
1>OgreD3D9RenderSystem.obj : error LNK2001: unresolved external symbol "public: struct IDirect3DDevice9 * __thiscall Ogre::D3D9Device::getD3D9Device(void)" (?getD3D9Device@D3D9Device@Ogre@@QAEPAUIDirect3DDevice9@@XZ)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: struct IDirect3DSurface9 * __thiscall Ogre::D3D9Device::getBackBuffer(class Ogre::D3D9RenderWindow *)" (?getBackBuffer@D3D9Device@Ogre@@QAEPAUIDirect3DSurface9@@PAVD3D9RenderWindow@2@@Z)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: struct IDirect3DSurface9 * __thiscall Ogre::D3D9Device::getDepthBuffer(class Ogre::D3D9RenderWindow *)" (?getDepthBuffer@D3D9Device@Ogre@@QAEPAUIDirect3DSurface9@@PAVD3D9RenderWindow@2@@Z)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9Device::present(class Ogre::D3D9RenderWindow *)" (?present@D3D9Device@Ogre@@QAEXPAVD3D9RenderWindow@2@@Z)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9Device::invalidate(void)" (?invalidate@D3D9Device@Ogre@@QAEXXZ)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: bool __thiscall Ogre::D3D9Device::validate(class Ogre::D3D9RenderWindow *)" (?validate@D3D9Device@Ogre@@QAE_NPAVD3D9RenderWindow@2@@Z)
1>OgreD3D9RenderWindow.obj : error LNK2001: unresolved external symbol "public: void __thiscall Ogre::D3D9Device::detachRenderWindow(class Ogre::D3D9RenderWindow *)" (?detachRenderWindow@D3D9Device@Ogre@@QAEXPAVD3D9RenderWindow@2@@Z)
1>OgreD3D9Texture.obj : error LNK2001: unresolved external symbol "public: class Ogre::D3D9Device * __thiscall Ogre::D3D9DeviceManager::getDeviceFromD3D9Device(struct IDirect3DDevice9 *)" (?getDeviceFromD3D9Device@D3D9DeviceManager@Ogre@@QAEPAVD3D9Device@2@PAUIDirect3DDevice9@@@Z)
1>OgreD3D9Texture.obj : error LNK2001: unresolved external symbol "public: enum _D3DFORMAT __thiscall Ogre::D3D9Device::getBackBufferFormat(void)const " (?getBackBufferFormat@D3D9Device@Ogre@@QBE?AW4_D3DFORMAT@@XZ)
1>..\..\..\lib/RenderSystem_Direct3D9.dll : fatal error LNK1120: 28 unresolved externals
If not, can you send me .dll and .lib files to sheen[a]thedays.ru ? I need to get multimonitor working by tomorrow and don't have much time.
Hope you can help.
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi -
Seems like simple linking problem I'll try to help -
Check that the new sources I added are included in the project (I only changed the vc_8 project in this patch) - so if you are using different
IDE you'll have to add manually the following to the compile list:
1. OgreD3D9Device
2. OgreD3D9DeviceManager
3. OgreD3D9Resource
4. OgreD3D9ResourceManager
If these files already compiles with the RenderSystem_Direct3D9 project try the rebuild project option.
Hope I helped
Seems like simple linking problem I'll try to help -
Check that the new sources I added are included in the project (I only changed the vc_8 project in this patch) - so if you are using different
IDE you'll have to add manually the following to the compile list:
1. OgreD3D9Device
2. OgreD3D9DeviceManager
3. OgreD3D9Resource
4. OgreD3D9ResourceManager
If these files already compiles with the RenderSystem_Direct3D9 project try the rebuild project option.
Hope I helped
-
- Halfling
- Posts: 58
- Joined: Mon May 26, 2008 9:32 pm
- Location: St. Petersburg, Russia
- x 1
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Yes, I simply forgot to add these files. Thank you for your help
- toglia
- Gnome
- Posts: 336
- Joined: Sat Dec 08, 2007 4:28 am
- Location: Canada
- x 7
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
I was a current user of the previews patch, finally I got the chance to change my project to Shoggoth. Everything is working like a charm. Thanks Nir!!!
Should I worry of the stability of the current trunk code?
Should I worry of the stability of the current trunk code?
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi -
I just submitted a third version of multiple render windows patch for 1.6 version.
You will have to update your Ogre source code to current day and then apply this patch.
For details and download use the following link
https://sourceforge.net/tracker2/?func= ... tid=302997
I just submitted a third version of multiple render windows patch for 1.6 version.
You will have to update your Ogre source code to current day and then apply this patch.
For details and download use the following link
https://sourceforge.net/tracker2/?func= ... tid=302997
- Nir Hasson
- OGRE Retired Team Member
- Posts: 363
- Joined: Wed Nov 05, 2008 4:40 pm
- Location: TLV - Israel
- x 2
- Contact:
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Hi toglia -
Trunk vs. Released version always has the tradeoff of new features against stability. I can tell you that I did my best but I guess there is always place
to improve things and that some bugs are there. Anyway a third patch for the trunk will be added in the near future - it will be based on current patch.
Trunk vs. Released version always has the tradeoff of new features against stability. I can tell you that I did my best but I guess there is always place
to improve things and that some bugs are there. Anyway a third patch for the trunk will be added in the near future - it will be based on current patch.
-
- Gnoblar
- Posts: 4
- Joined: Wed Jun 03, 2009 11:43 pm
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
For anyone having trouble with the patch as posted here http://www.ogre3d.org/forums/viewtopic. ... 25#p324603
I normalized the line endings of the patch file to DOS format, and then the patch worked great!
I normalized the line endings of the patch file to DOS format, and then the patch worked great!
-
- Halfling
- Posts: 78
- Joined: Fri Feb 06, 2009 7:04 pm
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
Is always this patch necessary to use Ogre with multihead support (two view with differents size ) ?
Best regards,
Best regards,
- Assaf Raman
- OGRE Team Member
- Posts: 3092
- Joined: Tue Apr 11, 2006 3:58 pm
- Location: TLV, Israel
- x 76
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
only if you want to use more then one monitor.
Watch out for my OGRE related tweets here.
-
- Halfling
- Posts: 78
- Joined: Fri Feb 06, 2009 7:04 pm
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
thanks for your answer.
Do you think it could be usefull to solve my issue : viewtopic.php?f=2&t=50748 ?
I have read all forum thread, try many things .. and I can't resolve this.
How do install this patch (I am on windows using msvc to compile ogre) ?
best regards,
kao
Do you think it could be usefull to solve my issue : viewtopic.php?f=2&t=50748 ?
I have read all forum thread, try many things .. and I can't resolve this.
How do install this patch (I am on windows using msvc to compile ogre) ?
best regards,
kao
- Assaf Raman
- OGRE Team Member
- Posts: 3092
- Joined: Tue Apr 11, 2006 3:58 pm
- Location: TLV, Israel
- x 76
Re: [Solved] multihead/multiscreen in mainstream 1.6 (DirectX)
1. Download TortoiseSVN.
2. Create a dir named OGRE.
3. Right click it, use tortoisesvn to get the code from https://svn.ogre3d.org/svnroot/ogre/branches/v1-6
4. Right click the folder once more, and then apply the patch.
5. Add the OGRE dependencie files to that dir.
6. Compile.
2. Create a dir named OGRE.
3. Right click it, use tortoisesvn to get the code from https://svn.ogre3d.org/svnroot/ogre/branches/v1-6
4. Right click the folder once more, and then apply the patch.
5. Add the OGRE dependencie files to that dir.
6. Compile.
Watch out for my OGRE related tweets here.