OpenGL 缓冲区对象

OpenGL笔记之缓冲区对象(基础篇上) OpenGL笔记 缓冲区对象是一个强大的概念,它允许应用程序快速方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对象。 缓冲区有许多不同的用途,它能保存顶点数据、像素数据、纹理数据、着色器处理的输入、或者不同着色器阶段的输出。 缓冲区保存在GPU内存中,它们提供高速和高效的访问。在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU中存储数据。另外,在G 阅读详情

OpenGL 缓冲区对象

OpenGL红宝书 p57 2.7节 缓冲区对象

OpenGL 1.5 版本增加了缓冲区对象(bufferobject),允许应用程序显式地指定把哪些数据存储在图形服务器中。OpenGL是按照客户机-服务器模式设计的,假设应用程序位于客户机,而图形服务器处于别的计算机,于是每次要渲染图像就要从客户机取数据。在一般情况下,可以认为OpenGL需要从内存读取数据到显存用于计算。

OpenGL 1.5 :顶点数据可以存储在服务器端的缓冲区对象中。

OpenGL 2.1 :像素数据(纹理贴图或者像素块)的支持。

OpenGL 3.1 :同意缓冲对象(uniformbuffer object),用于着色器。

 

创建缓冲区对象

返回那个当前未使用的名称,buffers是一个存储名称的数组,你不必指定到底是什么名称。

void glGenBuffers(GLsizei n,GLuint *buffers);

 

激活缓冲区对象

首先要将其绑定。绑定缓冲区对象表示选择未来的操作(对数据进行初始化或者使用缓冲区对象进行渲染)将影响哪个缓冲区对象。

void glBindBuffer(GLenum target,GLuintbuffer);

target 指定buffer类型,buffer指前面生成的缓冲区id。

作用:

1、  buffer是一个首次使用的非零整数时,它创建一个新的缓冲区对象,把buffer分配给这个缓冲区对象用作名字。

2、  绑定到一个以前创建过的缓冲区对象,这个缓冲区对象成为活动对象。

3、  绑定到一个值为零的buffer时,OpengGL停止使用缓冲区对象。

 

绑定后进行数据分配和初始化缓冲区对象

void glBufferData(GLenum target,GLsizeiptrsize,const GLvoid *data,GLenum usage);

分配size个存储单位的OpenGL服务器内存(显存),data是指向内存数据库的指针,usage指示如何读写数据块。这些数据块是否常常更新,适用于绘制还是用于计算,通过设置可以优化性能。

 

更新缓冲区对象

1、  用另一个缓冲区替换当前绑定的缓冲区的一部分。

void glBufferSubData(GLenum target,GLintptroffset,GLsizeiptr size,const GLvoid *data);

2、  glMapBuffer()返回一个指向缓冲区对象的指针,可以在这个缓冲区对象中写入新值,就像对数组进行赋值一样。glMapBuffer()提供了对缓冲区对象中的整个数据集合的访问。如果需要修改缓冲区的大多数数据,这种方法很有用。但是,如果一个很大的缓冲区只需要更新很小的一部分值,这种方法效率很低。

GLvoid *glMapBuffer(GLenum target,GLenum access);
GLboolean glUnmapBuffer(GLenum target);//完成了对数据存储的访问。
GLvoid *glMapBufferRange(GLenum target,GLintptroffset,GLsizeiptr length,GLbitfield access);//offset 和 length 指定了映射范围
GLvoid *glFlushMappedBufferRange(GLenum target,GLintptroffset,GLsizeiptr length);//表示一个缓冲区范围中的值已经修改

缓冲区对象之间的复制数据

void glCopyBufferSubData(GLenum readbuffer,GLenum writebuffer,
                         GLintptrreadoffset, GLintptr writeoffset,
                         GLsizeiptrsize);

清除缓冲区对象

void glDeleteBuffers(GLsizei n,const GLuint*buffers);//删除n个缓冲区对象。

----------------------------------------------------------------------------------------------------------------------

QGLbuffer提供了创建和操作openGL缓冲区对象的功能。

QGLBuffer buffer1(QGLBuffer::IndexBuffer);
buffer1.create();
QGLBuffer buffer2 = buffer1;

缓冲区之间的复制是浅复制,当拷贝被修改是,原始数据一并被修改。

 

enum QGLBuffer::Access

l  QGLBuffer::ReadOnly

l  QGLBuffer::WriteOnly

l  QGLBuffer::ReadWrite

 

enum QGLBuffer::Type

l  QGLBuffer::VertexBuffer

l  QGLBuffer::IndexBuffer

l  QGLBuffer::PixelPackBuffer

l  QGLBuffer::PixelUnpackBuffer

 

enum QGLBuffer::UsagePattern

QGLBuffer::StreamDraw

QGLBuffer::StreamRead

QGLBuffer::StreamCopy

QGLBuffer::StaticDraw

QGLBuffer::StaticRead

QGLBuffer::StaticCopy

QGLBuffer::DynamicDraw

QGLBuffer::DynamicRead

QGLBuffer::DynamicCopy

 

直接用QGLBuffer()构造函数创建一个新的缓冲区对象。

用create()函数在GL server中穿件缓冲区。

用allocate()分配缓存大小。

用destroy()销毁缓冲区,包括缓冲区中的存储块。

用bind()和release()绑定和解绑缓冲区。

openGL 缓冲区对象API 这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录 阅读详情

相关推荐

OpenGL编程指南-->OpenGL缓冲区对象

OpenGL 缓冲区对象     今天学习了一下缓冲区对象.....    OpenGL是按照客户机-服务器模式设计的,在OpenGL需要数据的时候,都必须把数据从客户机内传输到服务器。    缓冲区对象,允许应用程序现实的指定把哪些数据存储在图形服务器。   1.创建缓冲区对象     glGenBuffers():OpenGL分配n个当前未使用的名称(非 0),表示缓冲区对象。

j123kaishichufa的专栏 1416

OpenGL学习总结-数据缓存区(四)

第二部分里介绍了缓冲区对象(Buffer Object), 缓冲区对象是存储在 GPU 中的内存区域,用于存放顶点数据、索引数据、纹理数据等。OpenGL 使用缓冲区对象来高效管理和传输数据。作用:缓冲区对象通过在 GPU 上存储数据,提高了数据传输和渲染的效率。

pplander的专栏 855

【我的OpenGL学习进阶之旅】介绍一下 映射缓冲区对象和复制缓冲区对象

一、介绍映射缓冲区对象 通过前面的博客 【我的OpenGL学习进阶之旅】顶点属性、顶点数组 https://ouyangpeng.blog.youkuaiyun.com/article/details/121388737 【我的OpenGL学习进阶之旅】介绍顶点缓冲区对象VBO和元素数组缓冲区对象EBO,并对比使用VBO和不使用VBO绘制三角形的效果 https://ouyangpeng.blog.youkuaiyun.com/article/details/121726513 【我的OpenGL学习进阶之旅】介绍 顶点数组对象

字节卷动 1501

openGLES3.0之glMapBufferRange()函数详解

官网解释 翻译 Name glMapBufferRange — map a section of a buffer object's data store 功能:将缓冲区对象数据存储映射到应用程序的地址空间,他可以代替glBufferData或者 glBufferSubData函数,以减少程序内存占用 C Specification void *glMapBufferRange( GLenumtarget, G...

aoxuestudy的专栏 5800

OpenGL 缓冲区对象 API

通过以上步骤,我们可以使用 OpenGL 缓冲区对象 API 来管理和使用数据缓冲区。它们提供了高效的数据传输和访问方式,对于实现诸如顶点缓冲区对象(Vertex Buffer Objects,VBOs)和像素缓冲区对象(Pixel Buffer Objects,PBOs)等功能非常有用。本文将介绍 OpenGL 缓冲区对象的基本概念和使用方法,并提供相应的源代码示例。首先,我们需要创建一个缓冲区对象,可以使用 glGenBuffers 函数生成一个缓冲区对象的标识符。如有任何疑问,请随时提问。

NckyPytorch的博客 178

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1159

OpenGL缓冲对象:glMapBufferRange、glMapNamedBufferRange、glMapBuffer、glMapNamedBuffer简介

OpenGL缓冲对象:glMapBufferRange、glMapNamedBufferRange、glMapBuffer、glMapNamedBuffer简介

2154

802.11ax 的OFDMA资源分配详解

802.11ax 引入的最重要的技术就是OFDMA。OFDMA中引入了RU(资源块)概念,也就是20Mhz/40Mhz/80Mhz/160Mhz的带宽可以切割成不同尺寸的RU,分配给不同的用户使用,这样就大大提高了频谱资源的利用率。 常见的RU尺寸有26/52/102/242/484/996,单位是子载波,每个子载波是78.125Khz,这样20Mhz的带宽可以划分为如下图所示的不同RU大小。 按照11ax规范的要求,上下行的数据传输都可以由AP来统一调度,这样上下行的OFDM...

weixin_43408952的博客 1万+

OpenGL 中glMapBufferRange 使用

今天简单记录glMapBufferRange例子,不多写了,这个函数的目的就是链接buffer中的数据可以访问,并在外边改变数据。 glMapBufferRange — 映射缓冲区对象的数据存储区的一部分 GL_MAP_READ_BIT指示返回的指针可用于读取缓冲区对象数据。如果使用指针查询不包含该标志的映射,则不会产生GL错误,但是结果是不确定的,并且可能发生系统错误(可能包括程序终止)。 GL_MAP_WRITE_BIT指示返回的指针可用于修改缓冲区对象数据。如

比卡丘不皮的博客 2337

ANSYS软件二次开发(2):二次开发环境搭建与配置

ADK是ANSYS提供的一个开发工具包,它包含了用于二次开发的API、示例代码和开发指南。ADK支持Python和Tcl,但Python因其易用性和强大的社区支持,成为首选。在ANSYS软件中,自定义菜单与工具栏是实现二次开发的重要途径之一,它允许用户根据自己的需求和工作流程,创建个性化的操作界面。通过自定义菜单与工具栏,可以将常用的功能、自定义的脚本或宏命令整合到一起,提高工作效率。原因:材料参数输入错误,或者模型的物理假设与实际情况不符。解决方案仔细校验材料参数,确保与实验数据一致。

kkchenjj的博客 2206

材料力学数值方法:细观力学模拟:材料断裂与损伤的细观模拟_2024-08-05_16-13-13.Tex

弹性理论是材料力学的一个重要分支,主要研究在外部载荷作用下,材料如何发生弹性变形以及如何恢复原状。这一理论基于连续介质力学,将材料视为由无数连续点组成的连续体,每个点都遵循一定的力学规律。弹性理论的核心是胡克定律,它表明在弹性范围内,应力与应变成正比关系。损伤变量ddd通常定义为0到1之间的值,其中d0d=0d0表示材料未损伤,d1d=1d1表示材料完全损伤。损伤变量可以基于不同的物理量定义,如裂纹密度、孔隙率或微观缺陷的分布。

939

OpenGL-缓冲区对象

关于缓冲区对象 其实关于缓冲区对象的这个概念其实很广,比如说有帧缓冲区、有顶点缓冲区、像素缓冲区、纹理缓冲区等等。缓冲区对象是保存在GPU内存中的,我们能够去高效的访问它,在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU当中去存储数据,以及在GPU中更新数据常常是需要去重新加载整个对象的,在系统内存和GPU内存之间来回移动数据可能是一个极其缓慢的过程 创建缓冲区其实非...

rv0p111 983

51智能小车(双轮)

前几天接了个小单子,是一个基于51单品机的作品,发现自己对小车的认识还是不太🆗。也算是完成了任了的;欢迎各位小伙伴来多多交流,大家一起进步。最后有需要单片机课程设计的小伙伴滴滴我哦(有偿)。企鹅:2397746994。

qq_56992543的博客 2348

OpenGL学习之缓冲区对象

缓冲区对象是一个强大的概念,它允许应用程序迅速方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对象。 缓冲区:缓冲区有很多不同的用途,它们能够保存顶点数据、像素数据、纹理数据、着色器处理的输入,或者不同阶段着色器阶段的输出。 缓冲区保存在GPU内存中,它们提供高速和高效的访问。在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU中存储数据。另外,在GPU...

Estelle 2327

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1735

cartographer ceres后端优化

这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。

南北粉面馆 803

OPenGL中的缓冲区对象

在许多OpenGL操作中,我们都向OpenGL发送一大块数据,例如向它传递需要处理的顶点数组数据。传输这种数据可能非常简单,例如把数据从系统的内存中复制到图形卡。但是,由于OpenGL是按照客户机-服务器模式设计的,在OpenGL需要数据的任何时候,都必须把数据从客户机内存传输到服务器。如果数据并没有修改,或者客户机和服务器位于不同的计算机(分布式渲染),数据的传输可能会比较缓慢,或者是冗余的。

MZYang272的专栏 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OpenGL缓冲区对象

一:为什么要有opengl缓冲区对象 前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。 二:如何创建和使用缓冲区对象 1.创建缓冲区对象     glGenBuffers():OpenGL分配n个当前未使用的名称(非 0

愿世界和平的IT劝退师 622

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OpenGL中的缓冲区对象

文章转自:http://blog.youkuaiyun.com/mzyang272/article/details/7655464 在许多OpenGL操作中,我们都向OpenGL发送一大块数据,例如向它传递需要处理的顶点数组数据。传输这种数据可能非常简单,例如把数据从系统的内存中复制到图形卡。但是,由于OpenGL是按照客户机-服务器模式设计的,在OpenGL需要数据的任何时候,都必须把数据从客户机内存

time-flies 695

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

opengl缓冲区对象,glBufferSubData,glMapBuffer

一:为什么要有opengl缓冲区对象 前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。 二:如何创建和使用缓冲区对象 1.创建缓冲区对象     glGenBuffers():OpenGL分配n个当前未使用的名称(非 0),表示

keep_moving_cqu的专栏 9446

OpenGL Framebuffers Object:帧缓冲区对象详解

帧缓冲区对象 FrameBuffers Object(FBO) 一 概念 =============================================================== 迄今为止,我们使用了好几种屏幕缓冲区:颜色缓冲区,深度缓冲区,模板缓冲区。 这些缓冲区存储在GPU的内存中,称为帧缓冲区(framebuffer). OpenGL允许我们创建自己的帧缓冲区。 以前的渲染是这样:在渲染缓冲区顶部有一个默认的帧缓冲区(default framebu...

aDiligentCigarette的博客 1992
上一篇: c++ 11 新特性
下一篇: 程序性能分析-使用vs2008的分析工具
doctorsc
博客等级 码龄19年 51粉丝 28原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值