![]() |
Dandelion 1.1.2
A light-weight 3D builder for educational usage
|
对 OpenGL 数组缓冲 (Array Buffer) 的封装。 更多...
#include <gl.hpp>
Public 成员函数 | |
ArrayBuffer (GLenum buffer_usage, unsigned int layout_location) | |
ArrayBuffer (const ArrayBuffer &other)=delete | |
ArrayBuffer & | operator= (ArrayBuffer &other)=delete |
ArrayBuffer (ArrayBuffer &&other) | |
~ArrayBuffer () | |
template<typename... Ts> | |
void | append (Ts... values) |
void | update (size_t index, const Eigen::Vector3f &value) |
更新指定位置的 3 个 float 数据,仅限 T = float 时使用,否则行为未定义。 | |
std::size_t | count () const |
void | bind () |
void | release () |
void | specify_vertex_attribute () |
void | disable () |
void | to_gpu () |
Public 属性 | |
unsigned int | descriptor |
unsigned int | usage |
unsigned int | layout_location |
std::vector< T > | data |
对 OpenGL 数组缓冲 (Array Buffer) 的封装。
Array Buffer 通常用于创建顶点缓冲对象 (Vertex Buffer Object, VBO),用于存储顶点属性。 与 VertexArrayObject 对象不同的是,ArrayBuffer 对象持有内存数据副本。 如果希望更新显存中的数据,首先应当直接修改它持有的 data 成员,然后调用 to_gpu 复制到显存。
T | 此缓冲区中存放的数据类型,应当指定为基本数据类型,否则行为未定义。 |
size | 每个顶点的数据个数,例如 size 是 3 表示缓冲区中每三个数据是一组, 这一组数据属于同一个顶点。 |
GL::ArrayBuffer< T, size >::ArrayBuffer | ( | GLenum | buffer_usage, |
unsigned int | layout_location ) |
调用 glGenBuffers 创建 Array Buffer,并设置此缓冲区绘制时的 hint 信息。
buffer_usage | 绘制 hint 信息,参考 usage 属性。 |
|
delete |
禁止拷贝构造。
GL::ArrayBuffer< T, size >::ArrayBuffer | ( | ArrayBuffer< T, size > && | other | ) |
为满足 MoveInsertable 编写的移动构造函数,参考 VertexArrayObject 的移动构造函数。
GL::ArrayBuffer< T, size >::~ArrayBuffer | ( | ) |
调用 glDeleteBuffers 删除 Array Buffer。
void GL::ArrayBuffer< T, size >::append | ( | Ts... | values | ) |
将 size 个数据附加到现有数据的末尾。
void GL::ArrayBuffer< T, size >::bind | ( | ) |
绑定 ArrayBuffer。
std::size_t GL::ArrayBuffer< T, size >::count | ( | ) | const |
统计这个 ArrayBuffer 中有多少个顶点的数据,也就是数据个数除以 size。
void GL::ArrayBuffer< T, size >::disable | ( | ) |
使 layout_location 位置的属性失效。
|
delete |
禁止拷贝赋值。
void GL::ArrayBuffer< T, size >::release | ( | ) |
解绑 ArrayBuffer。
void GL::ArrayBuffer< T, size >::specify_vertex_attribute | ( | ) |
指定数据格式并使 layout_location 位置的属性生效。
void GL::ArrayBuffer< T, size >::to_gpu | ( | ) |
将数据传送到 GPU,已经包含了绑定操作,但不包含解绑操作。
void GL::ArrayBuffer< T, size >::update | ( | size_t | index, |
const Eigen::Vector3f & | value ) |
更新指定位置的 3 个 float 数据,仅限 T = float 时使用,否则行为未定义。
index | 要更新的顶点索引 |
value | 新的值 |
std::vector<T> GL::ArrayBuffer< T, size >::data |
内存中的数据副本。
unsigned int GL::ArrayBuffer< T, size >::descriptor |
OpenGL Array Buffer 的名字 (name),是它的唯一标识。
unsigned int GL::ArrayBuffer< T, size >::layout_location |
这个 ArrayBuffer 存储的属性在 vertex shader 中对应的位置。
unsigned int GL::ArrayBuffer< T, size >::usage |
绘制时的 hint 信息,可以是 GL_STATIC_DRAW / GL_DYNAMIC_DRAW / GL_STREAM_DRAW 其中之一。根据 OpenGL 标准,这只是一个提示信息,不具有任何强制性。