Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android并发渲染器设计_Java_Android_Multithreading_Opengl Es_Rendering - Fatal编程技术网

Java Android并发渲染器设计

Java Android并发渲染器设计,java,android,multithreading,opengl-es,rendering,Java,Android,Multithreading,Opengl Es,Rendering,我目前正在Android上编写一款游戏,其设计灵感来自于。即,双线程方法,一个逻辑线程和一个渲染线程 我在逻辑线程中设置了一个轻量级渲染模块,它基本上只处理想要渲染的游戏对象。它将渲染命令发送到渲染线程,如“在x,y处渲染精灵f” 我喜欢这个设计,但目前我的问题在于资源的创造。假设精灵f需要一个纹理,它将在加载时在逻辑线程中请求该纹理。问题在于,由于OpenGL上下文位于渲染线程中,因此纹理只能由渲染线程中的用户创建。目前,逻辑线程和渲染线程之间唯一的同步点是在帧结束时交换渲染队列,我希望保持这

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

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

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

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


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

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

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

祝你的比赛好运