-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdb.cpp
128 lines (106 loc) · 2.79 KB
/
db.cpp
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
#include "db.h"
#include "mem.h"
#include "main.h"
#include "ps2funcs.h"
#include "validate.h"
SDoubleBuffer* pDoubleBuffer;
SDoubleBuffer* pOtherBuffer;
SDoubleBuffer DoubleBuffer[2];
u32* pPoly;
u8* PolyBufferEnd;
// @Ok
// @Matching
void Db_CreateOTsAndPolyBuffers(void)
{
print_if_false(DoubleBuffer[0].OrderingTable == (void*)-1, "OrderingTable 0 not NULL");
print_if_false(DoubleBuffer[1].OrderingTable == (void*)-1, "OrderingTable 1 not NULL");
print_if_false(DoubleBuffer[0].Polys == (void*)-1, "Poly buffer 0 not NULL");
print_if_false(DoubleBuffer[1].Polys == (void*)-1, "Poly buffer 1 not NULL");
DoubleBuffer[0].OrderingTable = (u32*)DCMem_New(0x4000u, 1, 1, 0, 1);
DoubleBuffer[1].OrderingTable = (u32*)DCMem_New(0x4000u, 1, 1, 0, 1);
DoubleBuffer[0].Polys = (u8*)DCMem_New(0x17000u, 1, 1, 0, 1);
DoubleBuffer[1].Polys = (u8*)DCMem_New(0x17000u, 1, 1, 0, 1);
Db_FlipClear();
CalcPolyBufferEnd();
}
// @Ok
// @Matching
INLINE void Db_DefaultScreenOffsets(void)
{
DoubleBuffer[0].field_64 = 0;
DoubleBuffer[1].field_64 = 0;
DoubleBuffer[0].field_66 = 0;
DoubleBuffer[1].field_66 = 0;
}
// @Ok
// @Matching
void Db_DeleteOTsAndPolyBuffers(void)
{
if (DoubleBuffer[0].OrderingTable)
{
Mem_Delete(DoubleBuffer[0].OrderingTable);
DoubleBuffer[0].OrderingTable = (u32*)0xFFFFFFFF;
}
if (DoubleBuffer[1].OrderingTable)
{
Mem_Delete(DoubleBuffer[1].OrderingTable);
DoubleBuffer[1].OrderingTable = (u32*)0xFFFFFFFF;
}
if (DoubleBuffer[0].Polys)
{
Mem_Delete(DoubleBuffer[0].Polys);
DoubleBuffer[0].Polys = (u8*)0xFFFFFFFF;
}
if (DoubleBuffer[1].Polys)
{
Mem_Delete(DoubleBuffer[1].Polys);
DoubleBuffer[1].Polys = (u8*)0xFFFFFFFF;
}
pPoly = reinterpret_cast<u32*>(1);
}
// @Ok
// @Matching
INLINE void Db_FlipClear(void)
{
pDoubleBuffer = pDoubleBuffer == &DoubleBuffer[0] ?
&DoubleBuffer[1] :
&DoubleBuffer[0];
ClearOTagR();
pPoly = reinterpret_cast<u32*>(reinterpret_cast<u32>(pDoubleBuffer->Polys) & 0x7FFFFFFF);
}
// @SMALLTODO
void Db_Init(void)
{
SetDefDrawEnv();
SetDefDrawEnv();
SetDefDispEnv();
SetDefDispEnv();
Db_DefaultScreenOffsets();
DoubleBuffer[0].field_18 = 1;
setRGB0();
DoubleBuffer[1].field_18 = 1;
setRGB0();
DoubleBuffer[0].OrderingTable = (u32*)0xFFFFFFFF;
DoubleBuffer[1].OrderingTable = (u32*)0xFFFFFFFF;
DoubleBuffer[0].Polys = (u8*)0xFFFFFFFF;
DoubleBuffer[1].Polys = (u8*)0xFFFFFFFF;
Db_CreateOTsAndPolyBuffers();
Db_FlipClear();
PutDispEnv();
PutDrawEnv();
DrawOTag();
}
// @SMALLTODO
void Db_UpdateSky(void)
{
printf("Db_UpdateSky(void)");
}
void validate_SDoubleBuffer(void)
{
VALIDATE_SIZE(SDoubleBuffer, 0x7C);
VALIDATE(SDoubleBuffer, field_18, 0x18);
VALIDATE(SDoubleBuffer, field_64, 0x64);
VALIDATE(SDoubleBuffer, field_66, 0x66);
VALIDATE(SDoubleBuffer, OrderingTable, 0x70);
VALIDATE(SDoubleBuffer, Polys, 0x78);
}