SDL_CreateRenderer() 对比 SDL_CreateSoftwareRenderer()

SDL_CreateRenderer() vs SDL_CreateSoftwareRenderer()

使用 SDL_CreateSoftwareRenderer() 创建的渲染器与使用 SDL_RENDERER_SOFTWARE 标志使用 SDL_CreateRenderer() 创建的渲染器的行为是否有任何不同?

不!他们应该表现得一样。

SDL2 有很多方便的函数,相当于用一组特定的参数简单地调用另一个函数。例如,查看 API listing by name,您会发现 SDL_LogMessage () 函数与隐式指定 priority 字段的各种其他函数相匹配,例如 SDL_LogVerbose ()SDL_LogError ().

在某种程度上,除了提供易用性之外,这些组合的便利功能还有助于在保持清晰度的同时简化代码。因此,我建议并提倡尽可能使用它们!

这两者的运作方式,甚至它们的预期用途都有所不同。 SDL_CreateSoftwareRenderer 为给定表面创建软件渲染器绘图。这个表面没有要求是 window 表面,你可以绘制到后台缓冲区,将其转换为纹理并将结果提供给 d3d 或 opengl 渲染器。

SDL_CreateRenderer 为给定的 window 创建渲染器,这意味着它应该绘制到那个 window - 通过一些检查,比如 opengl 或 vulkan 需要 window使用特定标志创建。它遍历可用渲染后端列表,并尝试找到最匹配您的 flags 的后端。最终,如果它决定使用软件渲染器(要么不支持任何其他软件,要么明确要求软件,尽管有不止一种方法 - 请参阅最后一段)它 calls 或多或少 SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window))(不完全是这样,但如果您跟踪代码,它是相同的)。

flags in SDL_CreateRenderer 不是绝对的;如果 hint 说要使用 direct3d 或 opengl,您的 SDL_RENDERER_SOFTWARE 将被忽略。 SDL_CreateSoftwareRenderer 始终是软件。