glDeleteBuffers 比 glBufferData 慢

2023-12-04

我的 iOS/Android 游戏遇到一些性能问题,其中几个 VBO 必须每隔一段时间更新一次。对我的游戏进行分析后发现,glDeleteBuffers() 每次 VBO 更新最多需要 7 毫秒。当帧通常只需要 4 毫秒渲染时,这当然会导致出现问题。

这是我更新 VBO 的部分:

Chunk* chunk;
pthread_join(constructionThread, (void**)&chunk);
building = false;

if (vboID)
{
    //takes 7 milliseconds
    glDeleteBuffers(1, &vboID); 
    vboID = 0;
}
if (offset)
{
    glGenBuffers(1, &vboID);
    glBindBuffer(GL_ARRAY_BUFFER, vboID);

    //takes about 1-2 milliseconds, which is acceptable
    glBufferData(GL_ARRAY_BUFFER, offset * 4, constructionBuffer, GL_STATIC_DRAW);
}

其中offset是一个实例变量,基本上是新VBO的大小,它是可变的。我想,vboID 不言自明;)


glGenBuffers and glDeleteBuffers分别设计为仅在初始化和清理时运行。在运行时调用它们是不好的。

glBufferData用一组新数据替换当前缓冲区数据,这会自动更改缓冲区的大小。您可以安全地删除整个glGenBuffers/glDeleteBuffers并将其移至初始化和清理中。

此外,您正在将缓冲区创建为静态缓冲区。这告诉 OpenGL 您几乎永远不会更改它,因此它以一种在 GPU 上访问速度更快但从系统其他部分访问速度较慢的方式存储它。尝试改变GL_STATIC_DRAW to GL_DYNAMIC_DRAW or GL_STREAM_DRAW。更多相关内容请点击这里:http://www.opengl.org/wiki/Buffer_Objects#Buffer_Object_Usage

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

