我正在创建一个基准测试应用来测试渲染图像的速度。我创建了两个函数,一个用于返回RenderWindow,另一个用于使用RenderWindow在那里应用图像。当我调用第二个函数时,它会给我错误:No matching constructor for initialisation of 'sf::RenderWindow'
以下是我的功能:
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);
}
我在main中调用函数:
draw(1, newWindow(600, 600));
谢谢。
答案 0 :(得分:1)
我不认为sf :: window是可复制的。
你的功能窗口应如下所示:
void draw(int type, sf::RenderWindow& dest)
注意&符号,表示引用而不是副本。
创建窗口的函数需要返回指向窗口的指针。当我写它时,我决定我没有它的功能,而是在main中执行,所以我可以使用局部变量作为窗口。
您的绘图功能不应创建和加载纹理和精灵。它可能每秒被调用很多次,您应该创建并加载所有资产一次,然后以计算机允许的速度绘制加载的资源。