OpenBarnyard
 
Loading...
Searching...
No Matches
AWorldMaterialHAL Class Reference

#include <AWorldMaterial_DX8.h>

Inheritance diagram for AWorldMaterialHAL:
AWorldMaterial

Public Member Functions

 TDECLARE_CLASS (AWorldMaterialHAL, AWorldMaterial)
 
 AWorldMaterialHAL ()
 
 ~AWorldMaterialHAL ()
 
virtual void OnDestroy () override
 
virtual void PreRender () override
 
virtual void PostRender () override
 
virtual TBOOL Create (BLENDMODE a_eBlendMode) override
 
virtual void SetBlendMode (BLENDMODE a_eBlendMode) override
 
virtual void CopyToAlphaBlendMaterial ()
 
void SetOrderTable (Toshi::TOrderTable *a_pOrderTable)
 
AWorldMaterialHALGetAlphaBlendMaterial () const
 
void SetAlphaBlendMaterial (AWorldMaterialHAL *val)
 
TFLOAT GetUVOffsetX (TUINT a_uiTextureIndex)
 
void SetUVOffsetX (TUINT a_uiTextureIndex, TFLOAT a_fOffset)
 
void AddUVOffsetX (TUINT a_uiTextureIndex, TFLOAT a_fOffset)
 
TFLOAT GetUVOffsetY (TUINT a_uiTextureIndex)
 
void SetUVOffsetY (TUINT a_uiTextureIndex, TFLOAT a_fOffset)
 
void AddUVOffsetY (TUINT a_uiTextureIndex, TFLOAT a_fOffset)
 
- Public Member Functions inherited from AWorldMaterial
 TDECLARE_CLASS (AWorldMaterial, Toshi::TMaterial)
 
 AWorldMaterial ()
 
 ~AWorldMaterial ()
 
AWorldMaterial::BLENDMODE GetBlendMode () const
 
void SetTexture (TUINT a_uiStage, Toshi::TTexture *a_pTexture)
 

Additional Inherited Members

- Public Types inherited from AWorldMaterial
using BLENDMODE = TINT
 
- Static Public Attributes inherited from AWorldMaterial
static constexpr TUINT MAX_TEXTURES = 4
 
- Protected Attributes inherited from AWorldMaterial
Toshi::TTexture * m_aTextures [MAX_TEXTURES]
 
BLENDMODE m_eBlendMode
 
TFLOAT m_fUVAnimX
 
TFLOAT m_fUVAnimY
 
TFLOAT m_fUVAnimSpeedX
 
TFLOAT m_fUVAnimSpeedY
 

Detailed Description

Definition at line 6 of file AWorldMaterial_DX8.h.

Constructor & Destructor Documentation

◆ AWorldMaterialHAL()

AWorldMaterialHAL::AWorldMaterialHAL ( )

Definition at line 21 of file AWorldMaterial_DX8.cpp.

22{
23 m_pAlphaBlendMaterial = TNULL;
24 m_pAssignedOrderTable = TNULL;
25
26 for ( TUINT i = 0; i < MAX_TEXTURES; i++ )
27 {
28 m_aHasUVOffsets[ i ] = TFALSE;
29 m_aUVOffsetsX[ i ] = 0.0f;
30 m_aUVOffsetsY[ i ] = 0.0f;
31 }
32}
unsigned int TUINT
Definition Typedefs.h:8
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
static constexpr TUINT MAX_TEXTURES

◆ ~AWorldMaterialHAL()

AWorldMaterialHAL::~AWorldMaterialHAL ( )

Definition at line 34 of file AWorldMaterial_DX8.cpp.

35{
36 if ( m_pRegMaterial )
37 {
38 TOrderTable::DeregisterMaterial( m_pRegMaterial );
39 }
40
41 if ( m_pAlphaBlendMaterial )
42 {
43 delete m_pAlphaBlendMaterial;
44 }
45}
static void DeregisterMaterial(TRegMaterial *a_pRegMat)

Member Function Documentation

