I’ve been struggling with this question for a while (out of pure technical curiosity more than immediate need). I finally made a big breakthrough tonight.
If you are on Windows and can depend on IE 11, than by far the easiest way to do this is to use the built in WebBrowser control which is available in WinForms, WPF, C++, and any other language that can use ActiveX. The only drawback I kept running into was that performance was unusably slow when embedding IE this way. Finally, I ran across Internet Feature Controls, which are registry keys for controlling how embedded IE works in your application: http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx. Essentially you add your executable name to the registry and request that GPU acceleration be turned on for your app. This is trivial to do in WPF or Winforms
For WPF, put the below code in your App constructor before anything else runs.
using (var software = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(“Software”))
using (var microsoft = software.OpenSubKey(“Microsoft”))
using (var internetExplorer = microsoft.OpenSubKey(“Internet Explorer”))
using (var main = internetExplorer.OpenSubKey(“Main”))
using (var featureControl = main.OpenSubKey(“FeatureControl”, true))
{
using (var gpu = featureControl.CreateSubKey("FEATURE_GPU_RENDERING"))
{
gpu.SetValue(Path.GetFileName(Application.ExecutablePath), 1, Microsoft.Win32.RegistryValueKind.DWord);
}
}
Now you can drop in the standard WebBrowser control and it will serve up accelerate WebGL.
One last note is that normally embedded IE runs as IE 7, but if you add ‘’ to your index.html header, it will automatically put it into “newest IE” mode (which is currently 11).
I’ll probably put together a blog post in the near future that tries to lay out some of the options for embedding Cesium (or any WebGL content) in thick clients. Other projects exist (such as Chromium Embedded Framework, Qt, Node-WebKit, etc…) and they each have their pros and cons; but I’ve had the most success with IE 11 so far.