OpenBarnyard
 
Loading...
Searching...
No Matches
T2SharedRenderBuffer< RenderBuffer > Class Template Reference

#include <T2SharedRenderBuffer_GL.h>

Classes

struct  SubBuffer
 
struct  SubBufferSort
 

Public Member Functions

 T2SharedRenderBuffer ()
 
 ~T2SharedRenderBuffer ()
 
void Create (RenderBuffer &&a_rRenderBuffer, TINT a_iSize)
 
void Destroy ()
 
SubBufferAllocate (TINT a_iSize)
 
void Deallocate (SubBuffer *a_pAllocation)
 
RenderBuffer & GetRenderBuffer ()
 
TBOOL IsCreated () const
 

Detailed Description

template<class RenderBuffer>
class T2SharedRenderBuffer< RenderBuffer >

Definition at line 10 of file T2SharedRenderBuffer_GL.h.

Constructor & Destructor Documentation

◆ T2SharedRenderBuffer()

template<class RenderBuffer>
T2SharedRenderBuffer< RenderBuffer >::T2SharedRenderBuffer ( )
inline

Definition at line 37 of file T2SharedRenderBuffer_GL.h.

38 {
39 m_iTotalSize = 0;
40 m_iFreeSize = 0;
41 }

◆ ~T2SharedRenderBuffer()

template<class RenderBuffer>
T2SharedRenderBuffer< RenderBuffer >::~T2SharedRenderBuffer ( )
inline

Definition at line 43 of file T2SharedRenderBuffer_GL.h.

44 {
45 if ( IsCreated() )
46 Destroy();
47 }

Member Function Documentation

◆ Allocate()

template<class RenderBuffer>
SubBuffer * T2SharedRenderBuffer< RenderBuffer >::Allocate ( TINT a_iSize)
inline

Definition at line 74 of file T2SharedRenderBuffer_GL.h.

75 {
76 if ( m_iFreeSize < a_iSize )
77 return TNULL;
78
79 TINT iPrevOffset = 0;
80 TINT iNextOffset = 0;
81 TINT iHoleSize = m_iFreeSize;
82 TINT iPrevSize = 0;
83 TINT iNumAllocations = m_vecAllocations.Size();
84
85 // Find a hole that can fit the allocation
87 for ( TINT i = 0; i < iNumAllocations; i++ )
88 {
89 SubBuffer* pAllocation = m_vecAllocations[ i ];
90
92 iPrevOffset = pAllocation->offset;
93 iPrevSize = pAllocation->size;
95
96 if ( iHoleSize >= a_iSize )
97 break;
98
100 }
101
102 // If reached the end of the list, check if the allocation can fit at the end of the buffer
103 if ( pPrevAllocation && iHoleSize < a_iSize && pPrevAllocation == m_vecAllocations[ iNumAllocations - 1 ] )
104 {
105 iHoleSize = m_iTotalSize - ( pPrevAllocation->offset + pPrevAllocation->size );
106
107 if ( iHoleSize < a_iSize )
108 return TNULL;
109 }
110
112
113 // Fill allocation info and store in the sorted vector
115 pSubBuffer->owner = this;
116 pSubBuffer->offset = iNextOffset;
117 pSubBuffer->size = a_iSize;
118 m_vecAllocations.Push( pSubBuffer );
119
120 // Update number of free vertices
121 m_iFreeSize -= a_iSize;
122
123 return pSubBuffer;
124 }
#define TASSERT(X,...)
Definition Defines.h:138

◆ Create()

template<class RenderBuffer>
void T2SharedRenderBuffer< RenderBuffer >::Create ( RenderBuffer && a_rRenderBuffer,
TINT a_iSize )
inline

Definition at line 49 of file T2SharedRenderBuffer_GL.h.

50 {
51 TASSERT( !IsCreated() );
52
53 m_oRenderBuffer = std::move( a_rRenderBuffer );
54 m_oRenderBuffer.Bind();
55 m_oRenderBuffer.SetData( TNULL, a_iSize, GL_DYNAMIC_DRAW );
56 m_oRenderBuffer.Unbind();
57
58 m_iTotalSize = a_iSize;
59 m_iFreeSize = a_iSize;
60 }

◆ Deallocate()

template<class RenderBuffer>
void T2SharedRenderBuffer< RenderBuffer >::Deallocate ( SubBuffer * a_pAllocation)
inline

Definition at line 126 of file T2SharedRenderBuffer_GL.h.

127 {
128 if ( a_pAllocation )
129 {
130 m_vecAllocations.FindAndErase( a_pAllocation );
131 m_iFreeSize += a_pAllocation->size;
132
133 delete a_pAllocation;
134 }
135 }

◆ Destroy()

template<class RenderBuffer>
void T2SharedRenderBuffer< RenderBuffer >::Destroy ( )
inline

Definition at line 62 of file T2SharedRenderBuffer_GL.h.

63 {
64 TASSERT( IsCreated() );
65
66 GLuint uiId = m_oRenderBuffer.GetId();
67 glDeleteBuffers( 1, &uiId );
68 m_iTotalSize = 0;
69 m_iFreeSize = 0;
70
71 m_oRenderBuffer.Clear();
72 }

◆ GetRenderBuffer()

template<class RenderBuffer>
RenderBuffer & T2SharedRenderBuffer< RenderBuffer >::GetRenderBuffer ( )
inline

Definition at line 137 of file T2SharedRenderBuffer_GL.h.

137{ return m_oRenderBuffer; }

◆ IsCreated()

template<class RenderBuffer>
TBOOL T2SharedRenderBuffer< RenderBuffer >::IsCreated ( ) const
inline

Definition at line 138 of file T2SharedRenderBuffer_GL.h.

138{ return m_oRenderBuffer; }

The documentation for this class was generated from the following file: