VolViz
A volume visualization tool
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Buffer.h
Go to the documentation of this file.
1 #ifndef VolViz_Buffer_h
2 #define VolViz_Buffer_h
3 
4 #include "GLdefs.h"
5 #include "Error.h"
6 
7 #include <cstddef>
8 
9 namespace VolViz {
10 namespace Private_ {
11 namespace GL {
12 
14 struct Buffer {
17  inline Buffer(int) noexcept {}
18 
19  inline Buffer() noexcept {
20  glGenBuffers(1, &name);
21  assertGL("Buffer creation failed");
22  }
23 
24  inline ~Buffer() { glDeleteBuffers(1, &name); }
25 
26  Buffer(Buffer const &) = delete;
27  inline Buffer(Buffer &&rhs) noexcept : name(rhs.name) { rhs.name = 0; }
28 
29  inline Buffer &operator=(Buffer &&rhs) noexcept {
30  name = rhs.name;
31  rhs.name = 0;
32  return *this;
33  }
34 
35  inline void bind(GLenum target) const noexcept {
37  assertGL("Failed to bind buffer");
38  }
39 
40  inline static void unbind(GLenum target) noexcept { glBindBuffer(target, 0); }
41 
42  template <class T>
43  void upload(GLenum target, std::size_t size, T const *data,
44  GLbitfield flags) noexcept {
45  bind(target);
46  glBufferData(target, static_cast<GLsizeiptr>(size),
47  static_cast<GLvoid const *>(data), flags);
48  }
49 
50  GLuint name = 0;
51 };
52 
53 } // namespace GL
54 } // namespace Private_
55 } // namespace VolViz
56 
57 #endif // VolViz_Buffer_h
void assertGL(char const *txt) noexcept
Definition: Error.h:17
GLboolean * data
Definition: glad.h:2184
GLenum target
Definition: glad.h:3122
unsigned int GLenum
Definition: glad.h:678
unsigned int GLuint
Definition: glad.h:688
RAII wrapper for OpenGL buffers.
Definition: Buffer.h:14
GLuint name
Definition: Buffer.h:50
GLuint const GLchar * name
Definition: glad.h:2430
#define glGenBuffers
Definition: glad.h:2383
void bind(GLenum target) const noexcept
Definition: Buffer.h:35
Buffer & operator=(Buffer &&rhs) noexcept
Definition: Buffer.h:29
unsigned int GLbitfield
Definition: glad.h:680
Buffer(int) noexcept
Definition: Buffer.h:17
static void unbind(GLenum target) noexcept
Definition: Buffer.h:40
GLsizeiptr size
Definition: glad.h:2387
#define glBindBuffer
Definition: glad.h:2377
GLbitfield flags
Definition: glad.h:3028
~Buffer()
Definition: Buffer.h:24
#define glDeleteBuffers
Definition: glad.h:2380
#define glBufferData
Definition: glad.h:2389
Buffer(Buffer &&rhs) noexcept
Definition: Buffer.h:27
void upload(GLenum target, std::size_t size, T const *data, GLbitfield flags) noexcept
Definition: Buffer.h:43
Buffer() noexcept
Definition: Buffer.h:19