107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
#include <windows.h>
|
|
#include "../deps/include/glad/glad.h"
|
|
|
|
LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|
switch (msg) {
|
|
case WM_CLOSE:
|
|
PostQuitMessage(0);
|
|
break;
|
|
default:
|
|
return DefWindowProc(hwnd, msg, wParam, lParam);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int main() {
|
|
WNDCLASSEX wcex = {0};
|
|
wcex.cbSize = sizeof(WNDCLASSEX);
|
|
wcex.style = CS_CLASSDC;
|
|
wcex.lpfnWndProc = wndProc;
|
|
wcex.cbClsExtra = 0;
|
|
wcex.cbWndExtra = 0;
|
|
wcex.hInstance = GetModuleHandle(NULL);
|
|
wcex.hIcon = NULL;
|
|
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wcex.hbrBackground = 0;
|
|
wcex.lpszMenuName = NULL;
|
|
wcex.lpszClassName = "OpenGL";
|
|
wcex.hIconSm = NULL;
|
|
|
|
if (!RegisterClassEx(&wcex)) {
|
|
MessageBox(NULL, "Failed to register window class", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
HWND hwnd = CreateWindow("OpenGL", "OpenGL", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, GetModuleHandle(NULL), NULL);
|
|
|
|
if (hwnd == NULL) {
|
|
MessageBox(NULL, "Failed to create window", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
HDC hdc = GetDC(hwnd);
|
|
if (hdc == NULL) {
|
|
MessageBox(NULL, "Failed to get device context", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
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.cColorBits = 32;
|
|
pfd.cDepthBits = 24;
|
|
pfd.cStencilBits = 8;
|
|
|
|
int format = ChoosePixelFormat(hdc, &pfd);
|
|
if (format == 0) {
|
|
MessageBox(NULL, "Failed to choose pixel format", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
if (!SetPixelFormat(hdc, format, &pfd)) {
|
|
MessageBox(NULL, "Failed to set pixel format", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
HGLRC hrc = wglCreateContext(hdc);
|
|
if (hrc == NULL) {
|
|
MessageBox(NULL, "Failed to create OpenGL context", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
if (!wglMakeCurrent(hdc, hrc)) {
|
|
MessageBox(NULL, "Failed to make OpenGL context current", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
if (!gladLoadGLLoader((GLADloadproc)wglGetProcAddress)) {
|
|
MessageBox(NULL, "Failed to load OpenGL functions", "Error", MB_ICONERROR);
|
|
return -1;
|
|
}
|
|
|
|
MSG msg;
|
|
while (1) {
|
|
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
if (msg.message == WM_QUIT) {
|
|
break;
|
|
}
|
|
} else {
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
|
|
SwapBuffers(hdc);
|
|
}
|
|
}
|
|
|
|
wglDeleteContext(hrc);
|
|
ReleaseDC(hwnd, hdc);
|
|
DestroyWindow(hwnd);
|
|
UnregisterClass("OpenGL", GetModuleHandle(NULL));
|
|
|
|
return 0;
|
|
}
|
|
|