Tatooine
shaderstoragebuffer.h
Go to the documentation of this file.
1#ifndef TATOOINE_GL_SHADER_STORAGE_BUFFER_H
2#define TATOOINE_GL_SHADER_STORAGE_BUFFER_H
3
4#include <initializer_list>
5#include <iostream>
6#include <vector>
7#include "buffer.h"
8#include "dllexport.h"
9#include "errorcheck.h"
10#include "glincludes.h"
11//==============================================================================
12namespace tatooine::gl {
13//==============================================================================
14template <typename T>
15class shaderstoragebuffer : public buffer<GL_SHADER_STORAGE_BUFFER, T> {
16 //----------------------------------------------------------------------------
17 // typedefs
18 //----------------------------------------------------------------------------
19 public:
22
23 //----------------------------------------------------------------------------
24 // ctors
25 //----------------------------------------------------------------------------
26 public:
28 //----------------------------------------------------------------------------
30 //----------------------------------------------------------------------------
32 : parent_type(std::move(other)) {}
33 //----------------------------------------------------------------------------
35 : parent_type(n, usage) {}
36 //----------------------------------------------------------------------------
37 shaderstoragebuffer(size_t n, const T& initial, buffer_usage usage = default_usage)
38 : parent_type(n, initial, usage) {}
39 //----------------------------------------------------------------------------
40 shaderstoragebuffer(const std::vector<T>& data, buffer_usage usage = default_usage)
41 : parent_type(data, usage) {}
42 //----------------------------------------------------------------------------
43 shaderstoragebuffer(std::initializer_list<T>&& list)
44 : parent_type(std::move(list), default_usage) {}
45
46 //----------------------------------------------------------------------------
47 // methods
48 //----------------------------------------------------------------------------
49 void bind(GLuint index) const {
50 gl::bind_buffer_base(GL_SHADER_STORAGE_BUFFER, index, this->id());
51 }
52 //----------------------------------------------------------------------------
53 static void unbind(size_t index) {
54 gl::bind_buffer_base(GL_SHADER_STORAGE_BUFFER, index, 0);
55 }
56};
57
58//==============================================================================
59} // namespace tatooine::gl
60//==============================================================================
61
62#endif
buffer base class for each of the OpenGL buffer types
Definition: buffer.h:405
Definition: shaderstoragebuffer.h:15
shaderstoragebuffer(std::initializer_list< T > &&list)
Definition: shaderstoragebuffer.h:43
shaderstoragebuffer(size_t n, const T &initial, buffer_usage usage=default_usage)
Definition: shaderstoragebuffer.h:37
shaderstoragebuffer(const std::vector< T > &data, buffer_usage usage=default_usage)
Definition: shaderstoragebuffer.h:40
shaderstoragebuffer(shaderstoragebuffer &&other)
Definition: shaderstoragebuffer.h:31
static void unbind(size_t index)
Definition: shaderstoragebuffer.h:53
static const buffer_usage default_usage
Definition: shaderstoragebuffer.h:21
shaderstoragebuffer(buffer_usage usage=default_usage)
Definition: shaderstoragebuffer.h:27
shaderstoragebuffer(size_t n, buffer_usage usage=default_usage)
Definition: shaderstoragebuffer.h:34
void bind(GLuint index) const
Definition: shaderstoragebuffer.h:49
shaderstoragebuffer(const shaderstoragebuffer &other)
Definition: shaderstoragebuffer.h:29
Definition: ansiformat.h:6
buffer_usage
Definition: buffer_usage.h:8
DLL_API auto bind_buffer_base(GLenum target, GLuint index, GLuint buffer) -> void
auto constexpr index(handle< Child, Int > const h)
Definition: handle.h:119