这个简单的SDL2程序在我的系统上打开一个空窗口(即它不渲染任何内容),除非我取消注释SDL_Delay行。
#include <SDL.h>
int main(int argc, char** argv) {
constexpr unsigned width = 256, height = 256;
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
SDL_Log("Failed to initialize SDL: %s", SDL_GetError());
return 1;
}
SDL_Window* window = SDL_CreateWindow("Test",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
width, height,
0);
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderClear(renderer);
// SDL_Delay(20);
SDL_RenderPresent(renderer);
bool quit{};
SDL_Event event;
while (!quit) {
SDL_WaitEvent(&event);
switch (event.type) {
case SDL_QUIT:
quit = true;
break;
}
}
SDL_Quit();
return 0;
}
延迟必须大约是10-20ms,否则不会显示任何内容,但它并不一致 - 如果设置为10ms,则只有一半的时间有效。
在阅读这个答案之后,我添加了事件循环,但在没有它的情况下我得到了相同的行为。在IRC上的#sdl
用户从相同的代码中获得了预期的蓝屏。
这里有什么问题/我做错了什么?
SDL_RENDERER_PRESENTVSYNC
似乎可以解决这个问题。不过,我不太确定SDL_WINDOWEVENT_EXPOSED
是什么意思——它是在窗口聚焦时发送还是每次更新时发送?我似乎找不到相关文档。 - scry