Co-authored-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech> Reviewed-on: https://git.avroid.tech/Conan/conan_build/pulls/15
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
#include <windows.h>
|
|
|
|
static LRESULT CALLBACK WndProc(HWND hwnd,
|
|
UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
LRESULT res = 1;
|
|
switch (uMsg)
|
|
{
|
|
case WM_DESTROY:
|
|
::PostQuitMessage (0);
|
|
break;
|
|
default:
|
|
res = ::DefWindowProc(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
bool init_context()
|
|
{
|
|
static const wchar_t * class_name = L"ConanOpenGL";
|
|
static const wchar_t * window_name = L"Conan OpenGL";
|
|
WNDCLASSEXW wc = {0};
|
|
wc.cbSize = sizeof(WNDCLASSEXW);
|
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
|
wc.lpfnWndProc = WndProc;
|
|
wc.hInstance = ::GetModuleHandle(NULL);
|
|
wc.hIcon = ::LoadIcon(0, IDI_APPLICATION);
|
|
wc.hCursor = ::LoadCursor(0, IDC_ARROW);
|
|
wc.hbrBackground = (HBRUSH) ::GetStockObject(WHITE_BRUSH);
|
|
wc.lpszClassName = class_name;
|
|
if (!::RegisterClassExW(&wc))
|
|
return false;
|
|
HWND hWnd = ::CreateWindowExW(0, class_name, window_name,
|
|
WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, NULL, NULL, wc.hInstance, NULL);
|
|
if (!hWnd)
|
|
return false;
|
|
HDC hDC = ::GetDC(hWnd);
|
|
if (!hDC)
|
|
return false;
|
|
PIXELFORMATDESCRIPTOR pfd = {0};
|
|
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
|
|
pfd.nVersion = 1;
|
|
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
|
|
pfd.iPixelType = PFD_TYPE_RGBA;
|
|
pfd.dwLayerMask = PFD_MAIN_PLANE;
|
|
pfd.cColorBits = 32;
|
|
pfd.cDepthBits = 16;
|
|
int pixel_format = ::ChoosePixelFormat(hDC, &pfd);
|
|
if(0 == pixel_format)
|
|
return false;
|
|
if (!::SetPixelFormat(hDC, pixel_format, &pfd))
|
|
return false;
|
|
HGLRC hGLRC = ::wglCreateContext(hDC);
|
|
if (!hGLRC)
|
|
return false;
|
|
::wglMakeCurrent(hDC, hGLRC);
|
|
return true;
|
|
}
|