Android OpenGL ES 2.0-首次渲染纹理后临时性能下降
目标平台: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并实际渲染纹理时,应用程序的帧率显著下降了几次,但随后又完全稳定下来。当纹理第一次实际使用时,视频驱动程序似乎正在重新安排内存?也
glTexImage2D
上传纹理,因此在实际渲染开始之前,它们应该从一开始就可用。对glTexImage2D的AFAIK调用非常耗时,因为图像数据基本上是memcopy的
稍后我将使用纹理,因此我再次调用glBindTexture
,以便能够渲染它。有趣的是:我第一次调用glBindTexture
并实际渲染纹理时,应用程序的帧率显著下降了几次,但随后又完全稳定下来。当纹理第一次实际使用时,视频驱动程序似乎正在重新安排内存?也许以前在RAM中的一些纹理会被移动到硬盘,以便为纹理留出空间?如果有一种机制可以跟踪上一次使用纹理的时间,然后从内存中删除在一定时间内没有使用的纹理来生成空间,那么这肯定是有意义的
你对这种行为有什么想法,也许是一种迫使驱动程序在实际渲染开始前立即腾出空间的方法?你如何衡量帧速率的下降?也是在第一次渲染时,这种情况只会发生,还是像你写的那样“几次”?应用程序再次平稳运行需要10-20秒。在这10-20秒内,会发生几次帧下降。因为我用的是cocos2d-x,所以帧速率测量应该很好,而且你基本上可以看到口吃。