2013-11-26 102 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中做,所以我可以使用窗口的局部变量。

您的绘图函数不应创建并加载纹理和精灵。它可能会每秒被调用很多次,您应该创建并加载所有资产一次,然后以计算机允许的速度绘制加载的资产。