OpenEnroth 2ef3484
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpenGLVertexBuffer< Vertex > Class Template Reference

#include <OpenGLVertexBuffer.h>

Public Member Functions

 OpenGLVertexBuffer ()=default
 
 ~OpenGLVertexBuffer ()
 
 OpenGLVertexBuffer (const OpenGLVertexBuffer &)=delete
 
OpenGLVertexBufferoperator= (const OpenGLVertexBuffer &)=delete
 
 OpenGLVertexBuffer (OpenGLVertexBuffer &&other) noexcept
 
OpenGLVertexBufferoperator= (OpenGLVertexBuffer &&other) noexcept
 
void swap (OpenGLVertexBuffer &other) noexcept
 
template<typename... Attrs>
void reset (GLenum usage, Attrs... attrs)
 
void reset ()
 
void update (std::span< const Vertex > data)
 
void bind () const
 
 operator bool () const
 
bool operator! () const
 

Static Public Member Functions

static void unbind ()
 

Private Member Functions

template<typename MemberType >
void setupAttribute (GLuint location, MemberType Vertex::*ptr)
 

Private Attributes

GLuint _vao = 0
 
GLuint _vbo = 0
 
GLenum _usage = GL_DYNAMIC_DRAW
 

Detailed Description

template<typename Vertex>
class OpenGLVertexBuffer< Vertex >

RAII wrapper for OpenGL VAO/VBO pair with type-safe attribute setup.

Usage:

std::vector<MyVertex> verts;
verts.emplace_back(...);
buffer.setup(GL_DYNAMIC_DRAW, &MyVertex::pos, &MyVertex::texuv, &MyVertex::color);
buffer.upload(verts);
buffer.bind();
glDrawArrays(GL_TRIANGLES, 0, verts.size());
Definition: OpenGLVertexBuffer.h:50
void bind() const
Definition: OpenGLVertexBuffer.h:133

Constructor & Destructor Documentation

◆ OpenGLVertexBuffer() [1/3]

template<typename Vertex >
OpenGLVertexBuffer< Vertex >::OpenGLVertexBuffer ( )
default

◆ ~OpenGLVertexBuffer()

template<typename Vertex >
OpenGLVertexBuffer< Vertex >::~OpenGLVertexBuffer ( )
inline

◆ OpenGLVertexBuffer() [2/3]

template<typename Vertex >
OpenGLVertexBuffer< Vertex >::OpenGLVertexBuffer ( const OpenGLVertexBuffer< Vertex > &  )
delete

◆ OpenGLVertexBuffer() [3/3]

template<typename Vertex >
OpenGLVertexBuffer< Vertex >::OpenGLVertexBuffer ( OpenGLVertexBuffer< Vertex > &&  other)
inlinenoexcept

Member Function Documentation

◆ bind()

template<typename Vertex >
void OpenGLVertexBuffer< Vertex >::bind ( ) const
inline

Bind the VAO for drawing.

◆ operator bool()

template<typename Vertex >
OpenGLVertexBuffer< Vertex >::operator bool ( ) const
inline

Check if the buffer has been initialized.

◆ operator!()

template<typename Vertex >
bool OpenGLVertexBuffer< Vertex >::operator! ( ) const
inline

◆ operator=() [1/2]

template<typename Vertex >
OpenGLVertexBuffer & OpenGLVertexBuffer< Vertex >::operator= ( const OpenGLVertexBuffer< Vertex > &  )
delete

◆ operator=() [2/2]

template<typename Vertex >
OpenGLVertexBuffer & OpenGLVertexBuffer< Vertex >::operator= ( OpenGLVertexBuffer< Vertex > &&  other)
inlinenoexcept

◆ reset() [1/2]

template<typename Vertex >
void OpenGLVertexBuffer< Vertex >::reset ( )
inline

Release OpenGL resources.

◆ reset() [2/2]

template<typename Vertex >
template<typename... Attrs>
void OpenGLVertexBuffer< Vertex >::reset ( GLenum  usage,
Attrs...  attrs 
)
inline

Initialize the VAO/VBO with specified attribute layout.

Parameters
usageGL_STATIC_DRAW, GL_DYNAMIC_DRAW, etc.
attrsPointer-to-member for each vertex attribute (in shader location order).

◆ setupAttribute()

template<typename Vertex >
template<typename MemberType >
void OpenGLVertexBuffer< Vertex >::setupAttribute ( GLuint  location,
MemberType Vertex::*  ptr 
)
inlineprivate

◆ swap()

template<typename Vertex >
void OpenGLVertexBuffer< Vertex >::swap ( OpenGLVertexBuffer< Vertex > &  other)
inlinenoexcept

◆ unbind()

template<typename Vertex >
static void OpenGLVertexBuffer< Vertex >::unbind ( )
inlinestatic

Unbind any VAO. Static since it doesn't depend on instance state.

◆ update()

template<typename Vertex >
void OpenGLVertexBuffer< Vertex >::update ( std::span< const Vertex >  data)
inline

Upload vertex data to the buffer.

Member Data Documentation

◆ _usage

template<typename Vertex >
GLenum OpenGLVertexBuffer< Vertex >::_usage = GL_DYNAMIC_DRAW
private

◆ _vao

template<typename Vertex >
GLuint OpenGLVertexBuffer< Vertex >::_vao = 0
private

◆ _vbo

template<typename Vertex >
GLuint OpenGLVertexBuffer< Vertex >::_vbo = 0
private

The documentation for this class was generated from the following file: