OpenBarnyard
 
Loading...
Searching...
No Matches
T2RenderBuffer_GL.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef TRENDERINTERFACE_GL
4
5# include "Toshi/TString8.h"
6# include "GL/glew.h"
7
9
10//-----------------------------------------------------------------------------
11// Note: This is a custom class which is not the same as the one used in TOSHI 2.0
12// since it was never actually used in any games but in some tools like TXSViewer which
13// is not publicly available, so it's not possible to match this class.
14//-----------------------------------------------------------------------------
15template <GLenum Type>
16class T2RenderBuffer
17{
18public:
19 constexpr T2RenderBuffer()
20 : m_uiId( 0 )
21 {}
22
23 constexpr T2RenderBuffer( GLuint a_uiId )
24 : m_uiId( a_uiId )
25 {}
26
27 constexpr T2RenderBuffer( const T2RenderBuffer& a_rOther )
28 : m_uiId( a_rOther.m_uiId )
29 {}
30
31 constexpr GLuint GetId() const { return m_uiId; }
32
33 void SetData( const void* a_pData, GLuint a_uiSize, GLenum a_eUsage ) const
34 {
35 glNamedBufferData( m_uiId, a_uiSize, a_pData, a_eUsage );
36 }
37
38 void UpdateData( const void* a_pData, GLintptr offset, GLuint a_uiSize ) const
39 {
40 glNamedBufferSubData( m_uiId, offset, a_uiSize, a_pData );
41 }
42
43 void SetAttribPointer( GLuint a_uiIndex, GLint a_iNumComponents, GLenum a_eType, GLsizei a_iStride, GLsizei a_pOffset, GLboolean a_bNormalized = GL_FALSE ) const
44 {
45 glVertexAttribPointer( a_uiIndex, a_iNumComponents, a_eType, a_bNormalized, a_iStride, (const void*)a_pOffset );
46 glEnableVertexAttribArray( a_uiIndex );
47 }
48
49 void Bind() const { glBindBuffer( Type, m_uiId ); }
50 void BindBase( GLuint a_uiIndex ) const { glBindBufferBase( Type, a_uiIndex, m_uiId ); }
51 void Unbind() const { glBindBuffer( Type, 0 ); }
52 void Clear() { m_uiId = 0; }
53
54 constexpr operator TBOOL() const { return m_uiId != 0; }
55
56private:
57 GLuint m_uiId;
58};
59
60using T2VertexBuffer = T2RenderBuffer<GL_ARRAY_BUFFER>;
61using T2IndexBuffer = T2RenderBuffer<GL_ELEMENT_ARRAY_BUFFER>;
62using T2IndirectBuffer = T2RenderBuffer<GL_DRAW_INDIRECT_BUFFER>;
63using T2ShaderStorageBuffer = T2RenderBuffer<GL_SHADER_STORAGE_BUFFER>;
64using T2UniformBuffer = T2RenderBuffer<GL_UNIFORM_BUFFER>;
65
66class T2VertexArray
67{
68public:
69 constexpr T2VertexArray()
70 : m_uiId( 0 )
71 {}
72
73 constexpr T2VertexArray( GLuint a_uiId )
74 : m_uiId( a_uiId )
75 {}
76
77 constexpr T2VertexArray( GLuint a_uiId, T2VertexBuffer a_VertexBuffer, T2IndexBuffer a_IndexBuffer )
78 : m_uiId( a_uiId ), m_VertexBuffer( a_VertexBuffer ), m_IndexBuffer( a_IndexBuffer )
79 {}
80
81 constexpr T2VertexArray( const T2VertexArray& a_rOther )
82 : m_uiId( a_rOther.m_uiId ), m_VertexBuffer( a_rOther.m_VertexBuffer ), m_IndexBuffer( a_rOther.m_IndexBuffer )
83 {}
84
85 void SetVertexBuffer( T2VertexBuffer a_VertexBuffer )
86 {
87 TASSERT( m_uiId != 0 );
88 a_VertexBuffer.Bind();
89 m_VertexBuffer = a_VertexBuffer;
90 }
91
92 void SetIndexBuffer( T2IndexBuffer a_IndexBuffer )
93 {
94 TASSERT( m_uiId != 0 );
95 a_IndexBuffer.Bind();
96 m_IndexBuffer = a_IndexBuffer;
97 }
98
99 constexpr GLuint GetId() const { return m_uiId; }
100
101 inline static GLuint ms_uiBoundId = 0;
102
103 TBOOL Bind()
104 {
105 if ( ms_uiBoundId != m_uiId )
106 {
107 glBindVertexArray( m_uiId );
108 ms_uiBoundId = m_uiId;
109 return TTRUE;
110 }
111
112 return TFALSE;
113 }
114
115 static void Unbind()
116 {
117 if ( ms_uiBoundId != 0 )
118 {
119 glBindVertexArray( 0 );
120 ms_uiBoundId = 0;
121 }
122 }
123
124 TBOOL IsBound() const
125 {
126 return ms_uiBoundId == m_uiId;
127 }
128
129 void Destroy()
130 {
131 glDeleteVertexArrays( 1, &m_uiId );
132 ms_uiBoundId = 0;
133 }
134
135 constexpr T2VertexBuffer GetVertexBuffer() { return m_VertexBuffer; }
136 constexpr T2IndexBuffer GetIndexBuffer() { return m_IndexBuffer; }
137
138 constexpr operator TBOOL() const { return m_uiId != 0; }
139
140private:
141 GLuint m_uiId;
142 T2VertexBuffer m_VertexBuffer;
143 T2IndexBuffer m_IndexBuffer;
144};
145
147
148#endif // TRENDERINTERFACE_GL
#define TASSERT(X,...)
Definition Defines.h:138
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
Char string implementation for the Toshi engine.
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6