2011-08-27 139 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)

相關問題