我正在尝试使用我的自定义版本的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时,是否有方法[[only使用SDL进行软件渲染,还是我需要启用某些硬件加速渲染选项并可用?
无法这样做。但是,如果要这样做,则实现CreateWindowFramebuffer
,UpdateWindowFramebuffer
和DestroyWindowFramebuffer
并设置适当的函数指针应使您能够创建纯基于软件的渲染器。可悲的是,我对KMS和DRM的了解不足,无法自己实现。