如何释放 glBufferData 内存

2024-01-06

我创建了一个顶点缓冲区对象类来管理应用程序中的大量顶点。用户调用构造函数创建glBuffer,并调用glBufferData分配指定大小的空间。

有一个名为 resize 的类函数,允许用户通过再次调用 glBufferData 来更改 VBO 的容量。我的问题是,如何取消之前的分配?或者它是自动完成的吗?

根据 opengl 文档,glDeleteBuffers 只删除缓冲区本身,而没有提及用 glBufferData 分配的实际内存。我可以继续在同一个绑定缓冲区上调用 glBufferData 而不会出现内存泄漏吗?


重复调用不会造成内存泄漏glBufferData()对于同一个缓冲区对象。新分配取代旧分配。

大多数时候您不需要担心一个微妙的方面,但理解它可能仍然有用:同一个缓冲区对象可能有多个活动分配暂时地。这是由于 OpenGL 的异步特性而发生的。为了便于说明,请想象一个如下的调用序列:

  1. glBufferData(dataA)
  2. glDraw()
  3. glBufferData(dataB)
  4. glDraw()

当您按此顺序对第 3 项进行 API 调用时,GPU 可能尚未完成调用 2 中的绘制调用。事实上,它可能仍在驱动程序中的某个位置排队,尚未移交给 GPU。由于调用 2 取决于dataA,直到 GPU 完成执行绘制调用 2 后才能删除该数据。在这种情况下,分配dataA and dataB暂时同时存在。

具体什么时候dataA实际上是否删除取决于实现。它只是不能早于 GPU 完成绘制调用 2 的时间。之后,根据某些垃圾收集计时器、内存不足或许多其他选项,它可能会立即完成。

glDeleteBuffer()也将删除缓冲存储器。与上面的观点非常相似,它可能不会立即发生。同样,只有在 GPU 执行完所有使用缓冲存储器的挂起操作后才能将其删除。

如果您不打算再使用缓冲区对象,请调用glDeleteBuffer()是最好的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何释放 glBufferData 内存 的相关文章

  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • UIButton 图像调整大小/缩放以适合

    我有一个非常严重的问题 我不知道如何解决 我正在对 UIButtons 框架进行动画处理 当我对其进行动画处理时 我希望按钮中的图像缩放到与按钮相同的大小 它无需在我的 iPhone 模拟器上执行任何操作即可运行 但是当我在 iPad 模拟
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • Swift 3 Web 视图

    所以我刚刚更新到新的Xcode8 and Swift3但现在我的网络视图不起作用 这是我使用的代码 UIWebView loadRequest webView NSURLRequest URL NSURL string http hardw
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • C++ 析构函数:何时释放内存?

    如果我删除一个导致其析构函数被调用的对象 那么内存是在析构函数完成函数中的任何操作之前还是之后被释放 仅当最小派生类子对象被销毁后才会释放内存 所以如果你有 class Base class Derived public Base publ
  • IClaimsTransformation 未触发

    我尝试过实施一个IClaimsTransformation我在 ASP NET CORE 3 1 Web 应用程序中找到的类 public class ClaimsTransformer IClaimsTransformation publ
  • ASP MVC 5 - 403 customError 不起作用

    我正在尝试为我的应用程序创建自定义错误页面 它在大部分情况下都有效 但不适用于403 errors 我的网络配置
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 为什么 GCC 6.3 在没有显式 C++11 支持的情况下编译此 Braced-Init-List 代码?

    我有一个问题大括号括起来的列表的不同含义 https stackoverflow com q 37682392 2642059 我知道C 03不支持C 11initializer list 然而 即使没有 std c 11编译器标志 gcc
  • 将粗体应用于 NSAttributedString 的一部分,同时保留字体大小和外观

    我正在为 iOS 开发一个富文本编辑器 使用UITextView连同一个NSAttributedString 它的功能与传统功能类似 即选择一个区域 单击一个按钮 并将该效果应用于该区域 同时保留文本上的任何其他属性 不幸的是NSAttri
  • 向每个收件人发送一封包含不同内容的电子邮件(使用抄送字段)

    在你因为这个问题 毫无意义 和 不可能 而驳回之前 请听我说完 问题 我们在使用我们的系统发送的每封电子邮件中实施跟踪像素 即具有唯一 URL 的可下载 GIF 文件 这有助于我们跟踪电子邮件的打开情况 问题是 当我们抄送一些收件人时 跟踪
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • C# 中成员访问中的问号是什么意思?

    有人可以向我解释一下以下代码中会员访问中的问号是什么意思吗 它是标准 C 的一部分吗 尝试在 Xamarin Studio 中编译此文件时出现解析错误 this AnalyzerLoadFailed Invoke this new Anal

