在我正在进行的当前项目中,我希望在用户调整拖动窗口大小时调整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