cgv
vertex_buffer.h
1 #pragma once
2 
3 #include <cgv/render/context.h>
4 #include <cgv/render/element_traits.h>
5 
6 #include "lib_begin.h"
7 
8 namespace cgv {
9  namespace render {
10 
12 class CGV_API vertex_buffer : public vertex_buffer_base
13 {
14  size_t size_in_bytes;
15 public:
17  vertex_buffer(VertexBufferType _type = VBT_VERTICES, VertexBufferUsage _usage = VBU_STATIC_DRAW);
19  ~vertex_buffer();
21  void bind(context& ctx, VertexBufferType _type = VBT_UNDEF) const;
23  bool create(const context& ctx, size_t size_in_bytes);
25  template <typename T>
26  bool create(const context& ctx, const T& array) {
27  size_in_bytes = array_descriptor_traits < T>::get_size(array);
28  return ctx.vertex_buffer_create(*this, array_descriptor_traits < T>::get_address(array), size_in_bytes);
29  }
31  template <typename T>
32  bool create(const context& ctx, const T* array_ptr, size_t nr_elements) {
33  size_in_bytes = nr_elements * sizeof(T);
34  return ctx.vertex_buffer_create(*this, array_ptr, size_in_bytes);
35  }
37  bool is_created() const;
39  size_t get_size_in_bytes() const;
41  template <typename T>
42  bool replace(const context& ctx, size_t buffer_offset_in_bytes, const T* array_ptr, size_t nr_elements) {
43  return ctx.vertex_buffer_replace(*this, buffer_offset_in_bytes, nr_elements* sizeof(T), array_ptr);
44  }
46  bool copy(const context& ctx, size_t src_offset_in_bytes, size_t size_in_bytes, vertex_buffer& dst, size_t dst_offset_in_bytes) const;
48  template <typename T>
49  bool copy(const context& ctx, size_t src_offset_in_bytes, T* array_ptr, size_t nr_elements) {
50  return ctx.vertex_buffer_copy_back(*this, src_offset_in_bytes, sizeof(T)*nr_elements, array_ptr);
51  }
53  void destruct(const context& ctx);
54 };
55 
56  }
57 }
58 
59 #include <cgv/config/lib_end.h>
60 
cgv::render::vertex_buffer::replace
bool replace(const context &ctx, size_t buffer_offset_in_bytes, const T *array_ptr, size_t nr_elements)
replace part (starting at byte offset buffer_offset_in_bytes) or whole vertex buffer content from nr_...
Definition: vertex_buffer.h:42
cgv::render::vertex_buffer::create
bool create(const context &ctx, const T &array)
create vertex buffer and copy data from CPU array array into buffer memory
Definition: vertex_buffer.h:26
cgv::render::VertexBufferType
VertexBufferType
different vertex buffer types
Definition: context.h:349
cgv::render::VertexBufferUsage
VertexBufferUsage
different vertex buffer usages as defined in OpenGL
Definition: context.h:359
cgv::render::vertex_buffer
Definition: vertex_buffer.h:13
cgv::render::vertex_buffer_base
base interface for a vertex buffer
Definition: context.h:365
cgv::render::vertex_buffer::copy
bool copy(const context &ctx, size_t src_offset_in_bytes, T *array_ptr, size_t nr_elements)
copy nr_elements array elements from vertex buffer starting at byte offset start_offset_in_bytes to C...
Definition: vertex_buffer.h:49
cgv::render::vertex_buffer::create
bool create(const context &ctx, const T *array_ptr, size_t nr_elements)
create vertex buffer and copy data from CPU array array_ptr into buffer memory
Definition: vertex_buffer.h:32
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::render::context
Definition: context.h:525