SFML:只绘制一次并永远渲染
SFML: Draw only once and render forever
我正在尝试用 C++ 编写一个应用程序以在屏幕上绘制静态 2D 内容。 SFML 上的指南说要执行以下操作
while (window.isOpen())
{
sf::Event evnt;
while (window.PollEvene(&evnt))
{
/* Handle events */
}
window.clear();
window.draw(/* 2D stuffs go here */);
window.display();
}
但我不想浪费我的资源一遍又一遍地绘制相同的图形。有没有办法只绘制一次(在 while 循环之前)并永远显示(在 while 循环内)?
P.S。 - 我试图将 window.clear()
和 window.draw()
带出主循环。但是画面闪烁
您可以使用 sf::RenderTexture
来绘制静态对象。然后你创建一个使用该纹理的 sf::Sprite
并使用它一次绘制它们。
sf::RenderTexture bgTex;
bgTex.create(windowWidth, windowHeight);
bgTex.draw(your_object_1);
bgTex.draw(your_object_2);
// the rest of the static objects
bgTex.display() // important !
sf::Sprite background(bgTex.getTexture());
现在你只需要绘制那个精灵而不是重复绘制所有对象。这是一个相当大的时间优化。
window.clear();
window.draw(background); // single call :D
window.draw(...); // draw your dynamic objects
window.display();
编辑:
另外,请注意 sf::RenderTexture
仍然可以根据需要进行修改,使用它的 sprite 将反映这些更改。所以如果你想改变背景,你只需要在 bgTex
上清除绘制显示一次,而不用担心任何其他事情。
我正在尝试用 C++ 编写一个应用程序以在屏幕上绘制静态 2D 内容。 SFML 上的指南说要执行以下操作
while (window.isOpen())
{
sf::Event evnt;
while (window.PollEvene(&evnt))
{
/* Handle events */
}
window.clear();
window.draw(/* 2D stuffs go here */);
window.display();
}
但我不想浪费我的资源一遍又一遍地绘制相同的图形。有没有办法只绘制一次(在 while 循环之前)并永远显示(在 while 循环内)?
P.S。 - 我试图将 window.clear()
和 window.draw()
带出主循环。但是画面闪烁
您可以使用 sf::RenderTexture
来绘制静态对象。然后你创建一个使用该纹理的 sf::Sprite
并使用它一次绘制它们。
sf::RenderTexture bgTex;
bgTex.create(windowWidth, windowHeight);
bgTex.draw(your_object_1);
bgTex.draw(your_object_2);
// the rest of the static objects
bgTex.display() // important !
sf::Sprite background(bgTex.getTexture());
现在你只需要绘制那个精灵而不是重复绘制所有对象。这是一个相当大的时间优化。
window.clear();
window.draw(background); // single call :D
window.draw(...); // draw your dynamic objects
window.display();
编辑:
另外,请注意 sf::RenderTexture
仍然可以根据需要进行修改,使用它的 sprite 将反映这些更改。所以如果你想改变背景,你只需要在 bgTex
上清除绘制显示一次,而不用担心任何其他事情。