我有一个绘制和移动正方形的程序代码,但是在调整应用程序窗口大小时遇到了问题。当我处理调整大小并相应地更改状态时,屏幕上所有应该绘制且在调整大小之前已经绘制的内容都消失了。我不知道为什么,因为在调整窗口大小期间没有更改任何对象的内部坐标。
我的问题是,有没有人能指点我解决这个问题的正确方向。(代码可以编译通过)
void ResizeWindow()
{
screen_width = event.resize.w;
screen_height = event.resize.h;
SDL_SetVideoMode(screen_width, screen_height, bpp, SDL_OPENGL | SDL_RESIZABLE | SDL_DOUBLEBUF);
glViewport(0, 0, screen_width, screen_height);
glMatrixMode(GL_PROJECTION);
glOrtho(0, screen_width, 0, screen_height, -1, 1);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
}
主循环:
while (running == true)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_VIDEORESIZE: ResizeWindow(); break; // resizing called here
case SDL_QUIT: running = false; break;
case SDL_KEYDOWN: square.Handle_Input(down); break;
case SDL_KEYUP: square.Handle_Input(up); break;
}
}
square.Move();
square.Check_Collision();
glClear(GL_COLOR_BUFFER_BIT);
square.Draw();
SDL_GL_SwapBuffers();
}
一切都在完美地运行,直到窗口被调整大小。
SDL_WINDOWEVENT_RESIZED
。 - lubosz