15
15
// //////////////////////////////////////////////////////////////////////////////
16
16
#include " FrameRecorder.h"
17
17
18
- #if ENABLE_RECORDER
18
+ #if MOC_RECORDER_ENABLE
19
19
#include < assert.h>
20
20
#include < algorithm>
21
21
@@ -35,21 +35,27 @@ bool MaskedOcclusionCulling::RecorderStart( const char * outputFilePath ) const
35
35
FILE * f;
36
36
if ( fopen_s ( &f, outputFilePath, " wb" ) != 0 )
37
37
return false ;
38
- mRecorder = new FrameRecorder ( f, *this );
39
38
#else
40
39
std::ofstream outStream ( outputFilePath, std::ios::out | std::ios::trunc | std::ios::binary );
41
40
if ( !outStream.is_open ( ) )
42
41
return false ;
43
- mRecorder = new FrameRecorder ( std::move ( outStream ), *this );
44
42
#endif
43
+ mRecorder = (FrameRecorder *)mAlignedAllocCallback ( 64 , sizeof ( FrameRecorder ) );
44
+ #if MOC_RECORDER_USE_STDIO_FILE
45
+ new (mRecorder ) FrameRecorder ( f, *this );
46
+ #else
47
+ new (mRecorder ) FrameRecorder ( std::move ( outStream ), *this );
48
+ #endif
49
+
45
50
return true ;
46
51
}
47
52
48
53
void MaskedOcclusionCulling::RecorderStop ( ) const
49
54
{
50
55
std::lock_guard<std::mutex> lock ( mRecorderMutex );
51
56
52
- delete mRecorder ;
57
+ mRecorder ->~FrameRecorder ();
58
+ mAlignedFreeCallback ( mRecorder );
53
59
mRecorder = nullptr ;
54
60
}
55
61
@@ -204,6 +210,47 @@ namespace
204
210
};
205
211
}
206
212
213
+ void FrameRecorder::RecordClearBuffer ( )
214
+ {
215
+ char header = 3 ;
216
+ Write ( &header, 1 );
217
+ }
218
+
219
+ void FrameRecorder::RecordRenderTriangles ( MaskedOcclusionCulling::CullingResult cullingResult, const float *inVtx, const unsigned int *inTris, int nTris, const float *modelToClipMatrix, MaskedOcclusionCulling::ClipPlanes clipPlaneMask, MaskedOcclusionCulling::BackfaceWinding bfWinding, const MaskedOcclusionCulling::VertexLayout & vtxLayout )
220
+ {
221
+ char header = 0 ;
222
+ Write ( &header, 1 );
223
+ WriteTriangleRecording ( cullingResult, inVtx, inTris, nTris, modelToClipMatrix, clipPlaneMask, bfWinding, vtxLayout );
224
+ }
225
+
226
+ void FrameRecorder::RecordTestRect ( MaskedOcclusionCulling::CullingResult cullingResult, float xmin, float ymin, float xmax, float ymax, float wmin )
227
+ {
228
+ char header = 1 ;
229
+ Write ( &header, 1 );
230
+
231
+ Write ( &cullingResult, sizeof ( cullingResult ) );
232
+ Write ( &xmin, sizeof ( xmin ) );
233
+ Write ( &ymin, sizeof ( ymin ) );
234
+ Write ( &xmax, sizeof ( xmax ) );
235
+ Write ( &ymax, sizeof ( ymax ) );
236
+ Write ( &wmin, sizeof ( wmin ) );
237
+ }
238
+
239
+ void FrameRecorder::RecordTestTriangles ( MaskedOcclusionCulling::CullingResult cullingResult, const float *inVtx, const unsigned int *inTris, int nTris, const float *modelToClipMatrix, MaskedOcclusionCulling::ClipPlanes clipPlaneMask, MaskedOcclusionCulling::BackfaceWinding bfWinding, const MaskedOcclusionCulling::VertexLayout & vtxLayout )
240
+ {
241
+ char header = 2 ;
242
+ Write ( &header, 1 );
243
+ WriteTriangleRecording ( cullingResult, inVtx, inTris, nTris, modelToClipMatrix, clipPlaneMask, bfWinding, vtxLayout );
244
+ }
245
+
246
+
247
+ // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
248
+ // Masked occlusion culling recording
249
+ // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
250
+
251
+
252
+ #if MOC_RECORDER_ENABLE_PLAYBACK
253
+
207
254
static bool ReadTriangleRecording ( FrameRecording::TrianglesEntry & outEntry, InStreamWrapper & inStream )
208
255
{
209
256
// read culling result
@@ -240,7 +287,7 @@ static bool ReadTriangleRecording( FrameRecording::TrianglesEntry & outEntry, In
240
287
241
288
// read vertices
242
289
outEntry.mVertices .resize ( vertexSize / 4 * vertexCount ); // pre-allocate data
243
- if ( inStream.Read ( (char *) outEntry.mVertices .data (), vertexSize * vertexCount ) != (vertexSize * vertexCount) )
290
+ if ( inStream.Read ( (char *)outEntry.mVertices .data ( ), vertexSize * vertexCount ) != ( vertexSize * vertexCount ) )
244
291
{
245
292
assert ( false );
246
293
return false ;
@@ -269,7 +316,7 @@ static bool ReadTriangleRecording( FrameRecording::TrianglesEntry & outEntry, In
269
316
return false ;
270
317
}
271
318
272
- if ( (outEntry.mHasModelToClipMatrix = (hasMatrix != 0 ) ) )
319
+ if ( ( outEntry.mHasModelToClipMatrix = ( hasMatrix != 0 ) ) )
273
320
{
274
321
if ( inStream.Read ( (char *)outEntry.mModelToClipMatrix , 16 * sizeof ( float ) ) != 16 * sizeof ( float ) )
275
322
{
@@ -309,44 +356,6 @@ static bool ReadTriangleRecording( FrameRecording::TrianglesEntry & outEntry, In
309
356
return true ;
310
357
}
311
358
312
- void FrameRecorder::RecordClearBuffer ( )
313
- {
314
- char header = 3 ;
315
- Write ( &header, 1 );
316
- }
317
-
318
- void FrameRecorder::RecordRenderTriangles ( MaskedOcclusionCulling::CullingResult cullingResult, const float *inVtx, const unsigned int *inTris, int nTris, const float *modelToClipMatrix, MaskedOcclusionCulling::ClipPlanes clipPlaneMask, MaskedOcclusionCulling::BackfaceWinding bfWinding, const MaskedOcclusionCulling::VertexLayout & vtxLayout )
319
- {
320
- char header = 0 ;
321
- Write ( &header, 1 );
322
- WriteTriangleRecording ( cullingResult, inVtx, inTris, nTris, modelToClipMatrix, clipPlaneMask, bfWinding, vtxLayout );
323
- }
324
-
325
- void FrameRecorder::RecordTestRect ( MaskedOcclusionCulling::CullingResult cullingResult, float xmin, float ymin, float xmax, float ymax, float wmin )
326
- {
327
- char header = 1 ;
328
- Write ( &header, 1 );
329
-
330
- Write ( &cullingResult, sizeof ( cullingResult ) );
331
- Write ( &xmin, sizeof ( xmin ) );
332
- Write ( &ymin, sizeof ( ymin ) );
333
- Write ( &xmax, sizeof ( xmax ) );
334
- Write ( &ymax, sizeof ( ymax ) );
335
- Write ( &wmin, sizeof ( wmin ) );
336
- }
337
-
338
- void FrameRecorder::RecordTestTriangles ( MaskedOcclusionCulling::CullingResult cullingResult, const float *inVtx, const unsigned int *inTris, int nTris, const float *modelToClipMatrix, MaskedOcclusionCulling::ClipPlanes clipPlaneMask, MaskedOcclusionCulling::BackfaceWinding bfWinding, const MaskedOcclusionCulling::VertexLayout & vtxLayout )
339
- {
340
- char header = 2 ;
341
- Write ( &header, 1 );
342
- WriteTriangleRecording ( cullingResult, inVtx, inTris, nTris, modelToClipMatrix, clipPlaneMask, bfWinding, vtxLayout );
343
- }
344
-
345
-
346
- // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
347
- // Masked occlusion culling recording
348
- // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
349
-
350
359
bool FrameRecording::Load ( const char * inputFilePath, FrameRecording & outRecording )
351
360
{
352
361
outRecording.Reset ();
@@ -438,4 +447,6 @@ bool FrameRecording::Load( const char * inputFilePath, FrameRecording & outRecor
438
447
return true ;
439
448
}
440
449
441
- #endif // #if ENABLE_RECORDER
450
+ #endif // #if MOC_RECORDER_ENABLE_PLAYBACK
451
+
452
+ #endif // #if MOC_RECORDER_ENABLE
0 commit comments