SDL_SetWindowSize给出了一个无法写入的新窗口

时间:2017-07-06 03:50:03

标签: sdl-2

在下面的程序中,SDL_SetWindowSize 使窗口本身更大......但是不会SDL_RenderClear(或其他功能)显示该新区域中的任何内容。

该平台是在VMWare上运行的CentOS。我在Visual Studio版本FWIW中没有遇到此问题。

在此屏幕截图中,带有灰色顶部栏的窗口是由resize创建的新窗口;它被清除为红色,但仅限于旧尺寸划分的区域。 enter image description here

我知道我可以从一开始就创建合适大小的窗口,但我确实需要稍后调整大小的能力。

#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;
}

1 个答案:

答案 0 :(得分:0)

渲染表面在Windows resize上无效,引自SDL wiki on SDL_GetWindowSurface

  

如果调整窗口大小,此曲面将无效。调整窗口大小后,必须再次调用此函数以返回有效曲面。

因此,通常在调整窗口大小后必须再次获得窗口表面。