这两者如何运作,甚至是它们的预期用途都存在差异。 SDL_CreateSoftwareRenderer 创建软件渲染器绘制到给定曲面。不要求此曲面是窗口表面,您可以绘制到backbuffer,将其转换为纹理并将结果提供给d3d或opengl渲染器。
SDL_CreateSoftwareRenderer
SDL_CreateRenderer 为给定窗口创建渲染器,这意味着它应该绘制到该窗口 - 通过一些检查,如opengl或vulkan需要使用特定标志创建窗口。它会查看可用的渲染后端列表,并尝试找到与您匹配的后端 flags 最好的。最终,如果它决定使用软件渲染器(或者没有其他任何东西支持或者明确要求软件,尽管有多种方法可以这样做 - 参见最后一段)它 电话 或多或少 SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window)) (不完全是这样,但如果你跟踪代码它是一样的)。
SDL_CreateRenderer
flags
SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window))
flags 在 SDL_CreateRenderer 不是绝对的;如果一个 暗示 说使用direct3d或opengl,你的 SDL_RENDERER_SOFTWARE 将被忽略。 SDL_CreateSoftwareRenderer 总是软件。
SDL_RENDERER_SOFTWARE
不!它们的行为应该相同。
SDL2有很多便利函数,相当于简单地调用另一个具有一组特定参数的函数。例如,看着 按名称列出的API ,你会发现的 SDL_LogMessage () 函数与隐式指定的各种其他函数匹配 priority 田野,喜欢 SDL_LogVerbose () 要么 SDL_LogError () 。
SDL_LogMessage ()
priority
SDL_LogVerbose ()
SDL_LogError ()
在某种程度上,除了提供易用性之外,这些组合的便利功能有助于简化代码,同时仍保持清晰。因此,我会建议并尽可能提倡使用它们!