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
始终是软件。
使用 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
始终是软件。