OpenGL-gpu内存超出,可能的情况
OpenGL - gpu memory exceeded, possible scenarios
我可以使用glTexImage2D
或glBufferData
向gpu内存发送一些数据。假设我请求驱动程序向gpu发送更多数据,但gpu内存已经满了。我可能得到GL_OUT_OF_MEMORY。渲染线程可能会发生什么?可能的情况是什么?是否有可能终止渲染线程?
这取决于实际的OpenGL实现。但最有可能的情况是,你只会遇到严重的性能下降,但事情会继续下去。
OpenGL使用一个抽象内存模型,实际实现威胁到GPU自己的内存作为缓存。事实上,对于大多数OpenGL实现,当你加载纹理数据时,它一开始甚至不会直接进入GPU。只有当渲染实际需要时,它才会加载到GPU RAM中。如果使用的纹理比GPU RAM中的纹理多,则会根据需要从GPU RAM中交换纹理以完成渲染。
旧一代GPU需要一个纹理来完全适应他们的RAM。2012年之后推出的GPU实际上可以根据需要从主机内存访问纹理子集,从而提高了这一限制。事实上,您很快就会遇到最大纹理尺寸限制,而不是内存限制(BT;DT)。
当然,其他开发得不太好的OpenGL实现可能会出现内存不足的错误。但至少对AMD和NVidia来说,这不是问题。
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 估计 Ubuntu C++内存使用情况
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 重新分配向量时,向量中的内存会发生什么情况
- 为什么它在不分配内存的情况下工作正常
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 传递链表而不在C++内存泄漏的情况下
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- C++ 在不释放内存的情况下调用析构函数
- 在这种情况下,我必须删除内存吗?
- Cython:如何在不需要 GIL 的情况下从 numpy 内存视图转到矢量[对[双,双]]?
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 使用C++清理器测量动态内存使用情况
- 投射空指针以检查内存对齐情况