我正在慢慢地设计与我的“游戏”相关的类的结构,我想知道SDL_Renderer是否应该是一个公共资源,跨多个线程同步,或者每个不同的对象应该有自己的Renderer (例如。每个敌人指的是自己的渲染器,使其出现在窗口上)。任何建议都将不胜感激,最好有一个解释。
提前谢谢。
发布于 2018-09-25 07:22:13
只有一个渲染器
正如keltar所指出的,API不适合这样使用。但这不是API的缺陷。GPU所做的底层工作与在C中完成的“呈现这个和那个”调用非常不同,因此并发性不会像那样转换1:1。从某种意义上说,CPU只是告诉GPU该做什么,一次告诉它两次并不能使它的工作速度提高两倍。
不够快吗?
如果您正在为任何今天相关的平台编写2D游戏,那么在大多数情况下,SDL2应该足够快。如果您的游戏运行不够快,可能是其他什么地方出错了,而CPU方面的一些问题正在造成瓶颈。你确定你在使用硬件加速渲染吗?可能有些设置出错了,它正在使用软件呈现器作为后备调用SDL_GetCurrentVideoDriver()并检查结果,以确保情况并非如此。其他可能会影响性能的因素是SDL_Surface的任何用法。同时,将大量数据加载到GPU可能会导致其速度减慢,因此请确保不经常加载sprites而不是嵌套。例如,当同一个怪物再次加载时,您可以重用您已经加载的纹理,而不是再次加载它们。另一个例子是SDL_TTF,这个库很慢。为怪物渲染一些HP数字要比渲染怪物要慢得多--有些替代方案是预先绘制图形,并将其存储为纹理。
渲染纹理更快的
尽管如此,渲染大量的小精灵确实有一定的开销,如果您需要渲染极多的精灵,即使您做的一切都正确,它也可能不够快。有些库(如SDL_gpu )可以利用纹理批处理等技术在某些情况下提高呈现速度。您也可以直接使用OpenGL,但这正是像SDL_gpu这样的库所做的。最后但并非最不重要的一点是,SDL2现在支持Vulkan,虽然我还没有机会尝试这一点,但是当涉及到CPU端的API调用时,它应该会更高效。因此,如果这是你的瓶颈,使用Vulkan是可能的,它可能值得一试。
如果这些都不适用于你的问题,我很抱歉。也许您实际上并不存在瓶颈/性能问题,但您只是好奇如何优化使用API。
https://stackoverflow.com/questions/45482844
复制相似问题