private IntPtr GetAngleDisplay(IntPtr dc, GraphicsContextFlags flags, int major)
        {
            // default to D3D9 for ES2, but use D3D11 for ES3 as required by Angle.
            var platform_type = major == 2
                ? Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE
                : Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE;

            if (FlagEnabled(flags, GraphicsContextFlags.AngleD3D11))
            {
                platform_type = Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
            }
            else if (FlagEnabled(flags, GraphicsContextFlags.AngleD3D9))
            {
                platform_type = Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE;
            }
            else if (FlagEnabled(flags, GraphicsContextFlags.AngleOpenGL))
            {
                platform_type = Egl.PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
            }
            else
            {
                // make sure the correct flag is set.
                switch (platform_type)
                {
                case Egl.PLATFORM_ANGLE_TYPE_D3D9_ANGLE:
                    flags |= GraphicsContextFlags.AngleD3D9;
                    break;

                case Egl.PLATFORM_ANGLE_TYPE_D3D11_ANGLE:
                    flags |= GraphicsContextFlags.AngleD3D11;
                    break;

                case Egl.PLATFORM_ANGLE_TYPE_OPENGL_ANGLE:
                    flags |= GraphicsContextFlags.AngleOpenGL;
                    break;
                }
            }

            var attribs = new[]
            {
                Egl.PLATFORM_ANGLE_TYPE_ANGLE, platform_type,
                Egl.PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, Egl.DONT_CARE,
                Egl.PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, Egl.DONT_CARE,
                Egl.PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, Egl.PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE,
                Egl.NONE
            };

            return(Egl.GetPlatformDisplay(
                       Egl.PLATFORM_ANGLE_ANGLE,
                       dc,
                       attribs
                       ));
        }