- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个 iOS 应用程序,它可以渲染大量我从磁盘动态流式传输的纹理。我将 NSCache 用于纹理的 LRU 缓存。一个屏幕显示 3D 模型,另一个屏幕显示纹理的全屏细节,可以通过滑动来更改该纹理。一种非常简单的旋转木马。该应用程序在 1GiB 设备上占用的 RAM 永远不会超过 250MiB,纹理的缓存运行良好。
对于全屏 View ,我有一个基于屏幕分辨率和纹理分辨率(不同纹理坐标)的 VBO 缓存。我从不删除这些 VBO,并始终检查 VBO 是否正常 (glIsBuffer()
)。屏幕是单独的 UIViewControllers,我在它们两个中使用相同的 EAGLContext,没有上下文共享。这没关系,因为它在同一个线程上。
所有这些都是 Open GL ES 2.0,一切正常。我可以在 3D/2D 屏幕之间切换,更改纹理。根据可用内存,根据需要即时创建/删除纹理。
但有时我在调用时渲染全屏四边形时会随机崩溃:
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
当我连续收到大量内存警告时,就会发生这种情况。有时我会在几秒钟内收到数百条内存警告,应用程序运行正常,但有时它会在滑动到新的全屏纹理四边形时崩溃。即使对于已经全屏渲染的纹理,也会发生这种情况。它永远不会在使用相同纹理的 3D 模型上崩溃。
崩溃报告总是在 glDrawArrays
调用(在我的代码中),在 0x00000018 处有一个 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
异常。堆栈跟踪中的最后一次调用始终是 gleRunVertexSubmitARM
。这种情况发生在各种 iPad 和 iPhone 上。
看起来系统内存压力损坏了一些 GL 内存,但我不知道何时、何地以及为什么。
我还尝试从 VBO 切换到在堆上保存顶点数据的旧方法,在调用 glDrawArrays
之前,我首先检查顶点数据是否不是 NULL
.结果是一样的,在内存不足的情况下随机崩溃。
任何想法可能是错误的? EXC_BAD_ACCESS
中的地址0x00000018
确实很糟糕,但我不知道它应该是谁的地址。取消分配的纹理或着色器是否会在 glDrawArrays
中导致 EXC_BAD_ACCESS
?
最佳答案
经过几天的密集调试,我终于弄明白了。问题是 NSCache
存储 OpenGL 纹理。在内存压力下,NSCache 开始从中删除项目以释放内存。问题是,在那种情况下,它是在自己的后台线程 (com.apple.root.utility-qos) 上执行的,因此该线程没有 GL 上下文(也没有与主上下文的共享组),因此纹理名称是不是有效名称(无法删除)并且会泄漏 GL 内存。因此,在出现一些内存警告后,出现了大量泄漏的 GL 纹理、内存已满和应用程序最终崩溃。
TL DR:不要使用 NSCache 来缓存 OpenGL 对象,因为它会在内存警告后泄漏它们。
关于ios - 调用 glDrawArrays 时随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32123339/
我让随机数低于之前的随机数。 if Airplane==1: while icounter0: print "You have enoph fuel to get to New
是否可以生成 BigFloat 的随机数?类型均匀分布在区间 [0,1)? 我的意思是,因为 rand(BigFloat)不可用,看来我们必须使用 BigFloat(rand())为了那个结局。然而,
我正在尝试学习 Kotlin,所以我正在学习互联网上的教程,其中讲师编写了一个与他们配合良好的代码,但它给我带来了错误。 这是错误 Error:(26, 17) Kotlin: Cannot crea
是否有任何方法可以模拟 Collections.shuffle 的行为,而不使比较器容易受到排序算法实现的影响,从而保证结果的安全? 我的意思是不违反类似的契约(Contract)等.. 最佳答案 在
我正在创建一个游戏,目前必须处理一些math.random问题。 我的Lua能力不是那么强,你觉得怎么样 您能制定一个使用 math.random 和给定百分比的算法吗? 我的意思是这样的函数: fu
我想以某种方式让按钮在按下按钮时随机改变位置。我有一个想法如何解决这个问题,其中一个我在下面突出显示,但我已经认为这不是我需要的。 import javafx.application.Applicat
对于我的 Java 类(class),我应该制作一个随机猜数字游戏。我一直陷入过去几天创建的循环中。程序的输出总是无限循环,我不明白为什么。非常感谢任何帮助。 /* This program wi
我已经查看了涉及该主题的一些其他问题,但我没有在任何地方看到这个特定问题。我有一个点击 Web 元素的测试。我尝试通过 ID 和 XPath 引用它,并使用 wait.until() 等待它变得可见。
我在具有自定义类的字典和列表中遇到了该异常。示例: List dsa = (List)Session["Display"]; 当我使用 Session 时,转换工作了 10-20 次..然后它开始抛
需要帮助以了解如何执行以下操作: 每隔 2 秒,这两个数字将生成包含从 1 到 3 的整数值的随机数。 按下“匹配”按钮后,如果两个数字相同,则绿色标签上的数字增加 1。 按下“匹配”按钮后,如果两个
void getS(char *fileName){ FILE *src; if((src = fopen(fileName, "r")) == NULL){ prin
如果我有 2 个具有以下字段的 MySQL 数据库... RequestDB: - Username - Category DisplayDB: - Username - Category
我有以下语句 select random() * 999 + 111 from generate_series(1,10) 结果是: 690,046183290426 983,732229881454
我有一个使用 3x4 CSS 网格构建的简单网站。但出于某种原因,当我在 chrome“检查”中检查页面时,有一个奇怪的空白 显然不在我的代码中的标签。 它会导致网站上出现额外的一行,从而导致出现
我有两个动画,一个是“过渡”,它在悬停时缩小图像,另一个是 animation2,其中图像的不透明度以周期性间隔重复变化。 我有 animation2 在图像上进行,当我将鼠标悬停在它上面时,anim
如图所示post在 C++ 中有几种生成随机 float 的方法。但是我不完全理解答案的第三个选项: float r3 = LO + static_cast (rand()) /( static_c
我正在尝试将类添加到具有相同类的三个 div,但我不希望任何被添加的类重复。 我有一个脚本可以将一个类添加到同时显示的 1、2 或 3 个 div。期望的效果是将图像显示为背景图像,并且在我的样式表中
我有一个基本上可以工作的程序,它创建由用户设置的大小的嵌套列表,并根据用户输入重复。 但是,我希望各个集合仅包含唯一值,目前这是我的输出。 > python3 testv.py Size of you
我正在尝试基于 C# 中的种子生成一个数字。唯一的问题是种子太大而不能成为 int32。有什么方法可以像种子一样使用 long 吗? 是的,种子必须很长。 最佳答案 这是我移植的 Java.Util.
我写这个函数是为了得到一个介于 0 .. 1 之间的伪随机 float : float randomFloat() { float r = (float)rand()/(float)RAN
我是一名优秀的程序员,十分优秀!