OpenGl and Windows

Started by
0 comments, last by Zakwayda 12 years, 11 months ago
[font=arial, sans-serif][size=2][/font]
[font="arial, sans-serif"]
[/font]
[font="arial, sans-serif"]CGfxOpenGL.h[/font]
[font="arial, sans-serif"][/font]
[font="arial, sans-serif"]

[size=2]#ifndef __GL_COMPONENT
[size=2]#define __GL_COMPONENT
[size=2]

[size=2]#define PI 3.14159
[size=2]#define TWO_PI PI*2.0
[size=2]#define HALF_PI PI/2.0
[size=2]

[size=2]class CGfxOpenGL
[size=2]{
[size=2]private:
[size=2] int m_windowWidth;
[size=2] int m_windowHeight;
[size=2]

[size=2] float m_angle;
[size=2]

[size=2]public:
[size=2] CGfxOpenGL();
[size=2] virtual ~CGfxOpenGL();
[size=2]

[size=2] bool Init();
[size=2] bool Shutdown();
[size=2]

[size=2] void SetupProjection(int width, int height);
[size=2]

[size=2] void Prepare(float dt);
[size=2] void Render();
[size=2]};
[size=2]
[size=2]#endif
[/font]

[font=arial, sans-serif][size=2]
[/font]
[font=arial, sans-serif][size=2]CGfxOpenGL.cpp[/font]
[font=arial, sans-serif][size=2][/font]


[font="arial, sans-serif"][size=2]#ifdef _WINDOWS[/font]
[font="arial, sans-serif"][size=2]#include <windows.h>[/font]
[font="arial, sans-serif"][size=2]#endif[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]#include <gl/gl.h>[/font]
[font="arial, sans-serif"][size=2]#include <gl/glu.h>[/font]
[font="arial, sans-serif"][size=2]#include <math.h>[/font]
[font="arial, sans-serif"][size=2]#include "CGfxOpenGL.h"[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]// disable implicit float-double casting[/font]
[font="arial, sans-serif"][size=2]#pragma warning(disable:4305)[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]CGfxOpenGL::CGfxOpenGL()[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]CGfxOpenGL::~CGfxOpenGL()[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]bool CGfxOpenGL::Init()[/font]
[font="arial, sans-serif"][size=2]{ [/font]
[font="arial, sans-serif"][size=2] // clear to black background[/font]
[font="arial, sans-serif"][size=2] glClearColor(0.0, 0.0, 0.0, 0.0);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] m_angle = 0.0f;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] return true;[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]bool CGfxOpenGL::Shutdown()[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] return true;[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]void CGfxOpenGL::SetupProjection(int width, int height)[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] if (height == 0) // don't want a divide by zero[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] height = 1; [/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] glViewport(0, 0, width, height); // reset the viewport to new dimensions[/font]
[font="arial, sans-serif"][size=2] glMatrixMode(GL_PROJECTION); // set projection matrix current matrix[/font]
[font="arial, sans-serif"][size=2] glLoadIdentity(); // reset projection matrix[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // calculate aspect ratio of window[/font]
[font="arial, sans-serif"][size=2] gluPerspective(52.0f,(GLfloat)width/(GLfloat)height,1.0f,1000.0f);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] glMatrixMode(GL_MODELVIEW); // set modelview matrix[/font]
[font="arial, sans-serif"][size=2] glLoadIdentity(); // reset modelview matrix[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] m_windowWidth = width;[/font]
[font="arial, sans-serif"][size=2] m_windowHeight = height;[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]void CGfxOpenGL::Prepare(float dt)[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] m_angle += 0.1f;[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]void CGfxOpenGL::Render()[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] // clear screen and depth buffer[/font]
[font="arial, sans-serif"][size=2] glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); [/font]
[font="arial, sans-serif"][size=2] glLoadIdentity();[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // move back 5 units and rotate about all 3 axes[/font]
[font="arial, sans-serif"][size=2] glTranslatef(0.0, 0.0, -5.0f);[/font]
[font="arial, sans-serif"][size=2] glRotatef(m_angle, 1.0f, 0.0f, 0.0f);[/font]
[font="arial, sans-serif"][size=2] glRotatef(m_angle, 0.0f, 1.0f, 0.0f);[/font]
[font="arial, sans-serif"][size=2] glRotatef(m_angle, 0.0f, 0.0f, 1.0f);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // lime greenish color[/font]
[font="arial, sans-serif"][size=2] glColor3f(0.7f, 1.0f, 0.3f);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // draw the triangle such that the rotation point is in the center[/font]
[font="arial, sans-serif"][size=2] glBegin(GL_TRIANGLES);[/font]
[font="arial, sans-serif"][size=2] glVertex3f(1.0f, -1.0f, 0.0f);[/font]
[font="arial, sans-serif"][size=2] glVertex3f(-1.0f, -1.0f, 0.0f);[/font]
[font="arial, sans-serif"][size=2] glVertex3f(0.0f, 1.0f, 0.0f);[/font]
[font="arial, sans-serif"][size=2] glEnd();[/font]
[font="arial, sans-serif"][size=2]}[/font][font="arial, sans-serif"]
[/font]
[font=arial, sans-serif][size=2]
[/font]
[font=arial, sans-serif][size=2]main.cpp[/font]
[font=arial, sans-serif][size=2][/font]


