1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef RECORDING_H
#define RECORDING_H
#pragma once
//-----------------------------------------------------------------------------
// Use this to put us into a 'recording' mode
//-----------------------------------------------------------------------------
//#define RECORDING
//-----------------------------------------------------------------------------
// Uncomment these to record special frames in the recording
// that reset the entire render state.
//-----------------------------------------------------------------------------
//#define RECORD_KEYFRAMES 1
#define KEYFRAME_INTERVAL 100 // number of actual frames between each keyframe
//-----------------------------------------------------------------------------
// Use this to allow us to record crashes (write every command immediately)
//-----------------------------------------------------------------------------
//#define CRASH_RECORDING
//-----------------------------------------------------------------------------
// Use this to record textures (checkboards are used for textures otherwise)
//-----------------------------------------------------------------------------
#define RECORD_TEXTURES
//-----------------------------------------------------------------------------
// Use this to record debug strings . .these are only useful if you are doing "playback -list"
//-----------------------------------------------------------------------------
#define RECORD_DEBUG_STRINGS
//-----------------------------------------------------------------------------
// Recording state, if you change this, change the table in playback/playback.cpp
//-----------------------------------------------------------------------------
enum RecordingCommands_t
{
DX8_CREATE_DEVICE = 0,
DX8_DESTROY_DEVICE,
DX8_RESET,
DX8_SHOW_CURSOR,
DX8_BEGIN_SCENE,
DX8_END_SCENE,
DX8_PRESENT,
DX8_CREATE_TEXTURE,
DX8_DESTROY_TEXTURE,
DX8_SET_TEXTURE,
DX8_SET_TRANSFORM,
DX8_CREATE_VERTEX_SHADER,
DX8_CREATE_PIXEL_SHADER,
DX8_DESTROY_VERTEX_SHADER,
DX8_DESTROY_PIXEL_SHADER,
DX8_SET_VERTEX_SHADER,
DX8_SET_PIXEL_SHADER,
DX8_SET_VERTEX_SHADER_CONSTANT,
DX8_SET_PIXEL_SHADER_CONSTANT,
DX8_SET_MATERIAL,
DX8_LIGHT_ENABLE,
DX8_SET_LIGHT,
DX8_SET_VIEWPORT,
DX8_CLEAR,
DX8_VALIDATE_DEVICE,
DX8_SET_RENDER_STATE,
DX8_SET_TEXTURE_STAGE_STATE,
DX8_CREATE_VERTEX_BUFFER,
DX8_DESTROY_VERTEX_BUFFER,
DX8_LOCK_VERTEX_BUFFER,
DX8_VERTEX_DATA,
DX8_UNLOCK_VERTEX_BUFFER,
DX8_CREATE_INDEX_BUFFER,
DX8_DESTROY_INDEX_BUFFER,
DX8_LOCK_INDEX_BUFFER,
DX8_INDEX_DATA,
DX8_UNLOCK_INDEX_BUFFER,
DX8_SET_STREAM_SOURCE,
DX8_SET_INDICES,
DX8_DRAW_PRIMITIVE,
DX8_DRAW_INDEXED_PRIMITIVE,
DX8_LOCK_TEXTURE,
DX8_UNLOCK_TEXTURE,
DX8_KEYFRAME, // isn't actually a dx8 command, used to help find particular frames
DX8_SET_TEXTURE_DATA,
DX8_BLIT_TEXTURE_BITS,
DX8_GET_DEVICE_CAPS,
DX8_GET_ADAPTER_IDENTIFIER,
DX8_HARDWARE_SYNC,
DX8_COPY_FRAMEBUFFER_TO_TEXTURE,
DX8_DEBUG_STRING,
DX8_CREATE_DEPTH_TEXTURE,
DX8_DESTROY_DEPTH_TEXTURE,
DX8_SET_RENDER_TARGET,
DX8_TEST_COOPERATIVE_LEVEL,
DX8_SET_VERTEX_BUFFER_FORMAT, // isn't actually a dx8 command. . let's playback know what format a buffer is for listing info
DX8_SET_SAMPLER_STATE,
DX8_SET_VERTEX_DECLARATION,
DX8_CREATE_VERTEX_DECLARATION,
DX8_SET_FVF,
DX8_SET_CLIP_PLANE,
DX8_SYNC_TOKEN,
DX8_LOCK_VERTEX_TEXTURE,
DX8_UNLOCK_VERTEX_TEXTURE,
DX8_SET_SCISSOR_RECT,
DX8_NUM_RECORDING_COMMANDS
};
#ifdef RECORDING
void RecordCommand( RecordingCommands_t cmd, int numargs );
void RecordArgument( void const* pMemory, int size );
void FinishRecording( void );
inline void RecordInt( int i )
{
RecordArgument( &i, sizeof(int) );
}
inline void RecordFloat( float f )
{
RecordArgument( &f, sizeof(float) );
}
# define RECORD_COMMAND( _cmd, _numargs ) RecordCommand( _cmd, _numargs )
# define RECORD_INT( _int ) RecordInt( _int )
# define RECORD_FLOAT( _float ) RecordFloat( _float )
# define RECORD_STRING( _string ) RecordArgument( _string, strlen(_string) + 1 )
# define RECORD_STRUCT( _struct, _size ) RecordArgument( _struct, _size )
# define RECORD_RENDER_STATE( _state, _val ) \
RECORD_COMMAND( DX8_SET_RENDER_STATE, 2 ); \
RECORD_INT( _state ); \
RECORD_INT( _val )
# define RECORD_TEXTURE_STAGE_STATE( _stage, _state, _val ) \
RECORD_COMMAND( DX8_SET_TEXTURE_STAGE_STATE, 3 ); \
RECORD_INT( _stage ); \
RECORD_INT( _state ); \
RECORD_INT( _val )
# define RECORD_SAMPLER_STATE( _stage, _state, _val ) \
RECORD_COMMAND( DX8_SET_SAMPLER_STATE, 3 ); \
RECORD_INT( _stage ); \
RECORD_INT( _state ); \
RECORD_INT( _val )
# ifdef RECORD_DEBUG_STRINGS
# define RECORD_DEBUG_STRING( _str ) \
RECORD_COMMAND( DX8_DEBUG_STRING, 1 ); \
RECORD_STRING( _str )
# else
# define RECORD_DEBUG_STRING( _str ) 0
# endif
#else // not RECORDING
# undef RECORD_TEXTURES
# define RECORD_COMMAND( _cmd, _numargs ) 0
# define RECORD_INT( _int ) 0
# define RECORD_FLOAT( _float ) 0
# define RECORD_STRING( _string ) 0
# define RECORD_STRUCT( _struct, _size ) 0
# define RECORD_RENDER_STATE( _state, _val ) 0
# define RECORD_TEXTURE_STAGE_STATE( _stage, _state, _val ) 0
# define RECORD_SAMPLER_STATE( _stage, _state, _val ) 0
# define RECORD_DEBUG_STRING( _str ) 0
#endif // RECORDING
#endif // RECORDING_H
|