OpenBarnyard
 
Loading...
Searching...
No Matches
TVertexPoolResource Class Reference

#include <TVertexPoolResource_DX8.h>

Inheritance diagram for TVertexPoolResource:
TVertexPoolResourceInterface TResource TObject TNodeTree< T >::TNode

Public Member Functions

 TDECLARE_CLASS (TVertexPoolResource, TVertexPoolResourceInterface)
 
 TVertexPoolResource ()
 
virtual TBOOL Validate () override
 
virtual void Invalidate () override
 
virtual void OnDestroy () override
 
virtual TBOOL Lock (LockBuffer *a_pLockBuffer) override
 
virtual void Unlock (TUINT16 a_uiNewNumVertices) override
 
virtual TBOOL Create (TVertexFactoryResourceInterface *a_pFactory, TUINT16 a_uiMaxVertices, TUINT16 a_uiFlags) override
 
TBYTEGetManagedStream (TUINT a_uiStream)
 
TResourceGetParent ()
 
TVertexBlockResourceGetVertexBlock ()
 
TBOOL GetHALBuffer (TVertexBlockResource::HALBuffer *a_pHALBuffer)
 
- Public Member Functions inherited from TVertexPoolResourceInterface
 TDECLARE_CLASS (TVertexPoolResourceInterface, TResource)
 
 TVertexPoolResourceInterface ()
 
TVertexFactoryResourceInterfaceGetFactory () const
 
TUINT16 GetFlags () const
 
TUINT16 GetMaxVertices () const
 
TUINT16 GetNumVertices () const
 
TBOOL IsLocked () const
 
- Public Member Functions inherited from TResource
 TDECLARE_CLASS (TResource, TObject)
 
 TResource ()
 
 ~TResource ()
 
virtual TBOOL Create ()
 
virtual void DestroyResource ()
 
virtual TBOOL TryInvalidate ()
 
virtual TBOOL TryValidate ()
 
TBOOL IsDead () const
 
TBOOL IsDying () const
 
TBOOL IsValid () const
 
TBOOL IsExternal () const
 
TBOOL IsCreated () const
 
TBOOL IsSceneObject () const
 
TBOOL IsInvalid () const
 
void SetState (TResourceState newState)
 
void AddState (TResourceState state)
 
void SetParent (TResource *a_pParent)
 
const TCHARGetName () const
 
void SetName (const TCHAR *name)
 
TBOOL RecurseSimple (t_RecurseCb a_pCallback, TResource *a_pResource, void *a_pUserData)
 
TRenderInterfaceGetRenderer () const
 
void SetRenderer (TRenderInterface *pRenderer)
 
TUINT32 GetUId () const
 
void SetUId (TUINT32 uid)
 
- Public Member Functions inherited from TObject
virtual Toshi::TClass * GetClass ()
 
virtual void Delete ()
 
virtual ~TObject ()
 
TBOOL IsExactly (TClass *a_pClass)
 
TBOOL IsA (TClass *a_pClass)
 
- Public Member Functions inherited from TNodeTree< T >::TNode
TBOOL IsChildOfDefaultRoot () const
 
TBOOL IsLinked () const
 
T * Parent () const
 
T * Next () const
 
T * Prev () const
 
TNodeTree< T > * Tree () const
 
T * Child () const
 

Public Attributes

friend TVertexBlockResource
 
- Public Attributes inherited from TResource
friend TRenderInterface
 
- Public Attributes inherited from TNodeTree< T >::TNode
friend TNodeTree
 

Additional Inherited Members

- Public Types inherited from TResource
using t_RecurseCb = TBOOL ( * )( TResource* a_pResource, void* a_pUserData )
 
- Public Types inherited from TObject
enum  { IsTObject = TTRUE }
 
- Static Public Member Functions inherited from TResource
static TBOOL Recurse (t_RecurseCb a_pCallback, TResource *a_pResource, TBOOL a_bFlag, void *a_pUserData)
 
- Static Public Member Functions inherited from TObject
static Toshi::TObject * CreateTObject ()
 
static Toshi::TObject * CreateTObjectInPlace (void *a_pPtr)
 
static void InitialiseClass ()
 
static void DeinitialiseClass ()
 
