Tatooine
linked_list_texture.h
Go to the documentation of this file.
1#ifndef TATOOINE_GL_LINKED_LIST_TEXTURE_LIST
2#define TATOOINE_GL_LINKED_LIST_TEXTURE_LIST
3//==============================================================================
6#include "pixelunpackbuffer.h"
8//==============================================================================
9namespace tatooine::gl {
10//==============================================================================
11template <typename Node>
13 //----------------------------------------------------------------------------
14 // members
15 //----------------------------------------------------------------------------
16 private:
24
25 //----------------------------------------------------------------------------
26 // ctors
27 //----------------------------------------------------------------------------
28 public:
29 linked_list_texture(size_t w, size_t h, size_t num_nodes, const Node& initial)
30 : m_w{w},
31 m_h{h},
32 m_num_nodes{num_nodes},
34 m_linked_list(m_num_nodes, initial),
35 m_head_index_tex{w, h},
37 m_head_index_clear_buffer(m_w * m_h, (unsigned int)(0xffffffff)),
38 m_list_length_clear_buffer(m_w * m_h, (unsigned int)(0)) {
39 clear();
40 for (auto i : m_head_index_tex.download_data()) {
41 if (i != 0xffffffff) {std::cerr << "somethings wrong\n";}
42 }
43 }
44 //----------------------------------------------------------------------------
47
48 //----------------------------------------------------------------------------
49 // methods
50 //----------------------------------------------------------------------------
51 void resize(size_t w, size_t h, size_t num_nodes) {
52 m_w = w;
53 m_h = h;
54 m_num_nodes = num_nodes;
55 m_head_index_clear_buffer.upload_data(std::vector(m_w * m_h, 0xffffffff));
58 }
59 //----------------------------------------------------------------------------
60 void bind(unsigned int at_slot = 0, unsigned int hi_slot = 0,
61 unsigned int length_slot = 1, unsigned int ll_slot = 0) const {
62 m_atomic_counter.bind(at_slot);
65 m_linked_list.bind(ll_slot);
66 }
67 //----------------------------------------------------------------------------
68 void clear() {
73 }
74 //----------------------------------------------------------------------------
75 void resize_buffer(size_t size) {
78 }
79 //----------------------------------------------------------------------------
80 auto width() const { return m_w; }
81 auto height() const { return m_h; }
82 auto buffer_size() const { return m_num_nodes; }
83 //----------------------------------------------------------------------------
84 const auto& buffer() const { return m_linked_list; }
85 //----------------------------------------------------------------------------
86 auto& counter() { return m_atomic_counter; }
87 const auto& counter() const { return m_atomic_counter; }
88};
89//==============================================================================
90} // namespace tatooine::gl
91//==============================================================================
92#endif
Definition: atomiccounterbuffer.h:14
DLL_API auto bind(GLuint i) const -> void
auto to_zero()
Definition: atomiccounterbuffer.h:38
static auto unbind() -> void
Definition: buffer.h:689
auto upload_data(const T &data) -> void
Definition: buffer.h:604
auto resize(GLsizei size) -> void
Definition: buffer.h:640
auto gpu_malloc(GLsizei n) -> void
Definition: buffer.h:656
Definition: linked_list_texture.h:12
void clear()
Definition: linked_list_texture.h:68
tex2r32ui m_list_length_tex
Definition: linked_list_texture.h:21
pixelunpackbuffer< unsigned int > m_list_length_clear_buffer
Definition: linked_list_texture.h:23
const auto & buffer() const
Definition: linked_list_texture.h:84
pixelunpackbuffer< unsigned int > m_head_index_clear_buffer
Definition: linked_list_texture.h:22
tex2r32ui m_head_index_tex
Definition: linked_list_texture.h:20
auto buffer_size() const
Definition: linked_list_texture.h:82
size_t m_h
Definition: linked_list_texture.h:17
void resize(size_t w, size_t h, size_t num_nodes)
Definition: linked_list_texture.h:51
linked_list_texture(linked_list_texture &&other)=default
const auto & counter() const
Definition: linked_list_texture.h:87
void bind(unsigned int at_slot=0, unsigned int hi_slot=0, unsigned int length_slot=1, unsigned int ll_slot=0) const
Definition: linked_list_texture.h:60
size_t m_w
Definition: linked_list_texture.h:17
atomiccounterbuffer m_atomic_counter
Definition: linked_list_texture.h:18
auto & counter()
Definition: linked_list_texture.h:86
size_t m_num_nodes
Definition: linked_list_texture.h:17
shaderstoragebuffer< Node > m_linked_list
Definition: linked_list_texture.h:19
auto height() const
Definition: linked_list_texture.h:81
auto width() const
Definition: linked_list_texture.h:80
linked_list_texture(const linked_list_texture &other)=default
linked_list_texture(size_t w, size_t h, size_t num_nodes, const Node &initial)
Definition: linked_list_texture.h:29
void resize_buffer(size_t size)
Definition: linked_list_texture.h:75
Definition: pixelunpackbuffer.h:17
Definition: shaderstoragebuffer.h:15
void bind(GLuint index) const
Definition: shaderstoragebuffer.h:49
Definition: texture.h:61
auto resize(std::array< Size, NumDimensions > const &size) -> void
Definition: texture.h:337
auto set_data(pixelunpackbuffer< value_type > const &pbo)
Definition: texture.h:829
auto download_data() const
Definition: texture.h:520
void bind_image_texture(GLuint unit) const
Definition: texture.h:260
Definition: ansiformat.h:6
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148