Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <gl/gl.h>
- #include "Window.hpp"
- LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
- void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
- void DisableOpenGL(HWND, HDC, HGLRC);
- int WINAPI WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- WNDCLASSEX wcex;
- HWND hwnd;
- HDC hDC;
- HGLRC hRC;
- MSG msg;
- BOOL bQuit = FALSE;
- float theta = 0.0f;
- /* register window class */
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_OWNDC;
- wcex.lpfnWndProc = WindowProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = "GLSample";
- wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;
- if (!RegisterClassEx(&wcex))
- return 0;
- /* create main window */
- hwnd = CreateWindowEx(0,
- "GLSample",
- "OpenGL Sample",
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- 256,
- 256,
- NULL,
- NULL,
- hInstance,
- NULL);
- ShowWindow(hwnd, nCmdShow);
- /* enable OpenGL for the window */
- EnableOpenGL(hwnd, &hDC, &hRC);
- /* program main loop */
- while (!bQuit)
- {
- /* check for messages */
- if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- /* handle or dispatch messages */
- if (msg.message == WM_QUIT)
- {
- bQuit = TRUE;
- }
- else
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- else
- {
- /* OpenGL animation code goes here */
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glPushMatrix();
- glRotatef(theta, 0.0f, 0.0f, 1.0f);
- glBegin(GL_TRIANGLES);
- glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
- glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f);
- glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f);
- glEnd();
- glPopMatrix();
- SwapBuffers(hDC);
- theta += 1.0f;
- Sleep (1);
- }
- }
- /* shutdown OpenGL */
- DisableOpenGL(hwnd, hDC, hRC);
- /* destroy the window explicitly */
- DestroyWindow(hwnd);
- return msg.wParam;
- };
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_CLOSE:
- PostQuitMessage(0);
- break;
- case WM_DESTROY:
- return 0;
- case WM_KEYDOWN:
- {
- switch (wParam)
- {
- case VK_ESCAPE:
- PostQuitMessage(0);
- break;
- }
- }
- break;
- default:
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- return 0;
- };
- void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
- {
- PIXELFORMATDESCRIPTOR pfd;
- int iFormat;
- /* get the device context (DC) */
- *hDC = GetDC(hwnd);
- /* set the pixel format for the DC */
- ZeroMemory(&pfd, sizeof(pfd));
- pfd.nSize = sizeof(pfd);
- pfd.nVersion = 1;
- pfd.dwFlags = PFD_DRAW_TO_WINDOW |
- PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
- pfd.iPixelType = PFD_TYPE_RGBA;
- pfd.cColorBits = 24;
- pfd.cDepthBits = 16;
- pfd.iLayerType = PFD_MAIN_PLANE;
- iFormat = ChoosePixelFormat(*hDC, &pfd);
- SetPixelFormat(*hDC, iFormat, &pfd);
- /* create and enable the render context (RC) */
- *hRC = wglCreateContext(*hDC);
- wglMakeCurrent(*hDC, *hRC);
- };
- void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
- {
- wglMakeCurrent(NULL, NULL);
- wglDeleteContext(hRC);
- ReleaseDC(hwnd, hDC);
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement