Pergunta

Ei, estou executando Linux (Ubuntu),

Estou tendo alguns problemas com isso. Tentei baixar o GLUT32.DLL e colar -o no diretório/ diretório da Mingw e também a configuração dos cabeçalhos apropriados incluem/, no entanto - embora a compilação seja boa - o vinculador tem um problema sério, procure os símbolos.

Como faço para fazer isso? Como faço para criar um aplicativo OpenGL para Windows usando o Mingw?

obrigado,

Foi útil?

Solução

No mundo do Windows, para vincular algo a uma DLL, você precisa de uma "Biblioteca de Importação". Você pode pensar neles como bibliotecas estáticas com funções de stub que expõem os símbolos da DLL. Você precisa procurar libglut32.a.

Se você não consegue encontrar isso, pode até haver um C ++ visual para Mingw Importar Library Conversion Tool em algum lugar nas internets ... (já faz um tempo desde que eu precisava de coisas assim, então talvez eu sonhasse essa parte.)

Outras dicas

Na verdade, você nem precisa de GLUT, ele já está lá, só precisa vincular o Libopengl32.a, que vinculará o executável ao nativo OpenGL32.DLL no sistema.

typedef struct RENDER_SURFACE {
    void (*redraw)(struct RENDER_SURFACE*);
    HWND hWnd;
    HINSTANCE hInstance;
    HDC hdc;
    HGLRC hrc;
    int width;
    int height;
    int pix_fmt;
    float light_position[4];
    float light_ambient[4];
    float light_diffuse[4];
    float light_specular[4];
    float light_shininess;
} RENDER_SURFACE;

static LRESULT AppProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    RENDER_SURFACE* rs = (RENDER_SURFACE*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
    if (uMsg == WM_CREATE)
    {
        RECT rc;
        PIXELFORMATDESCRIPTOR pfd;
        rs = (RENDER_SURFACE*)((LPCREATESTRUCT)lParam)->lpCreateParams;
        SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)rs);
        rs->hWnd = hWnd;
        rs->hdc = GetDC(hWnd);
        GetClientRect(hWnd, &rc);
        rs->width = rc.right-rc.left;
        rs->height = rc.bottom-rc.top;
        memset(&pfd, 0, sizeof(pfd));
        pfd.nSize = sizeof(pfd);
        pfd.nVersion = 1;
        pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
        pfd.cColorBits = 24;
        pfd.cDepthBits = 32;
        rs->pix_fmt = ChoosePixelFormat(rs->hdc, &pfd); 
        if (!rs->pix_fmt)
        {
            MessageBox(hWnd, "ChoosePixelFormat FAILED!", "Fatal Error", MB_OK | MB_ICONSTOP);
            DestroyWindow(hWnd);
            return -1;
        }
        SetPixelFormat(rs->hdc, rs->pix_fmt, &pfd);
        rs->hrc = wglCreateContext(rs->hdc);
        wglMakeCurrent(rs->hdc, rs->hrc);
        /* SwapBuffers(rs->hdc); */
        return 0;
    }
    else if (uMsg == WM_PAINT)
    {
        /* other stuffs */
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top