首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用glBufferData编辑OpenGL VBO会删除部分数据

glBufferData函数是OpenGL中用于创建和初始化顶点缓冲对象(VBO)的函数之一。它可以用来分配内存并将数据复制到VBO中。然而,使用glBufferData函数编辑VBO时,会删除VBO中的部分数据。

具体来说,glBufferData函数的作用是重新分配VBO的内存空间,并将新的数据复制到VBO中。如果VBO中原有的数据不再被新的数据所覆盖,那么这部分原有数据将会被删除。

这种行为可能会导致数据丢失或者不一致的问题。为了避免这种情况发生,我们可以使用glBufferSubData函数来编辑VBO,而不是使用glBufferData函数。glBufferSubData函数可以在不删除原有数据的情况下,仅仅更新VBO中的部分数据。

总结一下,使用glBufferData函数编辑OpenGL VBO会删除部分数据,可能导致数据丢失或者不一致的问题。为了避免这种情况,建议使用glBufferSubData函数来编辑VBO。

关于OpenGL和VBO的更多信息,您可以参考腾讯云的OpenGL产品文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenGL学习笔记 (二)- 顶点与绘制指令

OpenGL采用了数学中“正向”的概念,也就是说对于(凸)多边形的正面,从屏幕上观察,它的顶点是以逆时针排列的。 顶点 顶点(vertex)实际上就是坐标,是几何图元的组成部分。...在OpenGL中,使用四个分量(齐次坐标)来描述一个位置。不过,一个顶点还可以同时具备其他的数据,比如顶点处的法向量、对应的纹理坐标等等。 OpenGL缓冲 现代OpenGL广泛应用缓冲。...之后我们就需要使用glBufferData来真正的传输数据了。glBufferData的对象并不是缓冲对象名称,而是一个目标。...由于现代OpenGL的顶点数据都存在于缓冲对象中(曾经可以使用glVertexPointer函数),所以现在VAO已经不自带数据了,因此它需要绑定一个VBO。...交叉存储的顶点数据(图源Reference) 不过交叉存储也是有缺点的。在对齐的时候,交叉存储消耗更多空间。此外,交叉存储是否能提升效率还有待数据验证。

1.4K10

一看就懂的 OpenGL 基础概念(3):各种 O 之 VBO、EBO、VAO丨音视频基础

7.1、VBO 和 EBO 在 OpenGL 开发中,用于绘制的顶点数据首先是存储在 CPU 内存中的,比如我们在《RenderDemo(1):用 OpenGL 画一个三角形》中的三角形的 3 个顶点数据..., VBO); // 把新创建的 VBO 绑定到 GL_ARRAY_BUFFER 目标上,同时也绑定到了 OpenGL 渲染管线上 glBufferData(GL_ARRAY_BUFFER, sizeof...在《RenderDemo(1):用 OpenGL 画一个三角形》的 iOS Demo 中我们用到了 VBO。 2)我们接着来看看 EBO 的使用: 假设我们不再绘制一个三角形而是绘制一个矩形。...对象 glBindBuffer(GL_ARRAY_BUFFER, VBO); // 把新创建的 VBO 绑定到 GL_ARRAY_BUFFER 目标上,同时也绑定到了 OpenGL 渲染管线上 glBufferData..., VBO); // 把顶点数组复制到缓冲中供 OpenGL 使用 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW

99410

音视频面试题集锦 2022.09

4)为什么离屏渲染造成性能损耗? 当使用离屏渲染的时候很容易造成性能消耗,因为离屏渲染单独在内存中创建一个屏幕外缓冲区并进行渲染,而屏幕外缓冲区跟当前屏幕缓冲区上下文切换是很耗性能的。...图形渲染管线可以大致被划分为两个主要部分:第一部分把你的 3D 坐标转换为 2D 坐标;第二部分是把 2D 坐标转变为实际的有颜色的像素。 6)OpenGL 渲染管线主要包含哪些部分?...OpenGL 渲染管线中着色器允许开发者自己配置,这样我们就可以使用 GLSL(OpenGL Shading Language)来编写自己的着色器替换默认的着色器,从而更细致地控制图形渲染管线中的特定部分...9)什么是 VBO、EBO 和 VAO? 可以认为它们是在 OpenGL 中处理数据的三大类缓冲内存对象。...; glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof

1K20

1.opengl绘制三角形

就像OpenGL中的其它对象一样,这个缓冲有一个独一无二的ID,所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象: unsigned int VBO; glGenBuffers...它有三种形式: GL_STATIC_DRAW :数据不会或几乎不会改变(一次修改,多次使用) GL_DYNAMIC_DRAW:数据频繁修改(多次修改,多次使用) GL_STREAM_DRAW :数据每次绘制时都会改变...(每帧都不同,一次修改,一次使用) 现在我们已经把顶点数据储存在显卡的内存中,用VBO这个顶点缓冲对象管理。...下面我们创建一个顶点和片段着色器来真正处理这些数据。...把顶点数组复制到缓冲中供OpenGL使用 glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices

1.1K30

OpenGL自制游戏引擎-HelloTriangle

顶点着色器接着处理我们在内存中指定数量的顶点。 通过顶点缓冲对象(Vertex Buffer Objects, VBO)管理这个内存,它会在GPU内存(通常被称为显存)中储存大量顶点。...就像OpenGL中的其它对象一样,这个缓冲有一个独一无二的ID,所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象: unsigned int VBO; glGenBuffers...glBufferData是一个专门用来把用户定义的数据复制到当前绑定缓冲的函数。...unsigned int VBO; glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData...有了这些信息我们就可以使用glVertexAttribPointer函数告诉OpenGL该如何解析顶点数据使用glEnableVertexAttribArray,以顶点属性位置值作为参数,启用顶点属性

