问题标签 [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 投票
2 回答
116 浏览

java - 为什么时钟会闪烁?

下面的代码是一个时钟的动画。

必须在程序中进行哪些更改才能使其不闪烁?

为什么必须在 addNotify() 函数中进行字段初始化才能显示手?

您可以将所有内容复制到一个 .java 文件中,它应该可以工作(闪烁;))。

0 投票
0 回答
440 浏览

matlab - Matlab:通过复制后备存储/后台缓冲区来快速捕获图像?

我正在使用版本 R2007a。

首先介绍一点背景知识:我正在创建一个工具,该工具可以从实时获取的数据中累积散点图。当点数足够大时,图形刷新跟不上传入的数据,所以我使用'painters'with 'EraseMode'set to'none'并简单地执行 aset(obj,'xdata',...,'ydata',...)来更新绘图点位置。这非常有效。

顺便说一句,我发现了一个不错的技巧:通过打开双缓冲,MATLAB 总是在内存中保存图像的副本,因此即使窗口被隐藏或最小化,点也会在图像中累积!

现在我想捕捉每个图像来制作电影。我见过各种使用getframe(),addframe()和未记录的hardcopy(). 这些都重新绘制了图形并且旧点丢失了,但这实际上是我可以在后期处理中解决的问题。我的问题是这些功能对于数据采集速度来说太慢了。使用 tic/toc,我发现

我看到set tohardcopy()做了一些不同的事情,但即使我能找到如何利用它的输出,它仍然太慢了。'renderer''painters'

但是在双缓冲打开的情况下,图像已经位于后备存储/后缓冲区中。制作一个副本会非常快。那里的任何黑客都可以弄清楚如何获取指向后备存储的指针并复制它吗?

谢谢

0 投票
1 回答
928 浏览

java - 双缓冲和油漆

我正在使用似乎有冲突的双缓冲和摆动事件。我正在使用 JSlider 并尝试加倍缓冲。它实际上进行了双缓冲绘制,但是双缓冲再次被绘制,我失去了我的形象。我正在使用 JSlider 进行双缓冲绘制,并且事件系统似乎重新绘制了框架(带有 2 个组件,一个图像和滑块)。我该如何以正确的方式做到这一点?我尝试设置一个重绘变量来表示不在组件中重绘,但这不起作用。是否有某种事件开关来停止重新绘制某些组件?我不应该使用双缓冲吗?这是一个代码片段。

. . .

0 投票
2 回答
65 浏览

c# - 重绘windows应用程序

我有一个我正在编写的 C# 软件,每次它执行一项艰巨的任务时,我都会切换窗口以让它完成窗口搞砸。不知道该怎么说,但所有的按钮都消失了或变成了“洞”。我知道应用程序正在运行,因为进度条会在一段时间后再次出现。我该如何解决?我一直在寻找,我确信它与双缓冲有关。

切断窗户

0 投票
1 回答
138 浏览

java - java双缓冲性能

在java中使用什么更好:手动实现双缓冲,还是使用已经双缓冲的swing组件?或者这没有任何区别?

谢谢你。

0 投票
2 回答
2739 浏览

java - Jpanel 中的双缓冲图像示例

我会知道我的实现对于双缓冲图像是否正确..因为我注意到我在屏幕中移动的图像的边框会颤抖......这很正常吗?

0 投票
1 回答
1131 浏览

c++ - C++ win32 api双缓冲示例请帮忙

所以,我知道人们在不同的帖子上谈论双缓冲,但每当我尝试它时,我都会得到一个黑屏!这是因为我看到的示例(我需要示例)不像我那样编程 - 就像使用不同的库一样。我现在只用。无论如何,这是严重闪烁的初始程序片段:

我看了看并尝试了这个:

这只是显示一个黑匣子。我不知道我应该怎么做,所以你能把原来的代码块改成双缓冲吗?谢谢!

我使用 dev-c++ ide。

0 投票
1 回答
1389 浏览

javascript - 简单的html5+javascript游戏闪退

我刚开始学习javascript,我已经遇到了一些问题。我有一个非常简单的“游戏”,您可以使用箭头键移动红色框并且有黑色背景。我看到一些关于同一个问题的主题,有些人说做一个缓冲区,另一半说不做缓冲,因为你的浏览器会帮你做。但无论如何,我只是认为我的代码有问题,因为它在闪烁,但它太简单了,我认为它不应该。

你可以在这里试试:w3school 只需复制我的代码并将其放入标签中,并将“MyCanvas”名称更改为“canvas”

0 投票
1 回答
691 浏览

c - glXSwapbuffers 似乎没有交换(?)

我的情况是这样的。我编写了一个代码来检查一组窗口的内容是否符合交换条件(也就是说,在调整大小事件后,所有重绘都在所述窗口及其所有子窗口上成功执行)。如果满足条件,我对所述窗口及其所有子窗口执行 glXSwapBuffers 调用。我的目标是允许调整大小时无闪烁的系统。子窗口以平铺方式排列,并且不重叠。在他们之间,这个功能似乎起作用了。然而,我的问题出现在父母身上。在调整大小的某个时候,其内容会闪烁。到目前为止,这就是我已经实现的。

  1. 所有事件(例如 ConfigureNotify 或 Expose)都已根据需要进行压缩。
  2. 窗口 background_pixmap 设置为无。
  3. 了解每当生成 Expose 事件时,窗口背景内容都会丢失。每次重绘完成后,我总是将完成的重绘副本保存在我自己分配的缓冲区中。(既不是像素图也不是 fbo,但现在就足够了。)

我对 glXSwapBuffers() 的每次调用的逻辑是这样的。

哪个...应该服务,内容总是在调用交换之前恢复。可悲的是,它在实现中并没有出现。从上面的代码中,我通过输出缓冲区中应该包含的内容来进行一些调整以进行调试,如下所示。

函数 OutputWindowBuffer() 使用标准 glReadPixel() 读取缓冲区内容,然后将其输出为图像。要读取哪个缓冲区由传递给函数的参数确定。我从输出图片中发现的是这个。

  1. RedrawWindowFromBuffer() 后后台缓冲区的图片输出是预期的。
  2. 交换后的后台缓冲区的图片输出按预期填充了清除的颜色。因此,当 glReadPixel 被调用用于 Front 缓冲区时,它的执行并不是滞后的,因为一些发现的有关英特尔系统的错误似乎曾经暗示过一次。
  3. 交换后前缓冲区的图片输出显示大部分是黑色伪影(每次绘图之前我的窗口颜色总是被清除为其他颜色)。

关于为什么交换缓冲区,似乎没有交换缓冲区,是否还有其他合理的解释?我应该研究其他路线来实现无闪烁的重新调整大小吗?我读过一篇建议使用 WinGravity 的文章,但恐怕我还不太理解。

0 投票
1 回答
340 浏览

location - 双缓冲时JLabel在Graphics中的位置

我正在使用线程来绘制一些动画,所以我需要为每一帧重新绘制标签。要做到这一点而不闪烁,我正在使用我的后缓冲图形对象更新标签(使用 lbl.update(bufferedGraphics); 方法),但是当我这样做时,标签会在 Graphics 对象的左上角重新绘制,而不是在哪里setLocation 已指定。

如何在图形中指定标签的位置,而不是在拥有标签的面板中?

这是一个SSCCE: