History: Mogre and WPF
Source of version: 8
Copy to clipboard
!!WPF
WPF is a modern SDK created by Microsoft for building GUIs in Windows. Many powerful Windows applications today, including Visual Studio 2010 and later, are built using WPF. WPF makes it easy to create sophisticated GUI controls that are composed of other controls. It also has support for animation, styling, and data binding. It optionally supports a declarative UI layout through a XML format called XAML.
UI toolkits for games are often simpler and less featureful than desktop-grade UI toolkits. Incorporating WPF into a Mogre application allows a developer to have a sophisticated UI and leverage the vast wealth of WPF resources available.
!!Methods of Combining WPF and Mogre
There are several ways of using WPF and Mogre together. Note that most are in an experimental state.
!!!__Mogre In WPF__
[http://msdn.microsoft.com/en-us/library/system.windows.interop.d3dimage.aspx|D3DImage] is a WPF control that shows a Direct3D texture inside WPF. It can be set to use a texture that Mogre renders to.
Pros:
* The result is a fully interactive WPF application with all WPF features supported.
* The Mogre scene can be partially transparent, with WPF elements behind it. Partially transparent WPF elements can be placed on top of the Mogre scene.
Cons:
* WPF controls the rendering loop
* WPF's rendering loop is locked at Vsync (e.g. 60FPS)
Approaches to implementation:
* Single vs Double buffering
* Timing of Ogre rendering
** CompositionTarget.Rendering event
** DispatcherInactive event
** DispatcherTimer
** Timer
** Loop in separate thread
!!!__WPF in Mogre__
Take a screenshot of individual WPF visuals, and render them as textures onto entities in Ogre or Mogre.
Pros:
* ...
Cons:
* It is up to you to arrange widgets and program interactivity with WPF elements.
* No interactive open source implementation is known.
!!!__WPF on Mogre__
Pros:
* Mogre Rendering rate is not constrained to WPF rendering, as it is in the 'Mogre In WPF' approach.
Cons:
* It can be tricky to keep two windows in sync, with input working nicely between the two.
!!Interaction with Mogre
... how interaction works (Add both ways, which was describes by Hormis) ...
!!Example projects
* __Mogre In WPF__:
** Article: [http://www.codeproject.com/Articles/29190/Blend-the-OGRE-Graphics-Engine-into-your-WPF-proje|Blend the OGRE Graphics Engine into your WPF projects]
** Project: [https://bitbucket.org/JaredThirsk/mogreinwpf/wiki/Home|MogreInWpf]
** Project: [https://bitbucket.org/Hormis/doublebufferedd3dimage/|Double buffered D3DImage] technique. D3DImage based Mogre and WPF interop at high FPS.
* __Mogre On WPF__: A WPF window is layered on top of a standard WinForms window.
** Project: [https://bitbucket.org/Hormis/windowsinput/|Windowsinput by Hormis]
* __WPF In Mogre__:
** Article: [http://www.codeproject.com/Articles/59790/Use-a-screenshot-of-a-WPF-visual-as-a-texture-in-M|Use a screenshot of a WPF visual as a texture in Mogre]
!!See also
__Further information__
* forum link 1
* forum link 2
__GUI alternatives__
* ((Miyagi)) - Pure C# GUI system
* ((MyGUI)) - This GUI system has a .NET wrapper, which can be used for Mogre
* ((-GUI|GUI)) - An overview for Ogre GUI systems