0

嗨 Android 开发人员,

当模式等于“Render_when_dirty”时,中断 GLSurfaceView 的当前渲染阶段并开始新的渲染阶段的最佳方法是什么?我通过检查标志并从“onDraw”方法中调用的实际渲染方法返回人为地停止“onDraw”方法中的渲染;然后,在主线程的上下文中,我调用“requestRender()”来刷新场景。但是,由于我不知道的原因,一些中间的旧框架显示的时间很短(另一方面,它们持续了很长时间,用户可以实现过渡) ; 在 opengl es 2.x 引擎渲染实际场景之前。它根本不影响任何东西;但是修起来很麻烦。你有什么建议?

由于破坏了 GLSurfaveView 的实际渲染线程,PS 在 onDraw 方法中抛出 InterruptedException 是无用的。

亲切的问候。

4

1 回答 1

0

当您说绘制了一些旧帧时-您的意思是绘制的帧的一部分是旧的还是多次调用 onDraw() 仍会导致某些旧信息显示在显示器上。

我可以看到这里发生了一些事情。如果你有这样的 onDraw() :

  onDrawFrame(){
  ... stuff ...
  if (stateVariableSet)
     return;
  ... stuff ...

我的理解是,当函数完成运行时,后/前缓冲区会被交换和绘制。这里可能发生的一件事是,当您尝试更新 state/State 变量时,您会看到一些 onDrawFrame() 调用正在呈现。

另一方面,如果你有这样的事情:

   onDrawFrame(){
   ... stuff..
   semaphore.acquire(); // lock the thread waiting for the state to update
   ... stuff ...

那么在锁定之前绘制的东西将是陈旧的(仅针对该帧 - 至少这是我所期望的)。

你也在多核系统上运行吗?

于 2013-04-05T17:17:38.073 回答