gpt4 book ai didi

Android OpenGL queueEvent 为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:24 25 4
gpt4 key购买 nike

这之间有什么不同:

queueEvent(new Runnable(){

@Override
public void run() {
mRenderer.method();
}});

还有这个:

mRenderer.method();

什么对 OpenGL FPS 更好?

最佳答案

GLSurfaceView 创建一个单独的渲染线程。在 OpenGL 中,您需要一个当前上下文来进行任何 OpenGL 调用。 “当前上下文”状态是每个线程GLSurfaceView 为您创建一个 OpenGL 上下文,并使其成为您实现的任何 GLSurfaceView.Renderer 覆盖的当前上下文。因此,只要您在这些方法中进行 OpenGL 调用,您就不必担心任何这些,它就像纯粹的魔法一样工作(好吧,它并不是真正的魔法,但隐藏了很多复杂性)。

基于此,您无法从 UI 线程进行 OpenGL 调用而不跳过箍。因此,只需在 Renderer 上调用一个方法,例如由用户输入触发,然后在该方法中进行 OpenGL 调用,将会失败。除此之外,即使您不在该方法中进行 OpenGL 调用,如果该方法访问/修改渲染线程也使用的 Renderer 的成员变量,您也必须担心线程安全。

使用 queueEvent() 提供了一种在渲染线程中执行方法的便捷方式。所以你不必担心Renderer成员变量的线程安全,因为所有的访问都将发生在渲染线程中。

如果您通过 queueEvent() 提交,我相信您也可以在该方法中进行 OpenGL 调用。但我不完全确定 OpenGL 上下文在渲染​​线程中是否始终是当前的,或者是否只有在调用 Renderer 方法覆盖时才能保证。更典型的做法是仅更改 Renderer 中的状态以响应用户输入,然后在覆盖 Renderer.onDrawFrame() 时使用该新状态。

关于Android OpenGL queueEvent 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com