Showing posts with label OpenGL initialize example. Show all posts
Showing posts with label OpenGL initialize example. Show all posts

Wednesday, May 4, 2011

OpenGL Initialization example.

Following code is OpenGL initialization example using WGL.
First, it creates a GL surface for rendering and associate it with
current windows Device Context. WGL(an Windows version of EGL) is
used to perform this work. [tag: OpenGL Initialization]

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

    // Adjust the window size.
    RECT    kRect = { 0, 0, g_iWidth-1, g_iHeight-1 };

    AdjustWindowRect(&kRect, WS_OVERLAPPEDWINDOW, true);

    hInst = hInstance;

    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      0, 0, kRect.right - kRect.left + 1, kRect.bottom - kRect.top + 1, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   // Get DC for OpenGL.
   g_hDC = GetDC(hWnd);

   {
        // Select format for drawing surface.
        PIXELFORMATDESCRIPTOR    kPFD;
        int                        iPixelFormat;
        BOOL                    bSuccess;

        memset(&kPFD, 0, sizeof(PIXELFORMATDESCRIPTOR));
        kPFD.nSize = sizeof(PIXELFORMATDESCRIPTOR);
        kPFD.nVersion = 1;
        kPFD.dwFlags = PFD_DRAW_TO_WINDOW |
                        PFD_SUPPORT_OPENGL |
                        PFD_GENERIC_ACCELERATED |
                        PFD_DOUBLEBUFFER;
        kPFD.iPixelType = PFD_TYPE_RGBA;
        kPFD.cColorBits = 24;
        kPFD.cDepthBits = 16;
        kPFD.cStencilBits = 8;

        // Choose pixel format.
        iPixelFormat = ChoosePixelFormat(g_hDC, &kPFD);
        if( iPixelFormat == 0 )
        {
            ReleaseDC(hWnd, g_hDC);
            return -1;
        }

        // Set pixel format.
        bSuccess = SetPixelFormat(g_hDC, iPixelFormat, &kPFD);
        if( !bSuccess )
        {
            ReleaseDC(hWnd, g_hDC);
            return -1;
        }

        // Create openGL context.
        g_hGLRC = wglCreateContext(g_hDC);
        if( !g_hGLRC )
        {
            ReleaseDC(hWnd, g_hDC);
            return -3;
        }

        // Make current context.
        bSuccess = wglMakeCurrent(g_hDC, g_hGLRC);
        if( !bSuccess )
        {
            wglDeleteContext(g_hGLRC);
            ReleaseDC(hWnd, g_hDC);
            return -4;
        }

        // Initialize OpenGL Environment.
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        // Set viewport.
        glViewport(0, 0, g_iWidth, g_iHeight);

        // Set ModelView matrix.
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        // Set clear color.
        glClearColor(0.2f, 0.0f, 0.0f, 1.0f);
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}