1.4K20

OpenGL与CUDA互操作方式总结

本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直上不来。于是就尝试把计算工作分解成小的任务,使用核函数在CUDA中加速计算。...一般这种情况下注册的是VBO和PBO,VBO一般用于存储顶点坐标、索引等数据;PBO则一般用于存储图像数据,因此称作Pixel Buffer Object。...CUDA核函数中进行处理 CUDA释放资源,在OpenGL使用Buffer Object 下面就以代码为例,讲讲两种方式的异同: (1)OpenGL PBO/VBO在CUDA中的使用 // 初始化Buffer...后即在CUDA中注册Buffer Object glBindBuffer(GL_ARRAY_BUFFER, this->VBO[0]); glBufferData(GL_ARRAY_BUFFER, sizeof...[0], cudaGraphicsRegisterFlagsNone); glBindBuffer(GL_ARRAY_BUFFER, this->VBO[1]); glBufferData(GL_ARRAY_BUFFER

2.1K60

OpenGL现代编程第二课——第一个多边形

下面串接一下上面的概括: 开始绘制图形之前,我们必须先给OpenGL输入一些顶点数据,当然,这些数据是有范围限制的,如范围是-1.0f到1.0f,数据需要是三维的等等。...经过我们手动指定输入数据的哪一个部分对应顶点着色器的哪一个顶点的属性后,之后数据就可以传递给顶点着色器了。...首先要做的第一件事是用着色器语言GLSL(OpenGL Shading Language)编写顶点着色器,然后编译着色器,之后才能在程序中使用它。...,这样批量处理比较科学化,所以就有了VBO对GPU内存的管理;OK,土豆数量够了,接下来把合格的土豆送往各部分土豆切割器,三个土豆变成了N多土豆片,再“编译”土豆片一下,土豆切割部分就完成了;片段着色器就是土豆片口味区分的部分了...glDeleteShader(fragmentShader); //VAO,VBO数据部分 #ifdef TRIANGLE GLfloat vertices[] = {

68110

OpenGL 从入门到成魔-第4章-VAO 和 VBO

注:参考自bilibili系列视频,OpenGL 从入门到成魔-第4章-VAO 和 VBO https://www.bilibili.com/video/BV1zt4y1C7dh OpenGL中的坐标系...告诉openGL,当前操作的VBO是哪个 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 复制顶点数组到缓冲中供...OpenGL使用 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); 告诉OpenGL该如何解析顶点数据...这里参数值应为0,因为在第三步中设置了将数据传递到位置为0的顶点属性中。顶点属性(Vertex Attribute)就是每个输入变量。 glDeleteBuffers() 释放VBO VAO ?...由于OpenGL是个状态机,当绑定当前VAO之后,后面的VBO操作自然而然的都是在该VAO上进行的。 glDeleteVertexArrays 释放VAO

1K40

NDK OpenGL ES 3.0 开发(二十二):PBO

OpenGL PBO(像素缓冲区对象) 类似于 VBO(顶点缓冲区对象),PBO 开辟的也是 GPU 缓存,而存储的是图像数据。...为什么要用 PBO 在 OpenGL 开发中,特别是在低端平台上处理高分辨率的图像时,图像数据在内存和显存之前拷贝往往造成性能瓶颈,而利用 PBO 可以在一定程度上解决这个问题。...不使用 PBO 加载纹理 上图从文件中加载纹理,图像数据首先被加载到 CPU 内存中,然后通过 glTexImage2D 函数将图像数据从 CPU 内存复制到 OpenGL 纹理对象中 (GPU 内存)...绑定为 GL_PIXEL_UNPACK_BUFFER 表示该 PBO 用于将像素数据从程序传送到 OpenGL 中;绑定为 GL_PIXEL_PACK_BUFFER 表示该 PBO 用于从 OpenGL...2 个 PBO 和不使用 PBO 加载图像数据到纹理对象的耗时差别: 使用 2 个 PBO 加载图像数据的耗时 不使用 PBO 加载图像数据的耗时 使用两个 PBO 从帧缓冲区读回图像数据 使用两个

2.4K50

openGL 入门 2--顶点数组对象 VAO 和 缓存对象 VBO

它会在GPU上创建内存用于储存我们的顶点数据,还要配置OpenGL如何解释这些内存,并且指定其如何发送给显卡。顶点着色器接着处理我们在内存中指定数量的顶点。...使用这些缓冲对象的好处是我们可以一次性的发送一大批数据到显卡上,而不是每个顶点发送一次。从CPU把数据发送到显卡相对较慢,所以只要可能我们都要尝试尽量一次性发送尽可能多的数据。...When binding to a buffer value of zero, OpenGL stops using buffer objects for that target....,与 VBO 关联 glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); // 分配缓存对象所需的内存,...将顶点对象的数据 拷贝到 缓存对象 内存中

1K20

现代OpenGL(一):我的第一个OpenGL程序

OpenGL 3.0以前的版本或者使用兼容模式的OpenGL环境,OpenGL包含一个固定管线(fixed-function pipeline),它可以在不使用着色器的环境下处理几何与像素数据。...从OpenGL的几何图元中设置数据,用于构建形状。 2. 使用不同的着色器(shader)对输入的图元数据执行计算操作,判断它们的位置、颜色,以及其他渲染属性。 3....这部分函数用于常规的、核心的图形处理。 OpenGL实用库函数:包含43个函数,以”glu“作为前缀,在任何OpenGL平台上都可以应用。...GLuint VBO; glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(...38-46使用SFML库定义了显示图形的窗口。 49-50初始化GLEW。 53-69定义顶点数据,创建VAO和VBO对象,并在VBO中装载数据

2.1K30
领券