我有与this question类似的问题,除了我使用SDL渲染器而不是表面。我正在尝试使用ffmpeg渲染视频,但是无论我尝试渲染什么都没关系,即使简单的SDL_Rect也无法正常工作。我只会看到黑屏,除非我移动窗口或调整窗口大小,否则它将立即开始渲染。如果我删除SDL_PollEvent,它将正确呈现。我还尝试使用软件渲染器,其行为方式相同。将渲染置于单独的线程中也无济于事。
我在通过Homebrew安装了SDL2的macOS上。
SDL_Window *win = nullptr;
SDL_Renderer *renderer = nullptr;
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER|SDL_INIT_EVENTS);
win = SDL_CreateWindow("Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_RESIZABLE|SDL_WINDOW_ALLOW_HIGHDPI);
renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
while (true) {
SDL_Event e;
if (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
break;
}
}
// update texture data via ffmpeg
// (code omitted)
// render
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, video_texture, nullptr, nullptr);
SDL_RenderPresent(renderer);
}
答案 0 :(得分:1)
经过一些额外的调试后,即使在挖掘SDL源并在运行时查看SDL_Window和SDL_Renderer结构后,我也找不到任何证据。我目前正在使用Mojave Beta,但之前在High Sierra上也观察到相同的行为。我尝试使用SDL 2.0.8中引入的 Metal 驱动程序创建渲染器,并且现在可以正常使用,与OpenGL相比,我发现SDL运行时结构没有差异,这使我怀疑这是操作系统问题。因此,我建议尽可能在Mac上使用Metal渲染器作为解决方案。毕竟,这是Apple唯一支持的API。
答案 1 :(得分:1)
我遇到了同样的问题,并使用SDL2.framework运行时二进制文件对其进行了修复,该二进制文件可以直接从SDL网站here下载,而不是brew上的软件包。
答案 2 :(得分:1)
这可能是SDL 2.0.9中修复的Mojave错误,如下所示: