使用 glBufferData 后可以删除浮点数组吗?

2023-11-29

我正在研究OpenGL API,我想问你是否可以在将浮点数组传递给OpenGL后删除它。

示例代码:

GLuint VBO;
float *vertices = new float[2];
vertices[0] = 0.0f;
vertices[1] = 1.0f;

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

delete[] vertices;

你能告诉我这样做的后果吗?


是的,一点没错。之后glBufferData()调用返回后,您可以对数据执行任何操作。覆盖它、删除它等等。

结果是 OpenGL 实现要么必须在调用期间立即更新缓冲区(这在某种程度上违背了 OpenGL 喜欢的异步操作方式),要么创建数据的临时副本(出于性能原因,这是不希望的)。

这是调用类似的主要原因glMapBufferRange()被介绍了。它们避免了在幕后经常发生的额外数据复制glBufferData() and glBufferSubData()被使用。如果不小心使用,它们有自己的同步警告。

纹理数据有一个非常相似的情况,其中调用如下glTexImage2D()通常会导致 OpenGL 实现中数据的额外副本。在这种情况下,性能影响可能会更糟,因为纹理数据通常要大得多。 Apple 为此目的提供了一个扩展(APPLE_客户端_存储),您可以通过承诺在 OpenGL 消耗数据之前保持数据不变来避免额外的副本。

几乎所有以数据指针作为参数的 OpenGL 调用都会消耗数据作为调用的一部分。我能想到的唯一值得注意的例外是glVertexAttribPointer()在没有 VBO 的情况下使用时。这种用法通常称为“客户端顶点数组”,并且数据在绘制调用期间消耗,这可能在绘制调用之后很长时间glVertexAttribPointer()称呼。此用法已被弃用,并且在 OpenGL 核心配置文件中不可用。

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

