首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

windows下的MinGW怎么构建OPENGL

2012-05-28 
windows下的MinGW如何构建OPENGL如题啊。。。怎么老是通不过编译...需要详解[解决办法]但是你的问题不够详细

windows下的MinGW如何构建OPENGL
如题啊。。。
怎么老是通不过编译...
需要详解

[解决办法]
但是你的问题不够详细啊?
怎么配置的?代码?
[解决办法]
怎么配置的,这段代码完全没问题

gcc main.c -lopengl32 -lglu32 -lgdi32 -mwindows
[解决办法]
奇怪,代码被论坛吃了……

C/C++ code
#include <windows.h>#include <gl/gl.h>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);} 

热点排行