glDeleteBuffers 比 glBufferData 慢 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • 使动态创建的链接标签在 Winforms 中可点击

    我正在制作一个程序 允许用户单击由动态链接标签创建的公司名称 在我想知道如何做到这一点之前 我从未在 C 中使用过链接标签 可为特定用户生成的业务数量各不相同 因此每个用户的链接标签数量并不相同 然后我想捕获业务 ID 以进行 Json 调
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • SelectList 中的 ASP.NET MVC 下拉列表

    我正在构建以下内容SelectList在我的控制器中 var u new NewUser u UserTypeOptions new SelectList new List
  • 将网站部署包构建为构建后事件

    我正在使用 Visual Studio 2010 我有一个网站项目 我想在每次构建项目时构建一个网站部署包 基本上 我正在寻找构建后 MSBuild 命令的一些示例 该命令基本上与网站右键菜单中的 构建部署包 选项执行相同的操作 我假设您正
  • 如果第一个经纪人宕机,Kafka 消费者将无法消费

    我正在使用最新版本的kafka kafka 2 12 1 0 0 tgz 我已经设置了带有 3 个代理的简单集群 只是在每个实例的属性文件中更改了broker id 1 和listeners PLAINTEXT 9092 集群启动后 我使用
  • 加载模块时,perl 的包含路径中的搜索顺序是什么

    假设有 3 条路径 INC path1 path2 and path3 在每个路径下 都有一个名为的模块foo pm 如果我现在加载foo pm在我的脚本中通过use foo 哪一个foo pms 实际上会被加载吗 或者换句话说 perl
  • Symfony - ManyToOne 关系中的循环引用错误

    我正在使用 Symfony 5 和主义 我有两个具有多对一关系的实体 Product and ProductImage 每个产品可以有多个图像并且产品实体有getProductImages 方法来获取其产品图像 但是当我在控制器响应中使用此
  • 蚁耳更新,没有完全爆炸的耳朵

    我正在使用 ant 1 8 2 并且我有一个很大的 Ear 文件 根据用户在安装过程中的选择 需要对耳朵进行轻微的改变 在安装过程结束时 我运行一个 ant 脚本 该脚本根据用户的选择更新 Ear 这些文件仅包含在耳朵中 如果用户有相关许可
  • “...”中没有导出 HTTP 方法。为每个 HTTP 方法导出命名导出

    我正在开发一个使用 Google reCAPTCHA 的 React js Next js 项目 我的前端似乎正在工作 我知道 因为我一路上设置了打印语句 但后端在我的本地终端中给了我这个错误 错误 src app api recaptch
  • Powershell:生产中的调试/良好的异常处理

    在生产中分析 powershell cmdlet 的最佳方法是什么 假设您编写了一个执行以下操作的脚本 写入 lof 注册表值 注册 COM Dll 制作 IIS 应用程序池 启动Windows服务 中间出了问题 那么通知用户以便跟踪和调试
  • PHP登录后重定向回来

    我有一个这样的场景 当管理员收到客户发来的有关订单的邮件时 其中包含 PHP 表单页面的 URL 链接 该页面只能通过管理员登录来访问 如果管理员未登录 则 url 将重定向至登录页面 管理员成功登录后 我需要将他重定向到他在电子邮件中收到
  • 如何使用react-router重定向到另一个路由?

    我正在尝试使用反应路由器做一件简单的事情 版本 1 0 3 重定向到另一个视图 import React from react import Router Route Link RouteHandler from react router
  • 使用php对程序进行交互控制

    我想使用 php 在远程计算机上运行 C 程序 最终目标是使用手机或任何其他计算机上的网络浏览器来控制程序 我的 C 程序在几十分钟内从不同的传感器获取数据 它在 Linux 中从命令行运行 我可以通过按计算机键盘上的 q 键将其关闭 主线
  • 为什么对 DOM 元素执行 Array.prototype.slice.call(nodeList) ?

    许多 JavaScript 库 jQuery Zepto 似乎都在 querySelectorAll getElementsByTag 或 ClassName 结果上调用 Array prototype slice call 通过在 Sta
  • Heroku推送被拒绝,无法编译Python/django应用程序(Python 2.7)

    我正在做 Heroku 演练 https devcenter heroku com articles django preventions对于 python 开发人员 我在尝试运行 git push heroku master 时遇到错误
  • 在 R 中使用 stat_function 在对数刻度上绘图

    我在尝试清醒头脑时遇到了严重的问题stat function in R s ggplot2 我从这个简单的例子开始 ggplot data frame x c 1 1e4 aes x stat function fun function x
  • 如何使用 Python (2.7) 读取 Windows 通知?

    有没有办法使用Python读取Windows系统通知 屏幕右下角的气泡对话框 我试图阅读通知的文本及其生成时间 但我未能成功找到有关如何执行此操作的任何信息 我找到了一些关于如何generate这些通知 例如这个问题 如何用python创建
  • 如何从源代码为 CMake 构建 .deb 文件?

    如何从 CMake 源代码生成 ubuntu 的 deb 文件 我已经使用 apt 安装了 希望是大部分 构建依赖项 sudo apt get build dep cmake 使用 git 查看 cmake 存储库 git clone ht
  • 创建有角度的 CSS3 分隔线 - 100% / 自动高度

    我检查了这两个帖子 相邻的 div 带有倾斜的边框 复制 and 具有斜边的形状 响应式 但发布的这些解决方案不会调整为容器的 100 高度 我需要这个 我找不到适合我的场景的解决方案 我正在尝试复制这种行为 区别在于该容器内的文本可以是任
  • “com.gorylenko.GenerateGitPropertiesTask”属性“gitProperties”缺少输入或输出注释?

    我面临以下错误 我不知道哪个插件导致了这个 我在用Java 11和Gradle 7 4 1 wrapper 发现任务配置有些问题 myservice server generateGitProperties 类型 生成GitProperti
  • 如何使用jquery-ui在另一个框架中弹出对话框

    我正在使用 jquery ui 1 8 创建一个小网页 它有一个框架集和三个框架 然后我在 test php 文件中添加了一个按钮 该文件在第一帧 f1 加载 并在 test2 php 文件中添加了一个 div 该文件在第二帧加载 div
  • glDeleteBuffers 比 glBufferData 慢

    我的 iOS Android 游戏遇到一些性能问题 其中几个 VBO 必须每隔一段时间更新一次 对我的游戏进行分析后发现 glDeleteBuffers 每次 VBO 更新最多需要 7 毫秒 当帧通常只需要 4 毫秒渲染时 这当然会导致出现