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