Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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/0/performance/5.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
Android OpenGL ES 2.0-首次渲染纹理后临时性能下降_Android_Performance_Optimization_Textures_Opengl Es 2.0 - Fatal编程技术网

Android OpenGL ES 2.0-首次渲染纹理后临时性能下降

Android OpenGL ES 2.0-首次渲染纹理后临时性能下降,android,performance,optimization,textures,opengl-es-2.0,Android,Performance,Optimization,Textures,Opengl Es 2.0,目标平台:Android、OpenGL ES 2.0 在场景开始时,我使用glTexImage2D上传纹理,因此在实际渲染开始之前,它们应该从一开始就可用。对glTexImage2D的AFAIK调用非常耗时,因为图像数据基本上是memcopy的 稍后我将使用纹理,因此我再次调用glBindTexture,以便能够渲染它。有趣的是:我第一次调用glBindTexture并实际渲染纹理时,应用程序的帧率显著下降了几次,但随后又完全稳定下来。当纹理第一次实际使用时,视频驱动程序似乎正在重新安排内存?也

目标平台:Android、OpenGL ES 2.0

在场景开始时,我使用
glTexImage2D
上传纹理,因此在实际渲染开始之前,它们应该从一开始就可用。对glTexImage2D的AFAIK调用非常耗时,因为图像数据基本上是memcopy的

稍后我将使用纹理,因此我再次调用
glBindTexture
,以便能够渲染它。有趣的是:我第一次调用
glBindTexture
并实际渲染纹理时,应用程序的帧率显著下降了几次,但随后又完全稳定下来。当纹理第一次实际使用时,视频驱动程序似乎正在重新安排内存?也许以前在RAM中的一些纹理会被移动到硬盘,以便为纹理留出空间?如果有一种机制可以跟踪上一次使用纹理的时间,然后从内存中删除在一定时间内没有使用的纹理来生成空间,那么这肯定是有意义的


你对这种行为有什么想法,也许是一种迫使驱动程序在实际渲染开始前立即腾出空间的方法?

你如何衡量帧速率的下降?也是在第一次渲染时,这种情况只会发生,还是像你写的那样“几次”?应用程序再次平稳运行需要10-20秒。在这10-20秒内,会发生几次帧下降。因为我用的是cocos2d-x,所以帧速率测量应该很好,而且你基本上可以看到口吃。