◆ AddUVOffsetX()

void AWorldMaterialHAL::AddUVOffsetX ( TUINT a_uiTextureIndex,
TFLOAT a_fOffset )
inline

Definition at line 48 of file AWorldMaterial_DX8.h.

49 {
50 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
51 m_aUVOffsetsX[ a_uiTextureIndex ] += a_fOffset;
52 }
#define TASSERT(X,...)
Definition Defines.h:138

◆ AddUVOffsetY()

void AWorldMaterialHAL::AddUVOffsetY ( TUINT a_uiTextureIndex,
TFLOAT a_fOffset )
inline

Definition at line 64 of file AWorldMaterial_DX8.h.

65 {
66 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
67 m_aUVOffsetsY[ a_uiTextureIndex ] += a_fOffset;
68 }

◆ CopyToAlphaBlendMaterial()

void AWorldMaterialHAL::CopyToAlphaBlendMaterial ( )
virtual

Definition at line 208 of file AWorldMaterial_DX8.cpp.

209{
210 if ( m_pAlphaBlendMaterial )
211 {
212 m_pAlphaBlendMaterial->m_iNumTex = m_iNumTex;
213 m_pAlphaBlendMaterial->m_aTextures[ 0 ] = m_aTextures[ 0 ];
214 m_pAlphaBlendMaterial->m_aTextures[ 1 ] = m_aTextures[ 1 ];
215 m_pAlphaBlendMaterial->m_aTextures[ 2 ] = m_aTextures[ 2 ];
216 m_pAlphaBlendMaterial->m_aTextures[ 3 ] = m_aTextures[ 3 ];
217
218 m_pAlphaBlendMaterial->SetFlags( FLAGS_BLENDING, TTRUE );
219 }
220}
#define TTRUE
Definition Typedefs.h:25
Toshi::TTexture * m_aTextures[MAX_TEXTURES]

◆ Create()

TBOOL AWorldMaterialHAL::Create ( BLENDMODE a_eBlendMode)
overridevirtual

Reimplemented from AWorldMaterial.

Definition at line 167 of file AWorldMaterial_DX8.cpp.

168{
169 SetBlendMode( a_eBlendMode );
170 return BaseClass::Create( a_eBlendMode );
171}
virtual void SetBlendMode(BLENDMODE a_eBlendMode) override

◆ GetAlphaBlendMaterial()

AWorldMaterialHAL * AWorldMaterialHAL::GetAlphaBlendMaterial ( ) const
inline

Definition at line 35 of file AWorldMaterial_DX8.h.

35{ return m_pAlphaBlendMaterial; }

◆ GetUVOffsetX()

TFLOAT AWorldMaterialHAL::GetUVOffsetX ( TUINT a_uiTextureIndex)
inline

Definition at line 38 of file AWorldMaterial_DX8.h.

39 {
40 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
41 return m_aUVOffsetsX[ a_uiTextureIndex ];
42 }

◆ GetUVOffsetY()

TFLOAT AWorldMaterialHAL::GetUVOffsetY ( TUINT a_uiTextureIndex)
inline

Definition at line 54 of file AWorldMaterial_DX8.h.

55 {
56 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
57 return m_aUVOffsetsY[ a_uiTextureIndex ];
58 }

◆ OnDestroy()

void AWorldMaterialHAL::OnDestroy ( )
overridevirtual

Definition at line 47 of file AWorldMaterial_DX8.cpp.

48{
49 if ( m_pAssignedOrderTable != TNULL )
50 {
51 TOrderTable::DeregisterMaterial( m_pRegMaterial );
52 m_pAssignedOrderTable = TNULL;
53 }
54
55 BaseClass::OnDestroy();
56}

◆ PostRender()

void AWorldMaterialHAL::PostRender ( )
overridevirtual

Definition at line 142 of file AWorldMaterial_DX8.cpp.

