OpenBarnyard
 
Loading...
Searching...
No Matches
ASysMesh.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "ASysMesh.h"
4
5//-----------------------------------------------------------------------------
6// Enables memory debugging.
7// Note: Should be the last include!
8//-----------------------------------------------------------------------------
10
12
14
16{
17 m_uiFlags = 0;
18 m_uiMaxVertices = 0;
19 m_uiMaxIndices = 0;
20 m_pVertexPool = TNULL;
21 m_pIndexPool = TNULL;
22 m_bFlag1 = TFALSE;
23 m_bFlag2 = TFALSE;
24}
25
27{
28 if ( IsValidated() )
29 {
30 if ( m_SomeString.Length() == 0 && ( !m_pVertexPool || !m_pIndexPool ) )
31 {
32 return TFALSE;
33 }
34
35 m_pVertexPool->Validate();
36 m_pIndexPool->Validate();
38 }
39
40 return TTRUE;
41}
42
44{
45 if ( m_pVertexPool && m_pIndexPool )
46 {
47 DestroyResources();
48 }
49
50 if ( IsValidated() )
51 {
53 }
54}
55
56void ASysMesh::DestroyResources()
57{
59
60 if ( m_pVertexPool )
61 {
63 m_pVertexPool = TNULL;
64 }
65
66 if ( m_pIndexPool )
67 {
69 m_pIndexPool = TNULL;
70 }
71
72 m_uiFlags = 0;
73 m_uiMaxVertices = 0;
74 m_uiMaxIndices = 0;
75}
76
77TBOOL ASysMesh::Create( void* a_pUnk, const TCHAR* a_szSomeString )
78{
79 m_SomeString = a_szSomeString;
80 return TMesh::Create();
81}
82
83TBOOL ASysMesh::CreatePools( TUINT32 a_uiResourcesFlags, TUINT16 a_uiMaxVertices, TUINT16 a_uiMaxIndices )
84{
85 m_uiFlags = a_uiResourcesFlags;
86 m_uiMaxVertices = a_uiMaxVertices;
87 m_uiMaxIndices = a_uiMaxIndices;
88
89 if ( !CreateResource() )
90 {
91 return TFALSE;
92 }
93
95 return TTRUE;
96}
97
98TBOOL ASysMesh::CreateResource()
99{
101 TVALIDPTR( pVertexFactory );
102
103 TUINT16 uiVertexPoolFlags;
104
105 if ( ( m_uiFlags & 1 ) == 0 )
106 {
107 if ( ( m_uiFlags & 2 ) == 0 )
108 {
109 if ( ( m_uiFlags & 4 ) != 0 )
110 {
111 uiVertexPoolFlags = 4;
112 }
113 }
114 else
115 {
116 uiVertexPoolFlags = 2;
117 }
118 }
119 else
120 {
121 uiVertexPoolFlags = 1;
122 }
123
124 m_pVertexPool = pVertexFactory->CreatePoolResource( m_uiMaxVertices, uiVertexPoolFlags );
125 TVALIDPTR( m_pVertexPool );
126
127 auto pIndexFactory = TRenderInterface::GetSingleton()->GetSystemResource<TIndexFactoryResourceInterface>( SYSRESOURCE_IFSYS );
128 TVALIDPTR( pIndexFactory );
129
130 TUINT16 uiIndexPoolFlags;
131
132 if ( ( m_uiFlags & 8 ) == 0 )
133 {
134 if ( ( m_uiFlags & 0x10 ) == 0 )
135 {
136 if ( ( m_uiFlags & 0x20 ) != 0 )
137 {
138 uiIndexPoolFlags = 4;
139 }
140 }
141 else
142 {
143 uiIndexPoolFlags = 2;
144 }
145 }
146 else
147 {
148 uiIndexPoolFlags = 1;
149 }
150
151
152 m_pIndexPool = pIndexFactory->CreatePoolResource( m_uiMaxVertices, ( -(TUINT)( ( m_uiFlags & 0x40 ) != 0 ) & 0xfffffff8 ) + 16 | uiIndexPoolFlags );
153 TVALIDPTR( m_pIndexPool );
154
155 return TTRUE;
156}
157
159{
160 TASSERT( 0 == ( m_uiFlags & FLAG_LOCKED ) );
161
162 if ( m_pVertexPool->Lock( &a_rLockBuffer.VertexLock ) )
163 {
164 if ( m_pIndexPool->Lock( &a_rLockBuffer.IndexLock ) )
165 {
166 m_uiFlags |= FLAG_LOCKED;
167 return TTRUE;
168 }
169 }
170
171 return TFALSE;
172}
173
174void ASysMesh::Unlock( TUINT32 a_uiNumVertices, TUINT32 a_uiNumIndices )
175{
176 TASSERT( 0 != ( m_uiFlags & FLAG_LOCKED ) );
177
178 if ( TINT16( a_uiNumVertices ) == -1 )
179 {
180 a_uiNumVertices = m_pVertexPool->GetNumVertices();
181 }
182
183 if ( TINT16( a_uiNumIndices ) == -1 )
184 {
185 a_uiNumIndices = m_pIndexPool->GetNumIndices();
186 }
187
188 m_pVertexPool->Unlock( a_uiNumVertices );
189 m_pIndexPool->Unlock( a_uiNumIndices );
190 m_uiFlags &= FLAG_LOCKED;
191}
192
193Toshi::TVertexPoolResourceInterface* ASysMesh::GetVertexPool()
194{
195 return m_pVertexPool;
196}
197
198Toshi::TIndexPoolResourceInterface* ASysMesh::GetIndexPool()
199{
200 return m_pIndexPool;
201}
@ SYSRESOURCE_IFSYS
Definition TRender.h:18
@ SYSRESOURCE_VFSYSVNDUV1
Definition TRender.h:9
Rendering system interface for the Toshi engine.
#define TASSERT(X,...)
Definition Defines.h:138
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TVALIDPTR(PTR)
Definition Defines.h:139
#define TDEFINE_CLASS_NORUNTIME(...)
Definition TObject.h:138
uint16_t TUINT16
Definition Typedefs.h:15
unsigned int TUINT
Definition Typedefs.h:8
int16_t TINT16
Definition Typedefs.h:14
char TCHAR
Definition Typedefs.h:20
#define TNULL
Definition Typedefs.h:23
uint32_t TUINT32
Definition Typedefs.h:13
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
virtual void Invalidate()
Definition TMesh.cpp:34
virtual TBOOL Create()
Definition TMesh.cpp:39
virtual TBOOL Validate()
Definition TMesh.cpp:28
T * GetSystemResource(SYSRESOURCE systemResource)
void DestroyResource(TResource *resource)
static TFORCEINLINE TRenderInterface * GetSingleton()
Definition TSingleton.h:49
virtual TBOOL CreatePools(TUINT32 a_uiFlags, TUINT16 a_uiMaxVertices, TUINT16 a_uiMaxIndices)
Definition ASysMesh.cpp:83
virtual void Invalidate() override
Definition ASysMesh.cpp:43
virtual void Unlock(TUINT32 a_uiNumVertices, TUINT32 a_uiNumIndices)
Definition ASysMesh.cpp:174
virtual Toshi::TIndexPoolResourceInterface * GetIndexPool()
Definition ASysMesh.cpp:198
virtual TBOOL Create(void *a_pUnk, const TCHAR *a_szSomeString)
Definition ASysMesh.cpp:77
virtual TBOOL Validate() override
Definition ASysMesh.cpp:26
virtual Toshi::TVertexPoolResourceInterface * GetVertexPool()
Definition ASysMesh.cpp:193
virtual TBOOL Lock(LockBuffer &a_rLockBuffer)
Definition ASysMesh.cpp:158
Toshi::TVertexPoolResourceInterface::LockBuffer VertexLock
Definition ASysMesh.h:15
Toshi::TIndexPoolResourceInterface::LockBuffer IndexLock
Definition ASysMesh.h:16