2013-11-26 106 views
0

我正在創建一個基準測試應用程序來測試渲染圖像的速度。我創建了兩個函數,一個返回RenderWindow,另一個使用RenderWindow在那裏應用圖像。當我把第二個函數,它給我的錯誤:No matching constructor for initialisation of 'sf::RenderWindow'SFML - 窗口錯誤

這裏是我的功能:

sf::RenderWindow newWindow(int w, int h) 
{ 
    sf::RenderWindow window; 
    window.create(sf::VideoMode(w, h), "SFML Benchmark"); 
    return window; 
} 

void draw(int type, sf::RenderWindow dest) // 0 color small, 1 color big, 2 no color small, 3 no color big 
{ 
    sf::Texture img; 
    switch(type) 
    { 
     case 0: if(!img.loadFromFile("colorfull small.jpg")) cout << "Unable to laod image"; 
     case 1: if(!img.loadFromFile("colorfull big.jpg")) cout << "Unable to laod image"; 
     case 2: if(!img.loadFromFile("colorless small.jpg")) cout << "Unable to laod image"; 
     case 3: if(!img.loadFromFile("colorless big.jpg")) cout << "Unable to laod image"; 
    } 
    sf::Sprite sprite; 
    sprite.setTexture(img); 
    dest.draw(sprite); 
} 

我調用該函數在主:

draw(1, newWindow(600, 600)); 

謝謝。

回答

1

我不認爲sf :: window是可複製的。

你的函數採取一個窗口應該是這樣的:

void draw(int type, sf::RenderWindow& dest) 

注意符號,表示至極的參考,而不是副本。

你的函數創建一個窗口將需要返回一個指向窗口的指針。當我寫它時,我決定我沒有它的功能,但是在main中做,所以我可以使用窗口的局部變量。

您的繪圖函數不應創建並加載紋理和精靈。它可能會每秒被調用很多次,您應該創建並加載所有資產一次,然後以計算機允許的速度繪製加載的資產。