SDL_CreateRenderer()与SDL_CreateSoftwareRenderer()

时间:2019-01-23 23:06:06

标签: c graphics sdl sdl-2 renderer

使用SDL_CreateSoftwareRenderer()标志使用SDL_CreateRenderer()创建的渲染器的行为与使用SDL_RENDERER_SOFTWARE创建的渲染器的行为有区别吗?

2 个答案:

答案 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 ()

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