UGDK  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
vertexbuffer.h
Go to the documentation of this file.
1 
22 #ifndef LOVE_GRAPHICS_OPENGL_VERTEX_BUFFER_H
23 #define LOVE_GRAPHICS_OPENGL_VERTEX_BUFFER_H
24 
25 // LOVE
26 //#include <graphics/Volatile.h>
27 
28 // OpenGL
29 #include <ugdk/internal/opengl.h>
30 #include <memory>
31 
32 namespace ugdk {
33 namespace graphic {
34 namespace opengl {
45  {
46  public:
47 
60  static VertexBuffer *Create(size_t size, GLenum target, GLenum usage);
61 
62  static std::shared_ptr<const VertexBuffer> CreateDefaultShared();
63  static const VertexBuffer *CreateDefault();
64 
72  VertexBuffer(size_t size, GLenum target, GLenum usage);
73 
77  virtual ~VertexBuffer();
78 
84  size_t getSize() const { return size; }
85 
91  GLenum getTarget() const { return target; }
92 
98  GLenum getUsage() const { return usage; }
99 
110  virtual void *map() = 0;
111 
118  virtual void unmap() = 0;
119 
126  virtual void bind() const = 0;
127 
131  virtual void unbind() const = 0;
132 
142  virtual void fill(size_t offset, size_t size, const void *data) = 0;
143 
150  virtual const void *getPointer(size_t offset) const = 0;
151 
156  class Bind
157  {
158  public:
159 
163  Bind(const VertexBuffer &buf)
164  : buf(buf)
165  { buf.bind(); }
166 
171  { buf.unbind(); }
172 
173  private:
174  void operator=(const Bind&);
175 
176  // VertexBuffer to work on.
177  const VertexBuffer &buf;
178  };
179 
180  class Mapper
181  {
182  public:
187  : buf(buffer)
188  { elems = buf.map(); }
189 
194  { buf.unmap(); }
195 
199  void* get()
200  { return elems; }
201 
202  private:
203  void operator=(const Mapper&);
204 
205  VertexBuffer &buf;
206  void* elems;
207  };
208 
209  private:
210 
211  // The size of the buffer, in bytes.
212  size_t size;
213 
214  // The target buffer object. (GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER).
215  GLenum target;
216 
217  // Usage hint. GL_[DYNAMIC, STATIC, STREAM]_DRAW.
218  GLenum usage;
219  };
220 
227  class VertexArray : public VertexBuffer
228  {
229  public:
230 
234  VertexArray(size_t size, GLenum target, GLenum usage);
235 
239  virtual ~VertexArray();
240 
241  // Implements VertexBuffer.
242  virtual void *map();
243  virtual void unmap();
244  virtual void bind() const;
245  virtual void unbind() const;
246  virtual void fill(size_t offset, size_t size, const void *data);
247  virtual const void *getPointer(size_t offset) const ;
248 
249  private:
250  // Holds the data.
251  char *buf;
252  };
253 
254 #ifndef UGDK_USING_GLES
255 
262  class VBO : public VertexBuffer //TODO, public Volatile
263  {
264  public:
265 
269  VBO(size_t size, GLenum target, GLenum usage);
270 
274  virtual ~VBO();
275 
276  // Implements VertexBuffer.
277  virtual void *map();
278  virtual void unmap();
279  virtual void bind() const;
280  virtual void unbind() const;
281  virtual void fill(size_t offset, size_t size, const void *data);
282  virtual const void *getPointer(size_t offset) const ;
283 
284  // Implements Volatile.
285  bool loadVolatile();
286  void unloadVolatile();
287 
288  private:
289 
296  bool load(bool restore);
297 
303  void unload(bool save);
304 
305  // The VBO identifier. Assigned by OpenGL.
306  GLuint vbo;
307 
308  // *May* contain data saved by 'unload'.
309  char *buffer_copy;
310 
311  // A pointer to mapped memory. Zero if memory is currently
312  // not mapped.
313  void *mapped;
314  };
315 #endif // UGDK_USING_GLES
316 
317 } // namespace opengl
318 } // namespace graphic
319 } // namespace ugdk
320 
321 #endif // LOVE_GRAPHICS_OPENGL_SPRITE_BATCH_H
virtual const void * getPointer(size_t offset) const
static const VertexBuffer * CreateDefault()
VertexArray(size_t size, GLenum target, GLenum usage)
virtual const void * getPointer(size_t offset) const
static VertexBuffer * Create(size_t size, GLenum target, GLenum usage)
Definition: animationplayer.h:11
virtual void unbind() const
virtual const void * getPointer(size_t offset) const =0
virtual void fill(size_t offset, size_t size, const void *data)=0
Definition: vertexbuffer.h:227
Definition: vertexbuffer.h:180
Definition: vertexbuffer.h:44
Bind(const VertexBuffer &buf)
Definition: vertexbuffer.h:163
virtual void unbind() const =0
static std::shared_ptr< const VertexBuffer > CreateDefaultShared()
virtual void bind() const
GLenum getUsage() const
Definition: vertexbuffer.h:98
Definition: vertexbuffer.h:156
virtual void fill(size_t offset, size_t size, const void *data)
virtual void bind() const =0
~Mapper()
Definition: vertexbuffer.h:193
Definition: vertexbuffer.h:262
GLenum getTarget() const
Definition: vertexbuffer.h:91
virtual void unbind() const
VertexBuffer(size_t size, GLenum target, GLenum usage)
~Bind()
Definition: vertexbuffer.h:170
virtual void fill(size_t offset, size_t size, const void *data)
VBO(size_t size, GLenum target, GLenum usage)
Mapper(VertexBuffer &buffer)
Definition: vertexbuffer.h:186
size_t getSize() const
Definition: vertexbuffer.h:84