在可运行的和编舞者之间进行选择。 我的应用程序(在Delphi中)呈现在OpenGL表面上,并且渲染是按需完成的 要要求重新绘制,我有两种可能的策略: 选项1:使用可运行 我定义了myre ...

问题描述 投票:0回答:1
Runnable

I将

MyRender
定义为Runnable

,请要求重新绘制,我将其发布到主循环中:

Looper.getMainLooper().post(MyRender);
然后,渲染逻辑在
run()

中执行:
MyRender.run() {
    PaintTheSurface();
}

eption2:使用

Choreographer.FrameCallback

,我将

MyRender
定义为Choreographer.FrameCallback

,并要求使用以下方式进行重新修复:

Choreographer.getInstance().postFrameCallback(MyRender);
然后在
doFrame()

中执行渲染逻辑:

MyRender.doFrame(frameTimeNanos: Long) { PaintTheSurface(); }

我的观察结果

我尝试了这两种方法,但是从视觉上看,我没有注意到任何区别。我不确定选择哪种方法以及每种方法的优势和缺点是什么。
在我的应用程序中,需要重新绘制的动画已经使用
Choreographer

同步。但是,据我所知,其他可能触发重新绘制的事件(例如触摸或鼠标移动事件)不是由Choreographer.

发射的。 我的问题

使用
Runnable
vs.
Choreographer.FrameCallback

请求重新绘制的利弊是什么?

如果我使用Choreographer,它如何处理触摸或鼠标移动事件,这些事件可能不会与编舞者的框架计时同步?

  1. Opengl ES渲染代码应该在背景线程上运行。
    使用
    Looper.getMainLooper().post(runnable)
    重新征用redraw
    有一个严重的缺点:
  2. 环路 /可运行的消息将其放置在队列中,并尽可能快地处理。与显示刷新率相比,这可能太快了,或者如果UI线程繁忙,则这可能太慢了。最重要的是,帧速率不能保证是恒定的,因为您的可运行者与其他消息竞争(例如触摸事件)。
  3. 编排者
    及其
  4. postFrameCallback()
是触发OpenGL ES渲染的首选方法。它的回调与刷新率同步。
android performance delphi surfaceview runnable
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.