在下面的程序中,SDL_SetWindowSize
会使窗口本身更大......但是不会让SDL_RenderClear
(或其他功能)显示该新区域中的任何内容。
该平台是在VMWare上运行的CentOS。我在Visual Studio版本FWIW中没有遇到此问题。
在此屏幕截图中,带有灰色顶部栏的窗口是由resize创建的新窗口;它被清除为红色,但仅限于旧尺寸划分的区域。
我知道我可以从一开始就创建合适大小的窗口,但我确实需要稍后调整大小的能力。
#include <SDL.h>
#include <SDL_ttf.h>
#include <SDL_image.h>
SDL_Window* sdlWindow;
SDL_Renderer* sdlRenderer;
class myException {};
void initialize ()
{
if (SDL_Init (SDL_INIT_EVERYTHING) < 0)
throw myException ();
sdlWindow = SDL_CreateWindow ("",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480,
0);
if (! sdlWindow) throw myException ();
int rendererIndex = -1, rendererFlags = 0;
sdlRenderer = SDL_CreateRenderer (sdlWindow, rendererIndex, rendererFlags);
if (! sdlRenderer) throw myException ();
SDL_ClearError ();
}
int main (int argc, char** argv)
{
initialize ();
SDL_SetWindowSize (sdlWindow, 800, 400);
SDL_SetRenderDrawColor (sdlRenderer, 255, 0, 0, 255); //now we'll clear to red
SDL_RenderClear (sdlRenderer);
SDL_RenderPresent (sdlRenderer); //update screen now
SDL_Delay (2000); //Delay, then quit
SDL_Quit ();
return 0;
}
答案 0 :(得分:0)
渲染表面在Windows resize上无效,引自SDL wiki on SDL_GetWindowSurface:
如果调整窗口大小,此曲面将无效。调整窗口大小后,必须再次调用此函数以返回有效曲面。
因此,通常在调整窗口大小后必须再次获得窗口表面。