46 ChangeDisplaySettings(
nullptr, 0);
52 if (!wglMakeCurrent(
nullptr,
nullptr)) {
53 MessageBox(
nullptr,
"Release Of DC And RC Failed.",
"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
56 if (!wglDeleteContext(
hRC)) {
57 MessageBox(
nullptr,
"Release Rendering Context Failed.",
"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
64 MessageBox(
nullptr,
"Release Device Context Failed.",
"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
70 MessageBox(
nullptr,
"Could Not Release hWnd.",
"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
74 if (!UnregisterClass(
"OpenGL",
hInstance))
76 MessageBox(
nullptr,
"Could Not Unregister Class.",
"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION);
88 WindowRect.left = (int64_t)0;
89 WindowRect.right = (int64_t)
width;
90 WindowRect.top = (int64_t)0;
91 WindowRect.bottom = (int64_t)
height;
96 wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
97 wc.lpfnWndProc = (WNDPROC)
WndProc;
101 wc.hIcon = LoadIcon(
nullptr, IDI_WINLOGO);
102 wc.hCursor = LoadCursor(
nullptr, IDC_ARROW);
103 wc.hbrBackground =
nullptr;
104 wc.lpszMenuName =
nullptr;
105 wc.lpszClassName =
"OpenGL";
107 if (!RegisterClass(&wc))
109 MessageBox(
nullptr,
"Failed To Register The Window Class.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
115 DEVMODE dmScreenSettings;
116 memset(&dmScreenSettings, 0,
sizeof(dmScreenSettings));
117 dmScreenSettings.dmSize =
sizeof(dmScreenSettings);
118 dmScreenSettings.dmPelsWidth =
width;
119 dmScreenSettings.dmPelsHeight =
height;
120 dmScreenSettings.dmBitsPerPel =
bits;
121 dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
123 if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) {
124 GPUError(
"The Requested Fullscreen Mode Is Not Supported By Your Video Card.");
128 dwExStyle = WS_EX_APPWINDOW;
132 dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
133 dwStyle = WS_OVERLAPPEDWINDOW;
136 AdjustWindowRectEx(&WindowRect, dwStyle,
FALSE, dwExStyle);
139 if (!(
hWnd = CreateWindowEx(dwExStyle,
"OpenGL", title, dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0, 0, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top,
nullptr,
nullptr,
hInstance,
nullptr))) {
141 MessageBox(
nullptr,
"Window Creation Error.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
145 static PIXELFORMATDESCRIPTOR pfd =
147 sizeof(PIXELFORMATDESCRIPTOR),
180 MessageBox(
nullptr,
"Can't Create A GL Device Context.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
184 if (!(PixelFormat = ChoosePixelFormat(
hDC, &pfd)))
187 MessageBox(
nullptr,
"Can't Find A Suitable PixelFormat.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
191 if (!SetPixelFormat(
hDC, PixelFormat, &pfd))
194 MessageBox(
nullptr,
"Can't Set The PixelFormat.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
198 if (!(
hRC = wglCreateContext(
hDC)))
201 MessageBox(
nullptr,
"Can't Create A GL Rendering Context.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
205 if (!wglMakeCurrent(
hDC,
hRC))
208 MessageBox(
nullptr,
"Can't Activate The GL Rendering Context.",
"ERROR", MB_OK | MB_ICONEXCLAMATION);
212 ShowWindow(
hWnd, SW_SHOW);
213 SetForegroundWindow(
hWnd);
235LRESULT CALLBACK
WndProc(HWND
hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
240 if (!HIWORD(wParam)) {
251 case SC_MONITORPOWER:
262 mKeys[wParam] =
TRUE;
263 mKeysShift[wParam] = mKeys[KEY_SHIFT];
269 mKeysShift[wParam] =
false;
270 mKeys[wParam] =
false;
271 GPUInfo(
"Key: %d", wParam);
275 ResizeScene(LOWORD(lParam), HIWORD(lParam));
279 mMouseDnX = GET_X_LPARAM(lParam);
280 mMouseDnY = GET_Y_LPARAM(lParam);
290 mMouseDnX = GET_X_LPARAM(lParam);
291 mMouseDnY = GET_Y_LPARAM(lParam);
302 mMouseDnX = GET_X_LPARAM(lParam);
303 mMouseDnY = GET_Y_LPARAM(lParam);
306 mMouseMvX = GET_X_LPARAM(lParam);
307 mMouseMvY = GET_Y_LPARAM(lParam);
311 mMouseWheel += GET_WHEEL_DELTA_WPARAM(wParam);
316 return DefWindowProc(
hWnd, uMsg, wParam, lParam);
void OpenGLPrint(const char *s, float x, float y, float r, float g, float b, float a, bool fromBotton)