我正在尝试制作* .obj加载程序。 当我认为一切都解决了时,我无法启动GLEW来与我的装载机一起使用。

关键是我的应用程序初始化如下:

int WINAPI WinMain( HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    int nCmdShow)
{
    WNDCLASSEX wc;
    MSG msg;
    HWND hWnd;

    ZeroMemory(&wc, sizeof(WNDCLASSEX));

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszClassName = L"Projekt";

    RegisterClassEx(&wc);

    hWnd = CreateWindowEx(  NULL,
                            L"Projekt",
                            L"Symulator lodzi",
                            WS_OVERLAPPEDWINDOW,
                            100, 50,
                            SCREEN_WIDTH, SCREEN_HEIGHT,
                            NULL, NULL, hInstance, NULL);

    if (!hWnd)
        return 0;

    ShowWindow(hWnd, nCmdShow); //wyswietlanie okna

    glewExperimental = GL_TRUE;
    GLenum err = glewInit();
    if (err != GLEW_OK)
    {
        const GLubyte* error = glGetString(GL_VERSION);
        const GLubyte* error2 = glewGetErrorString(err);
        exit(1);
    }

    while (TRUE)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        if (msg.message == WM_QUIT)
            break;
    }

    return msg.wParam;
}

调用CreateWindowEx之后,所有操作都将转到WndProc函数中的WM_CREATE消息,如下所示:

case WM_CREATE:
        {
            SetTimer(hWnd, 1, 1000, (TIMERPROC)NULL);
            if (oGL == NULL)
                oGL = new OpenGL(hWnd);

            hDC = GetDC(hWnd);
        } break;

oGL构造函数代码在这里:

OpenGL::OpenGL(HWND hWnd)
{
    static PIXELFORMATDESCRIPTOR pfd = {
                                        sizeof(PIXELFORMATDESCRIPTOR),
                                        1,
                                        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
                                        PFD_TYPE_RGBA,              
                                        32,                           
                                        0, 0, 0,
                                        0, 0, 0,                      
                                        0, 0,                         
                                        0, 0, 0, 0, 0,                
                                        32,                           
                                        0,                             
                                        0,                             
                                        PFD_MAIN_PLANE,                 
                                        0,                             
                                        0,                             
                                        0,                              
                                        0                               
                                        };

    int pixelFormatID;
    HDC hDC;

    hDC = GetDC(hWnd);

    pixelFormatID = ChoosePixelFormat(hDC, &pfd);
    SetPixelFormat(hDC, pixelFormatID, &pfd);

    hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);
    ReleaseDC(hWnd, hDC);
}

因此,我认为OpenGL已正确初始化,但是随后我收到了这些错误信息:

错误消息截图

我不明白为什么应用程序认为OpenGL尚未初始化(我一直在逐步调试它,并且首先确定是先创建window,然后再创建oGL对象)。

===============>>#1 票数:1

尝试初始化GLEW时,您没有OpenGL上下文。 仅在通过DispatchMessage进入消息循环后,才处理WM_CREATE消息。 在处理WM_CREATE之前,您的程序没有上下文。

只需在创建窗口之后创建OpenGL上下文,而不是在WM_CREATE中。 容易得多,并且避免了订购问题。

  ask by Kamil Przybyo translate from so

未解决问题?本站智能推荐: