public static ContextHandle CreateContextCurrent(IntPtr hwnd) { var context = ContextHandle.Zero; var hdc = Win32Helper.GetDC(hwnd);//取得设备上下文 PixelFormatDescriptor pfd; pfd.Size = 40; pfd.Version = 1; pfd.Flags = PixelFormatDescriptorFlags.DRAW_TO_WINDOW | PixelFormatDescriptorFlags.SUPPORT_OPENGL | PixelFormatDescriptorFlags.DOUBLEBUFFER; pfd.PixelType = PixelType.RGBA; pfd.ColorBits = 32; pfd.DepthBits = 16; pfd.StencilBits = 8; int pixelFormat; unsafe { PixelFormatDescriptor *ppfd = &pfd; pixelFormat = Win32Helper.ChoosePixelFormat(hdc, (IntPtr)ppfd); //选择像素格式 Win32Helper.SetPixelFormat(hdc, pixelFormat, (IntPtr)ppfd); //设置像素格式 context = new ContextHandle(hdc, Win32Helper.CreateContext(hdc)); //建立OpenGL渲染上下文 MakeCurrentContext(context); //激活当前渲染上下文 _contexts[context.HDC] = context; } return(context); }
internal extern static unsafe Boolean SetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor *ppfd);
internal extern static unsafe int ChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor *pPfd);
internal extern static unsafe int DescribePixelFormat(IntPtr hdc, int ipfd, UInt32 cjpfd, PixelFormatDescriptor *ppfd);
unsafe public static extern int ChoosePixelFormat(IntPtr hDC, PixelFormatDescriptor *pfd);
unsafe public static extern Boolean SetPixelFormat(IntPtr hDC, int format, PixelFormatDescriptor *pfd);
public static extern bool SetPixelFormat(IntPtr hdc, int iPixelFormat, PixelFormatDescriptor *ppfd);
unsafe public static extern int DescribePixelFormat(IntPtr hDC, int index, int pfdStructSize, PixelFormatDescriptor *pfd);
public static extern int ChoosePixelFormat(IntPtr hdc, PixelFormatDescriptor *ppfd);
public static extern unsafe bool wglSetPixelFormat(IntPtr hdc, int ipfd, PixelFormatDescriptor *ppfd);
public static extern unsafe int wglDescribePixelFormat(IntPtr hdc, int ipfd, uint cjpfd, PixelFormatDescriptor *ppfd);
public static extern unsafe int wglChoosePixelFormat(IntPtr hDc, PixelFormatDescriptor *pPfd);
public static extern int DescribePixelFormat(VoidPtr hdc, int iPixelFormat, ushort nBytes, PixelFormatDescriptor *pfd);