Dandelion 1.1.1
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) |
更新指定位置的 size 个数据。 | |
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 对象持有数据。如果希望更新一个 ArrayBuffer 中的数据,首先应当直接修改它持有的 std::vector<T>
,然后调用 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 属性。 |
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 | ( | ) |
使该 location 位置的属性无效。
void GL::ArrayBuffer< T, size >::release | ( | ) |
解绑 ArrayBuffer。
void GL::ArrayBuffer< T, size >::specify_vertex_attribute | ( | ) |
指定数据格式并使该 location 位置的属性生效。
void GL::ArrayBuffer< T, size >::to_gpu | ( | ) |
将数据传送到 GPU,调用前无需绑定。
void GL::ArrayBuffer< T, size >::update | ( | size_t | index, |
const Eigen::Vector3f & | value ) |
更新指定位置的 size
个数据。
index | 要更新的顶点索引 |
value | 新的值 |
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 标准,这只是一个提示信息,不具有任何强制性。