我正在使用OpenGL进行游戏并使用SDL来管理窗口,设置图标以及所有这些内容。 现在我已经将场景设置为帧缓冲区,我想知道是否可以在保持我的起始GL设置的同时调整SDL窗口的大小(我试图模拟精确的分辨率,因此窗口大小调整是帧缓冲区到窗口大小的重新缩放)
我尝试将SDL窗口的两倍分辨率传递给glortho,但它会给出意想不到的结果©。这是可能的,还是我需要一直调整我的工作分辨率到屏幕分辨率? 我使用此代码初始化视频
SDL_SetVideoMode(XRES, YRES, bpp, SDL_OPENGL | SDL_HWPALETTE);
gl_init(XRES,YRES);
进入gl_init我将glortho设置为glOrtho(0,width,0,height,-1,1),然后将framebuffer“blank”纹理设置为宽度和高度。
当如上所述调用该函数时,一切都很好。但是如果我尝试像
那样的话SDL_SetVideoMode(XRES*2, YRES*2, bpp, SDL_OPENGL | SDL_HWPALETTE);
gl_init(XRES,YRES);
我没有得到我预期的结果(缩放输出),而是发现输出位于X轴最左侧的某处和Y轴中间的某处,就像GL尺寸甚至大于屏幕和休息被裁掉了。有什么我想念的吗?
答案 0 :(得分:2)
尝试简单地将FBO纹理大小设置为窗口大小的1/4(边长的1/2),然后将FBO的颜色缓冲区纹理渲染到整个SDL窗口。
答案 1 :(得分:1)
我知道这是一个老问题,但这是谷歌的最高结果,并没有答案。
您需要致电glViewport()
。假设您希望内部分辨率为1024x768,窗口分辨率为windowWidth和windowHeight。在您写信给FBO之前,请致电glViewport(0, 0, 1024, 768)
。然后,在将FBO写入窗口之前,请致电glViewport(0, 0, windowWidth, windowHeight)
。
答案 2 :(得分:0)
您在游戏循环中使用此代码
int w, h;
SDL_GetWindowSize(Window, &w, &h);
glViewport(0, 0, w, h);