在主循环之外绘制背景时闪烁
Flickering when drawing the background outside of the main loop
我的CODE:
#include <SFMLGraphics.hpp>
sf::RenderWindow renderWindow(sf::VideoMode(300, 300), "The Problem");
int main()
{
sf::Texture tX;
tX.loadFromFile("Recursos/Fondo.png");
sf::Sprite tXt(tX);
renderWindow.draw(tXt);
while (true) // main loop
{
renderWindow.display();
}
}
tX
是一个大的精灵(想想:背景),所以我想避免每帧重画它。
当我尝试这个,我得到闪烁,我不知道它是从哪里来的
您的代码,简化,pseudo:
Initialize();
Draw();
Loop {
Display();
}
你所做的是将场景绘制到缓冲区(顺便说一下,不首先清除它),然后在循环中显示它(不重新绘制任何东西)。
我认为你有闪烁的原因是由于双重缓冲(v-sync)。最后发生的情况是,你画到一个缓冲区,而把另一个空着。当您显示活动缓冲区时,它们会被翻转(因此下次显示时,它是一个空缓冲区)。你真的应该在循环里面画。
或者,您可以禁用多个缓冲,或者尝试绘制,显示,再次绘制,然后循环(这样您就可以同时绘制两个缓冲区,假设只有两个缓冲区)。
两种解决方案都不美观。
如果绘制背景确实需要优化,恐怕SFML不会给你这种粒度。你可能想看看OpemGL Stencil巫术
相关文章:
- 如何在全屏模式下(在OpenGL中)使背景透明
- 使用窗口中的QSlider更改背景音量
- 处理闪烁窗口事件
- 如何避免LED在循环状态变化中闪烁?
- SDL2 透明背景
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 在 Visual C++ 中以编程方式更改按钮的背景图像
- 多重采样背景不显示
- 直接2D用WM_ERASEBKGND擦除背景?
- 在特定时间内更改 QLabel 的背景颜色
- 如何设置与其背景图像大小相对应的窗口大小?
- 更改包含 QButton 的 Qlayout 的背景颜色
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- 删除K的背景掩码-意味着Python或C++中的集群/
- SystemParametersInfo将背景设置为纯色,而不是实际设置图片
- 背景任务UWP C++只触发一次
- 为什么在使用VK_PRESENT_MODE_FIFO_KHR呈现模式调整交换链图像大小时出现白色闪烁
- 如何在不闪烁的情况下运行ESP32的单元测试
- wxWidgets面板的背景图像闪烁
- 在主循环之外绘制背景时闪烁