title: Is it possible to use OpenGL ES code with a WPF application via a D3DImage and ANGLE?
body: <p><strong>Summary (TL:DR version)</strong></p>
  
  <p>Ultimately our goal is to be able to utilize OpenGL ES code in a WPF application natively (i.e. not SharpGL, etc.) and without Airspace or driver issues, possible using Google's ANGLE project.</p>
  
  <p><strong>Background:</strong></p>
  
  <p>One of the things I like about OpenGL over DirectX is its cross-platform capability.  It has excellent support on both OS X and Linux, and also on Android and iOS via ES.  However, on Windows, using it is marred with driver issues, or worse, a lot of cards simply don't implement it properly.</p>
  
  <p>Enter Google's <a href="https://code.google.com/p/angleproject" rel="noreferrer">ANGLE project</a>, or Almost-Native-Graphics-Layer-Engine.</p>
  
  <p>ANGLE is an OpenGL ES 2.0 wrapper around a Direct3D implementation, meaning you can write OpenGL ES 2.0 code to be run on Windows without the need for actual OpenGL drivers. It not only passes the ES compatibility tests, but it's actually how Chrome does all of its graphics rendering, including WebGL so it definitely is a proven technology.</p>
  
  <p><strong>The Question:</strong></p>
  
  <p>We know WPF has a D3DImage control which lets you host Direct3D rendering within WPF and it supposedly does away with the airspace issues by properly composting its output to the WPF render thread.  My question is since ANGLE is implemented via Direct3D, and D3DImage is a target for Direct3D rendering, is it possible to combine the two, allowing us to write OpenGL ES code and host it in a WPF application on Windows, all without driver or airspace issues?</p>
  
  <p>This would be the 'Holy Grail' for us.</p>
  
  <p>However, I keep hitting a wall around getting ANGLE to target its rendering on the D3D surface created by the D3DImage control since ANGLE wants to use its own.  I'm not sure this is even possible.  I can't find a single article or reference anywhere of anyone even discussing this, let alone attempting it.</p>
  
  <p>Again to be clear though, the goal is to get our shared, cross-platform OpenGL (or ES) code to work in a WPF application without airspace issues or OpenGL driver requirements.  My suggestion of using ANGLE/D3DImage is just that... an attempt. It's the 'means' I've come up with so far, but that's just a potential means to our goal, not the goal itself.  Anything else that would get us to the same solution would be more than welcome.</p>