2017-06-21 59 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上)。 –