获取OpenGL Buffer里面的数据

简介: 获取OpenGL Buffer里面的数据

developer.aliyun.com/article/117…

从缓存对象中回读数据

glGetBufferSubData

void glGetBufferSubData(   GLenum  target ,   
                            GLintptr  offset , 
                            GLsizeiptr  size , 
                            void * data 
                        ) ;
复制代码

返回当前绑定到target的缓存对象中的部分或者全部数据。

根据硬件的配置,其实也可以通过获取一个指针的形式,直接在应用程序中对OpenGL管理的内存进行访问。当然,获取这个指针的对应函数就是glMapBuffer()。

void* glMapBuffer(GLenum target, GLenum access);

将指定缓冲区对象的整个数据存储映射到客户端的地址空间。

然后,可以根据指定的访问策略,相对于返回的指针直接读取和/或写入数据。

一旦对该缓冲区对象的所有操作完成,将返回指向映射范围开头的指针,

并可用于根据访问值修改和/或查询数据存储的相应范围:

如果发生错误,将返回nulll,

返回的指针值,不能作为GL命令的参数,比如,不能用于指定数组指针,或者指定、查询像素、图片纹理数据,这样做会产生意外的结果,因为性能的考虑,GL并不会检查这种错误的操作行为。

如果访问返回的指针的方式与 指定的访问access 不一样,是不会产生错误的 比如读取映射的权限为GL_WRITE_ONLY,而写入映射的权限为GL_READ_ONLY

但是结果是不确定的,可能会发生系统错误,甚至中止程序。

缓冲对象映射的数据可能不是标准的性能特征。例如,这类映射可能被标记为不可缓存的内存,这种情况下,读取这些数据会非常的慢。 为了确保最佳的性能,客户端应该以

错误码

标题
GL_INVALID_OPERATION(0x502) 缓冲对象在映射状态

`` is generated if the buffer object is in a mapped state.



目录
相关文章
|
异构计算
QT+OpenGL高级数据和高级GLSL
● OpenGL中的缓冲区 对象管理特定的GPU内存 ● 在将缓冲区绑定到特定的缓冲区目标时候赋予它意义 ● OpenGL在内部会保存每个目标(缓冲区)的引用,并且根据目标以不同的方式处理缓冲区。
163 0
|
并行计算 C++
Opengl ES之YUV数据渲染
Opengl ES连载系列
184 0
|
C语言
《OpenGL ES 2.0 Programming Guide》第8章 “最简单的Vertex Buffer Object”示例代码【C语言版】
《OpenGL ES 2.0 Programming Guide》第8章 “最简单的Vertex Buffer Object”示例代码【C语言版】
154 0
|
7月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
144 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
157 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
472 0