首页 > 解决方案 > OpenGL ES - 管理视频内存

问题描述

我为在 Vivante GPU 上具有 1GB RAM 和 128 MB 专用视频内存的系统开发嵌入式应用程序。

我的应用程序是系统正在完成的工作的 3d 实时表示。它的方式是基本上一辆汽车在一个无限平面类型的场上移动,并在它后面绘制一个多边形。那个多边形可能很复杂——有缝隙和洞,而且更新得相当频繁。

换句话说,我在运行时通过对从数学模块接收到的形状进行三角测量来创建网格 - 并将它们绘制为网格。

我对渲染做了一些优化——通过将我的“世界”分割成正方形并将生成的网格分割成这些正方形块,然后确定我需要绘制哪些块以及哪些块在截锥体之外。

但就记忆而言 - 到目前为止,我一直只是为顶点和索引数据创建 VBO,仅此而已。我把它们放在那里,再也不会碰它们——只需在需要时使用那些 VBO 渲染网格

我遇到的问题是,一段时间后,我的程序开始卡顿。它会冻结 0.5 秒或更长时间,然后再次平稳运行几秒钟,然后再次冻结。 编辑:今天将其缩小到 GPU 过热并将时钟降低 64 倍。不是软件问题。但我仍然想知道内存管理的一般技巧。

我把它归结为我的网格创建(不是我程序中的任何其他计算)。如果我停止创建网格 - 即创建 VBO - 问题会被延迟或完全消除,如果我达到了我根本不创建网格的地步。

我会注意到,在程序开始卡顿的时间里——我绝对不能用完视频内存。128 MB 在那个时候用起来太多了,我最多用几百 KB。所以我实际上什至不确定它是否与视频内存相关或其他。

我的问题是 - 我找不到描述我实际需要做什么的好文章。我所知道的是,如果我停止创建 VBO,问题就会消失。

我不确定我可以在这里放哪个代码作为示例,所以现在我什么都不放。

有什么帮助吗?

标签: javaoptimizationopengl-esvbo

解决方案


推荐阅读