问题标签 [tearing]

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 投票
3 回答
3237 浏览

c# - WPF:如何使用 WriteableBitmap 防止撕裂?

我正在使用 aWriteableBitmap以每秒 20 帧左右的速度显示我自己处理的图像。

这个问题(WPF:更有效的显示快速变化的图像的方法?
和这个问题(如何在没有大量内存分配的情况下显示快速更新的图像?
表明最好的方法是使用WriteableBitmap.

的文档WriteableBitmap表明WritePixels()在 UI 线程上调用将导致渲染线程重绘图像:

MSDN 文档:
UI 线程将内容写入后台缓冲区。渲染线程从前端缓冲区读取内容并将其复制到显存。通过更改的矩形区域跟踪对后台缓冲区的更改。

< 剪辑 />

当更新发送到渲染线程时,渲染线程将更改的矩形从后缓冲区复制到前缓冲区。渲染系统控制这种交换以避免死锁和重绘工件,例如“撕裂”。

我在后台线程上处理我的图像,然后使用Dispatcher.BeginInvoke()to call WritePixels(),以确保WritePixels()在 UI 线程上调用它。

我发现撕裂仍然会发生WriteableBitmap,并且在我正在处理的应用程序中,它看起来很糟糕(它是一个医学成像应用程序)。有什么我可以做的吗?

0 投票
2 回答
1817 浏览

java - Java动画中的跳过和撕裂

下面的代码绘制了一个正方形,里面有两个较小的正方形旋转。每当您单击键盘上的箭头时,整个系统都会朝那个方向移动。但是我在图像撕裂和有时跳过(它很小但仍然存在)方面遇到了一些问题。我想知道是否有人知道我如何在不大量更改代码的情况下解决这些问题。

0 投票
4 回答
9563 浏览

android - SurfaceView 闪烁/撕裂

我试图弄清楚如何解决我的问题。我已阅读http://groups.google.com/group/android-developers/browse_thread/thread/a2aac88a08cb56c2/b7dff4ba388cd664?lnk=gst&q=SurfaceView#b7dff4ba388cd664哪种回答了我的问题,但据我所知,它是一种“运气不好”的答案。所以这是我的问题:

每当表面发生变化(例如方向等)时,我都会以正常方式(锁定/解锁AndPost)使用 SurfaceView 来绘制我的游戏背景的位图,并且我正在渲染一系列移动的圆圈(最多 30 个,半径为大约 25.f)。这些圆圈位置的 x,y 数据来自服务器,并且运行良好。所有圆形对象都存储在一个列表中,并且它们的位置会更新,注意确保此更新是同步的。但是,当我将这些圆圈绘制到屏幕上时(在 canvas.lock() 期间),大多数情况下它们渲染得很好,但偶尔(例如每隔几秒一次),一些圆圈似乎在一帧内短暂撕裂或闪烁。圆圈的数量始终是恒定的,所以这不是问题,并且圆圈列表没有并发修改(正如我所说,它是同步的)。我什至尝试在每个渲染循环上将所有这些圆圈绘制到位图上,并将该位图绘制到主画布上。这似乎对性能的影响更大(~13FPS 而不是直接在主画布上绘制圆圈时的~30FPS)。对不起,如果信息有点模糊,(试图让公司开心:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好。我应该注意,来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要。对不起,如果信息有点模糊,(试图让公司开心:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好。我应该注意,来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要。对不起,如果信息有点模糊,(试图让公司开心:p)但我只是想知道是否有人能给我一个线索?或者我只是运气不好。我应该注意,来自服务器的定位数据是实时数据,渲染反映这些实时位置至关重要。

谢谢你的帮助!克里斯

编辑:

很公平。这是来自渲染线程的 run()。

非常标准的东西(几乎是月球着陆器的副本:p)

很容易理解,如果方向发生变化,只需重新绘制背景位图并启动渲染线程。

最后:

再次感谢各位。克里斯

0 投票
1 回答
2395 浏览

javascript - 撕裂 HTML5 画布?

我正在使用 HTML5canvas元素制作一个小游戏。它工作得很好,除了它有一个滚动背景,在 Ubuntu 的 Firefox 和 Chromium 浏览器中发生了明显的撕裂。我很确定它是缓冲的,因为没有任何我期望的闪烁;只是撕裂。有没有办法解决这个问题或在最后一次屏幕刷新后立即渲染?

0 投票
3 回答
2107 浏览

wpf - 对于 WPF 渲染 UI 撕裂可以做些什么?

令我失望的是,我发现我正在开发的应用程序之一在某些计算机上的渲染效果相当差。UI 静态图形和文本在不做任何动画的情况下遭受严重的撕裂。这使得文本不可读,当然,图形看起来很差。

我已经在不同的计算机上注意到了这个问题,但真正让我想到的是一台带有 Radeon Mobility 显卡的新型东芝笔记本电脑:当这台笔记本电脑使用电池运行时,没有撕裂 - 但当它插上电源运行时,一切都是一团糟。所以这看起来像是电源线噪声的问题,它显然会影响显卡——我猜是硬件加速图形。但是,非 WPF 图形渲染得很好,那么你如何告诉用户:“这不是我的应用程序,而是你的电源!” ?!

你遇到过这种情况吗?有没有办法解决它?

该应用程序是 .NET 4.0,笔记本电脑运行的是 Windows 7。

0 投票
2 回答
835 浏览

opengl - OpenGL中的MipMapping问题

我正在将 3D 对象(obj 或 3ds 或 collada 文件)加载到我的 openGL 应用程序中。3 环境相当大(全轴几百米)。我的问题是较小的 3D 对象(即按 ~< 1-2m 的顺序)似乎没有正确地进行深度测试。根据相机的变焦,我有时可以看到物体的背面(我一直在使用简单的立方体进行测试)或其他面变得可见/不可见/撕裂。请参阅附图以获得更好的解释。我被引导相信问题是由于启用了 mipmapping。我想禁用 mipmapping(有人可以建议一种简单、快速的方法来执行此操作)或将 mipmapped 对象的分辨率设置为更大。还是我完全找错了树?

替代文字 替代文字 替代文字

谢谢

克里斯

0 投票
1 回答
334 浏览

javascript - 为什么这个网站会导致 IE 撕裂?

http://gaxweb.eu/deploy/phenix/en-de/products?target=1340

我有一个奇怪的 IE 错误,例如,如果你用鼠标滚轮滚动那个轮播,就会导致撕裂。图像被撕成两部分,就像在没有 vsync 的情况下玩 3D 游戏一样。这怎么可能?它在其他浏览器中运行良好。更重要的是:我该如何解决这个问题?

最奇怪的是:我之前在另一个网站上使用过这个,并且没有出现撕裂。我已经没有想法了,所以任何帮助表示赞赏。

0 投票
1 回答
1547 浏览

android - Android:在 OnTouchListener 方法中调用 requestLayout() 时出现撕裂效果?一种解决方法?

我尝试在我的项目中添加一些拖放机制。我这样做的方式基本上是每次发生触摸事件时进行两次操作:
首先,根据触摸事件更新我在 onLayout() 内部使用的参数,
其次,调用 requestLayout() 进行刷新。
(我已经使用 OnTouchListener 方法和 View 的 onTouchEvent() 进行了尝试,如下代码所示)

问题是,屏幕上的结果不太好。它给人的感觉是拖动视图存在一些撕裂问题(新绘图在较早结束之前开始)

代码看起来像这样(简化版本):

经过调查,我发现问题在于在 touchListener 方法中调用requestLayout ( )方法。我将该调用移至一个定期触发它的计时器,结果要好得多。

有没有其他人经历过这种情况并且知道更好的方法,而不使用计时器?
我宁愿避免在实际需要时更多地刷新。

谢谢你的帮助!

0 投票
3 回答
3634 浏览

wpf - WPF动画有撕裂和闪烁

我在 WPF 动画中出现撕裂和闪烁的问题。我有一个演示问题的玩具应用程序。该应用程序在屏幕上为正方形设置动画。方块的边缘出现撕裂,整个动画感觉不流畅。

Perforator 显示 >60fps,~10mb 视频内存,0 IRT。

我在两台新的高端计算机上试过这个,两者都显示同样糟糕的动画(> 1gb vram、四核等)。

简单窗口.zip

0 投票
2 回答
1940 浏览

actionscript-3 - 如何避免 flash.display 闪烁

来自更“传统”的C++ 背景,因此更习惯于处理低级 API,而不是像 flash.display API 这样的东西。

我的问题相当初级,但我的搜索没有找到解决方案。

如何避免显示 API 中的屏幕撕裂/闪烁?即使像 60 fps 这样的高帧率,我也会在帧之间遇到一些相当讨厌的闪烁/撕裂。

以下面的简单示例为例,其中 Sprite 的子项只是 Shape 的实例并且永远不会改变。

然而,由于其他人都能够做出看似流畅的快速动画,我对实际上是如何做到的有点困惑,因为它基本上看起来像是一个同步问题。