我最近决定使用SDL作为我的库之一来编写一个C++游戏.在我的程序编写和学习SDL的过程中,我偶然发现了程序中的一个特殊错误,并决定在SSCCE中复制它以确保我没有疯狂.
问题似乎是当我将SDL_RENDERER_PRESENTVSYNC作为标志传递给SDL_CreateRenderer时,我得到了不一致的渲染.为了比较,我运行程序50次,没有标志50次,并且在每种情况下对我的程序进行了唯一的更改.没有标志,显示器100%的工作时间.打开标志后,它只会在50次中成功渲染13次.
这是程序:
#include <SDL2/SDL.h>
#include <iostream>
int main(int argc, char** argv)
{
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
std::cerr << "Unable to initialize SDL: " << SDL_GetError() << std::endl;
return -1;
}
SDL_Window* win = SDL_CreateWindow("Testing",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED |
SDL_RENDERER_PRESENTVSYNC);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
for(int x = 0; x < 640; x+=32)
{
for(int y = 0; y < 480; y+=32)
{
SDL_Rect rect = …Run Code Online (Sandbox Code Playgroud)