static TFORCEINLINE TClassGetClassStatic ()
 
- Static Public Attributes inherited from TResource
static constexpr size_t MAXNAMELEN = 14
 
- Static Public Attributes inherited from TObject
static constexpr Toshi::TClass * PARENTCLASS = TNULL
 
static constinit Toshi::TClass ms_oClass = Toshi::TClass( "TObject", TObject::CreateTObject, TObject::CreateTObjectInPlace, TObject::InitialiseClass, TObject::DeinitialiseClass, 0, 2, sizeof( TObject ), alignof( TObject ) )
 
- Protected Member Functions inherited from TNodeTree< T >::TNode
 TNode ()
 
- Protected Attributes inherited from TVertexPoolResourceInterface
TVertexFactoryResourceInterfacem_pFactory
 
TUINT16 m_uiFlags
 
TUINT16 m_uiMaxVertices
 
TUINT16 m_uiNumVertices
 
TUINT16 m_uiLockCount
 
- Protected Attributes inherited from TNodeTree< T >::TNode
TNodeTree< T > * m_Tree
 
T * m_Next
 
T * m_Prev
 
T * m_Parent
 
T * m_Child
 

Detailed Description

Definition at line 10 of file TVertexPoolResource_DX8.h.

Constructor & Destructor Documentation

◆ TVertexPoolResource()

TVertexPoolResource::TVertexPoolResource ( )

Definition at line 17 of file TVertexPoolResource_DX8.cpp.

18{
19 m_uiVertexOffset = 0;
20 m_uiNumLocksAllTime = 0;
21 m_apManagedStreams[ 0 ] = TNULL;
22 m_apManagedStreams[ 1 ] = TNULL;
23 m_apManagedStreams[ 2 ] = TNULL;
24 m_apManagedStreams[ 3 ] = TNULL;
25 m_apManagedStreams[ 4 ] = TNULL;
26 m_apManagedStreams[ 5 ] = TNULL;
27 m_apManagedStreams[ 6 ] = TNULL;
28 m_apManagedStreams[ 7 ] = TNULL;
29}
#define TNULL
Definition Typedefs.h:23

Member Function Documentation

◆ Create()

TBOOL TVertexPoolResource::Create ( TVertexFactoryResourceInterface * a_pFactory,
TUINT16 a_uiMaxVertices,
TUINT16 a_uiFlags )
overridevirtual

Reimplemented from TVertexPoolResourceInterface.

Definition at line 201 of file TVertexPoolResource_DX8.cpp.

202{
203 if ( a_uiFlags & 4 )
204 {
205 a_uiFlags = a_uiFlags & 0xfffb | 2;
206 }
207
208 if ( TVertexPoolResourceInterface::Create( a_pFactory, a_uiMaxVertices, a_uiFlags ) )
209 {
210 if ( m_uiFlags & 1 )
211 {
212 auto& vertexFormat = m_pFactory->GetVertexFormat();
213
214 for ( TUINT i = 0; i < vertexFormat.m_uiNumStreams; i++ )
215 {
216 m_apManagedStreams[ i ] = new TBYTE[ a_uiMaxVertices * vertexFormat.m_aStreamFormats[ i ].m_uiVertexSize ];
217 TVALIDPTR( m_apManagedStreams[ i ] );
218 }
219 }
220
221 return TTRUE;
222 }
223
224 return TFALSE;
225}
#define TVALIDPTR(PTR)
Definition Defines.h:139
unsigned int TUINT
Definition Typedefs.h:8
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
uint8_t TBYTE
Definition Typedefs.h:19
virtual TBOOL Create()
Definition TResource.cpp:28
TVertexFactoryResourceInterface * m_pFactory

◆ GetHALBuffer()

TBOOL TVertexPoolResource::GetHALBuffer ( TVertexBlockResource::HALBuffer * a_pHALBuffer)

Definition at line 263 of file TVertexPoolResource_DX8.cpp.

