23 m_pAlphaBlendMaterial =
TNULL;
24 m_pAssignedOrderTable =
TNULL;
28 m_aHasUVOffsets[ i ] =
TFALSE;
29 m_aUVOffsetsX[ i ] = 0.0f;
30 m_aUVOffsetsY[ i ] = 0.0f;
41 if ( m_pAlphaBlendMaterial )
43 delete m_pAlphaBlendMaterial;
49 if ( m_pAssignedOrderTable !=
TNULL )
52 m_pAssignedOrderTable =
TNULL;
55 BaseClass::OnDestroy();
61 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
70 if ( pTexture ==
TNULL )
72 pD3DDevice->SetTexture( i, NULL );
77 auto pD3DTexture = pTexture->GetD3DTexture();
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 );
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 );
135 m_aHasUVOffsets[ 0 ] =
TTRUE;
146 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
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 );
156 pCurrentContext->DisableFogHAL();
160 pD3DDevice->SetTextureStageState( 1, D3DTSS_COLOROP, 1 );
161 pD3DDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, 1 );
170 return BaseClass::Create( a_eBlendMode );
177 switch ( a_eBlendMode )
201 TASSERT( !
"Invalid blend state" );
205 BaseClass::SetBlendMode( a_eBlendMode );
210 if ( m_pAlphaBlendMaterial )
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 ];
218 m_pAlphaBlendMaterial->SetFlags( FLAGS_BLENDING,
TTRUE );
224 if ( a_pOrderTable != m_pAssignedOrderTable )
226 if ( m_pAssignedOrderTable )
233 a_pOrderTable->RegisterMaterial(
this );
236 m_pAssignedOrderTable = a_pOrderTable;
240void AWorldMaterialHAL::SetupRenderer()
245 if ( m_aHasUVOffsets[ 0 ] )
247 vOffsets.x = m_aUVOffsetsX[ 0 ];
248 vOffsets.y = m_aUVOffsetsY[ 0 ];
251 if ( m_aHasUVOffsets[ 1 ] )
253 vOffsets.z = m_aUVOffsetsX[ 1 ];
254 vOffsets.w = m_aUVOffsetsY[ 1 ];
259 auto pD3DDevice = pRenderInterface->GetDirect3DDevice();
260 pD3DDevice->SetVertexShaderConstant( 7, &vOffsets, 1 );
267 pD3DDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
268 pD3DDevice->SetRenderState( D3DRS_DESTBLEND, 6 );
269 pD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
272 pD3DDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
273 pD3DDevice->SetRenderState( D3DRS_DESTBLEND, 2 );
274 pD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, FALSE );
277 pD3DDevice->SetRenderState( D3DRS_SRCBLEND, 5 );
278 pD3DDevice->SetRenderState( D3DRS_DESTBLEND, 6 );
279 pD3DDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
283 if ( m_Flags & FLAGS_BLENDING )
285 pD3DDevice->SetRenderState( D3DRS_ALPHAREF, 1 );
286 TDYNAMICCAST( AWorldShaderHAL, m_pShader )->SetAlphaRef( 1 );
290 pD3DDevice->SetRenderState( D3DRS_ALPHAREF, 128 );
291 TDYNAMICCAST( AWorldShaderHAL, m_pShader )->SetAlphaRef( 128 );
294 pD3DDevice->SetRenderState( D3DRS_COLORVERTEX, FALSE );
295 pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
297 if ( pCurrentContext->IsFogEnabled() )
299 pCurrentContext->EnableFogHAL();
#define TOSHI_NAMESPACE_USING
#define TARRAYSIZE(ARRAY)
#define TDYNAMICCAST(T, OBJECT)
#define TDEFINE_CLASS(...)
TSystemManager g_oSystemManager
static TRenderContextD3D * Upcast(TRenderContext *a_pRenderContext)
static TFORCEINLINE TRenderD3DInterface * Interface()
Gets the render interface singleton.
static void DeregisterMaterial(TRegMaterial *a_pRegMat)
void SetOrderTable(Toshi::TOrderTable *a_pOrderTable)
virtual TBOOL Create(BLENDMODE a_eBlendMode) override
virtual void PreRender() override
virtual void CopyToAlphaBlendMaterial()
virtual void SetBlendMode(BLENDMODE a_eBlendMode) override
virtual void PostRender() override
virtual void OnDestroy() override
static TUINT s_RenderStateFlags
static constexpr TUINT MAX_TEXTURES
Toshi::TTexture * m_aTextures[MAX_TEXTURES]