问题标签 [double-buffering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3252 浏览

c# - 如何为面板进行双缓冲?

我正在尝试进行双缓冲以消除闪烁,但重新绘制图像闪烁。我需要在新位置的栏中以周期性方式重绘图像,它对我有用。但重绘时闪烁非常明显。请帮忙。

0 投票
0 回答
391 浏览

c# - PropertyGrid 中的色域慢得离谱

我有一个PropertyGrid显示对象,其中一个字段是System.Drawing.Color. 这使得 PG 上的字段自动显示一种颜色,如果你点击编辑它,你会得到一个漂亮的下拉菜单,显示自定义颜色、系统颜色等。问题是,这个下拉菜单大约需要 10-30 秒绘制 - 自定义颜色之一特别糟糕。我已经尝试在 PG 上设置双缓冲来隐藏缓慢,但这只是让它在显示前绘制时暂停,没有提高速度。当其他一切都运行得很好时,有什么理由为什么这个特定的功能会这么慢?

我正在与另一个与之通信的程序一起运行该程序,并且该程序使用 3D 渲染引擎,这无疑是一种处理器密集型的,但大多数时候它并没有那么糟糕。现在唯一慢得让人难以忍受的是颜色下拉菜单。无法想象是什么原因造成的。

0 投票
1 回答
481 浏览

wpf - WinForms - WPF 像绘画

我们非常清楚创建一个 WPF 应用程序是多么容易,用户可以使用鼠标在其中绘制一个矩形。为此,您只需创建一个 Rectangle 控件并设置它的坐标,您不必担心 DoubleBuffering、重新绘制等。好吧,我很高兴你将 WPF 用于用户可以绘制不同形状的应用程序,但客户坚持使用 WinForms 应用程序。所以这里的解决方案是使用 XOR 或 ROP 操作,就像在旧的良好 WinAPI 年代一样,我不太喜欢这样。这并没有给我一个在 XOR 模式下移动文本的好选择。

所以我在想如何在 WinForms 应用程序中实现与 WPF 中相同的流畅绘画体验。将这样的代码放在一起,我想在其中创建一个单独的图层,在其中绘制当前形状,同时保持其余对象不变。我在 iPad 应用程序中使用了相同的技术并且效果很好。

如果课程不能按需要工作。按下鼠标而不是透明面板时,我得到一个黑色面板。加上绘制时的矩形闪烁很多,即使我确实设置了 DoubleBuffering 的东西。

有人可以提供一些关于这种实现的更好的想法,或者也许还有其他一些开源项目,我可以看到其他人在做什么。我需要有与 Paint.NET 相同的经验,可惜不再是开源的了。(我知道我可以使用 Reflector,而且我做到了,但是伙计,那里有很多代码 :))

感谢任何想法。

0 投票
1 回答
697 浏览

allegro - 快板,精灵离开踪迹

我遇到了问题,当我移动它们时,我的精灵会留下痕迹。尝试在每次刷新时绘制 BG,但随后开始闪烁。

这就是我所做的

提前感谢您的帮助

0 投票
1 回答
261 浏览

c# - 使用反射设置控件样式时的效率

背景

我目前正在尝试修复一些行为,如果控件太大而无法分配缓冲区,则双缓冲会导致崩溃。

经过多次讨论和反复试验,我们决定最好的做法是为控件启用双缓冲,如果大小将支持它(比如小于 3000x3000 像素),但如果它超过该大小阈值,那么我们将以编程方式关闭双缓冲。

事实证明这样做相当烦人,因为 GetStyle 和 SetStyle 方法受到保护,并且有许多我们需要禁用双缓冲的第 3 方控件。为了克服这个问题,我创建了一个辅助方法,通过反射禁用双缓冲,这似乎是万恶之源。然后我通过 Layout 事件监控控件的大小,并相应地设置 DoubleBuffer 和 OptimizedDoubleBuffer 标志。

问题

我对反射并不太熟悉,我的主要问题是我应该期望通过 MethodInfo.Invoke 方法获取/设置 ControlStyles 对性能产生什么样的影响。

特别是,我想知道通过首先读取值来防止设置 DoubleBuffer/OptimizedDoubleBuffer ControlStyles 是否有帮助(这也必须通过反射使用 GetStyle() 来完成)。还是每次只调用 SetStyle() 基本相同。我很担心,因为 Layout 事件被调用了很多,我不想仅仅因为这个双缓冲跟踪逻辑而严重降低性能。

任何输入都将不胜感激,特别是关于我正在做的事情的性能影响,而且如果有人有更好的想法,只有在超过一定大小时才禁用控件的双缓冲。

0 投票
3 回答
601 浏览

java - 重新加载 JTree 时闪烁

我正在制作一个JTree经常更新的模拟器。树中的节点都是JProgressBars.

我正在打电话tree.treeModel.insertNodeInto(,,)treeModel.reload()更新树。问题是它会立即更新自己而无需等待repaint()电话。这会导致树闪烁。我尝试设置setDoubleBuffered(true)节点、树和它所在的容器,但没有任何变化。

这是我的代码:(类File extends DefaultMutableTreeNode

0 投票
1 回答
1889 浏览

qt - QGraphicsView 闪烁

我想为我的女朋友的学士论文写一个改变失明的程序。它显示 X 毫秒的图片,显示一个简短的“闪烁图像”(在本例中为灰色),然后显示与第一个图像略有不同的图像。然后又是一个闪烁的图像。

然后一切从头开始。它工作正常,只有图形伪影。我认为画布/ QGraphicsView 刷新它的速度不够快,因此它们在刷新期间是“线条”。

图像显示时间:70 ms,闪烁时间:30 ms。所以它的 100 毫秒 = 10 FPS/秒。我虽然不使用 gpu 也可以做到这一点。但看起来不是。

我可以使用双缓冲或其他东西来避免 GPU 的东西吗?或者我需要使用 QGL 吗?它大约 1 兆字节的图像。

我加载它们一次,然后显示它们我认为。也许我在场景中做错了事。

我会附上我的源代码,也许你有一些想法。

亲切的问候 :)

0 投票
0 回答
355 浏览

c# - 双缓冲清除背景为黑色

我正在使用 BufferedGraphics 在我的表单上绘制,当我开始绘制它时,它会清除背景黑色,仅在我第一次绘制时。我正在使用图片框,并将其图像设置为新位图。

我只是想知道为什么当我调用BufferedGraphics.Graphics.DrawEllipse()它时会清除背景黑色!?


0 投票
3 回答
317 浏览

java - 如何避免此 NullPointerException

我正在开发一款小型街机视频游戏,并且我正在寻找双缓冲以改善动画效果。我有一个类应该绘制空白图像,另一个类应该绘制一条简单的线。但是,我一直在应该绘制线的线上收到 NullPointerException

我想是 Graphics 变量 dbg 为空,但它获得了dbImage.getGraphics();如何gameRender();修复此 NullPointerException?

我也在像这样的另一个类中调用 draw() 方法

我在那个类的构造函数中说过 mc = new MC();

0 投票
2 回答
287 浏览

c++ - QGLWidget 中的渲染和颜色选择:如何应对两者

我想知道是否有比这更好的解决方案:我有一个渲染代码和一个颜色选择代码,我已经共享了可以在这两个代码(VBO 等)之间共享的所有内容,我的代码如下所示:

代码有效,用户看不到闪烁,但坦率地说,在我的代码中使用 goto 的想法在我看来是一个糟糕的解决方案。

您还有其他更好的主意吗?