一段时间停止ondraw()opengl的最佳方法

时间:2010-11-29 20:46:29

标签: android opengl-es

我使用opengl从数组中绘制值。这些值来自3个Android传感器。我想在收集值时转动渲染器。似乎绘图和采集同时具有不同的结果,所以我想在收集传感器值时关闭渲染。目前我在ondraw()中使用布尔值来停止绘图。但是有更好的方法吗?当我停止画画的时候会发生怪异的事情,比如我画了几次抖动的东西,但它不能因为没有绘画(ondraw(){if(boolean){........ 。}}

非常感谢你的帮助: - )

2 个答案:

答案 0 :(得分:5)

您可以要求GLSurfaceView仅在通过setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY)询问时进行绘制,然后在您准备好绘制时调用requestRender()

答案 1 :(得分:1)

我有一个建议:创建一个线程来收集传感器数据,并使其可用作对象。该线程将收集所有数据,并在公共值对象上进行同步。阻止时间将最小化。

collectLocalData = getData();
synchronized(pubData) {
  pubData.set(collectLocalData);
}

您的渲染线程可以在复制本地消费的公共值时执行相同的操作。

synchronized(pubData) {
  renderLocalData.set( pubData );
}

renderData( renderLocalData );

如果轮询传感器的时间比渲染时间长,则会多次渲染相同的数据。动画可能会有点抽搐,但不会超过数据所代表的含义。

PS:你的紧张可能是数据本身的结果,而不是你的代码。