OpenBarnyard
 
Loading...
Searching...
No Matches
ASysMaterial_DX8.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "ASysMaterial_DX8.h"
3
4#ifdef TOSHI_SKU_WINDOWS
7#endif // TOSHI_SKU_WINDOWS
8
9//-----------------------------------------------------------------------------
10// Enables memory debugging.
11// Note: Should be the last include!
12//-----------------------------------------------------------------------------
13#include <Core/TMemoryDebugOn.h>
14
16
18
20{
21 m_pAssignedOrderTable = TNULL;
23 m_Unk1 = 0;
24 m_Unk2 = 0;
25 m_Unk3 = 0;
26}
27
29{
30 auto pRegMat = GetRegMaterial();
31
32 if ( pRegMat )
33 {
35 }
36}
37
38void ASysMaterialHAL::SetOrderTable( Toshi::TOrderTable* a_pOrderTable )
39{
40 if ( a_pOrderTable != m_pAssignedOrderTable )
41 {
42 if ( m_pAssignedOrderTable )
43 {
44 TOrderTable::DeregisterMaterial( GetRegMaterial() );
45 }
46
47 if ( a_pOrderTable )
48 {
49 a_pOrderTable->RegisterMaterial( this );
50 }
51
52 m_pAssignedOrderTable = a_pOrderTable;
53 }
54}
55
57{
58 // This is a bug in the original code
59 // Should probably be ASysMaterial::SetBlendMode instead of just SetBlendMode
60 SetBlendMode( a_eBlendMode );
61 ASysMaterialHAL::SetBlendMode( a_eBlendMode );
62
63 return TMaterial::Create();
64}
65
67{
68 TASSERT( a_eBlendMode >= BLENDMODE_DEFAULT && a_eBlendMode < BLENDMODE_NUMOF );
69
70 switch ( a_eBlendMode )
71 {
73 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 0 ) );
74 break;
75 case BLENDMODE_5:
76 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 3 ) );
77 break;
78 case BLENDMODE_6:
79 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 3 ) );
80 break;
81 case BLENDMODE_7:
82 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 1 ) );
83 break;
84 case BLENDMODE_8:
85 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 2 ) );
86 break;
87 case BLENDMODE_9:
88 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 3 ) );
89 break;
90 default:
91 SetOrderTable( GetSysShaderHAL()->GetOrderTable( 1 ) );
92 break;
93 }
94
95 ASysMaterial::SetBlendMode( a_eBlendMode );
96}
97
99{
101
102 if ( m_pTexture )
103 {
105 pTextureHAL->Validate();
106
107 if ( pTextureHAL->GetD3DTexture() )
108 {
109 pDevice->SetTexture( 0, pTextureHAL->GetD3DTexture() );
111 }
112 }
113 else
114 {
115 pDevice->SetTexture( 0, TNULL );
116 }
117
118 if ( m_Flags & FLAGS_NO_CULL )
119 {
120 pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
121 }
122
123 switch ( m_eBlendMode )
124 {
126 pDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
127 pDevice->SetRenderState( D3DRS_DESTBLEND, 6 );
128 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
129 break;
130 case BLENDMODE_1:
131 case BLENDMODE_8:
132 case BLENDMODE_9:
133 case BLENDMODE_10:
134 pDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
135 pDevice->SetRenderState( D3DRS_DESTBLEND, 6 );
136 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
137 break;
138 case BLENDMODE_2:
139 pDevice->SetRenderState( D3DRS_SRCBLEND, 1 );
140 pDevice->SetRenderState( D3DRS_DESTBLEND, 3 );
141 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
142 break;
143 case BLENDMODE_3:
144 case BLENDMODE_6:
145 pDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
146 pDevice->SetRenderState( D3DRS_DESTBLEND, 2 );
147 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
148 break;
149 case BLENDMODE_7:
150 pDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
151 pDevice->SetRenderState( D3DRS_DESTBLEND, 2 );
152 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
153 pDevice->SetRenderState( D3DRS_ZENABLE, 0 );
154 break;
155 default:
156 pDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
157 pDevice->SetRenderState( D3DRS_DESTBLEND, 6 );
158 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
159 break;
160 }
161}
162
164{
166
167 pDevice->SetTexture( 0, TNULL );
168
169 if ( m_Flags & FLAGS_NO_CULL )
170 {
171 pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW );
172 }
173
175 pDevice->SetTexture( 0, TNULL );
176 pDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
177 pDevice->SetRenderState( D3DRS_ZENABLE, TRUE );
178}
@ ADDRESSINGMODE_WRAP
Definition TRender.h:40
@ TEXCOORD_UV
Definition TRender.h:29
#define TASSERT(X,...)
Definition Defines.h:138
#define TSTATICCAST(POINTERTYPE, VALUE)
Definition Defines.h:69
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TDEFINE_CLASS(...)
Definition TObject.h:120
#define TNULL
Definition Typedefs.h:23
bool TBOOL
Definition Typedefs.h:6
TFORCEINLINE IDirect3DDevice8 * GetDirect3DDevice() const
Gets the Direct3D device.
static TFORCEINLINE TRenderD3DInterface * Interface()
Gets the render interface singleton.
void SetTextureAddress(TINT a_iStage, ADDRESSINGMODE a_eAddressing, TEXCOORD a_eTextureCoordinate=TEXCOORD_UV)
Sets texture addressing mode.
IDirect3DTexture8 * GetD3DTexture()
virtual TBOOL Validate() override
ADDRESSINGMODE GetAddressing() const
Definition TTexture.h:55
virtual TBOOL Create()
Definition TMaterial.cpp:40
static void DeregisterMaterial(TRegMaterial *a_pRegMat)
virtual void PreRender() override
virtual void SetBlendMode(BLENDMODE a_eBlendMode) override
ASysShaderHAL * GetSysShaderHAL() const
void SetOrderTable(Toshi::TOrderTable *a_pOrderTable)
virtual void PostRender() override
Toshi::TTexture * m_pTexture
virtual void SetBlendMode(BLENDMODE a_eBlendMode)
virtual TBOOL Create() override
BLENDMODE m_eBlendMode