您的位置:首页 > 运维架构

比较简单的win32 OpenGL 程序

2016-06-20 13:00 465 查看
[cpp] view
plain copy

 print?





// 
转载自:http://blog.csdn.net/zhuyingqingfen/article/details/22506111

// GLSAMPLE.CPP  

//  by Blaine Hodge  

//  

  

// Includes  

  

#include <windows.h>  

#include <gl/gl.h>  

  

// Function Declarations  

  

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);  

void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC);  

void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC);  

  

// WinMain  

  

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,   

                   LPSTR lpCmdLine, int iCmdShow)  

{  

    WNDCLASS wc;  

    HWND hWnd;  

    HDC hDC;  

    HGLRC hRC;  

    MSG msg;  

    BOOL quit = FALSE;  

    float theta = 0.0f;  

      

    // register window class  

    wc.style = CS_OWNDC;  

    wc.lpfnWndProc = WndProc;  

    wc.cbClsExtra = 0;  

    wc.cbWndExtra = 0;  

    wc.hInstance = hInstance;  

    wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );  

    wc.hCursor = LoadCursor( NULL, IDC_ARROW );  

    wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );  

    wc.lpszMenuName = NULL;  

    wc.lpszClassName = "GLSample";  

    RegisterClass( &wc );  

      

    // create main window  

    hWnd = CreateWindow(   

        "GLSample", "OpenGL Sample",   

        WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,  

        0, 0, 256, 256,  

        NULL, NULL, hInstance, NULL );  

      

    // enable OpenGL for the window  

    EnableOpenGL( hWnd, &hDC, &hRC );  

      

    // program main loop  

    while ( !quit )  

    {  

          

        // check for messages  

        if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE )  )  

        {  

              

            // handle or dispatch messages  

            if ( msg.message == WM_QUIT )   

            {  

                quit = 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;  

              

        }  

          

    }  

      

    // shutdown OpenGL  

    DisableOpenGL( hWnd, hDC, hRC );  

      

    // destroy the window explicitly  

    DestroyWindow( hWnd );  

      

    return msg.wParam;  

      

}  

  

// Window Procedure  

  

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  

{  

      

    switch (message)  

    {  

          

    case WM_CREATE:  

        return 0;  

          

    case WM_CLOSE:  

        PostQuitMessage( 0 );  

        return 0;  

          

    case WM_DESTROY:  

        return 0;  

          

    case WM_KEYDOWN:  

        switch ( wParam )  

        {  

              

        case VK_ESCAPE:  

            PostQuitMessage(0);  

            return 0;  

              

        }  

        return 0;  

      

    default:  

        return DefWindowProc( hWnd, message, wParam, lParam );  

              

    }  

      

}  

  

// Enable OpenGL  

  

void EnableOpenGL(HWND hWnd, HDC * hDC, HGLRC * hRC)  

{  

    PIXELFORMATDESCRIPTOR pfd;  

    int format;  

      

    // 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;  

    format = ChoosePixelFormat( *hDC, &pfd );  

    SetPixelFormat( *hDC, format, &pfd );  

      

    // create and enable the render context (RC)  

    *hRC = wglCreateContext( *hDC );  

    wglMakeCurrent( *hDC, *hRC );  

      

}  

  

// Disable OpenGL  

  

void DisableOpenGL(HWND hWnd, HDC hDC, HGLRC hRC)  

{  

    wglMakeCurrent( NULL, NULL );  

    wglDeleteContext( hRC );  

    ReleaseDC( hWnd, hDC );  

}  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl c++