2017-06-21 70 views
0

我的应用程序包含一个短的函数,它将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。

+1

你检查什么,走的是时间,复印电话还是您的处理? – nvoigt

+1

你需要多久调用一次上面的代码? – AlexxanderX

+0

复制过程正在进行。我在每一次可能的时间循环调用这段代码,我需要50-60 FPS,所以这段代码应该每秒执行50-60次,但现在只有20次。也许有另一种方法可以做到这一点? –

回答

0

你不需要做,SFML优化它这种自我所有。你真的需要一个图像不能通过sf :: Texture和sf :: Sprite?

+0

我需要每个像素的颜色和纹理不提供这种可能性 –

+0

它是那么唯一的解决办法,但并因为它产生每一通电话的新形象,'copyToImage它是缓慢的()'。 SFML不处理这我认为...也许你应该尝试另一个库,或直接使用Xlib(只在Unix上)。 –