Android 从内存中查找和删除隐藏纹理的最佳方法
我需要找到一种方法来跟踪绘制加载纹理的位置。当一些加载的纹理被覆盖时,我必须从内存中删除它们 我有一个远程用户界面(RUI)服务器,它向我发送许多小图像,这些图像经过组装后显示在RUI客户端的屏幕上。在这个场景中,我不知道哪些纹理在其他纹理后面,所以我无法删除它们。此外,覆盖必须完成(后面的纹理必须完全隐藏)。 是否有任何有效的方法来实现此跟踪和删除 我的用例是这样的:我有一个带有按钮图像的菜单存储在服务器上。整个屏幕由片段(按钮、滚动条、动画等)组成。 例如,当我点击一个按钮时,服务器会向我发送存储在其存储器中的多个图片缩略图,我会将它们显示在屏幕的右半部分。 单击其他按钮,将显示歌曲、视频、电子书或其他内容的列表。 例如,我需要从内存中删除图片缩略图的纹理,然后显示歌曲列表。这样,覆盖将消失,我的内存使用将大大减少Android 从内存中查找和删除隐藏纹理的最佳方法,android,c++,performance,opengl-es,java-native-interface,Android,C++,Performance,Opengl Es,Java Native Interface,我需要找到一种方法来跟踪绘制加载纹理的位置。当一些加载的纹理被覆盖时,我必须从内存中删除它们 我有一个远程用户界面(RUI)服务器,它向我发送许多小图像,这些图像经过组装后显示在RUI客户端的屏幕上。在这个场景中,我不知道哪些纹理在其他纹理后面,所以我无法删除它们。此外,覆盖必须完成(后面的纹理必须完全隐藏)。 是否有任何有效的方法来实现此跟踪和删除 我的用例是这样的:我有一个带有按钮图像的菜单存储在服务器上。整个屏幕由片段(按钮、滚动条、动画等)组成。 例如,当我点击一个按钮时,服务器会向我发
我的OpenGLES2.0实现是在Android平台上实现的,整个工作都是在JNI层完成的。没有复杂的绘图,只需解码png图像,转换为纹理,并显示基本纹理。您可以按照的方法来跟踪同一图像的使用次数。当实例完全被遮挡或脱离屏幕时,将减少引用计数,并删除所有具有0个引用的纹理 引用计数可以像
std::map
一样简单
您的遮挡检查可能只是一个O(n^2)AABB交叉/包容测试,以及一个针对屏幕AABB的额外O(n)测试。如果这对您来说不够快,请尝试使用更好的数据结构,如or
根据应用程序的设置方式,还可以使用类型跟踪纹理实例,并确定何时删除所有隐藏视图
这就是说,这可能是浪费时间,除非你真的被设备上的VRAM数量所束缚或接近它。从磁盘或网络位置加载/卸载图像将比仅将图像保存在VRAM(如果有)慢几个数量级