globjects  1.0.0.000000000000
Strict OpenGL objects wrapper.
Buffer.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include <vector>
5 #include <array>
6 
7 #include <glbinding/gl/types.h>
8 
9 #include <globjects/globjects_api.h>
10 #include <globjects/Object.h>
11 
12 
13 namespace globjects
14 {
15 
16 
35 class GLOBJECTS_API Buffer : public Object
36 {
37 public:
39  {
40  DirectStateAccessARB
41  , DirectStateAccessEXT
42  , Legacy
43  };
44 
45  static void hintBindlessImplementation(BindlessImplementation impl);
46 
52  static void setWorkingTarget(gl::GLenum target);
53 
54 public:
57  Buffer();
58 
64  static Buffer * fromId(gl::GLuint id);
65 
69  virtual void accept(ObjectVisitor & visitor) override;
70 
75  void bind(gl::GLenum target) const;
76 
80  static void unbind(gl::GLenum target);
81 
86  static void unbind(gl::GLenum target, gl::GLuint index);
87 
95  void setData(gl::GLsizeiptr size, const gl::GLvoid * data, gl::GLenum usage);
96 
99  template <typename T>
100  void setData(const std::vector<T> & data, gl::GLenum usage);
101 
104  template <typename T, std::size_t Count>
105  void setData(const std::array<T, Count> & data, gl::GLenum usage);
113  void setSubData(gl::GLintptr offset, gl::GLsizeiptr size, const gl::GLvoid* data = nullptr);
114 
117  template <typename T>
118  void setSubData(const std::vector<T> & data, gl::GLintptr offset = 0);
119 
122  template <typename T, std::size_t Count>
123  void setSubData(const std::array<T, Count> & data, gl::GLintptr offset = 0);
124 
131  void setStorage(gl::GLsizeiptr size, const gl::GLvoid * data, gl::BufferStorageMask flags);
132 
135  template <typename T>
136  void setStorage(const std::vector<T> & data, gl::BufferStorageMask flags);
137 
140  template <typename T, std::size_t Count>
141  void setStorage(const std::array<T, Count> & data, gl::BufferStorageMask flags);
142 
149  gl::GLint getParameter(gl::GLenum pname) const;
150 
157  gl::GLint64 getParameter64(gl::GLenum pname) const;
158 
162  const void * map() const;
163 
168  void * map(gl::GLenum access);
169 
178  void * mapRange(gl::GLintptr offset, gl::GLsizeiptr length, gl::BufferAccessMask access);
179 
183  bool unmap() const;
184 
190  void flushMappedRange(gl::GLintptr offset, gl::GLsizeiptr length);
191 
195  void bindBase(gl::GLenum target, gl::GLuint index) const;
196 
200  void bindRange(gl::GLenum target, gl::GLuint index, gl::GLintptr offset, gl::GLsizeiptr size) const;
201 
208  void copySubData(Buffer * buffer, gl::GLintptr readOffset, gl::GLintptr writeOffset, gl::GLsizeiptr size) const;
209 
212  void copySubData(Buffer * buffer, gl::GLsizeiptr size) const;
213 
220  void copyData(Buffer * buffer, gl::GLsizeiptr size, gl::GLenum usage) const;
221 
227  void clearData(gl::GLenum internalformat, gl::GLenum format, gl::GLenum type, const void * data = nullptr);
228 
234  void clearSubData(gl::GLenum internalformat, gl::GLintptr offset, gl::GLsizeiptr size, gl::GLenum format, gl::GLenum type, const void * data = nullptr);
235 
236  const void * getPointer() const;
237  void * getPointer();
238  const void * getPointer(gl::GLenum pname) const;
239  void * getPointer(gl::GLenum pname);
240 
241  void getSubData(gl::GLintptr offset, gl::GLsizeiptr size, void * data) const;
242 
243  template <typename T>
244  const std::vector<T> getSubData(gl::GLsizeiptr size, gl::GLintptr offset = 0) const;
245 
248  template <typename T, std::size_t Count>
249  const std::array<T, Count> getSubData(gl::GLintptr offset = 0) const;
250 
254  void invalidateData() const;
255 
261  void invalidateSubData(gl::GLintptr offset, gl::GLsizeiptr length) const;
262 
263  virtual gl::GLenum objectType() const override;
264 
265 protected:
269  Buffer(IDResource * resource);
270 
274  virtual ~Buffer();
275 };
276 
277 
278 } // namespace globjects
279 
280 
281 #include <globjects/Buffer.inl>
BindlessImplementation
Definition: Buffer.h:38
Contains all the classes that wrap OpenGL functionality.
Superclass of all wrapped OpenGL objects.
Definition: Object.h:26
Wrapper for OpenGL buffer objects.
Definition: Buffer.h:35
Implements a Visitor Pattern to iterate over all tracked globjects objects.
Definition: ObjectVisitor.h:29