如何调整使用wglCreateContext创建的openGL窗口的大小?

时间:2010-04-13 19:25:47

标签: c windows opengl

是否可以调整使用wglCreateContext创建的openGL窗口(或设备上下文)而不禁用它?如果是这样的话?现在我有一个调整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 个答案:

答案 0 :(得分:2)

我认为在客户区调整大小后,您必须再次致电glViewport

答案 1 :(得分:0)

我很确定你不必删除渲染上下文或DC。但是,您应该在调整窗口大小之前停用它。

此外,在渲染时,您可能只应该激活渲染上下文。