Pioneer
Loading...
Searching...
No Matches
VertexBufferGL.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#pragma once
5
6#include "graphics/Types.h"
9
10#include <memory>
11
12namespace Graphics {
13 class RendererOGL;
14
15 namespace OGL {
16
18 public:
19 VertexBuffer(const VertexBufferDesc &, size_t stateHash);
21
22 virtual void Unmap() override;
23
24 // copies the contents of the VertexArray into the buffer
25 virtual bool Populate(const VertexArray &) override;
26
27 // change the buffer data without mapping
28 virtual void BufferData(const size_t, void *) override final;
29
30 virtual void Bind() override final;
31 virtual void Release() override final;
32
33 size_t GetVertexFormatHash() const { return m_vertexStateHash; }
34
35 protected:
36 virtual Uint8 *MapInternal(BufferMapMode) override;
37 Uint8 *m_data;
39 };
40
42 public:
43 CachedVertexBuffer(const VertexBufferDesc &, size_t stateHash);
44
45 virtual bool Populate(const VertexArray &) override final;
46 uint32_t GetOffset() { return m_size * m_desc.stride; }
47
48 bool Flush();
49 void Reset();
50
51 protected:
55
56 private:
57 uint32_t m_lastFlushed;
58 };
59
61 public:
64
65 virtual Uint32 *Map(BufferMapMode) override final;
66 virtual Uint16 *Map16(BufferMapMode) override final;
67 virtual void Unmap() override final;
68
69 // change the buffer data without mapping
70 virtual void BufferData(const size_t, void *) override final;
71
72 virtual void Bind() override final;
73 virtual void Release() override final;
74
75 private:
76 Uint32 *m_data;
77 Uint16 *m_data16;
78 };
79
80 // Instance buffer
82 public:
83 InstanceBuffer(Uint32 size, BufferUsage);
84 virtual ~InstanceBuffer() override final;
85 virtual matrix4x4f *Map(BufferMapMode) override final;
86 virtual void Unmap() override final;
87
88 virtual void Bind() override final;
89 virtual void Release() override final;
90
91 enum InstOffs {
92 INSTOFFS_MAT0 = 6, // these value must match those of a_transform within data/shaders/opengl/attributes.glsl
96 };
97
98 protected:
99 friend class MeshObject; // need access to InstOffs enum
100 std::unique_ptr<matrix4x4f[]> m_data;
101 };
102
103 class MeshObject final : public Graphics::MeshObject {
104 public:
106 ~MeshObject() override;
107
108 void Bind() override;
109 void Release() override;
110
111 Graphics::VertexBuffer *GetVertexBuffer() const override { return m_vtxBuffer.Get(); };
112 Graphics::IndexBuffer *GetIndexBuffer() const override { return m_idxBuffer.Get(); };
113
114 protected:
116
117 GLuint GetVertexArrayObject() const { return m_vao; }
120 GLuint m_vao = 0;
121 };
122
124
125 } // namespace OGL
126} // namespace Graphics
Definition VertexBuffer.h:102
Definition VertexBuffer.h:127
uint32_t m_size
Definition BufferCommon.h:32
Definition VertexBuffer.h:156
Definition VertexBufferGL.h:41
void Reset()
Definition VertexBufferGL.cpp:395
bool Flush()
Definition VertexBufferGL.cpp:380
uint32_t GetOffset()
Definition VertexBufferGL.h:46
virtual bool Populate(const VertexArray &) override final
Definition VertexBufferGL.cpp:337
Definition GLBufferBase.h:12
Definition VertexBufferGL.h:60
virtual Uint16 * Map16(BufferMapMode) override final
Definition VertexBufferGL.cpp:456
virtual void Release() override final
Definition VertexBufferGL.cpp:513
virtual Uint32 * Map(BufferMapMode) override final
Definition VertexBufferGL.cpp:440
~IndexBuffer()
Definition VertexBufferGL.cpp:431
virtual void BufferData(const size_t, void *) override final
Definition VertexBufferGL.cpp:497
virtual void Bind() override final
Definition VertexBufferGL.cpp:507
virtual void Unmap() override final
Definition VertexBufferGL.cpp:472
Definition VertexBufferGL.h:81
virtual void Unmap() override final
Definition VertexBufferGL.cpp:557
std::unique_ptr< matrix4x4f[]> m_data
Definition VertexBufferGL.h:100
virtual ~InstanceBuffer() override final
Definition VertexBufferGL.cpp:536
InstOffs
Definition VertexBufferGL.h:91
@ INSTOFFS_MAT2
Definition VertexBufferGL.h:94
@ INSTOFFS_MAT0
Definition VertexBufferGL.h:92
@ INSTOFFS_MAT3
Definition VertexBufferGL.h:95
@ INSTOFFS_MAT1
Definition VertexBufferGL.h:93
virtual void Release() override final
Definition VertexBufferGL.cpp:590
virtual matrix4x4f * Map(BufferMapMode) override final
Definition VertexBufferGL.cpp:541
virtual void Bind() override final
Definition VertexBufferGL.cpp:577
Definition VertexBufferGL.h:103
void Release() override
Definition VertexBufferGL.cpp:627
GLuint GetVertexArrayObject() const
Definition VertexBufferGL.h:117
Graphics::VertexBuffer * GetVertexBuffer() const override
Definition VertexBufferGL.h:111
GLuint m_vao
Definition VertexBufferGL.h:120
Graphics::IndexBuffer * GetIndexBuffer() const override
Definition VertexBufferGL.h:112
~MeshObject() override
Definition VertexBufferGL.cpp:617
RefCountedPtr< VertexBuffer > m_vtxBuffer
Definition VertexBufferGL.h:118
RefCountedPtr< IndexBuffer > m_idxBuffer
Definition VertexBufferGL.h:119
void Bind() override
Definition VertexBufferGL.cpp:622
Definition VertexBufferGL.h:17
size_t GetVertexFormatHash() const
Definition VertexBufferGL.h:33
virtual void Unmap() override
Definition VertexBufferGL.cpp:125
Uint8 * m_data
Definition VertexBufferGL.h:37
virtual void Bind() override final
Definition VertexBufferGL.cpp:317
size_t m_vertexStateHash
Definition VertexBufferGL.h:38
virtual Uint8 * MapInternal(BufferMapMode) override
Definition VertexBufferGL.cpp:108
virtual void BufferData(const size_t, void *) override final
Definition VertexBufferGL.cpp:307
virtual bool Populate(const VertexArray &) override
Definition VertexBufferGL.cpp:266
virtual void Release() override final
Definition VertexBufferGL.cpp:323
~VertexBuffer()
Definition VertexBufferGL.cpp:102
Definition RendererGL.h:37
Definition VertexArray.h:19
Definition VertexBuffer.h:65
VertexBufferDesc m_desc
Definition VertexBuffer.h:98
T * Map(BufferMapMode mode)
Definition VertexBuffer.h:74
Definition RefCounted.h:36
GLuint BuildVAOFromDesc(const Graphics::VertexBufferDesc desc)
Definition VertexBufferGL.cpp:632
Definition Background.h:14
IndexBufferSize
Definition Types.h:76
BufferUsage
Definition Types.h:65
BufferMapMode
Definition Types.h:70
Definition VertexBuffer.h:43
Uint32 stride
Definition VertexBuffer.h:61