264{
265 TVALIDPTR( a_pHALBuffer );
266
267 if ( Validate() )
268 {
269 auto pVertexBlock = GetVertexBlock();
270 TVALIDPTR( pVertexBlock );
271
272 if ( pVertexBlock->Validate() && pVertexBlock->GetHALBuffer( a_pHALBuffer ) )
273 {
274 a_pHALBuffer->uiVertexOffset = m_uiVertexOffset;
275 return TTRUE;
276 }
277 }
278
279 return TFALSE;
280}
TVertexBlockResource * GetVertexBlock()
virtual TBOOL Validate() override

◆ GetManagedStream()

TBYTE * TVertexPoolResource::GetManagedStream ( TUINT a_uiStream)

Definition at line 228 of file TVertexPoolResource_DX8.cpp.

229{
230 TASSERT( a_uiStream < m_pFactory->GetVertexFormat().GetNumStreams() );
231
232 if ( !IsLocked() && a_uiStream < m_pFactory->GetVertexFormat().GetNumStreams() )
233 {
234 return m_apManagedStreams[ a_uiStream ];
235 }
236
237 return TNULL;
238}
#define TASSERT(X,...)
Definition Defines.h:138

◆ GetParent()

TResource * TVertexPoolResource::GetParent ( )

Definition at line 252 of file TVertexPoolResource_DX8.cpp.

253{
254 if ( Tree() )
255 {
256 return Parent() == Tree()->GetRoot() ? TNULL : Parent();
257 }
258
259 return Parent();
260}
T * Parent() const
Definition TNodeTree.h:33
TNodeTree< T > * Tree() const
Definition TNodeTree.h:36

◆ GetVertexBlock()

TVertexBlockResource * TVertexPoolResource::GetVertexBlock ( )

Definition at line 241 of file TVertexPoolResource_DX8.cpp.

242{
244 {
246 }
247
248 return TNULL;
249}
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
#define TGetClass(CLASS)
Definition TObject.h:13
TBOOL IsExactly(TClass *a_pClass)
Definition TObject.h:191

◆ Invalidate()

void TVertexPoolResource::Invalidate ( )
overridevirtual

Reimplemented from TResource.

Definition at line 83 of file TVertexPoolResource_DX8.cpp.

84{
85 if ( IsCreated() && IsValid() )
86 {
87 TASSERT( m_uiLockCount == 0 );
88
89 auto pVertexBlock = GetVertexBlock();
90 TVALIDPTR( pVertexBlock );
91
92 pVertexBlock->DettachPool( this );
94 }
95}
TBOOL IsCreated() const
Definition TResource.h:46
virtual void Invalidate()
Definition TResource.cpp:47
TBOOL IsValid() const
Definition TResource.h:44

◆ Lock()

TBOOL TVertexPoolResource::Lock ( LockBuffer * a_pLockBuffer)
overridevirtual

Implements TVertexPoolResourceInterface.

Definition at line 118 of file TVertexPoolResource_DX8.cpp.

119{
120 TVALIDPTR( a_pLockBuffer );
121
122 auto uiOldLockCount = m_uiLockCount;
123 m_uiNumLocksAllTime += 1;
124 m_uiLockCount += 1;
125
126 if ( uiOldLockCount == 0 )
127 {
128 TUINT8 uiUnk1 = m_uiFlags & 7;
129
130 if ( uiUnk1 == 1 )
131 {
132 a_pLockBuffer->uiNumStreams = GetFactory()->GetVertexFormat().GetNumStreams();
133
134 for ( TUINT i = 0; i < a_pLockBuffer->uiNumStreams; i++ )
135 {
136 a_pLockBuffer->apStreams[ i ] = m_apManagedStreams[ i ];
137 }
138
139 return TTRUE;
140 }
141 else if ( uiUnk1 == 2 )
142 {
143 Validate();
144
145 if ( GetVertexBlock()->Lock( a_pLockBuffer, 0 ) )
146 {
147 m_uiVertexOffset = a_pLockBuffer->uiOffset;
148 return TTRUE;
149 }
150 }
151 else if ( uiUnk1 == 4 )
152 {
153 Validate();
154
155 if ( GetVertexBlock()->Lock( a_pLockBuffer, GetMaxVertices() ) )
156 {
157 m_uiVertexOffset = a_pLockBuffer->uiOffset;
158 return TTRUE;
159 }
160 }
161 }
162
163 return TFALSE;
164}
uint8_t TUINT8
Definition Typedefs.h:17
virtual TBOOL Lock(LockBuffer *a_pLockBuffer) override
const TVertexFactoryFormat & GetVertexFormat() const
TVertexFactoryResourceInterface * GetFactory() const

