gpt4 book ai didi

java - Android并发渲染器设计

转载 作者:行者123 更新时间:2023-12-02 08:26:59 25 4
gpt4 key购买 nike

我目前正在 Android 上编写一款游戏,其设计灵感来自 Replica Island 。即,一种双线程方法,一个逻辑线程和一个渲染线程。

我在逻辑线程中设置了一个轻量级渲染模块,它基本上只处理想要可渲染的游戏对象。它将渲染命令发送到渲染线程,例如“在 x,y 处渲染 Sprite f”。

我喜欢这个设计,但我目前的问题在于资源创建。假设 sprite f 需要一个纹理,它将在加载时在逻辑线程中请求该纹理。问题是,由于 OpenGL 上下文位于渲染线程中,因此纹理只能在渲染器线程中创建。目前,逻辑线程和渲染线程之间的唯一同步点是它们在帧末尾交换渲染队列时,我希望保持这种状态。

如何解决想要在逻辑线程上创建纹理、vbo 等的问题,同时仍然只在渲染线程上渲染内容?共享 OpenGL 上下文是一个好方法吗?或者可能是引擎的其他设计?

编辑:一种替代方案是使用另一个队列,您可以在其中放置来自逻辑线程的请求。就像“创建纹理”等。渲染线程将迭代此队列并在开始渲染另一个队列之前对其进行处理。我开始喜欢这个解决方案。

最佳答案

OpenGL 要求从渲染线程调用 glBindTexture。我强烈建议您从 GLSurfaceView.Renderer onSurfaceCreated 方法(由渲染线程调用)进行绑定(bind)。如果重新创建 GL 上下文,将再次调用此函数以重新绑定(bind)所有内容。

如果您选择从另一个线程驱动它,请通过在 GLSurfaceView 对象上调用queueEvent 向渲染线程传递一个可运行对象。请注意尚未调用 onSurfaceCreated 的竞争。

祝您游戏愉快!

关于java - Android并发渲染器设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296828/

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