使用 glBufferData 后可以删除浮点数组吗? 的相关文章

  • 在 JS 中查找对象上特定值的键

    我有一个使用 lodash 生成的对象 zipObject 功能 所以我有 2 个数组 一个是位置 一个是数字 var locs Aberdeen 304 Aberystwith 109 Belfast 219 Birmingham 24
  • CMake:将为 lib 构建的对象文件重用到另一个 lib 目标中

    我正在尝试将我的项目转移到CMake 同时对编译过程进行一些优化 这是交易 我有几个子目录 必须 每个子目录都编译成静态库 这有效 我想将每个子目录中的所有目标文件收集到另一个更大的 完整的静态库中 它看起来像这样 libBig a mad
  • 即使在顶点着色器中使用,glGetUniformLocation()也会返回-1

    我正在尝试用法线渲染一个简单的立方体 我使用以下代码来初始化着色器 void initShader const char vertexShaderPath const char fragmentShaderPath cout lt lt I
  • openGL转png

    我正在尝试将包含大量纹理 没有移动 的 openGL 编辑 我画的卡片 thx unwind 转换为一个 PNG 文件 我可以在框架的另一部分中使用该文件我正在与 有 C 库可以做到这一点吗 thanks 如果您的意思只是 获取由 Open
  • 如何在java hashset中查找并返回对象

    根据 HashSet javadoc HashSet contains 仅返回布尔值 如何在 hashSet 中 查找 对象并修改它 它不是原始数据类型 我看到 HashTable 有一个 get 方法 但我更喜欢使用该集合 您可以删除一个
  • glEnableVertexAttribArray 中“index”参数的含义以及(可能)OS X OpenGL 实现中的错误

    1 我是否正确理解 要使用顶点数组或VBO进行绘制 我需要所有属性在着色器程序链接之前调用glBindAttribLocation 或者在着色器程序成功链接后调用glGetAttribLocation 然后使用glVertexAttribP
  • 动态添加变量名称值对到 JSON 对象

    我有一个充满 ips 的 json 对象 例如 var ips 然后我将 ip 对象添加到该对象 如下所示 ips ipID 然后我需要向每个 ip 添加动态 变量名称值对 所以我使用这样的代码 var name var value var
  • 简单的线框格式?

    我正在寻找一种用于线框模型的简单文件格式 我知道 VRML u3D 等 但这些对于我的需求来说似乎很重要 我的标准是 必须有明确的规格 要么是开放的 要么是非常完善 记录的 我只需要 想要 简单的模型 顶点和边 我不想处理面孔或物体 如果格
  • 阻止 OpenGL.framework 在 Cocoa 应用程序中加载

    我的应用程序链接到这些框架 Cocoa Framework AppKit Framework CoreData Framework Foundation Framework 请注意 OpenGL Framework 是NOT已链接 但是 设
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • 为什么.NET中的每个类都继承自Object?

    我不明白 为什么他们需要一个共同的基础 这个问题预设了一个谎言 他们不need一个共同的基础类型 这个选择并不是出于必要 这是出于为客户提供最佳价值的愿望 当设计类型系统或任何其他相关问题时 有时您会遇到决策点 您必须决定 X 或非 X 公
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • 当 OpenGL 中同时绑定 1D 和 2D 纹理时,正确的行为是什么?

    假设你有这样的东西 glBindTexture GL TEXTURE 2D my2dTex glBindTexture GL TEXTURE 1D my1dTex glBegin 正确的 OpenGL 行为是什么 要绘制一维纹理 二维纹理还
  • 如何使用 BufferedReader 对象从 Java 中的一行读取多个整数值?

    我正在使用 BufferedReader 类读取 Java 程序中的输入 我想读取用户的输入 该用户可以在带空格的单行中输入多个整数数据 我想读取整数数组中的所有这些数据 输入格式 用户首先输入他 她想要输入的数字数量 然后在下一行中使用多
  • PyQt5 的 OpenGL 模块和版本控制问题(调用不正确的 _QOpenGLFunctions_(ver))

    我一直在努力得到PyQt5 helloGL 示例代码 https github com baoboa pyqt5 blob master examples opengl hellogl py编译 当我尝试构建解决方案时 我得到 Traceb
  • 将四元数旋转转换为旋转矩阵?

    基本上 给定一个四元数 qx qy qz qw 我如何将其转换为OpenGL旋转矩阵 我也对哪个矩阵行是 向上 向右 向前 等感兴趣 我有一个四元数的相机旋转 我需要在向量中 以下代码基于四元数 qw qx qy qz 其中顺序基于 Boo
  • 在 Ruby 中跨多个类实例记忆数据的好方法是什么?

    考虑 生成数据的对象的许多实例 如果每次运行只生成一次该数据 那就太好了 class HighOfNPeriods lt Indicator def generate data indicator data DataStream new 0
  • OpenGL - 两个纹理的幂

    OpenGL 使用二次幂纹理 这是因为由于 MipMapping 某些 GPU 只接受 2 的幂纹理 当绘制比实际更大的纹理时 使用这些二次方纹理会导致问题 我想到了一种方法来解决这个问题 即仅在我们使纹理小于实际大小时使用 PO2 比率
  • JavaScript 中“键”的类型是什么?

    当我失去焦点并开始思考一个愚蠢的问题时 我遇到了这样的时刻 var a b value b 的类型是什么 我的意思不是 值 的类型 而是标记为 b 的实际键 背景 当我必须创建一个字符串键时 我开始想知道这一点 var a b value

