gpt4 book ai didi

android - 在 Android 和 iOS 设备上保存纹理的 GPU 内存限制

转载 作者:可可西里 更新时间:2023-11-01 05:49:36 28 4
gpt4 key购买 nike

我正在创建一个基于 Open GL ES 3.0 的 Android 应用程序,它必须满足各种设备的需求。

由于我的应用程序中的某些要求,我必须在我的应用程序运行时在 RAM 上保留大量图像数据。由于 Android 手机对每个应用程序的 CPU 内存使用量或 堆内存大小 有限制,因此我决定在我的应用程序运行时将所需的图像数据作为纹理保留在 GPU 内存上。

我的纹理大小是 1024x1024。保存纹理并在需要时再次显示它们对于它的实现部分来说一切正常。

但是,很快我发现 GPU 内存也有接近的限制(看起来)。我只能在 Sony XPeria Z5 上保存 1024x1024x50 近似数量的纹理。另一个 Sony XPeria 系列的 1024x1024x70 纹理。 1024x1024x90Huawei P8 等等。

此外,我发现iOS 设备上的纹理/GPU 内存 也有限制。我无法在 iPhone 6+ 上保存更多 1024x1024x90 纹理!!

这里的数字不准确,但非常接近。我提出这个问题的目的是了解Android 设备上的应用程序允许使用多少 GPU 内存

Android 应用是否允许 GPU 内存以某种方式与 CPU 内存相关 link here表示 ?

Android 应用程序可以通过 list 中声明的​​属性请求large heap。同样,有什么方法可以为我的应用请求更多 GPU 内存?

纹理真的存储在 GPU 内存中还是其中的一部分也存储在 CPU 内存中?

任何与 iOS 设备和 Android 设备上的 GPU 内存限制相关的信息都会有所帮助。

最佳答案

我认为你关心的所有设备都有统一的内存,这意味着你不必担心 GPU 和 CPU 内存之间的区别。从您的角度来看,最好将其视为同一个 RAM 池。

Android apps can request for large heap by a property declared in Manifest. Likewise, Is there some way I can request for more GPU memory for my app ?

大堆是指 Java 分配。如果您正在编写 native 代码(许多面向 iOS 和 Android 的应用程序的大部分代码都是用 C++ 编写的),那么它可能不会有太大区别。

可以看到不同的iOS设备有多少内存here .

安卓的话可以看here查看兼容性定义。例如,支持 Marshmallow 的非 watch 设备至少有 512MB。

您可以算出您的纹理需要多少内存,假设 32 位 8888 格式且没有 mipmap,每个纹理为 1024*1024*4bytes=4MB(如果这些假设有误,请更新问题!)。带有其中 50 个的 Sony XPeria Z5 的容量大约为 200MB。华为 P8 和 iPhone6+ 快死在 360MB。

您不应该期望能够使用智能手机上接近所有 RAM 的任何地方。有一个操作系统和其他应用程序需要运行,并且没有像您在桌面操作系统上看到的那样基于存储的虚拟内存。根据经验,在操作系统关闭您的应用程序之前,您可能会使用大约 30%-50% 的系统 RAM。 iOS 肯定会,我相信 Android 也会在您的内存使用率过高时向您的应用发送警告。

粗略计算在 iPhone6+(1GB RAM,您可以使用 360MB)上大致正确,但 Sony XPeria Z5 和华为 P8 都有巨大的 3GB RAM。老实说,我不知道为什么你能用这么少的东西。

编辑:此外,在调试器中运行会增加显着的内存开销,但我认为这无法解释那些 Android 设备上丢失的 GB。

关于android - 在 Android 和 iOS 设备上保存纹理的 GPU 内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053983/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com