我正在使用SDL创建一个粒子模拟器,并且我正在从动态数组/向量渲染rects。当模拟器达到500个粒子时,我开始弹出向量中的粒子。在500个粒子处,使用的内存为16 MB。然而,SDL在尝试渲染所有500个粒子时的时间最差,即使它们的长度和宽度为1个像素。帧速率从200个粒子的60 fps到500的10 fps。
如何减轻RenderCopy的税?这是一个片段:
for (int i = 0; i < DynamicParticles.size(); i++)
{
//make particles fall 1 pixel each frame
DynamicParticles.at(i).Advance();
SDL_RenderCopy(Main_Renderer,
DynamicParticles.at(i).particle_texture,
NULL, &DynamicParticles.at(i).location);
}
此处DynamicParticles
是一个持有class Particles
的向量。当存在500个项目时,此类占用大约15 MB,而RenderCopy
仅接受纹理成员和dstrect成员。