SDL_CreateRenderer 仅使用软件渲染编译时失败

SDL_CreateRenderer fails when compiled with software rendering only

我正在尝试使用我的自定义构建的 SDL2 编译一个项目 (tyr-quake)。我的 SDL2 构建禁用了所有加速视频(OpenGL、OpenGLES、Vulkan、Metal 等)、X11 和 Wayland,但启用了 KMSDRM。

一切顺利,我想用这个SDL2版本编译的项目也编译好了。除了当 运行、SDL_CreateRenderer returns Couldn't find matching render driver 时(即使我修改源代码以传递它 SDL_RENDERER_SOFTWARE 并将 SDL_HINT_FRAMEBUFFER_ACCELERATION 提示设置为 "0").

我稍微查看了一下 SDL 源代码,确实调用了软件 SW_CreateRenderer,但后来(在 SDL_CreateWindowTexture 中)它仍然想使用不同的渲染器创建渲染器驱动程序(它明确地避免了软件驱动程序)。

我还尝试修补源代码以执行以下操作:

SDL_Surface *surface = SDL_GetWindowSurface(sdl_window);
renderer = SDL_CreateSoftwareRenderer(surface);

但这也失败了,因为 SDL_GetWindowSurfaceNo hardware accelerated renderers available 和 returns NULL 而失败。

我的问题是:在使用 KMSDRM 时,有没有办法使用 SDL 进行软件渲染,或者我是否需要启用和使用一些硬件加速渲染选项。

我想这是我自己想出来的。

这是不可能的。但是,如果有人想这样做,实现 CreateWindowFramebufferUpdateWindowFramebufferDestroyWindowFramebuffer 并设置适当的函数指针应该可以让您创建一个纯软件渲染器。遗憾的是,我对 KMS 和 DRM 的了解还不够,无法自己实现。