YVision is going cross-platform

Nov 3, 2011   //   by antao.almada   //   Blog  //  No Comments

The YVision platform includes several features that are huge undertakes by themselves. These are features like computer vision, rendering, physics, etc. We want to deliver an innovative development platform but we don’t waste time “reinventing the wheel”. Specially when there are very dedicated people delivering amazing projects as open-source. YVision is not open-source but it integrates several open-source projects.

YVision is developed on .NET and, when we started developing it, it was impossible to find .NET specific projects in these areas. There were only native (non .NET) projects and very few had sister projects for .NET wrappers, enabling their use in .NET projects.

For many years we integrated OpenCV, Ogre and ODE as our primary engines, with their .NET wrappers MOGRE and OdeNet. We didn’t find any OpenCV wrapper with a suitable license so we developed our own, that is also included in the current release of YVision. For video input, we use the DirectShow.NET wrapper.

When we started developing YVision 4.0 we added a new requisite. It has to execute cross-platform and have as little platform-specific code as possible.

.NET is compatible with Windows, Silverlight and Windows Phone 7 but, with Mono (one more awesome open-source project), it’s possible to have .NET applications executing in Mac OS X and Linux, and with Xamarin‘s products, in iOS and Android.

The YVision core is compatible with .NET and Mono, making it compatible with all the mentioned platforms. The challenge was to have third-party engines support all these platforms, as each one of these have its own restrictions.

Mono supports P/Invoke (used by many wrappers) but doesn’t support mixed-mode assemblies (used by some wrappers, like Mogre). Silverlight and the mobile platforms support none of these (Silverlight 5 supports P/Invoke but “Out-Of-Browser”).

The solution to have as little platform specific code as possible is to have fully managed engines (.NET specific code). We looked around and found some good candidates that have already been integrated into YVision 4.0.

Axiom is a port to C# of the Ogre rendering engine. It’s a bit behind in terms of Ogre features but it’s fully managed code, Mono compatible and supports DirectX, OpenGL and XNA rendering systems. It makes extensive use of “unsafe” (a common C# performance optimization) that unfortunately is not supported in Silverlight and Windows Phone 7. We’ve been actively contributing code to fix this limitation. We are experiencing very reasonable frame rates on these platforms, and we hope to have demos very soon.

bullet-xna is a port to C# of the Bullet physics engine. It’s fully managed code but it depends on the XNA math library that is not available in all the platforms. We’ve also been actively contributing code to replace this library by the Mono.GameMath, that is compatible with all platforms.

We’ve also been contributing to SLARToolkit, a fully managed code augmented reality library. For example, we have contributed with an adaptive threshold that makes tracking much more robust to lighting changes. We are waiting for the binary release and approval of some more contributions (Right, René? ;-)).

We are looking to other projects like AForge, to replace OpenCV, and GStreamer, to replace DirectShow.NET.

Currently YVision can be developed and executed on Windows and Mac OS X. Next, we will support Windows Phone 7 and we will upgrade the support of Silverlight 5 to the RTM release (currently depending on the Axiom release). In the near future we will start working on support for iOS and Android.

Leave a comment