使用SDL和OpenGL调整窗口大小

4
在撰写这个问题之前,我已经阅读了这个问题: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个回答

7

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;

同时删除透视投影设置 - 它与您的绘图不一致,并且在调整大小之前您没有进行透视设置。


谢谢!问题已经解决了。 - pro neon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接