Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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 从内存中查找和删除隐藏纹理的最佳方法_Android_C++_Performance_Opengl Es_Java Native Interface - Fatal编程技术网

Android 从内存中查找和删除隐藏纹理的最佳方法

Android 从内存中查找和删除隐藏纹理的最佳方法,android,c++,performance,opengl-es,java-native-interface,Android,C++,Performance,Opengl Es,Java Native Interface,我需要找到一种方法来跟踪绘制加载纹理的位置。当一些加载的纹理被覆盖时,我必须从内存中删除它们 我有一个远程用户界面(RUI)服务器,它向我发送许多小图像,这些图像经过组装后显示在RUI客户端的屏幕上。在这个场景中,我不知道哪些纹理在其他纹理后面,所以我无法删除它们。此外,覆盖必须完成(后面的纹理必须完全隐藏)。 是否有任何有效的方法来实现此跟踪和删除 我的用例是这样的:我有一个带有按钮图像的菜单存储在服务器上。整个屏幕由片段(按钮、滚动条、动画等)组成。 例如,当我点击一个按钮时,服务器会向我发

我需要找到一种方法来跟踪绘制加载纹理的位置。当一些加载的纹理被覆盖时,我必须从内存中删除它们

我有一个远程用户界面(RUI)服务器,它向我发送许多小图像,这些图像经过组装后显示在RUI客户端的屏幕上。在这个场景中,我不知道哪些纹理在其他纹理后面,所以我无法删除它们。此外,覆盖必须完成(后面的纹理必须完全隐藏)。 是否有任何有效的方法来实现此跟踪和删除

我的用例是这样的:我有一个带有按钮图像的菜单存储在服务器上。整个屏幕由片段(按钮、滚动条、动画等)组成。 例如,当我点击一个按钮时,服务器会向我发送存储在其存储器中的多个图片缩略图,我会将它们显示在屏幕的右半部分。 单击其他按钮,将显示歌曲、视频、电子书或其他内容的列表。 例如,我需要从内存中删除图片缩略图的纹理,然后显示歌曲列表。这样,覆盖将消失,我的内存使用将大大减少


我的OpenGLES2.0实现是在Android平台上实现的,整个工作都是在JNI层完成的。没有复杂的绘图,只需解码png图像,转换为纹理,并显示基本纹理。

您可以按照的方法来跟踪同一图像的使用次数。当实例完全被遮挡或脱离屏幕时,将减少引用计数,并删除所有具有0个引用的纹理

引用计数可以像
std::map
一样简单

您的遮挡检查可能只是一个O(n^2)AABB交叉/包容测试,以及一个针对屏幕AABB的额外O(n)测试。如果这对您来说不够快,请尝试使用更好的数据结构,如or

根据应用程序的设置方式,还可以使用类型跟踪纹理实例,并确定何时删除所有隐藏视图

这就是说,这可能是浪费时间,除非你真的被设备上的VRAM数量所束缚或接近它。从磁盘或网络位置加载/卸载图像将比仅将图像保存在VRAM(如果有)慢几个数量级