随机推荐

  • 将 pandas 数据框中的所有行除以特定行

    我有一个 pandas 数据框 如下所示 Sample name C14 Cer mean C16 Cer mean C18 Cer mean C18 1 Cer mean 0 1 1 0 124749 0 285659 35 302029
  • EC2 启动时自动启动 docker-compose

    我有一个 Linux AMI 2 AWS 实例 其中包含一些通过 docker compose 编排的服务 并且我使用 docker compose up 或 docker compose start 命令来启动它们 现在我每天都会自动启动
  • 通过 ssh 包装命令:如何管理复杂的引号?

    我使用 HPC 集群 计算节点无法访问互联网 只能访问前端 所以我想包装所有需要访问互联网的命令 以便在正面执行它们 例如 对于 wget bin bash ssh frontal bin wget gt 工作正常 我必须包装这个 bq g
  • 生成所有可能的深度为 N 的树?

    我有几种不同类型的树节点 每个节点可能有 0 到 5 个子节点 我正在尝试找出一种算法来生成所有可能的深度 Here s a Python program I wrote up that I think does what you re a
  • ANTLR 词法分析器如何消除其规则的歧义(或者为什么我的解析器会产生“输入不匹配”错误)?

    Note 这是一个自答问题旨在为 ANTLR 用户最常犯的错误之一提供参考 当我测试这个非常简单的语法时 grammar KeyValues keyValueList keyValue keyValue key IDENTIFIER val
  • 如何在可能没有托管配置提供程序的应用程序中使用托管配置?

    我正在开发一个可在 2 个不同的 Android 环境 消费者和企业市场 中运行的应用程序 假设它是一个短信应用程序 需要管理十几个配置参数 第一个环境是未启用 Android Enterprise AfW 功能的标准 Android 设备
  • 在哪里可以找到 http url 方案 rfc

    在RFC3986中 它排除了RFC1738中定义各个URI方案的特定语法的部分 并且文档说这些部分将作为单独的文档进行更新 但我找不到它 任何人都可以告诉我在哪里可以找到更新的单独文档 我想写一个HTTP URL方案解析强文本 所以我需要引
  • 哪个 NuGet 包包含 System.Web.Routing?

    我想使用 NuGet 处理我的 Web 应用程序引用 哪个 NuGet 包包含 System Web Routing I ve 搜索了 NuGet 网站 它不在 NuGet 包中 在里面System Web程序集 NET Framework
  • Django 不会为新的应用程序模型创建新的 sqlite 表

    我对 Django 很陌生 我遇到了新模型 以及我制作的新应用程序 博客 的问题 配置模型和 makemigration 后 表 blog post 不存在 这是我所做的所有过程 我正在遵循官方教程 这是我的博客 models py fro
  • JQuery - 删除具有特定类的类子元素[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 如果我有这个 html div class parent div class child div div class blackSheep div div class child di
  • Delphi中将字符串分割成固定长度部分的快速方法

    我需要将一个字符串拆分为具有固定长度子字符串的 TStringList 目前我使用 procedure StrToStringList ASource string AList TStrings AFixedLen Integer begi
  • Python隐藏控制台窗口

    我创建了一个小的 Python 应用程序 我希望它在进程中间隐藏控制台窗口 因此将其重命名为 pyw 并不能解决问题 最好有某种功能来最小化窗口 有什么想法吗 在 Windows 上您可以使用win32api from win32 impo
  • SWIFT 如何创建 NSCoding 子类并从另一个类调用它?

    我在 NSCoding 上发现了这段黑色代码 它几乎确实想要我想要的 我找到它的地方的链接如下 如何在其他类中创建 NSCoding 类和用户 下面的代码不起作用 我希望有人能帮助我解决这个问题 import Foundation impo
  • 使用 R 抓取“aspx”页面

    有人可以帮助我或给我一些建议如何从此网址中抓取表格 https www promet si portal sl stevci prometa aspx 我尝试使用说明和包rvest httr 和 html但对于这个特定的网站没有任何成功 谢
  • 第二次调用表单时未处理表单加载事件

    为什么以下不起作用 两种形式 第一个调用第二个 第二个表单上有一个 DataGridView 它没有列 它们是由程序添加的 以及一个 DataGridViewButtonColumn 第一次调用 Form2 效果很好 但第二次调用它时 按钮
  • TextView 中有超链接文本

    我想在我的页面中添加一些文本作为超链接TextView就像下图一样 另外 与上图类似 我希望通过超链接打开相应的设置窗口 这怎么可能 编辑 为了让我的问题更具体 我想在单击这些文本时打开蜂窝设置 所以 我不知道在 String 对象中使用
  • S3 VPC 终端节点存储桶策略

    我有多个源自单个 VPC 的 EC2 实例 我想为我的 s3 分配一个存储桶策略 以确保仅允许该 VPC 流量访问该存储桶 因此我为该 VPC 创建了一个端点 并添加了所有路由表中的策略和路由 我向我的存储桶分配了以下策略 Version
  • 如何使用 Visual Basic 2010 Express Edition 编译 x64

    我发现了一个关于 Visual C 的论坛帖子 Visual C 2008 Express 版和 64 位目标 但是我如何在下面开发x64应用程序Visual Basic 2010 精简版 我没有安装 Visual Basic 2010 E
  • 动态更改 AWS CodePipeline 上的分支

    我正在寻找一个关于如何在 CodePipeline 中运行参数化 自定义 构建的良好解决方案 其中分支可以动态更改 关于这个问题的一些背景知识 我需要一个将在某个分支上启动的按需环境 我们已经使用 Bamboo CI 服务器作为基础设施的一
  • 使用 glBufferData 后可以删除浮点数组吗?

    我正在研究OpenGL API 我想问你是否可以在将浮点数组传递给OpenGL后删除它 示例代码 GLuint VBO float vertices new float 2 vertices 0 0 0f vertices 1 1 0f g