IntPtr TryInitEglDisplay(IWindowInfo window, ref int major, ref int minor, ref GraphicsContextFlags flags) { //see https://github.com/Microsoft/angle/wiki/Initializing-ANGLE-on-D3D11-Feature-Level-9 //IntPtr egl_display1 = Egl.GetPlatformDisplayEXT(Egl.PLATFORM_ANGLE_ANGLE, IntPtr.Zero, new int[]{ // Egl.PLATFORM_ANGLE_TYPE_ANGLE, // Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE, // Egl.PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, 9, // Egl.PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, 3, // Egl.NONE, //}); //if (!Egl.Initialize(egl_display1, out int m1, out int m2)) //{ //} //1. use default openTK default WinWindowInfo win_win = (WinWindowInfo)window; bool success = false; int eglMajor, eglMinor; IntPtr egl_display = IntPtr.Zero; if (isFirstTimeEval) { isFirstTimeEval = false; egl_display = GetDisplay(win_win.DeviceContext); success = Egl.Initialize(egl_display, out eglMajor, out eglMinor); //------------------- //we found that some old machine can't init with D3D11 //so ... we use D3D9 instead if (!success) { egl_display = Egl.GetPlatformDisplayEXT(Egl.PLATFORM_ANGLE_ANGLE, IntPtr.Zero, new int[] { Egl.PLATFORM_ANGLE_TYPE_ANGLE, Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE, Egl.NONE, }); if (Egl.Initialize(egl_display, out eglMajor, out eglMinor)) { useD3D9Only = true; success = true; //in this case major = 2; //GLES2 minor = 1; flags = flags & ~GraphicsContextFlags.AngleD3D11; //can't use D3D11 } else { throw new GraphicsContextException(String.Format("Failed to initialize EGL, error {0}.", Egl.GetError())); } } } else { //not first time if (useD3D9Only) { //no D3D11 egl_display = Egl.GetPlatformDisplayEXT(Egl.PLATFORM_ANGLE_ANGLE, IntPtr.Zero, new int[] { Egl.PLATFORM_ANGLE_TYPE_ANGLE, Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE, Egl.NONE, }); if (Egl.Initialize(egl_display, out eglMajor, out eglMinor)) { useD3D9Only = true; success = true; //in this case major = 2; //GLES2 minor = 1; flags = flags & ~GraphicsContextFlags.AngleD3D11; //can't use D3D11 } else { throw new GraphicsContextException(String.Format("Failed to initialize EGL, error {0}.", Egl.GetError())); } } else { //use D3D11 egl_display = GetDisplay(win_win.DeviceContext); success = Egl.Initialize(egl_display, out eglMajor, out eglMinor); //------------------- //we found that some old machine can't init with D3D11 //so ... we use D3D9 instead if (!success) { //??? throw new GraphicsContextException(String.Format("Failed to initialize EGL, error {0}.", Egl.GetError())); } } } return(egl_display); }