使用 SDL 和 OpenGL 调整窗口大小
Posted
技术标签:
【中文标题】使用 SDL 和 OpenGL 调整窗口大小【英文标题】:Resizing window using SDL and OpenGL 【发布时间】:2018-03-18 05:31:29 【问题描述】:在写这个问题之前,我已经阅读了这个问题:Handling window resizing using OpenGL and SDL。然而,这个问题并没有解决我的问题,因为我使用的是 SDL2 而不是 SDL1.2。但我确实使用 OpenGL2。我的完整源代码位于:http://dpaste.com/17BVBP6
我正在编写一个在窗口中显示一个白色方块的程序。但是我在处理窗口调整大小事件时遇到了问题。这是我的调整大小函数:
void resize(int width,int height)
if(height<=0) height=1;
glViewport(0,0,(GLsizei)width,(GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,float(width)/float(height),1.0f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
我的主事件循环:
while( !quit )
while( SDL_PollEvent( &e ) != 0 )
switch (e.type)
case SDL_QUIT:
quit=true;
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
resize(e.window.data1,e.window.data2);
break;
case SDL_KEYDOWN:
switch (e.key.keysym.sym)
case SDLK_ESCAPE:
quit=true;
break;
default:
break;
default:
break;
render();
update(gWindow);
这是我未调整大小时的窗口:
这是调整大小后的窗口:
这里出现问题的原因是什么?
【问题讨论】:
【参考方案1】:SDL_WINDOWEVENT_SIZE_CHANGED
不是事件类型,它是SDL_WINDOWEVENT
的变体。你的事件检查应该是这样的
switch(e.type)
case SDL_WINDOWEVENT:
if(e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
resize(e.window.data1,e.window.data2);
break;
同时删除您的透视投影设置 - 它与您的绘图不一致,并且您在调整大小之前没有透视设置。
【讨论】:
谢谢!这解决了问题。以上是关于使用 SDL 和 OpenGL 调整窗口大小的主要内容,如果未能解决你的问题,请参考以下文章