【问题标题】:Track opengl texture memory in Android在 Android 中跟踪 opengl 纹理内存
【发布时间】:2010-06-19 21:21:28
【问题描述】:

如何在 Android 中跟踪 OpenGL 纹理使用的内存? 我知道纹理内存在视频 RAM 上,但它们会与 RAM 交换吗?如果我调用 glGenTextures 而没有调用 glDeleteTextures,它对我当前进程的内存使用有何影响?

【问题讨论】:

    标签: android opengl-es android-ndk


    【解决方案1】:

    这可能取决于设备。但是在 OpenGL 的某些实现中,当 VRAM 用完时,如果有空间,它会尝试将一些较旧的纹理转移到系统内存中。如果没有空间,它将被释放。但是,OpenGL 内存永远不会进入您的应用程序内存,因为通常设备上一次只有一个 OpenGL 上下文。这意味着它由系统处理,而不是您的应用程序问题。

    所以换句话说,通过纯 OpenGL,你无法知道你使用了多少内存。但是,您可以通过上传到 VRAM 的每个纹理自行跟踪这一点(因为您有上传的字节数)。

    至于不调用glDeleteTextures,如果你不使用那么多内存,你真的不需要。它不会使用更多的电池或 CPU 或 GPU 电源,VRAM 的位只是简单地设置为 1 而不是 0。如果其他应用程序在您的应用程序暂停或死机后需要该内存,它们将自动删除您的纹理并覆盖它们和他们的。

    【讨论】:

    • 我对桌面设备也有类似的理解——但对于 Android,情况似乎有所不同。我正在使用一个名为 procrank 的 Android 特定工具来跟踪我的进程内存,该工具会计算进程特有的页面数 (USS),如果我不调用 glDeleteTextures - 我的 USS 会增加。
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多