[font="arial, sans-serif"][size=2]#define WIN32_LEAN_AND_MEAN[/font]
[font="arial, sans-serif"][size=2]#define WIN32_EXTRA_LEAN[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]#include <windows.h>[/font]
[font="arial, sans-serif"][size=2]#include <gl/gl.h>[/font]
[font="arial, sans-serif"][size=2]#include <gl/glu.h>[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]#include "CGfxOpenGL.h"[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]bool exiting = false;[/font]
[font="arial, sans-serif"][size=2]long windowWidth = 800;[/font]
[font="arial, sans-serif"][size=2]long windowHeight = 600;[/font]
[font="arial, sans-serif"][size=2]long windowBits = 32;[/font]
[font="arial, sans-serif"][size=2]bool fullscreen = false;[/font]
[font="arial, sans-serif"][size=2]HDC hDC;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]CGfxOpenGL *g_glRender = NULL;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]void SetupPixelFormat(HDC hDC)[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] int pixelFormat;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] PIXELFORMATDESCRIPTOR pfd =[/font]
[font="arial, sans-serif"][size=2] { [/font]
[font="arial, sans-serif"][size=2] sizeof(PIXELFORMATDESCRIPTOR), // size[/font]
[font="arial, sans-serif"][size=2] 1, // version[/font]
[font="arial, sans-serif"][size=2] PFD_SUPPORT_OPENGL | // OpenGL window[/font]
[font="arial, sans-serif"][size=2] PFD_DRAW_TO_WINDOW | // render to window[/font]
[font="arial, sans-serif"][size=2] PFD_DOUBLEBUFFER, // support double-buffering[/font]
[font="arial, sans-serif"][size=2] PFD_TYPE_RGBA, // color type[/font]
[font="arial, sans-serif"][size=2] 32, // prefered color depth[/font]
[font="arial, sans-serif"][size=2] 0, 0, 0, 0, 0, 0, // color bits (ignored)[/font]
[font="arial, sans-serif"][size=2] 0, // no alpha buffer[/font]
[font="arial, sans-serif"][size=2] 0, // alpha bits (ignored)[/font]
[font="arial, sans-serif"][size=2] 0, // no accumulation buffer[/font]
[font="arial, sans-serif"][size=2] 0, 0, 0, 0, // accum bits (ignored)[/font]
[font="arial, sans-serif"][size=2] 16, // depth buffer[/font]
[font="arial, sans-serif"][size=2] 0, // no stencil buffer[/font]
[font="arial, sans-serif"][size=2] 0, // no auxiliary buffers[/font]
[font="arial, sans-serif"][size=2] PFD_MAIN_PLANE, // main layer[/font]
[font="arial, sans-serif"][size=2] 0, // reserved[/font]
[font="arial, sans-serif"][size=2] 0, 0, 0, // no layer, visible, damage masks[/font]
[font="arial, sans-serif"][size=2] };[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] pixelFormat = ChoosePixelFormat(hDC, &pfd);[/font]
[font="arial, sans-serif"][size=2] SetPixelFormat(hDC, pixelFormat, &pfd);[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]LRESULT CALLBACK MainWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] static HDC hDC;[/font]
[font="arial, sans-serif"][size=2] static HGLRC hRC;[/font]
[font="arial, sans-serif"][size=2] int height, width;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // dispatch messages[/font]
[font="arial, sans-serif"][size=2] switch (uMsg)[/font]
[font="arial, sans-serif"][size=2] { [/font]
[font="arial, sans-serif"][size=2] case WM_CREATE: // window creation[/font]
[font="arial, sans-serif"][size=2] hDC = GetDC(hWnd);[/font]
[font="arial, sans-serif"][size=2] SetupPixelFormat(hDC);[/font]
[font="arial, sans-serif"][size=2] //SetupPalette();[/font]
[font="arial, sans-serif"][size=2] hRC = wglCreateContext(hDC);[/font]
[font="arial, sans-serif"][size=2] wglMakeCurrent(hDC, hRC);[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_DESTROY: // window destroy[/font]
[font="arial, sans-serif"][size=2] case WM_QUIT:[/font]
[font="arial, sans-serif"][size=2] case WM_CLOSE: // windows is closing[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // deselect rendering context and delete it[/font]
[font="arial, sans-serif"][size=2] wglMakeCurrent(hDC, NULL);[/font]
[font="arial, sans-serif"][size=2] wglDeleteContext(hRC);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // send WM_QUIT to message queue[/font]
[font="arial, sans-serif"][size=2] PostQuitMessage(0);[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_SIZE:[/font]
[font="arial, sans-serif"][size=2] height = HIWORD(lParam); // retrieve width and height[/font]
[font="arial, sans-serif"][size=2] width = LOWORD(lParam);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] g_glRender->SetupProjection(width, height);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_ACTIVATEAPP: // activate app[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_PAINT: // paint[/font]
[font="arial, sans-serif"][size=2] PAINTSTRUCT ps;[/font]
[font="arial, sans-serif"][size=2] BeginPaint(hWnd, &ps);[/font]
[font="arial, sans-serif"][size=2] EndPaint(hWnd, &ps);[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_LBUTTONDOWN: // left mouse button[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_RBUTTONDOWN: // right mouse button[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_MOUSEMOVE: // mouse movement[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_LBUTTONUP: // left button release[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_RBUTTONUP: // right button release[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_KEYUP:[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] case WM_KEYDOWN:[/font]
[font="arial, sans-serif"][size=2] int fwKeys;[/font]
[font="arial, sans-serif"][size=2] LPARAM keyData;[/font]
[font="arial, sans-serif"][size=2] fwKeys = (int)wParam; // virtual-key code [/font]
[font="arial, sans-serif"][size=2] keyData = lParam; // key data [/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] switch(fwKeys)[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] case VK_ESCAPE:[/font]
[font="arial, sans-serif"][size=2] PostQuitMessage(0);[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2] default:[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] default:[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2] return DefWindowProc(hWnd, uMsg, wParam, lParam);[/font]
[font="arial, sans-serif"][size=2]}[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2]int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)[/font]
[font="arial, sans-serif"][size=2]{[/font]
[font="arial, sans-serif"][size=2] WNDCLASSEX windowClass; // window class[/font]
[font="arial, sans-serif"][size=2] HWND hwnd; // window handle[/font]
[font="arial, sans-serif"][size=2] MSG msg; // message[/font]
[font="arial, sans-serif"][size=2] DWORD dwExStyle; // Window Extended Style[/font]
[font="arial, sans-serif"][size=2] DWORD dwStyle; // Window Style[/font]
[font="arial, sans-serif"][size=2] RECT windowRect;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] g_glRender = new CGfxOpenGL;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] windowRect.left=(long)0; // Set Left Value To 0[/font]
[font="arial, sans-serif"][size=2] windowRect.right=(long)windowWidth; // Set Right Value To Requested Width[/font]
[font="arial, sans-serif"][size=2] windowRect.top=(long)0; // Set Top Value To 0[/font]
[font="arial, sans-serif"][size=2] windowRect.bottom=(long)windowHeight; // Set Bottom Value To Requested Height[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // fill out the window class structure[/font]
[font="arial, sans-serif"][size=2] windowClass.cbSize = sizeof(WNDCLASSEX);[/font]
[font="arial, sans-serif"][size=2] windowClass.style = CS_HREDRAW | CS_VREDRAW;[/font]
[font="arial, sans-serif"][size=2] windowClass.lpfnWndProc = MainWindowProc;[/font]
[font="arial, sans-serif"][size=2] windowClass.cbClsExtra = 0;[/font]
[font="arial, sans-serif"][size=2] windowClass.cbWndExtra = 0;[/font]
[font="arial, sans-serif"][size=2] windowClass.hInstance = hInstance;[/font]
[font="arial, sans-serif"][size=2] windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // default icon[/font]
[font="arial, sans-serif"][size=2] windowClass.hCursor = LoadCursor(NULL, IDC_ARROW); // default arrow[/font]
[font="arial, sans-serif"][size=2] windowClass.hbrBackground = NULL; // don't need background[/font]
[font="arial, sans-serif"][size=2] windowClass.lpszMenuName = NULL; // no menu[/font]
[font="arial, sans-serif"][size=2] windowClass.lpszClassName = "GLClass";[/font]
[font="arial, sans-serif"][size=2] windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // windows logo small icon[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // register the windows class[/font]
[font="arial, sans-serif"][size=2] if (!RegisterClassEx(&windowClass))[/font]
[font="arial, sans-serif"][size=2] return 0;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] if (fullscreen) // fullscreen?[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] DEVMODE dmScreenSettings; // device mode[/font]
[font="arial, sans-serif"][size=2] memset(&dmScreenSettings,0,sizeof(dmScreenSettings));[/font]
[font="arial, sans-serif"][size=2] dmScreenSettings.dmSize = sizeof(dmScreenSettings); [/font]
[font="arial, sans-serif"][size=2] dmScreenSettings.dmPelsWidth = windowWidth; // screen width[/font]
[font="arial, sans-serif"][size=2] dmScreenSettings.dmPelsHeight = windowHeight; // screen height[/font]
[font="arial, sans-serif"][size=2] dmScreenSettings.dmBitsPerPel = windowBits; // bits per pixel[/font]
[font="arial, sans-serif"][size=2] dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // [/font]
[font="arial, sans-serif"][size=2] if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] // setting display mode failed, switch to windowed[/font]
[font="arial, sans-serif"][size=2] MessageBox(NULL, "Display mode failed", NULL, MB_OK);[/font]
[font="arial, sans-serif"][size=2] fullscreen = FALSE; [/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] if (fullscreen) // Are We Still In Fullscreen Mode?[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] dwExStyle=WS_EX_APPWINDOW; // Window Extended Style[/font]
[font="arial, sans-serif"][size=2] dwStyle=WS_POPUP; // Windows Style[/font]
[font="arial, sans-serif"][size=2] ShowCursor(FALSE); // Hide Mouse Pointer[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2] else[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; // Window Extended Style[/font]
[font="arial, sans-serif"][size=2] dwStyle=WS_OVERLAPPEDWINDOW; // Windows Style[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle); // Adjust Window To True Requested Size[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // class registered, so now create our window[/font]
[font="arial, sans-serif"][size=2] hwnd = CreateWindowEx(NULL, // extended style[/font]
[font="arial, sans-serif"][size=2] "GLClass", // class name[/font]
[font="arial, sans-serif"][size=2] "BOGLGP - Chapter 2 - OpenGL Application", // app name[/font]
[font="arial, sans-serif"][size=2] dwStyle | WS_CLIPCHILDREN |[/font]
[font="arial, sans-serif"][size=2] WS_CLIPSIBLINGS,[/font]
[font="arial, sans-serif"][size=2] 0, 0, // x,y coordinate[/font]
[font="arial, sans-serif"][size=2] windowRect.right - windowRect.left,[/font]
[font="arial, sans-serif"][size=2] windowRect.bottom - windowRect.top, // width, height[/font]
[font="arial, sans-serif"][size=2] NULL, // handle to parent[/font]
[font="arial, sans-serif"][size=2] NULL, // handle to menu[/font]
[font="arial, sans-serif"][size=2] hInstance, // application instance[/font]
[font="arial, sans-serif"][size=2] NULL); // no extra params[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] hDC = GetDC(hwnd);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] // check if window creation failed (hwnd would equal NULL)[/font]
[font="arial, sans-serif"][size=2] if (!hwnd)[/font]
[font="arial, sans-serif"][size=2] return 0;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] ShowWindow(hwnd, SW_SHOW); // display the window[/font]
[font="arial, sans-serif"][size=2] UpdateWindow(hwnd); // update the window[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] g_glRender->Init();[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] while (!exiting)[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] g_glRender->Prepare(0.0f);[/font]
[font="arial, sans-serif"][size=2] g_glRender->Render();[/font]
[font="arial, sans-serif"][size=2] SwapBuffers(hDC);[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] if (!GetMessage (&msg, NULL, 0, 0))[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] exiting = true;[/font]
[font="arial, sans-serif"][size=2] break;[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] TranslateMessage (&msg);[/font]
[font="arial, sans-serif"][size=2] DispatchMessage (&msg);[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] delete g_glRender;[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] if (fullscreen)[/font]
[font="arial, sans-serif"][size=2] {[/font]
[font="arial, sans-serif"][size=2] ChangeDisplaySettings(NULL,0); // If So Switch Back To The Desktop[/font]
[font="arial, sans-serif"][size=2] ShowCursor(TRUE); // Show Mouse Pointer[/font]
[font="arial, sans-serif"][size=2] }[/font]
[font="arial, sans-serif"][size=2]
[/font]
[font="arial, sans-serif"][size=2] return (int)msg.wParam;[/font][font="arial, sans-serif"][size=2]}
[/font]
[font="arial, sans-serif"]
[/font]
[font="arial, sans-serif"]
[/font]
[font="arial, sans-serif"][color=#888888][size=2][color=#000000][size=2]I compiled the codeblocks and appeared the following errors:[color=#1111CC][/font]
[font="arial, sans-serif"][/font]
[font="arial, sans-serif"]
obj\Debug\main.o||In function `Z16SetupPixelFormatP5HDC__':|
E:\Projetos OpenGl\Game Programming\Teste\main.cpp|47|undefined reference to `ChoosePixelFormat@8'|
E:\Projetos OpenGl\Game Programming\Teste\main.cpp|48|undefined reference to `SetPixelFormat@12'|
obj\Debug\main.o||In function `WinMain@16':|
E:\Projetos OpenGl\Game Programming\Teste\main.cpp|244|undefined reference to `SwapBuffers@4'|
||=== Build finished: 3 errors, 0 warnings ===|[/font]
[font="arial, sans-serif"]

[/font]
[font="arial, sans-serif"]
[/font]
[font=arial, sans-serif][size=2]
[/font]
Advertisement
Those are WinAPI functions, so make sure you're linking to the appropriate libraries.

This topic is closed to new replies.

Advertisement