Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SDL和OpenGL调整窗口大小_Opengl_Sdl_Sdl 2_Opengl 2.0 - Fatal编程技术网

使用SDL和OpenGL调整窗口大小

使用SDL和OpenGL调整窗口大小,opengl,sdl,sdl-2,opengl-2.0,Opengl,Sdl,Sdl 2,Opengl 2.0,在写这个问题之前,我已经阅读了问题:。然而,这个问题并不能解决我的问题,因为我使用的是SDL2而不是SDL1.2。但我确实使用OpenGL2。我的完整源代码可从以下网址获得: 我正在编写一个程序,在窗口中显示一个白色正方形。但是,我在处理窗口调整大小事件时遇到问题。以下是我的调整大小功能: void resize(int width,int height) { if(height<=0) height=1; glViewport(0,0,(GLsizei)width

在写这个问题之前,我已经阅读了问题:。然而,这个问题并不能解决我的问题,因为我使用的是SDL2而不是SDL1.2。但我确实使用OpenGL2。我的完整源代码可从以下网址获得:

我正在编写一个程序,在窗口中显示一个白色正方形。但是,我在处理窗口调整大小事件时遇到问题。以下是我的调整大小功能:

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();
}
这是未调整大小的窗口:

这是调整大小后的窗口:


是什么导致了这里的问题

SDL\u WINDOWEVENT\u SIZE\u CHANGED
不是事件类型,它是
SDL\u WINDOWEVENT
的变体。您的事件检查应该如下所示

switch(e.type) {
    case SDL_WINDOWEVENT:
        if(e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
            resize(e.window.data1,e.window.data2);
        }
        break;

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

谢谢!这解决了问题。
switch(e.type) {
    case SDL_WINDOWEVENT:
        if(e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
            resize(e.window.data1,e.window.data2);
        }
        break;