@@ -93,6 +93,22 @@ TBOOL TVertexBlockResource::AttachPool(TVertexPoolResource *a_pPool)
9393 return TTRUE;
9494}
9595
96+ // $TRenderD3DInterface: FUNCTION 10008960
97+ TBOOL TVertexBlockResource::Validate ()
98+ {
99+ if (IsValid ()) {
100+ return TTRUE;
101+ }
102+ TASSERT (TTRUE==Parent ()->GetClass ().IsExactly (TGetClass (TVertexFactoryResource)));
103+ if (!CreateHAL ()) {
104+ return TFALSE;
105+ }
106+ if (GetFlags () & 1 ) {
107+
108+ }
109+ TIMPLEMENT ();
110+ }
111+
96112// $TRenderD3DInterface: FUNCTION 100088c0
97113TBOOL TVertexBlockResource::Create (TVertexFactoryResource *a_pFactory, TUSHORT a_uiMaxVertices, TUINT a_uiFlags)
98114{
@@ -103,3 +119,66 @@ TBOOL TVertexBlockResource::Create(TVertexFactoryResource *a_pFactory, TUSHORT a
103119 m_uiFlags = a_uiFlags;
104120 return TResource::Create ();
105121}
122+
123+ // $TRenderD3DInterface: FUNCTION 100091a0
124+ TBOOL TVertexBlockResource::CreateHAL ()
125+ {
126+ DestroyHAL ();
127+ TRenderD3DInterface *pRenderer = static_cast <TRenderD3DInterface *>(GetRenderer ());
128+ TVertexFactoryFormat *vertexFormat = GetFactory ()->GetVertexFormat ();
129+ m_HALBuffer.uiNumStreams = vertexFormat->m_uiNumStreams ;
130+ for (TUINT i = 0 ; i < m_HALBuffer.uiNumStreams ; i++) {
131+ UINT length = vertexFormat->m_aStreamFormats [i].m_uiVertexSize * m_uiMaxVertices;
132+ DWORD usage = D3DUSAGE_WRITEONLY;
133+ if (GetFlags () & 1 ) {
134+ usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
135+ m_uiOffset = 0 ;
136+ }
137+ if (!pRenderer->GetCurrentDevice ()->SupportsHardwareTransfomations ()) {
138+ usage |= D3DUSAGE_SOFTWAREPROCESSING;
139+ }
140+ HRESULT hRes = pRenderer->GetD3DDevice ()->CreateVertexBuffer (
141+ length,
142+ usage,
143+ 0 ,
144+ D3DPOOL_DEFAULT,
145+ &m_HALBuffer.apVertexBuffers [i]);
146+ TRenderD3DInterface::TD3DAssert (hRes, " Unable to create a new vertex buffer!" );
147+
148+ TMemory::HALMemInfo memInfoHAL;
149+ TMemory::GetHALMemInfo (memInfoHAL);
150+ s_iHALMemoryUsage += memInfoHAL.m_iMemUsage ;
151+ s_iCurrentNumHALCreated += 1 ;
152+ s_iTotalNumHALCreated += 1 ;
153+ s_iTotalVertexBufferBytesAllocated += length;
154+ s_iCurrentVertexBufferBytesAllocated += length;
155+
156+ if (s_iTotalVertexBufferBytesAllocated < s_iHALMemoryUsage) {
157+ s_iWastedVertexBufferBytesAllocated = s_iHALMemoryUsage - s_iTotalVertexBufferBytesAllocated;
158+ }
159+ }
160+
161+ return TTRUE;
162+ }
163+
164+ // $TRenderD3DInterface: FUNCTION 10009300
165+ void TVertexBlockResource::DestroyHAL ()
166+ {
167+ TMemory::HALMemInfo memInfoHAL;
168+ TMemory::GetHALMemInfo (memInfoHAL);
169+ for (TUINT i = 0 ; i < m_HALBuffer.uiNumStreams ; i++) {
170+ if (m_HALBuffer.apVertexBuffers [i]) {
171+ TD3DRELEASE (m_HALBuffer.apVertexBuffers [i]);
172+ m_HALBuffer.apVertexBuffers [i] = TNULL;
173+ s_iCurrentNumHALCreated--;
174+ s_iTotalNumHALDestroyed++;
175+ s_iCurrentVertexBufferBytesAllocated -= GetFactory ()->GetVertexFormat ()->m_aStreamFormats [i].m_uiVertexSize * m_uiMaxVertices;
176+ }
177+ }
178+ m_HALBuffer.uiNumStreams = 0 ;
179+ TMemory::GetHALMemInfo (memInfoHAL);
180+ s_iHALMemoryUsage = s_iHALMemoryUsage - memInfoHAL.m_iMemUsage ;
181+ if (s_iTotalVertexBufferBytesAllocated < s_iHALMemoryUsage) {
182+ s_iWastedVertexBufferBytesAllocated = s_iHALMemoryUsage - s_iTotalVertexBufferBytesAllocated;
183+ }
184+ }
0 commit comments