2011-08-27 138 views
2

我在OpenGL中做一个游戏,并使用SDL来管理窗口,设置图标和所有东西。 现在我已经设置渲染场景到framebuffer,我想知道是否可以调整SDL窗口的大小,同时保持我的起始GL设置(我试图模拟一个确切的分辨率,所以窗口大小调整是窗口大小的帧缓冲区重新缩放)OpenGL和SDL,在保持内部分辨率不变的情况下调整窗口大小?

我试着给SDL窗口分辨率的两倍,我把它传递给glortho,但它给出了意想不到的结果©。这是可能的,还是我需要将我的工作分辨率始终适应屏幕分辨率? 我使用此代码来初始化视频

SDL_SetVideoMode(XRES, YRES, bpp, SDL_OPENGL | SDL_HWPALETTE); 
gl_init(XRES,YRES); 

而进入gl_init我设置glortho到glOrtho(0,宽度,0,高度,-1,1),然后将帧缓冲器“空白”纹理的宽度和高度大小也是如此。

当上述函数被调用时,一切都很好。但是,如果我尝试像

SDL_SetVideoMode(XRES*2, YRES*2, bpp, SDL_OPENGL | SDL_HWPALETTE); 
gl_init(XRES,YRES); 

非但没有我预期的效果(倍线输出)的我发现,输出是最左边的X轴和Y轴的中间位置,就像如果某处GL的尺寸比屏幕还要大,其余的被裁剪掉。有什么我失踪?

回答

2

尝试将FBO纹理大小设置为窗口大小的1/4(其边缘长度的1/2),然后将FBO的颜色缓冲区纹理渲染到整个SDL窗口。

+0

我想保持我的GL“工作”分辨率在一个固定的大小......所以,如果窗口大小调整,我会继续在内部使用相同数量的像素,并特别避免非整数值,我由于破坏单像素细节的分部的舍入误差,因此在较旧的项目中出现问题。 – PatrickL83

+0

@帕特里克:那么就做一个你想要的决议的FBO。然后将其绘制到实际的SDL窗口。 –

+0

尼古拉斯,这就是我所说的。 – karx11erx

1

我知道这是一个古老的问题,但它是Google的最高结果,并且没有答案。您需要致电glViewport()。假设你想要你的内部分辨率为1024x768,而你的窗口分辨率是windowWidth和windowHeight。在写信给FBO之前,请致电glViewport(0, 0, 1024, 768)。然后,在将FBO写入窗口之前,请致电glViewport(0, 0, windowWidth, windowHeight)

相关问题