blob: 3ddbdc807be62188530272376ff5121b1ac3e129 (
plain)
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
|
#if DEBUG
static int32 *debugnull = NULL;
#define Assert(Expression) if(!(Expression)) {*debugnull = 21;}
enum valtype {
d_float,
d_uint,
d_int
};
union debugval {
real32 f;
uint32 u;
int32 i;
};
// things that get cleared every frame with the UI
struct debug_temp
{
valtype DebugPropertyType[16];
debugval Val[16];
char *String[16];
uint32 WatchedProperties;
};
struct project_debug
{
debug_temp Temp;
bool32 ToggleWindow = 0;
bool32 ReloadUI = true;
bool32 NoThreading = 0;
bool32 DisableAlpha = 0;
uint64 PixelCountTransparent;
uint64 PixelCountRendered;
uint64 PixelCountChecked;
// NOTE(fox): Pixel count isn't thread safe; don't use with multithreading!
uint64 LayerCycleCount[64];
uint32 UndoState = 0;
uint64 ScratchSize[32];
uint32 ScratchState = 0;
};
static project_debug Debug;
static void
DebugWatchVar(char *Name, void *Address, valtype Type) {
uint32 i = Debug.Temp.WatchedProperties;
Debug.Temp.String[i] = Name;
if (Type == d_float)
Debug.Temp.Val[i].f = *(real32 *)Address;
if (Type == d_uint)
Debug.Temp.Val[i].u = *(uint32 *)Address;
if (Type == d_int)
Debug.Temp.Val[i].i = *(int32 *)Address;
Debug.Temp.DebugPropertyType[i] = Type;
Debug.Temp.WatchedProperties++;
}
#else
#define Assert(Expression)
enum valtype {
};
union debugval {
};
struct debug_temp
{
};
struct project_debug
{
};
static void
DebugWatchVar(char *Name, void *Address, valtype Type) {
}
static void
DebugPrintMemoryUsage(memory Memory) {
}
#endif
#ifdef PERF
struct perf_stats
{
uint64 PixelCountTransparent;
uint64 PixelCountRendered;
uint64 PixelCountChecked;
};
static uint64 Test;
#endif
|