繁体   English   中英

单个或多个SDL_Renderer

[英]Single or multiple SDL_Renderer

我正在慢慢设计“游戏”中涉及的类的结构,并且我想知道SDL_Renderer是否应该是一个公共资源,可以在多个线程之间同步,还是每个不同的对象都应该拥有自己的Renderer(例如,每个敌人都引用自己的Renderer来使其出现在窗户上)。 任何建议将不胜感激,最好有一个解释。

提前致谢。

只是一个渲染器

正如keltar所指出的,API并非像这样使用。 但这不是API的缺陷。 GPU完成的基础工作与C API中的“渲染此并那个”调用非常不同,因此并发不会像这样进行1:1转换。 从某种意义上讲,CPU大多只是告诉GPU该怎么做,并且一次告诉两次事情不会使它的运行速度快两倍。

不够快?

如果您正在为当今相关的任何平台编写2D游戏,那么SDL2在大多数情况下应该足够快。 如果您的游戏运行速度不够快,则可能是其他原因出了问题,而CPU方面的问题正在引起瓶颈。 您确定要使用硬件加速渲染吗? 也许某些设置出错了,并且使用软件渲染器作为后备-调用SDL_GetCurrentVideoDriver()并检查结果以确保不是这种情况。 SDL_Surface的任何用法都可能导致性能瓶颈。 另外,一直将大量数据加载到GPU会导致其速度变慢,因此请确保加载的Sprite的数量不超过已加载的数量。 例如,当再次加载相同的怪物时,可以重新使用已经加载的纹理,而不必再次加载它们。 另一个示例是SDL_TTF,该库很慢。 为怪物绘制一些HP数字要比首先渲染怪物慢得多-有些替代方法是预先绘制字形并将其存储为纹理。

更快地渲染纹理

话虽如此,渲染大量小的Sprite确实会有一些开销,如果您需要渲染大量Sprite,即使您做对了所有事情,也可能不够快。 在某些情况下,诸如SDL_gpu之类的库可以利用诸如纹理批处理之类的技术来提高渲染速度。 您也可以直接使用OpenGL,但这还是SDL_gpu之类的库所要做的。 最后但并非最不重要的一点是,SDL2现在支持Vulkan,虽然我还没有机会尝试过Vulkan,但据说在CPU端进行API调用时,它的效率要高得多。 因此,如果这是您的瓶颈,并且有可能使用Vulkan,那么值得一试。

抱歉,如果其中大部分都不适用于您的问题。 也许您实际上并没有遇到瓶颈/性能问题,但只是对如何最佳使用API​​感到好奇。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM