![]() |
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 标准,这只是一个提示信息,不具有任何强制性。