◆ OnDestroy()

void TVertexPoolResource::OnDestroy ( )
overridevirtual

Reimplemented from TVertexPoolResourceInterface.

Definition at line 98 of file TVertexPoolResource_DX8.cpp.

99{
100 if ( m_uiFlags & 1 )
101 {
102 auto& vertexFormat = m_pFactory->GetVertexFormat();
103
104 for ( TUINT i = 0; i < vertexFormat.m_uiNumStreams; i++ )
105 {
106 if ( m_apManagedStreams[ i ] )
107 {
108 delete[] m_apManagedStreams[ i ];
109 m_apManagedStreams[ i ] = TNULL;
110 }
111 }
112 }
113
115}

◆ TDECLARE_CLASS()

TVertexPoolResource::TDECLARE_CLASS ( TVertexPoolResource ,
TVertexPoolResourceInterface  )

◆ Unlock()

void TVertexPoolResource::Unlock ( TUINT16 a_uiNewNumVertices)
overridevirtual

Implements TVertexPoolResourceInterface.

Definition at line 167 of file TVertexPoolResource_DX8.cpp.

168{
169 TASSERT( m_uiLockCount > 0 );
170
171 if ( m_uiLockCount > 0 && --m_uiLockCount == 0 )
172 {
173 TINT iChange = a_uiNewNumVertices - GetNumVertices();
174
175 if ( iChange != 0 )
176 {
177 if ( GetParent() )
178 {
180 {
181 auto pVertexBlock = TSTATICCAST( TVertexBlockResource, GetParent() );
182 pVertexBlock->ChildVertexUsedChanged( iChange );
183 }
184 }
185 }
186
187 m_uiNumVertices = a_uiNewNumVertices;
188
189 if ( m_uiFlags & 6 )
190 {
192 }
193 else if ( m_uiFlags & 1 )
194 {
195 Validate();
196 }
197 }
198}
int TINT
Definition Typedefs.h:7
virtual Toshi::TClass * GetClass()
Definition TObject.cpp:12
TBOOL IsA(TClass *a_pClass)
Definition TObject.h:192

◆ Validate()

TBOOL TVertexPoolResource::Validate ( )
overridevirtual

Reimplemented from TResource.

Definition at line 32 of file TVertexPoolResource_DX8.cpp.

33{
34 if ( IsCreated() && IsValid() )
35 {
36 return TTRUE;
37 }
38
39 auto pFactory = TSTATICCAST( TVertexFactoryResource, GetFactory() );
40 auto pBlock = pFactory->FindBlockResource( this );
41
42 if ( !pBlock )
43 {
44 TUINT32 uiFlags;
45 TUINT16 uiMaxVertices;
46
47 TUINT8 uiUnk1 = m_uiFlags & 7;
48
49 if ( uiUnk1 == 1 )
50 {
51 uiMaxVertices = pFactory->GetMaxStaticVertices();
52 uiFlags = 1;
53 }
54 else if ( uiUnk1 == 2 )
55 {
56 uiMaxVertices = GetMaxVertices();
57 uiFlags = 2;
58 }
59 else
60 {
61 if ( uiUnk1 != 4 )
62 {
63 return TFALSE;
64 }
65
66 uiMaxVertices = GetMaxVertices();
67 uiFlags = 4;
68 }
69
70 pBlock = pFactory->CreateBlockResource( uiMaxVertices, uiFlags );
71
72 if ( !pBlock )
73 {
74 return TFALSE;
75 }
76 }
77
78 pBlock->AttachPool( this );
79 return TResource::Validate();
80}
uint16_t TUINT16
Definition Typedefs.h:15
uint32_t TUINT32
Definition Typedefs.h:13
virtual TBOOL Validate()
Definition TResource.cpp:36

Member Data Documentation

◆ TVertexBlockResource

friend TVertexPoolResource::TVertexBlockResource

Definition at line 16 of file TVertexPoolResource_DX8.h.


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