Pioneer
VertexBufferGL.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef OGL_VERTEXBUFFER_H
5 #define OGL_VERTEXBUFFER_H
6 #include "OpenGLLibs.h"
8 
9 namespace Graphics {
10  namespace OGL {
11 
12  class GLBufferBase {
13  public:
15  m_written(false) {}
16  GLuint GetBuffer() const { return m_buffer; }
17 
18  protected:
19  GLuint m_buffer;
20  bool m_written; // to check for invalid data rendering
21  };
22 
24  public:
26  ~VertexBuffer();
27 
28  virtual void Unmap() override final;
29 
30  // copies the contents of the VertexArray into the buffer
31  virtual bool Populate(const VertexArray &) override final;
32 
33  // change the buffer data without mapping
34  virtual void BufferData(const size_t, void *) override final;
35 
36  virtual void Bind() override final;
37  virtual void Release() override final;
38 
39  protected:
40  virtual Uint8 *MapInternal(BufferMapMode) override final;
41 
42  private:
43  GLuint m_vao;
44  Uint8 *m_data;
45  };
46 
48  public:
49  IndexBuffer(Uint32 size, BufferUsage);
50  ~IndexBuffer();
51 
52  virtual Uint32 *Map(BufferMapMode) override final;
53  virtual void Unmap() override final;
54 
55  // change the buffer data without mapping
56  virtual void BufferData(const size_t, void *) override final;
57 
58  virtual void Bind() override final;
59  virtual void Release() override final;
60 
61  private:
62  Uint32 *m_data;
63  };
64 
65  // Instance buffer
66  class InstanceBuffer final : public Graphics::InstanceBuffer, public GLBufferBase {
67  public:
68  InstanceBuffer(Uint32 size, BufferUsage);
69  virtual ~InstanceBuffer() override final;
70  virtual matrix4x4f *Map(BufferMapMode) override final;
71  virtual void Unmap() override final;
72 
73  virtual void Bind() override final;
74  virtual void Release() override final;
75 
76  protected:
77  enum InstOffs {
78  INSTOFFS_MAT0 = 6, // these value must match those of a_transform within data/shaders/opengl/attributes.glsl
81  INSTOFFS_MAT3 = 9
82  };
83  std::unique_ptr<matrix4x4f[]> m_data;
84  };
85 
86  } // namespace OGL
87 } // namespace Graphics
88 
89 #endif // OGL_VERTEXBUFFER_H
Definition: VertexBuffer.h:114
Definition: VertexBuffer.h:136
Definition: VertexBufferGL.h:12
GLuint GetBuffer() const
Definition: VertexBufferGL.h:16
bool m_written
Definition: VertexBufferGL.h:20
GLBufferBase()
Definition: VertexBufferGL.h:14
GLuint m_buffer
Definition: VertexBufferGL.h:19
Definition: VertexBufferGL.h:47
virtual void Release() override final
Definition: VertexBufferGL.cpp:461
virtual Uint32 * Map(BufferMapMode) override final
Definition: VertexBufferGL.cpp:409
~IndexBuffer()
Definition: VertexBufferGL.cpp:403
virtual void BufferData(const size_t, void *) override final
Definition: VertexBufferGL.cpp:445
IndexBuffer(Uint32 size, BufferUsage)
Definition: VertexBufferGL.cpp:385
virtual void Bind() override final
Definition: VertexBufferGL.cpp:455
virtual void Unmap() override final
Definition: VertexBufferGL.cpp:425
Definition: VertexBufferGL.h:66
virtual void Unmap() override final
Definition: VertexBufferGL.cpp:505
std::unique_ptr< matrix4x4f[]> m_data
Definition: VertexBufferGL.h:83
virtual ~InstanceBuffer() override final
Definition: VertexBufferGL.cpp:484
InstanceBuffer(Uint32 size, BufferUsage)
Definition: VertexBufferGL.cpp:467
InstOffs
Definition: VertexBufferGL.h:77
@ INSTOFFS_MAT2
Definition: VertexBufferGL.h:80
@ INSTOFFS_MAT0
Definition: VertexBufferGL.h:78
@ INSTOFFS_MAT3
Definition: VertexBufferGL.h:81
@ INSTOFFS_MAT1
Definition: VertexBufferGL.h:79
virtual void Release() override final
Definition: VertexBufferGL.cpp:547
virtual matrix4x4f * Map(BufferMapMode) override final
Definition: VertexBufferGL.cpp:489
virtual void Bind() override final
Definition: VertexBufferGL.cpp:525
Definition: VertexBufferGL.h:23
VertexBuffer(const VertexBufferDesc &)
Definition: VertexBufferGL.cpp:40
virtual void Bind() override final
Definition: VertexBufferGL.cpp:343
virtual void BufferData(const size_t, void *) override final
Definition: VertexBufferGL.cpp:332
virtual bool Populate(const VertexArray &) override final
Definition: VertexBufferGL.cpp:291
virtual void Unmap() override final
Definition: VertexBufferGL.cpp:149
virtual void Release() override final
Definition: VertexBufferGL.cpp:364
~VertexBuffer()
Definition: VertexBufferGL.cpp:124
virtual Uint8 * MapInternal(BufferMapMode) override final
Definition: VertexBufferGL.cpp:131
Definition: VertexArray.h:19
Definition: VertexBuffer.h:80
Definition: Background.h:13
BufferUsage
Definition: Types.h:34
BufferMapMode
Definition: Types.h:39
Definition: VertexBuffer.h:41