143{
144 auto pRenderInterface = TRenderD3DInterface::Interface();
145 auto pCurrentContext = TRenderContextD3D::Upcast( pRenderInterface->GetCurrentContext() );
146 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
147
148 pD3DDevice->SetRenderState( D3DRS_COLORVERTEX, TRUE );
149 pD3DDevice->SetTexture( 0, NULL );
150 pD3DDevice->SetTexture( 1, NULL );
151 pD3DDevice->SetRenderState( D3DRS_ALPHAREF, 128 );
152 pD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
153 pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
154
155 TDYNAMICCAST( AWorldShaderHAL, m_pShader )->SetAlphaRef( 128 );
156 pCurrentContext->DisableFogHAL();
157
158 if ( m_iNumTex > 1 )
159 {
160 pD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, 1 );
161 pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, 1 );
162 }
163
165}
#define TDYNAMICCAST(T, OBJECT)
Definition TObject.h:227
static TRenderContextD3D * Upcast(TRenderContext *a_pRenderContext)
static TFORCEINLINE TRenderD3DInterface * Interface()
Gets the render interface singleton.
static TUINT s_RenderStateFlags

◆ PreRender()

void AWorldMaterialHAL::PreRender ( )
overridevirtual

Definition at line 58 of file AWorldMaterial_DX8.cpp.

59{
60 auto pRenderInterface = TRenderD3DInterface::Interface();
61 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
62
64
65 // Setup textures
66 for ( TUINT i = 0; i < TARRAYSIZE( m_aTextures ); i++ )
67 {
68 auto pTexture = TDYNAMICCAST( TTextureResourceHAL, m_aTextures[ i ] );
69
70 if ( pTexture == TNULL )
71 {
72 pD3DDevice->SetTexture( i, NULL );
73 }
74 else
75 {
76 pTexture->Validate();
77 auto pD3DTexture = pTexture->GetD3DTexture();
78
79 if ( pD3DTexture )
80 {
81 pD3DDevice->SetTexture( i, pD3DTexture );
82 pD3DDevice->SetTextureStageState( i, D3DTSS_MIPFILTER, 2 );
83 pD3DDevice->SetTextureStageState( i, D3DTSS_MINFILTER, 2 );
84 pD3DDevice->SetTextureStageState( i, D3DTSS_MAGFILTER, 2 );
85 pRenderInterface->SetTextureAddress( i, pTexture->GetAddressUState(), TEXCOORD_U );
86 pRenderInterface->SetTextureAddress( i, pTexture->GetAddressVState(), TEXCOORD_V );
87 }
88 }
89 }
90
91 if ( m_iNumTex > 1 )
92 {
93 pD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, 0xd );
94 pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, 2 );
95 pD3DDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, 1 );
96 pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, 0xd );
97 pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, 2 );
98 pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG2, 1 );
99 pD3DDevice->SetTextureStageState( 2, D3DTSS_COLOROP, 1 );
100 pD3DDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP, 1 );
101 }
102
103 // Animate UV
105 m_fUVAnimX += fDeltaTime * m_fUVAnimSpeedX;
106 m_fUVAnimY += fDeltaTime * m_fUVAnimSpeedY;
107
108 // Make sure value of m_fUVAnimX is in [-1; 1] range so we won't overflow
109 if ( m_fUVAnimX <= 1.0f )
110 {
111 if ( m_fUVAnimX < -1.0f && !isnan( m_fUVAnimX ) )
112 {
113 m_fUVAnimX += 1.0f;
114 }
115 }
116 else
117 {
118 m_fUVAnimX -= 1.0f;
119 }
120
121 // Make sure value of m_fUVAnimY is in [-1; 1] range so we won't overflow
122 if ( m_fUVAnimY <= 1.0f )
123 {
124 if ( m_fUVAnimY < -1.0f && !isnan( m_fUVAnimY ) )
125 {
126 m_fUVAnimY += 1.0f;
127 }
128 }
129 else
130 {
131 m_fUVAnimY -= 1.0f;
132 }
133
134 // Save current UV offset
135 m_aHasUVOffsets[ 0 ] = TTRUE;
136 m_aUVOffsetsX[ 0 ] = m_fUVAnimX;
137 m_aUVOffsetsY[ 0 ] = m_fUVAnimY;
138
139 SetupRenderer();
140}
@ TEXCOORD_U
Definition TRender.h:30
@ TEXCOORD_V
Definition TRender.h:31
#define TARRAYSIZE(ARRAY)
Definition Defines.h:70
float TFLOAT
Definition Typedefs.h:4
TSystemManager g_oSystemManager
Definition TSystem.cpp:15
TFLOAT GetCurrentDeltaTime() const
Definition TScheduler.h:62
TScheduler * GetScheduler() const
Definition TSystem.h:155

