5 #include "window_private.h"
12 typedef HGLRC ContextHandle;
14 struct GLContext::Private
16 ContextHandle context;
20 void GLContext::platform_init(const GLOptions &opts)
22 HDC dc = GetDC(window.get_private().window);
24 PIXELFORMATDESCRIPTOR pfd;
25 memset(&pfd, 0, sizeof(pfd));
27 pfd.nSize = sizeof(pfd);
29 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
31 pfd.dwFlags |= PFD_DOUBLEBUFFER;
32 pfd.iPixelType = PFD_TYPE_RGBA;
39 int pf_index = ChoosePixelFormat(dc, &pfd);
41 throw unsupported_gl_mode(opts);
42 SetPixelFormat(dc, pf_index, &pfd);
45 priv->context = wglCreateContext(dc);
46 wglMakeCurrent(dc, priv->context);
48 ReleaseDC(window.get_private().window, dc);
51 GLContext::~GLContext()
54 wglDeleteContext(priv->context);
59 void GLContext::set_swap_interval(unsigned i)
61 PFNWGLSWAPINTERVALEXTPROC func = reinterpret_cast<PFNWGLSWAPINTERVALEXTPROC>(wglGetProcAddress("wglSwapIntervalEXT"));
63 throw runtime_error("wglSwapIntervalEXT not found");
67 void GLContext::swap_buffers()
69 HDC dc = GetDC(window.get_private().window);
71 ReleaseDC(window.get_private().window, dc);
74 void GLContext::window_resized(unsigned, unsigned)
77 } // namespace Graphics