Как изменить размер окна openGL, созданного с помощью wglCreateContext? - PullRequest
0 голосов
/ 13 апреля 2010

Можно ли изменить размер окна openGL (или контекста устройства), созданного с помощью wglCreateContext, без его отключения? Если так, то как? Прямо сейчас у меня есть функция, которая изменяет размер DC, но единственный способ заставить его работать - это вызвать DisableOpenGL, а затем снова включить. Это приводит к потере любых текстур и других изменений состояния. Я хотел бы сделать это без отключения, чтобы мне не пришлось выполнять утомительную задачу воссоздания состояния openGL DC.

HWND hWnd;
HDC hDC;
void View_setSizeWin32(int width, int height) {
    // resize the window
    LPRECT rec = malloc(sizeof(RECT));
    GetWindowRect(hWnd, rec);
    SetWindowPos(      
        hWnd, 
        HWND_TOP, 
        rec->left, 
        rec->top, 
        rec->left+width, 
        rec->left+height,
        SWP_NOMOVE
    );
    free(rec);

    // sad panda
     /*
    DisableOpenGL( hWnd, hDC, hRC );
    EnableOpenGL( hWnd, &hDC, &hRC );
     */

    //EDIT - instead do this....
    glViewport(0, 0, width, height); 

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); 
    glOrtho(-(width/2), width/2, -(height/2), height/2, -1.0, 1.0);

}

Ответы [ 2 ]

3 голосов
/ 14 апреля 2010

Я думаю, вам нужно снова вызвать glViewport после изменения размера клиентской области.

0 голосов
/ 13 апреля 2010

Я почти уверен, что вам не нужно удалять контекст рендеринга или DC. Однако перед изменением размера окна его следует отключить.

Кроме того, вы, вероятно, должны иметь активный контекст рендеринга только во время рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...