SFML - 优化从GPU到RAM的复制

时间:2017-06-21 09:46:58

标签: c++ gpu sfml

我的应用程序包含一个简短函数,它将SFML GPU缓冲区(sf::RenderTexture转换为sf::Image)复制为二维颜色数组(存储在RAM中并由CPU处理)。这是代码:

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。

2 个答案:

答案 0 :(得分:0)

你不需要这样做,SFML会自我优化。你真的需要一个图像,你只需要通过sf :: Texture和sf :: Sprite?

答案 1 :(得分:0)

对于感兴趣的人,我找到了一个解决方案:

此库提供从GPU到CPU加速的复制:https://github.com/adafruit/rpi-fb-matrix

https://github.com/adafruit/rpi-fb-matrix/blob/master/rpi-fb-matrix.cpp(第70行)