Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
GL::ArrayBuffer< T, size > 模板结构体 参考

对 OpenGL 数组缓冲 (Array Buffer) 的封装。 更多...

#include <gl.hpp>

Public 成员函数

 ArrayBuffer (GLenum buffer_usage, unsigned int layout_location)
 
 ArrayBuffer (const ArrayBuffer &other)=delete
 
ArrayBufferoperator= (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
 

详细描述

template<typename T, std::size_t size>
struct GL::ArrayBuffer< T, size >

对 OpenGL 数组缓冲 (Array Buffer) 的封装。

Array Buffer 通常用于创建顶点缓冲对象 (Vertex Buffer Object, VBO),用于存储顶点属性。 与 VertexArrayObject 对象不同的是,ArrayBuffer 对象持有数据。如果希望更新一个 ArrayBuffer 中的数据,首先应当直接修改它持有的 std::vector<T>,然后调用 to_gpu 复制到显存。

模板参数
T此缓冲区中存放的数据类型,应当指定为基本数据类型,否则没有实际意义。
size每个顶点的数据个数,例如 size 是 3 表示缓冲区中每三个数据是一组, 这一组数据属于同一个顶点。

构造及析构函数说明

◆ ArrayBuffer() [1/2]

template<typename T, std::size_t size>
GL::ArrayBuffer< T, size >::ArrayBuffer ( GLenum buffer_usage,
unsigned int layout_location )

调用 glGenBuffers 创建 Array Buffer,并设置此缓冲区绘制时的 hint 信息。

参数
buffer_usage绘制 hint 信息,参考 usage 属性。

◆ ArrayBuffer() [2/2]

template<typename T, std::size_t size>
GL::ArrayBuffer< T, size >::ArrayBuffer ( ArrayBuffer< T, size > && other)

为满足 MoveInsertable 编写的移动构造函数,参考 VertexArrayObject 的移动构造函数。

◆ ~ArrayBuffer()

template<typename T, std::size_t size>
GL::ArrayBuffer< T, size >::~ArrayBuffer ( )

调用 glDeleteBuffers 删除 Array Buffer。

成员函数说明

◆ append()

template<typename T, std::size_t size>
template<typename... Ts>
void GL::ArrayBuffer< T, size >::append ( Ts... values)

size 个数据附加到现有数据的末尾。

◆ bind()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::bind ( )

绑定 ArrayBuffer。

◆ count()

template<typename T, std::size_t size>
std::size_t GL::ArrayBuffer< T, size >::count ( ) const

统计这个 ArrayBuffer 中有多少个顶点的数据,也就是数据个数除以 size

◆ disable()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::disable ( )

使该 location 位置的属性无效。

◆ release()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::release ( )

解绑 ArrayBuffer。

◆ specify_vertex_attribute()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::specify_vertex_attribute ( )

指定数据格式并使该 location 位置的属性生效。

◆ to_gpu()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::to_gpu ( )

将数据传送到 GPU,调用前无需绑定。

◆ update()

template<typename T, std::size_t size>
void GL::ArrayBuffer< T, size >::update ( size_t index,
const Eigen::Vector3f & value )

更新指定位置的 size 个数据。

参数
index要更新的顶点索引
value新的值

类成员变量说明

◆ layout_location

template<typename T, std::size_t size>
unsigned int GL::ArrayBuffer< T, size >::layout_location

这个 ArrayBuffer 存储的属性在 vertex shader 中对应的位置。

◆ usage

template<typename T, std::size_t size>
unsigned int GL::ArrayBuffer< T, size >::usage

绘制时的 hint 信息,可以是 GL_STATIC_DRAW / GL_DYNAMIC_DRAW / GL_STREAM_DRAW 其中之一。根据 OpenGL 标准,这只是一个提示信息,不具有任何强制性。


该结构体的文档由以下文件生成: