关于sdl 2:仅使用软件渲染进行编译时,SDL_CreateRenderer失败

SDL_CreateRenderer fails when compiled with software rendering only

我正在尝试使用我的自定义版本的SDL2编译项目(暴震)。我的SDL2构建会禁用所有加速的视频(OpenGL,Op??enGLES,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中)它仍然想使用其他渲染驱动程序创建渲染器(它明确避免了软件一)。

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

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

但这也失败了,因为SDL_GetWindowSurface失败并显示No hardware accelerated renderers available并返回NULL。

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


我想我自己解决了这个问题。

不可能这样做。但是,如果要执行此操作,则实现CreateWindowFramebufferUpdateWindowFramebufferDestroyWindowFramebuffer并设置适当的函数指针应使您能够创建纯基于软件的渲染器。可悲的是,我对KMS和DRM的了解不足,无法自己实现。