使用SDL_CreateSoftwareRenderer()
标志使用SDL_CreateRenderer()
创建的渲染器的行为与使用SDL_RENDERER_SOFTWARE
创建的渲染器的行为有区别吗?
答案 0 :(得分:2)
这两者的工作方式甚至预期用途都存在差异。 SDL_CreateSoftwareRenderer
创建绘制到给定表面的软件渲染器。不需要将此表面作为窗口表面,您可以绘制到后缓冲区,将其转换为纹理,然后将结果输入d3d或opengl渲染器。
SDL_CreateRenderer
为给定窗口创建渲染器,这意味着它应该绘制到该窗口-进行一些检查,例如opengl或vulkan要求使用特定标志创建窗口。它遍历了可用的渲染后端列表,并尝试找到最适合您的flags
的后端。最终,如果它决定使用软件渲染器(不支持其他任何功能,或者明确要求使用软件,尽管这样做的方法不只一种-请参见最后一段),它或多或少地calls }}(不是完全一样,但是如果您要跟踪代码,它是相同的。)
SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window))
中的 flags
不是绝对的;如果hint说要使用Direct3d或opengl,则您的SDL_CreateRenderer
将被忽略。 SDL_RENDERER_SOFTWARE
始终是软件。
答案 1 :(得分:1)
不!它们的行为应该相同。
SDL2有相当数量的便捷功能,这些功能等同于简单地调用带有特定参数集的另一个功能。例如,查看API listing by name,您会发现SDL_LogMessage ()
函数与隐式指定priority
字段的各种其他函数相匹配,例如SDL_LogVerbose ()
或SDL_LogError ()
。
在某种程度上,除了提供易用性之外,这些组合的便捷功能还有助于简化代码,同时仍保持清晰度。因此,我会建议并提倡在可能的情况下使用它们!