【发布时间】:2015-08-25 22:55:31
【问题描述】:
我有一个网站使用带有ng-route 指令的angularjs 来让用户在视图之间导航。该应用程序使用 Three.js 进行画布 WebGL 渲染。我有一个问题,应用程序在 Chrome for Android 和 IE11 上反复崩溃。
我很难找到确切的问题,所以我目前无法提供一个小的、可重现的错误案例。这就是我主要需要帮助的地方 - 去哪里看。
到目前为止,我已将其范围缩小到ng-route 视图切换以及反复重新初始化threejs 渲染器和场景。我相信我可以使用 IE11 重现该问题,它给了我错误代码 887a0005,它只是说 the gpu device instance has been suspended,所以我不太可能从那里追踪我的问题。
Three.js 执行以下行时设置WebGlRenderer 的大小时出现887a005 错误(Three.js 修订版 71 中的 18317):
_gl.viewport( _viewportX, _viewportY, _viewportWidth, _viewportHeight );
如果我长时间不导航,该应用程序将运行良好,但在浏览 3 到 10 次视图切换后,它会在 Android 版 Chrome 上崩溃。
我该去哪里寻找原因?这可能是内存问题吗?我将如何缩小范围?
我没有使用 angularjs 来管理创建threejs 视图的对象的生命周期。可能是这个问题吗?
感谢您的帮助,如果问题不适合 stackoverflow 或太窄/太宽,请告诉我!
【问题讨论】:
-
为了调试ng-route可以在
$routeChangeStart$routeChangeSuccess$routeChangeError和$routeUpdate事件里面设置断点。 -
嘿@Dan,不确定这在这种情况下是否有帮助,因为我不认为 ngRoute 是问题所在。我认为根本原因是在 Three.js 中重新创建渲染器、场景或平面/网格时存在一些内存问题。无论如何感谢您的评论:)
-
嗨@ErikLundgren 我正在使用threejs 处理一个巨大的角度应用程序,大多数问题都与页面组合或刷新后的上下文管理有关。您是否尝试跟踪已删除画布的上下文?
-
嗨@pietro909,这听起来是个好主意。我设法用另一种方式解决了这个问题,所以我会为我的方式提供答案(这可能不适合其他应用程序
标签: javascript angularjs three.js webgl