Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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 OpenGL(ES)——当新对象添加到ArrayList时,多边形会暂时消失_Java_Android_Graphics_Opengl Es_Arraylist - Fatal编程技术网

Java OpenGL(ES)——当新对象添加到ArrayList时,多边形会暂时消失

Java OpenGL(ES)——当新对象添加到ArrayList时,多边形会暂时消失,java,android,graphics,opengl-es,arraylist,Java,Android,Graphics,Opengl Es,Arraylist,在OpenGL ES 1.x Android应用程序中,我生成了一个圆(从三角形开始),然后将其平移大约一百次以形成一个级别。除了发生某个事件导致大约15个对象立即添加到存储圆坐标的arraylist时,所有操作都有效。当此事件快速发生2次以上时,列表中的所有圆圈消失约1/5秒。除此之外,圆的动画效果也很平滑 该程序与使用相同同步技术的JavaSE应用程序运行良好,我尝试了六种左右的其他同步技术,但均无效,因此我觉得问题在于openGL实现。有什么建议吗?这么说你正在修改名单?听起来您需要在Op

在OpenGL ES 1.x Android应用程序中,我生成了一个圆(从三角形开始),然后将其平移大约一百次以形成一个级别。除了发生某个事件导致大约15个对象立即添加到存储圆坐标的arraylist时,所有操作都有效。当此事件快速发生2次以上时,列表中的所有圆圈消失约1/5秒。除此之外,圆的动画效果也很平滑


该程序与使用相同同步技术的JavaSE应用程序运行良好,我尝试了六种左右的其他同步技术,但均无效,因此我觉得问题在于openGL实现。有什么建议吗?

这么说你正在修改名单?听起来您需要在OpenGL线程上对此列表进行任何修改。尝试
Activity.postOnUiThread(Runnable)
,其中
Runnable
实现您自己的代码。可能吧。

那么列表正在你的眼皮底下修改?听起来您需要在OpenGL线程上对此列表进行任何修改。尝试
Activity.postOnUiThread(Runnable)
,其中
Runnable
实现您自己的代码。可能。

您真的必须将顶点数据存储在客户端内存中吗?如果您不修改它,我建议您使用VBO。只需将其上传到图形内存中一次,然后从那里开始绘制。它会快得多(不需要您发送每次绘制的所有顶点数据),而且我很确定您不会遇到您描述的问题


变换可以任意进行,然后只需为圆的每个实例发出绘制命令。

您真的需要将顶点数据存储在客户端内存中吗?如果您不修改它,我建议您使用VBO。只需将其上传到图形内存中一次,然后从那里开始绘制。它会快得多(不需要您发送每次绘制的所有顶点数据),而且我很确定您不会遇到您描述的问题


转换可以根据您的喜好进行,然后您只需为循环中的每个实例发出draw命令。

我在另一个线程中有一个逻辑后端,它包含数千行代码,因此很难将这个列表从那里迁移出去。至于同步:我使用了同步块CopyOnWriteArrayList,在opengl函数中创建了数组的深度副本(作为缓冲区)。没有技巧或单行修复?您所要做的就是创建一个runnable,传入要写入的信息,然后发布runnable。在修改数组的任何地方都要这样做。甚至为它创建一个函数。这并不难,即使有后端。听起来,如果您要在UI线程之外修改GL状态,那么从长远来看,您将受到影响。事实证明,问题是getCircleSize方法返回了一个整数,而我需要一个浮点。我花了三个小时把int改成float。但它是值得的,它总是值得的。我在另一个线程中有一个逻辑后端,它有几千行代码,并且很难将这个列表从那里迁移出去。至于同步:我使用了同步块CopyOnWriteArrayList,在opengl函数中创建了数组的深度副本(作为缓冲区)。没有技巧或单行修复?您所要做的就是创建一个runnable,传入要写入的信息,然后发布runnable。在修改数组的任何地方都要这样做。甚至为它创建一个函数。这并不难,即使有后端。听起来,如果您要在UI线程之外修改GL状态,那么从长远来看,您将受到影响。事实证明,问题是getCircleSize方法返回了一个整数,而我需要一个浮点。我花了三个小时把int改成float。但它总是值得的。VBO看起来非常有用。用户输入会对对象(其顶点数据和其他内容)进行修改,而对象会对其他对象进行修改。把它混在一起似乎不对。谢谢,伙计。VBO看起来很有用。用户输入会对对象(其顶点数据和其他内容)进行修改,而对象会对其他对象进行修改。把它混在一起似乎不对。谢谢你,伙计。