我刚刚从SDL 1.2转移到SDL 2.0,我最初享受类似的性能(65+ FPS),然后在渲染器选项中添加了Vsync并且享受了平滑的60 FPS而没有撕裂,然后我添加了标志SDL_WINDOW_RESIZABLE和帧率下降很多(没有Vsync 40 FPS,30 FPS),甚至Vsync出现撕裂,侧滚也变得非常紧张。我是否做任何事来处理调整大小事件都不会改变任何事情。我做错了什么?
我在VS2010上使用SDL 2.0.3进行64位编译。这是相关的代码:
// This creates the window and everything associated with it
void graphics_init(srgb_t **sfb)
{
static int init=1;
if (init)
{
init = 0;
SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_AUDIO);
}
window = SDL_CreateWindow ( VERSION, // window title
SDL_WINDOWPOS_UNDEFINED, // initial x position
SDL_WINDOWPOS_UNDEFINED, // initial y position
0, // width, in pixels
0, // height, in pixels
SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED); // flags
SDL_GetWindowSize(window, &kW, &kH);
if (window == NULL)
{
fprintf(stderr, "Could not create window: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC);
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, kW, kH);
*sfb = calloc (kW*kH, sizeof(srgb_t));
}
int main()
{
graphics_init(&sfb);
while (exit_flag==0)
{
... // main loop stuff that fills my buffer sfb
// Blits sfb buffer to screen
SDL_UpdateTexture(texture, NULL, sfb, kW * sizeof(srgb_t));
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}