◆ SetAlphaBlendMaterial()

void AWorldMaterialHAL::SetAlphaBlendMaterial ( AWorldMaterialHAL * val)
inline

Definition at line 36 of file AWorldMaterial_DX8.h.

36{ m_pAlphaBlendMaterial = val; }

◆ SetBlendMode()

void AWorldMaterialHAL::SetBlendMode ( BLENDMODE a_eBlendMode)
overridevirtual

Reimplemented from AWorldMaterial.

Definition at line 173 of file AWorldMaterial_DX8.cpp.

174{
175 auto pShader = TDYNAMICCAST( AWorldShaderHAL, m_pShader );
176
177 switch ( a_eBlendMode )
178 {
179 case 0:
180 SetOrderTable( pShader->GetOrderTable( 0 ) );
181 break;
182 case 1:
183 SetOrderTable( pShader->GetOrderTable( 2 ) );
184 break;
185 case 2:
186 SetOrderTable( pShader->GetOrderTable( 2 ) );
187 break;
188 case 3:
189 SetOrderTable( pShader->GetOrderTable( 3 ) );
190 break;
191 case 5:
192 SetOrderTable( pShader->GetOrderTable( 6 ) );
193 break;
194 case 6:
195 SetOrderTable( pShader->GetOrderTable( 4 ) );
196 break;
197 case 7:
198 SetOrderTable( pShader->GetOrderTable( 7 ) );
199 break;
200 default:
201 TASSERT( !"Invalid blend state" );
202 break;
203 }
204
205 BaseClass::SetBlendMode( a_eBlendMode );
206}
void SetOrderTable(Toshi::TOrderTable *a_pOrderTable)

◆ SetOrderTable()

void AWorldMaterialHAL::SetOrderTable ( Toshi::TOrderTable * a_pOrderTable)

Definition at line 222 of file AWorldMaterial_DX8.cpp.

223{
224 if ( a_pOrderTable != m_pAssignedOrderTable )
225 {
226 if ( m_pAssignedOrderTable )
227 {
228 TOrderTable::DeregisterMaterial( GetRegMaterial() );
229 }
230
231 if ( a_pOrderTable )
232 {
233 a_pOrderTable->RegisterMaterial( this );
234 }
235
236 m_pAssignedOrderTable = a_pOrderTable;
237 }
238}

◆ SetUVOffsetX()

void AWorldMaterialHAL::SetUVOffsetX ( TUINT a_uiTextureIndex,
TFLOAT a_fOffset )
inline

Definition at line 43 of file AWorldMaterial_DX8.h.

44 {
45 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
46 m_aUVOffsetsX[ a_uiTextureIndex ] = a_fOffset;
47 }

◆ SetUVOffsetY()

void AWorldMaterialHAL::SetUVOffsetY ( TUINT a_uiTextureIndex,
TFLOAT a_fOffset )
inline

Definition at line 59 of file AWorldMaterial_DX8.h.

60 {
61 TASSERT( a_uiTextureIndex < MAX_TEXTURES );
62 m_aUVOffsetsY[ a_uiTextureIndex ] = a_fOffset;
63 }

◆ TDECLARE_CLASS()

AWorldMaterialHAL::TDECLARE_CLASS ( AWorldMaterialHAL ,
AWorldMaterial  )

The documentation for this class was generated from the following files: