我的应用程序包含一个短的函数,它将SFML GPU缓冲区(sf::RenderTexture
转换为sf::Image
)复制到二维颜色数组中(存储在RAM中并由CPU处理)。这里是代码:SFML - 优化从GPU复制到RAM
const sf::Image image = renderTexture.getTexture().copyToImage();
for (Point_t y = 0; y < totalHeight; ++y)
{
for (Point_t x = 0; x < totalWidth; ++x)
{
const sf::Color& c = image.getPixel(x, totalHeight - y - 1);
// here processing this c variable
}
}
的问题是:与屏幕256x64px我越来越喜欢20 FPS - 这是太低了,我需要一个像50 FPS在我的应用程序。我怎样才能提高这个过程的性能?
也许我应该使用其他库,将加快步伐?
编辑:
有人给我应该用真实的影像库,而不是SFML建议。但重点在于SFML是用于实时旋转对象等的完美库,所以我会坚持使用SFML,只需要优化或其他方式将缓冲区从GPU复制到CPU。
你检查什么,走的是时间,复印电话还是您的处理? – nvoigt
你需要多久调用一次上面的代码? – AlexxanderX
复制过程正在进行。我在每一次可能的时间循环调用这段代码,我需要50-60 FPS,所以这段代码应该每秒执行50-60次,但现在只有20次。也许有另一种方法可以做到这一点? –