OpenGL视口拖动更新(Winapi)

时间:2016-05-12 21:49:27

标签: c++ opengl

在我正在进行的当前项目中,我希望在用户调整拖动窗口大小时调整opengl视口窗口的大小(" SizeBox"),我计划使用windows" ENTERSIZEMOVE"来自windows.h窗口api的函数来获取重绘视口的信号。然后我会调用" UpdateRender"更新我的视口。

在运行我的程序时,我似乎只有一次更新调用来调整窗口大小(即使我停止并再次开始拖动),我也在场景中有一个旋转它的立方体(0.0f,0.0f) ,10.of)。我希望立方体与窗口一起移动"调整大小"而不是它被窗口覆盖,因为立方体设置为视口的中心,所以如果我是正确的,我不需要通过gltransform移动它。

如果有人想到我为什么没有得到一个恒定的视口,那么#34;刷新"从被拖动的窗口,我将非常感激。

消息循环处理程序(代码段)

void Render::UpdateRender()
{
    int update_x  = rect.right - rect.left;
    int update_y = rect.bottom - rect.top;
    glViewport(0,0 ,update_y/2,update_x/2);
}

更新渲染

int window::Wincreate(HINSTANCE hInstance, char *winname, int winwidth, int winheight)
{
    Hwnd = CreateWindow("Game Engine", winname, WS_VISIBLE | WS_SYSMENU | WS_SIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE, 0, 0, winwidth , winheight , 0, 0, hInstance, 0);

    if (!Hwnd)
    {
        MessageBox(0, "Error: Could not Create Window", "Error", MB_OK);
    }

    Engine->EnableOGLAPI();
    Draw->Initalize();
    return 0;
}

创建窗口

    int window::Winloop(MSG msg)

{
    while (running)
    {
        if (PeekMessage(&msg,0,0,0,PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            angle++;
            Draw->MainRender();
            SwapBuffers(hDC);
        }
    }
    return 0;
}

主要应用程序循环

td

0 个答案:

没有答案