首页 > 解决方案 > 仅使用软件渲染进行编译时,SDL_CreateRenderer 失败

问题描述

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

一切都很好,我想用这个 SDL2 编译的项目也编译了。除了运行时,SDL_CreateRenderer返回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_GetWindowSurface失败No hardware accelerated renderers available并返回 NULL。

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

标签: renderingsdl-2

解决方案


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

这是不可能的。但是,如果想要这样做,实现CreateWindowFramebufferUpdateWindowFramebufferDestroyWindowFramebuffer设置适当的函数指针应该可以让您创建一个纯粹基于软件的渲染器。可悲的是,我对 KMS 和 DRM 的了解不足以自己实现这一点。


推荐阅读