我初始化SDL与此代码:SDL_RenderPresent()不等待vsync - 如何等待?
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* win = SDL_CreateWindow(
"SDL Window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
WIDTH,
HEIGHT,
SDL_WINDOW_SHOWN
);
SDL_Renderer* ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE);
SDL_GL_SetSwapInterval(1); // probably has no effect since it's not using GL
然后我与非SDL软件渲染器进行渲染,并将其与该代码呈现给窗口:
SDL_UpdateTexture(screenBuffer, NULL, screenData, WIDTH*4);
SDL_RenderClear(ren);
SDL_RenderCopy(ren, screenBuffer, NULL, NULL);
SDL_RenderPresent(ren);
帧率是完全未封端的,和我不知道为什么。
将| SDL_RENDERER_PRESENTVSYNC
添加到SDL_CreateRenderer标志只是使窗口变成空白的白色屏幕。虽然我需要使用SDL_RENDERER_SOFTWARE
标志(即使我不使用SDL的软件渲染器来呈现屏幕),否则SDL_RenderPresent()
会停顿很长时间,从而导致每秒约1帧。
我该如何让SDL_RenderPresent()
等待vsync,或等待(准确地)自己?
SDL的UpdateWindowSurface似乎没有vsync支持(并且我认为它可能在某些平台上非常困难,而在其他平台上可能不太可能),所以SDL软件渲染器也没有。虽然Vsync在3d API上非常强大,但它可能会更简单地解决您的放缓问题。 – keltar
我不想浪费二进制空间,并依靠GPU API降低兼容性。 – Accumulator
@genpfault是的,谢谢你的注意。我会重新发表评论。 – HolyBlackCat