adding that file might be good, too

This commit is contained in:
Arisotura 2019-03-31 21:54:42 +02:00
parent b48fe5909b
commit f1628b98de
1 changed files with 66 additions and 0 deletions

View File

@ -0,0 +1,66 @@
// 31 march 2019
#include "uipriv_windows.hpp"
struct uiGLContext
{
uiControl* c;
HWND hwnd;
HDC dc;
HGLRC rc;
};
uiGLContext* uiGLNewContext(uiControl* c)
{
uiGLContext* ctx;
ctx = uiNew(uiGLContext);
ctx->c = c;
if (c)
{
ctx->hwnd = (HWND)c->Handle(c); // welp
}
else
{
// windowless context
ctx->hwnd = GetDesktopWindow();
}
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cAlphaBits = 8;
pfd.cDepthBits = 24;
pfd.cStencilBits = 8;
pfd.iLayerType = PFD_MAIN_PLANE;
ctx->dc = GetDC(ctx->hwnd);
int pixelformat = ChoosePixelFormat(ctx->dc, &pfd);
SetPixelFormat(ctx->dc, pixelformat, &pfd);
ctx->rc = wglCreateContext(ctx->dc);
}
void uiGLFreeContext(uiGLContext* ctx)
{
wglDeleteContext(ctx->rc);
ReleaseDC(ctx->hwnd, ctx->dc);
uiFree(ctx);
}
void uiGLMakeContextCurrent(uiGLContext* ctx)
{
wglMakeCurrent(ctx->dc, ctx->rc);
}
void *uiGLGetProcAddress(const char* proc)
{
return (void*)wglGetProcAddress(proc);
}