问题标签 [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.
wpf - wpf 等待 vsync(图片)
我使用 UDP API 将相机源更新到 ImageSource,我有一个计时器来更新 ViewModel 的 ImageSource,然后 WPF 数据绑定屏幕上的图像。
计时器的间隔时间与刷新率一样多,但这并不意味着它与屏幕更新同步,所以我很伤心。
使用 SlimDX、XNA opengl 等很容易同步到刷新率,我应该如何使用 WPF 解决它?
java - Linux 上的 Java 2D 页面翻转
我们的 Java 2D 应用程序在 Linux 上运行时会出现屏幕撕裂现象。在 Windows 上运行时,它不会出现任何撕裂。我们花了很多时间分析我们的代码,但还没有找到原因。虽然我从不认为这一定不是我的代码有错,但我也认为问题出在 Linux 上的 Java 2D 渲染管道的可能性。顺便说一句,请注意我们看到了 Java 6 和 Java 7 的撕裂。在 Java 7 上运行时,无论是否启用 XRender 管道,我们都会看到撕裂。
我们当然是通过 a 使用双缓冲BufferStrategy
。BufferStrategy
我们调用时得到的实现Frame.createBufferStrategy(2)
是一个java.awt.Component$FlipSubRegionBufferStrategy
. 此外,调用isPageFlipping()
'BufferStrategy
返回BufferCapabilities
true,调用isFullScreenRequired()
功能返回 false。我们没有在全屏独占模式下运行,尽管我们尝试过这样做,但并没有解决问题。 BufferCapabilities.getFlipContents()
返回FlipContents.UNDEFINED
(但我怀疑这不相关)。
由于据称支持页面翻转并且我们正在获得页面翻转BufferStrategy
(而不是 blitting 策略),我不认为渲染管道会导致撕裂。然而,我发现 Chet Haase 在 2006 年写的邮件列表消息解决了屏幕撕裂问题,其中指出:“您特定平台上的 Flip 策略可能实际上是在幕后进行复制,这与BltBufferStrategy,它运行到刷新工件中。”
我如何确定我们得到的翻转策略是否实际上不是页面翻转?
Chet 还表示,“使用 BufferStrategy 运行全屏是解决此问题的一种不错的方法;根据平台和情况,我们通常会为您提供 Flip 策略,该策略(通常)与显示的垂直刷新同步以避免撕裂。”
如何确定策略是否与显示的垂直刷新同步?
(有关上述来自 Chet Haase 的完整信息,请参见http://www.mail-archive.com/java2d-interest@capra.eng.sun.com/msg03743.html )
c# - 快速移动相机时极度撕裂
我正在创建一个我的世界克隆,每当我稍微快一点移动相机时,块之间就会出现很大的撕裂,如下所示:
每个块都是 32x32x32 立方体,并且每种立方体都有一个顶点缓冲区,以防万一。我也在屏幕上绘制 2D 文本,我了解到我必须为每种绘图设置图形设备状态。这是我绘制立方体的方式:
如果我站着不动,世界看起来还不错。我认为这可能是因为我处于窗口模式,但是当我切换全屏时问题仍然存在。我还假设 XNA 本身是双缓冲的?或者谷歌告诉我的。
qt - 在 EGL 上渲染时的 OpenGL 撕裂效果
我在 ARM 板上的 EGL 实现提供的表面上使用 OpenGL 渲染了一些 Qt 应用程序。我在渲染中遇到了某种撕裂。
通过阅读,我发现这可能是与 vsync 相关的问题,因此我使用了 EGL 调用 eglSwapInterval(eglDisplay, 1),但仍然存在撕裂。这个电话足以消除撕裂吗?该调用是否应该完全消除这种影响?是否有可能留下一些撕裂的痕迹?
android - 在整个应用生命周期中随机丢失或不正确的图像和背景
我希望这里的某个人可能知道导致这种行为的原因:
在我的整个应用程序中,在看似随机的地方和随机条件下,我都在观察这个奇怪的 UI 问题。图像有时被加载为黑色(具有正确的边界)或不正确的图像源(再次,具有正确的边界)。这影响ImageViews
并已经影响android:background
了引用颜色资源的标签。
我的应用程序依赖于 6 个库项目,它通过服务运行本机代码,应用程序中的活动使用 GlSurfaceViews(尽管并非所有显示问题的活动都包含 OpenGL 组件)。我认为问题可能来自这些地方中的任何一个或通过使用大量内存来组合它们。
您可以在以下屏幕截图中看到此行为:
这实际上是一个 6 像素左右宽的列分隔符图像,它被错误地绘制到我的 ImageView 中(ImageView 本身的大小似乎正确)。
当退出应用程序然后再次(重复)返回时,它反而出现(并保持)如下:
在 Force Clear 和 Clear App Data 之后,它返回到正确的格式:
正如您还可以看到它旁边的放大镜图像在每个图像中都显示得很好。这些丢失/不正确的图像和背景的问题似乎在整个应用程序生命周期中随机发生,我一直无法找到重现它的方法。
这些图像的布局没什么特别的,在渲染生命周期中我没有做任何有趣的事情(我没有覆盖onDraw()
或onMeasure()
类似的东西)。这些图像的来源不是动态设置的,而是通过 XML 设置的。
正如您从上面的示例中看到的那样,这不是构建问题,因为它发生在应用生命周期之间而不是安装之间。它也发生在不同的设备上,三星 8.9、Acer Iconia Tab、Motarola XOOM、
在我看来,参考表有某种错误,它可能是由我的本机代码推动的吗?或者它是我在应用程序的某些阶段使用太多内存的影响?
以下是上述示例的 XML 源代码:
我碰巧得到了另一个这样的事件的代码/布局的更完整描述:
我有一个“设置” Activity
,它会在保存新的设置详细信息后重新启动我的应用程序。它通过停止 a Service
、调用新Activity
的(Splash Activity)并完成自身来做到这一点:
大多数时候(在大多数设备上)这工作正常,Splash Activity 包含正确加载的图像。有时,尽管在某些设备上,Splash Activity 加载了不正确的资源(我的测试人员称之为“颠倒的耐克刻度”)或只是一个空白框(如下所示)。有谁知道为什么?
这是 Splash 页面的布局,您可以看到它非常简单,毫不奇怪:
理论测试和证明:
我推测这可能是处理器/内存问题,在启动画面退出并移动到下一个活动之前布局没有被完全绘制,所以我输入了这段代码:
希望上面的代码可以确保在移动到开始页面之前肯定加载了图像,但似乎没有明显的效果。
另一种理论
我还想知道这是否可能是由 R.id / R.colour / R.drawable 资源引起的,在程序执行中如何被破坏?有谁知道为什么会发生这种情况。
我的本机代码是否会在一些 Android 未正确分配的内存地址上猖獗?
以前有没有人注意到这一点 - 或者可能知道为什么会发生这种行为?
opengl - c++ 中 OpenGL 上的 Ubuntu 垂直同步
我在 Ubuntu 上的 OpenGL 应用程序出现撕裂问题,我该如何解决?(我的笔记本有集成的英特尔显卡)
c# - 在 WinForms C# 上撕裂我的动画
我正在使用一个库,它使我能够为 WinForm 元素的移动(链接如下)设置动画,当我使用它在表单(具有图片背景)上移动透明面板时,会出现大量撕裂。
我相信解决方法是让winforms以30fps的速度刷新而不会滞后。我尝试将计时器设置为This.Refresh();
每秒 30 次,但最终加载缓慢。那么如何实现表单的良好刷新率呢?
这是一个撕裂的例子。这可能与面板的背景色设置为“透明” http://screencast.com/t/XIr3NkGI有关
opengl - OpenGL窗口系统屏幕撕裂预防
在我的 OpenGL 应用程序中,出于明显的原因,我想防止屏幕撕裂。到目前为止,我一直在使用 vsync。但我想用翻页缓冲区交换(更改指向监视器数据的指针而不是更改值)来替换它以提高性能。我的问题是:重要的窗口系统(Windows、Cocoa、X11)是否完全支持这种缓冲区交换,是否需要明确请求,还是默认行为?
javascript - jQuery是否有某种撕裂图像动画效果?
我想知道今天是否存在某种使用 jQuery 的撕裂图像动画效果?不像是一百万块,而是像中间撕开一张图片的效果?向两边移动。还是这需要使用 Flash 动画?谢谢!
android - 经常切换ImageView位图时BitmapFactory.Options.inBitmap导致撕裂
我遇到过一种情况,我必须在幻灯片中显示图像,并且切换图像的速度非常快。庞大的图像数量让我想将 JPEG 数据存储在内存中,并在我想显示它们时对其进行解码。为了简化垃圾收集器,我使用BitmapFactory.Options.inBitmap来重用位图。
不幸的是,这会导致相当严重的撕裂,我尝试了不同的解决方案,例如同步、信号量、在 2-3 个位图之间交替,但是似乎没有一个可以解决问题。
我已经建立了一个示例项目,在 GitHub 上演示了这个问题;https://github.com/Berglund/android-tearing-example
我有一个线程解码位图,将其设置在 UI 线程上,并休眠 5 毫秒:
我的想法是 ImageView.setImageBitmap(Bitmap) 在下一个 vsync 上绘制位图,但是,当这种情况发生时,我们可能已经在解码下一个位图,因此,我们已经开始修改位图像素。我在思考正确的方向吗?
有人对从这里去哪里有任何提示吗?