OpenBarnyard
 
Loading...
Searching...
No Matches
TOrderTable.cpp
Go to the documentation of this file.
1#include "ToshiPCH.h"
2#include "Render/TShader.h"
3
4//-----------------------------------------------------------------------------
5// Enables memory debugging.
6// Note: Should be the last include!
7//-----------------------------------------------------------------------------
9
11
12// $Barnyard: FUNCTION 006d5a60
13void TOrderTable::CreateStaticData( TUINT a_uiMaxMaterials, TUINT a_uiMaxRenderPackets )
14{
15 s_uiMaxRenderPackets = a_uiMaxRenderPackets;
17
18 s_pRenderPackets = new TRenderPacket[ a_uiMaxRenderPackets ];
19 s_uiOrigMaxRenderPackets = a_uiMaxRenderPackets;
20
21 s_pRegMaterials = new TRegMaterial[ a_uiMaxMaterials ];
22 s_uiMaxMaterials = a_uiMaxMaterials;
23
24 for ( TSIZE i = 0; i < s_uiMaxMaterials; i++ )
25 {
26 s_pRegMaterials[ i ].SetOrderTable( TNULL );
27 s_llRegMatFreeList.InsertTail( &s_pRegMaterials[ i ] );
28 }
29}
30
37
38// $Barnyard: FUNCTION 006c4610
40{
41 m_pLastRegMat = TNULL;
42 m_pShader = TNULL;
43}
44
45// $Barnyard: FUNCTION 006d5d60
50
51// $Barnyard: FUNCTION 006d5910
53{
55
56 for ( auto it = m_pLastRegMat; it != TNULL; it = it->GetNextRegMat() )
57 {
58 it->Render();
59 }
60
62 m_pLastRegMat = TNULL;
63}
64
65// $Barnyard: FUNCTION 006d5970
67{
69
71 {
73 }
74
75 m_pShader->StartFlush();
76
77 for ( auto it = m_pLastRegMat; it != TNULL; it = it->GetNextRegMat() )
78 {
79 it->Render();
80 }
81
82 m_pShader->EndFlush();
83
85 m_pLastRegMat = TNULL;
86}
87
88// $Barnyard: FUNCTION 006d5be0
90{
92
93 TRegMaterial* pCurrentRegMat = pMat->GetRegMaterial();
94 if ( pCurrentRegMat != TNULL )
95 return pCurrentRegMat;
96
97 TASSERT( TFALSE == s_llRegMatFreeList.IsEmpty() );
98
99 if ( s_llRegMatFreeList.IsEmpty() )
100 return TNULL;
101
102 TRegMaterial* pRegMat = s_llRegMatFreeList.RemoveHead();
103 s_llRegMatRegisteredList.InsertTail( pRegMat );
105
107 pRegMat->SetMaterial( pMat );
108 pRegMat->SetOrderTable( this );
109 pMat->SetRegMaterial( pRegMat );
110
111 return pRegMat;
112}
113
114// $Barnyard: FUNCTION 006d5c60
116{
118 {
120
121 TMaterial* pMaterial = pRegMat->GetMaterial();
122
123 pRegMat->Remove();
124 s_llRegMatFreeList.InsertHead( pRegMat );
126
127 pRegMat->SetFlags( 0 );
128 pRegMat->SetMaterial( TNULL );
129 pRegMat->SetOrderTable( TNULL );
130 pMaterial->SetRegMaterial( TNULL );
131 }
132}
133
134// $Barnyard: FUNCTION 006d5cd0
136{
137 while ( !s_llRegMatRegisteredList.IsEmpty() )
138 {
140 }
141}
142
144{
145 if ( !HASANYFLAG( a_pRegMat->GetFlags(), TRegMaterial::State_Used ) )
146 {
147 a_pRegMat->SetFlags( a_pRegMat->GetFlags() | TRegMaterial::State_Used );
148 a_pRegMat->SetNextRegMat( m_pLastRegMat );
149 m_pLastRegMat = a_pRegMat;
150 }
151}
152
154{
155 if ( s_pRegMaterials )
156 {
158 s_llRegMatFreeList.RemoveAll();
159
160 delete[] s_pRegMaterials;
162 }
163
164 delete[] s_pRenderPackets;
166}
167
169{
171
172 m_pMaterial->PreRender();
173
174 for ( auto pPacket = m_pLastRenderPacket; pPacket != TNULL; pPacket = pPacket->GetNextPacket() )
175 {
176 pPacket->GetMesh()->GetOwnerShader()->Render( pPacket );
177 }
178
179 m_pLastRenderPacket = TNULL;
180 SetFlags( m_State & ~State_Used );
181 m_pMaterial->PostRender();
182}
183
184// $Barnyard: FUNCTION 006d59f0
186{
187 TRenderPacket* pPreviousPacket = m_pLastRenderPacket;
188
189 m_pLastRenderPacket = TOrderTable::AllocRenderPacket();
190 m_pLastRenderPacket->SetNextPacket( pPreviousPacket );
191
192 m_pOrderTable->UseMaterial( this );
193 m_pLastRenderPacket->SetMesh( pMesh );
194 m_pLastRenderPacket->SetMaterial( pMesh->GetMaterial() );
195
196 return m_pLastRenderPacket;
197}
198
Shader system for the Toshi engine.
#define TASSERT(X,...)
Definition Defines.h:138
#define HASANYFLAG(STATE, FLAG)
Definition Defines.h:5
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
#define TPROFILER_SCOPE()
Definition Profiler.h:17
unsigned int TUINT
Definition Typedefs.h:8
size_t TSIZE
Definition Typedefs.h:9
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
TRegMaterial * GetRegMaterial() const
void SetRegMaterial(TRegMaterial *a_pRegMaterial)
Definition TMesh.h:9
TMaterial * GetMaterial() const
Definition TMesh.cpp:75
State GetFlags() const
Definition TOrderTable.h:38
void SetMaterial(TMaterial *a_pMaterial)
Definition TOrderTable.h:45
void SetFlags(State a_eFlags)
Definition TOrderTable.h:39
TRenderPacket * AddRenderPacket(TMesh *a_pMesh)
void SetNextRegMat(TRegMaterial *a_pRegMat)
Definition TOrderTable.h:48
void SetOrderTable(TOrderTable *a_pOrderTable)
Definition TOrderTable.h:42
TMaterial * GetMaterial() const
Definition TOrderTable.h:44
static TRenderPacket * s_pRenderPackets
static TUINT s_uiMaxMaterials
static TNodeList< TRegMaterial > s_llRegMatRegisteredList
static void CreateStaticData(TUINT a_uiMaxMaterials, TUINT a_uiMaxRenderPackets)
static void DeregisterMaterial(TRegMaterial *a_pRegMat)
static TUINT s_uiOrigMaxRenderPackets
static TUINT s_uiNumRenderPackets
static void DeregisterAllMaterials()
static void DestroyStaticData()
static TUINT s_uiMaxNumRenderPackets
void UseMaterial(TRegMaterial *a_pRegMat)
static TUINT s_uiNumRegisteredMaterials
static TUINT s_uiMaxRenderPackets
static TNodeList< TRegMaterial > s_llRegMatFreeList
static TRegMaterial * s_pRegMaterials
static TRenderPacket * AllocRenderPacket()
TRegMaterial * RegisterMaterial(TMaterial *a_pMat)