我正在编写一个3D查看器,它可以加载一些3D文件并将其简单地显示在GLSurfaceView上。
我最初在opengles10中实现了查看器,但由于这是一个固定的函数api,我无法使用着色器,因为已经移动到opengles20。
这里有几个问题:
当我在我的HTC欲望中加载与opengles10类似的模型时,事情很快,触摸事件在数学上是预期的,模型可以轻松地旋转/平移/缩放。
然而,当我使用opengles20时,我的触摸事件会导致地狱。我知道这是因为在onFling事件中,我用阻尼因子旋转我的模型。这在所有情况下都很顺利。
所以:
1)为什么在opengles20中我需要担心vsyncs和双缓冲以及编舞?
2)如果缓冲区不可用,我如何用opengl实现双缓冲或交换缓冲区?
3)这是性能差异的唯一原因吗?
4)最后,我该怎么做才能将这两个等同起来?如果我的UI是滞后的,那么从opengles10升级到opengles20并不是一个很好的更新
答案 0 :(得分:0)
在这里跟进我自己的问题:
我决定将RENDERMODE_CONTINUOUSLY用于我的渲染模式;这允许opengl随时交换缓冲区并重新绘制。
我还移动了将旋转/平移应用于绘图循环外的矩阵的逻辑。
最后,为了让所有这些都能很好地发挥作用,引入了一个互斥锁来同步,这样更新旋转/转换对于opengles线程来说是线程安全的