3#ifdef TRENDERINTERFACE_GL
19 constexpr T2RenderBuffer()
23 constexpr T2RenderBuffer( GLuint a_uiId )
27 constexpr T2RenderBuffer(
const T2RenderBuffer& a_rOther )
28 : m_uiId( a_rOther.m_uiId )
31 constexpr GLuint GetId()
const {
return m_uiId; }
33 void SetData(
const void* a_pData, GLuint a_uiSize, GLenum a_eUsage )
const
35 glNamedBufferData( m_uiId, a_uiSize, a_pData, a_eUsage );
38 void UpdateData(
const void* a_pData, GLintptr offset, GLuint a_uiSize )
const
40 glNamedBufferSubData( m_uiId, offset, a_uiSize, a_pData );
43 void SetAttribPointer( GLuint a_uiIndex, GLint a_iNumComponents, GLenum a_eType, GLsizei a_iStride, GLsizei a_pOffset, GLboolean a_bNormalized = GL_FALSE )
const
45 glVertexAttribPointer( a_uiIndex, a_iNumComponents, a_eType, a_bNormalized, a_iStride, (
const void*)a_pOffset );
46 glEnableVertexAttribArray( a_uiIndex );
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; }
54 constexpr operator TBOOL()
const {
return m_uiId != 0; }
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>;
69 constexpr T2VertexArray()
73 constexpr T2VertexArray( GLuint a_uiId )
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 )
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 )
85 void SetVertexBuffer( T2VertexBuffer a_VertexBuffer )
88 a_VertexBuffer.Bind();
89 m_VertexBuffer = a_VertexBuffer;
92 void SetIndexBuffer( T2IndexBuffer a_IndexBuffer )
96 m_IndexBuffer = a_IndexBuffer;
99 constexpr GLuint GetId()
const {
return m_uiId; }
101 inline static GLuint ms_uiBoundId = 0;
105 if ( ms_uiBoundId != m_uiId )
107 glBindVertexArray( m_uiId );
108 ms_uiBoundId = m_uiId;
117 if ( ms_uiBoundId != 0 )
119 glBindVertexArray( 0 );
124 TBOOL IsBound()
const
126 return ms_uiBoundId == m_uiId;
131 glDeleteVertexArrays( 1, &m_uiId );
135 constexpr T2VertexBuffer GetVertexBuffer() {
return m_VertexBuffer; }
136 constexpr T2IndexBuffer GetIndexBuffer() {
return m_IndexBuffer; }
138 constexpr operator TBOOL()
const {
return m_uiId != 0; }
142 T2VertexBuffer m_VertexBuffer;
143 T2IndexBuffer m_IndexBuffer;
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
Char string implementation for the Toshi engine.