rendering - 仅使用软件渲染进行编译时,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 进行软件渲染,或者我是否需要启用一些硬件加速渲染选项并可用。
解决方案
我想这是我自己想出来的。
这是不可能的。但是,如果想要这样做,实现CreateWindowFramebuffer
和UpdateWindowFramebuffer
并DestroyWindowFramebuffer
设置适当的函数指针应该可以让您创建一个纯粹基于软件的渲染器。可悲的是,我对 KMS 和 DRM 的了解不足以自己实现这一点。
推荐阅读
- java - 在 Java 中为 Request 对象定义集合字段时,更好的做法是什么?
- angular - RXJS 6.5.1 和 Angular 8 中的映射函数与 Firestore 集合
- rust - 从 HashMap 中获取拥有值的 Vec
- php - 通过 PHP 上传 CSV 文件并插入 MySQL 数据库
- amazon-cognito - AWS-Cognito 或 AWS SSO,我应该选择哪一个
- reactjs - 中间组件生命周期 API 调用
- r - 在 R 中使用 str_extract 在带有正则表达式的子字符串之前提取一个数字
- r - 如何绘制一个x轴和y轴都是R中的函数的图形?
- c++ - NodeJS Wrapped C++ 代码的函数失败是如何传播的?
- android-studio - 如何从 webview link-appweb 与 android-studio 在社交网络中共享?