随机推荐

  • org.slf4j.helpers.NOPLoggerFactory 无法转换为 ch.qos.logback.classic.LoggerContext

    当我在maven m2e 中使用logback时 出现以下错误 环境 JBOSS 7 1 1 maven eclipse 但如果我只是作为主类单独运行 它就可以正常工作 我无法弄清楚为什么会出现此错误 任何人都可以帮助我解决此问题并找到解决
  • Composer 更新 => 致命错误:内存不足

    我在本地计算机上使用 XAMPP 我无法通过删除 PHP 内存限制来解决这个问题 我已经尝试过的 修改我的 php ini 以删除内存限制 gt 内存限制 1 检查我正在运行 PHP 5 6 并自行更新composer到最新版本 但似乎根本
  • 如何将源文件添加到另一个文件夹中

    我正在使用 cmake 在 C 中构建我的项目 假设我的源文件夹中有以下目录 Source Dir1 Class cpp Class hpp Dir2 Main cpp 在 Dir1 中有一个类及其头文件和实现文件 Class cpp 和
  • ContentEditable 上可靠的跨浏览器信息

    我正在寻找完全支持使用 ContentEditable 的 Web 浏览器列表 我知道IE从5或5 5开始就支持它 但是其他浏览器呢 我知道 Chrome Flock Maxthon Opera 和 I E 的现代版本都支持它 但我不关心现
  • 加载 DB2 JDBC 驱动程序时出现 java.lang.UnsatisfiedLinkError

    我尝试将jboss seam与db2数据库一起使用 出现以下错误 com ibm db2 jcc a SqlException jcc 10389 12245 3 52 95 while loading the native library
  • 在Python中,是否有async相当于multiprocessing或concurrent.futures?

    基本上 我正在寻找使用 python3 协程作为后端而不是线程或进程提供并行映射的东西 我相信执行高度并行 IO 工作时应该有更少的开销 当然类似的东西已经存在了 无论是在标准库中还是在一些广泛使用的包中 免责声明 PEP 0492 htt
  • 使用 Typescript 设置 Vue 数据对象中的数据类型

    我目前正在 webpack 项目中使用 Vue js 和 Typescript 如中所示推荐配置 https v2 vuejs org v2 guide typescript html in my tsconfig json I have
  • 将字符串转换为 LatLng

    我正在使用 Google Maps API v2 并且从 SharedPreferences 中获取位置坐标单个字符串 34 8799074 174 7565664 我需要将其转换为 LatLng 有人可以帮忙吗 Thx 谷歌地图Andro
  • Caliburn.Micro 将 MainView 中的 UserControls 绑定到其 ViewModel

    我有一个 MainView xaml 绑定到 MainViewModel 就可以了 我想尝试的是将主窗体上的许多控件拆分为用户控件 现在 我将 UserControls 与 MainView 一起放入 Views 文件夹中 并将它们命名为
  • 我在 KubernetesPodOperator 的 DAG 设置中做错了什么

    我在这个中找到了以下Airflow DAG博客文章 https kubernetes io blog 2018 06 28 airflow on kubernetes part 1 a different kind of operator
  • Spritekit - 创建一堵“墙”

    我想知道如何用 spritekit 创建一堵墙 物体上的某些东西无法移动过去 我知道我可以使用这段代码 self physicsBody SKPhysicsBody bodyWithEdgeLoopFromRect self frame 但
  • JavaScript 对象检测:点语法与“in”关键字

    我见过两种检测 UA 是否实现特定 JS 属性的方法 if object property and if property in object 我想听听关于哪个更好的意见 最重要的是 为什么 其中一个明显优于另一个吗 除了这两种方法之外还有
  • 获取CPU温度

    我想知道CPU的温度 以下是我使用 C 和 WMI 所做的工作 我正在读取 MSAcpi ThermalZoneTemperature 但它始终相同 而且根本不是 CPU 温度 有没有办法不用写驱动就能获取CPU的真实温度 或者有什么我可以
  • OpenXML SDK C++ 示例

    HI 我正在尝试使用 OpenXML SDK 在 C 中创建一个 Word 文档 我在添加引用和使用命名空间时遇到问题 因为网上的大多数示例都是基于 C 给出的 1 如何在代码中添加对项目的引用并使用命名空间 例如 using namesp
  • 邮政信箱验证

    希望验证邮政信箱 但想知道是否存在此类验证 我将 地址 字段分为 地址 1 和 地址 2 此类 PO Apt Suite 信息所在的位置 Example Address 1 123 Main Street Address 2 Suite 1
  • Hadoop MapReduce 出现“无法解析主机名”错误

    现在我运行Hadoop MapReduce作业 输入数据来自HBase表 最近出现错误 错误如下 错误mapreduce TableInputFormatBase 无法解析 172 16 4 195的主机名 因为javax naming N
  • pandas“未命名”列不断出现

    我遇到一个问题 每次运行程序 从 csv 文件读取数据帧 时 都会显示一个名为 未命名 的新列 运行 3 次后的示例输出列 Unnamed 0 Unnamed 0 1 Subreddit Appearances 这是我的代码 对于每一行 未
  • 将按钮添加到 WinForms 的列表视图中

    有没有办法将按钮控件添加到 WinForms 应用程序中 ListView 内的单元格 这是一个类的代码ListViewExtender您可以重复使用 它不是一个派生类ListView 基本上您只需声明特定列显示为按钮而不是文本 按钮的文本
  • 如何在 Asp.Net Identity 中获取用户的角色名称

    我想弄清楚如何在身份框架中查找用户角色名称 我的配置是 只有一个角色分配给用户 所以 我尝试使用 public string GetUserRole string EmailID string Password var user await
  • 如何释放 glBufferData 内存

    我创建了一个顶点缓冲区对象类来管理应用程序中的大量顶点 用户调用构造函数创建glBuffer 并调用glBufferData分配指定大小的空间 有一个名为 resize 的类函数 允许用户通过再次调用 glBufferData 来更改 VB