⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsstate.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	*/							
	if	(psLState->dwMaxMipLevel)
	{
		AdjustForMaxMipLevel(psLState);
	}

	/*
		Put Context in Mapdetails for access to shadow texture
		linked list from BlitTexture
	*/
	psMapDetails->psContext = psContext;

	/*
		Flag that this layer is enabled (in-case we previously disabled it
		due to referenceing a texture when untextures - see PostProcessTSState)
	*/
	if	(psLState->dwCOp != D3DMTOP_DISABLE)
	{
		psContext->dwFlags |= D3DM_CONTEXT_SWFLAGS_LAYER0ENABLED << dwStage;
	}

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_TextureMap"));
}
/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_ColourOp
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_ColourOp(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE	psLState;
	DWORD 			dwValue;
	DWORD 			dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_ColourOp"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_ColourOp  : Stage %d: Op = %d", psState->Stage, psState->Value));

	dwStage = (DWORD) psState->Stage;
	dwValue = psState->Value;
	psLState = &psContext->sTState.sLState[dwStage];

	/*
		Ensure we don't get any un-capped DX8 ops (which could cause a crash),
		previously we used to just clamp the value to DOTPRODUCT3, but this is
		likely to create an invalid layer. Now use MODULATE which will at least
		be valid (works for 3D Windows XP screensaver, which doesn't check caps.)
	*/
	if	(dwValue > D3DMTOP_DOTPRODUCT3)
	{
		D3DM_DPF((DPF_WARN,"D3DM_TSS_ColourOp: Stage %d: Op %d unsupported using MODULATE", psState->Stage, psState->Value));
		dwValue = D3DMTOP_MODULATE;
	}

	/*
		Store the new colour-op to use
	*/
	psLState->dwCOp = psState->Value;

	/*
		Enable/disable the stage if required
	*/
	if	(dwValue <= D3DMTOP_DISABLE)
	{
		psContext->dwFlags &= ~(D3DM_CONTEXT_SWFLAGS_LAYER0ENABLED << dwStage);
	}
	else
	{
		psContext->dwFlags |= (D3DM_CONTEXT_SWFLAGS_LAYER0ENABLED << dwStage);
	}

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_ColourOp"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_ColourArg1
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_ColourArg1(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE	psLState;
	DWORD 			dwValue;
	DWORD 			dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_ColourArg1"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_ColourArg1: Stage %d: Arg = %d", psState->Stage, psState->Value));

	dwStage = (DWORD)psState->Stage;
	dwValue = psState->Value;
	psLState = &psContext->sTState.sLState[dwStage];

	/*
		Record the new D3D arg, removing any nonsense
	*/
	dwValue &= D3DMTA_SELECTMASK | D3DMTA_ALPHAREPLICATE | D3DMTA_COMPLEMENT | D3DMTA_OPTIONMASK;

	psLState->dwCArg1 = dwValue;

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_ColourArg1"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_ColourArg2
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_ColourArg2(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 			psLState;
	DWORD 					dwValue;
	DWORD 					dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_ColourArg2"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_ColourArg2: Stage %d: Arg = %d", psState->Stage, psState->Value));

	dwStage = (DWORD) psState->Stage;
	psLState = &psContext->sTState.sLState[dwStage];
	dwValue = psState->Value;

	/*
		Record the new D3D arg, removing any nonsense
	*/
	dwValue &= D3DMTA_SELECTMASK | D3DMTA_ALPHAREPLICATE | D3DMTA_COMPLEMENT | D3DMTA_OPTIONMASK;

	psLState->dwCArg2 = dwValue;
	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_ColourArg2"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_AlphaOp
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_AlphaOp(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 			psLState;
	DWORD 					dwValue;
	DWORD 					dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_AlphaOp"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_AlphaOp  : Stage %d: Op = %d", psState->Stage, psState->Value));

	dwStage = (DWORD) psState->Stage;
	psLState = &psContext->sTState.sLState[dwStage];
	dwValue = psState->Value;

	/*
		Record the D3D alpha op, limiting the range to things we can actually
		do (our special token for legacy modulate blending is also allowed)
	*/
	if	(dwValue > D3DMTOP_DOTPRODUCT3)
	{
		dwValue = D3DMTOP_DOTPRODUCT3;
	}

	psLState->dwAOp = dwValue;
	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_AlphaOp"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_AlphaArg1
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_AlphaArg1(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 			psLState;
	DWORD 					dwValue;
	DWORD 					dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_AlphaArg1"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_AlphaArg1: Stage %d: Arg = %d", psState->Stage, psState->Value));

	dwStage = (DWORD) psState->Stage;
	psLState = &psContext->sTState.sLState[dwStage];
	dwValue = psState->Value;

	/*
		Record the new D3D arg, removing any nonsense
	*/
	dwValue &= D3DMTA_SELECTMASK | D3DMTA_ALPHAREPLICATE | D3DMTA_COMPLEMENT | D3DMTA_OPTIONMASK;

	psLState->dwAArg1 = dwValue;

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_AlphaArg1"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_AlphaArg2
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_AlphaArg2(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 			psLState;
	DWORD 					dwValue;
	DWORD 					dwStage;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_AlphaArg2"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_AlphaArg2: Stage %d: Arg = %d", psState->Stage, psState->Value));

	dwStage = (DWORD) psState->Stage;
	psLState = &psContext->sTState.sLState[dwStage];
	dwValue = psState->Value;

	/*
		Record the new D3D arg, removing any nonsense
	*/
	dwValue &= D3DMTA_SELECTMASK | D3DMTA_ALPHAREPLICATE | D3DMTA_COMPLEMENT | D3DMTA_OPTIONMASK;

	psLState->dwAArg2 = dwValue;

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_AlphaArg2"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_TexCoordIndex
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_TexCoordIndex(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 	psLState;
	PSWTNLSTATE		psSWTNLState;
	DWORD			dwValue;
	DWORD			dwStage;
	DWORD			dwCoordSet;
	DWORD			dwAutoGenMode;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_TexCoordIndex"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_TexCoordIndex: Stage %d: Coord Set = %d", psState->Stage, psState->Value));

	dwStage = (DWORD)psState->Stage;
	dwValue = psState->Value;
	psLState = &psContext->sTState.sLState[dwStage];
	psSWTNLState = &psContext->sTState.sSWTNLState;

	/*
		Get the new coordinate set to use for this stage
	*/
	dwCoordSet = dwValue & 0x0000ffff;
	if	(dwCoordSet > MBX1_MAXTEXTURE_LAYERS)
	{
		dwCoordSet = MBX1_MAXTEXTURE_LAYERS;
	}
	psLState->dwCoordSetNum = dwCoordSet;

	/*
		Update the texture coordinate generation mode for this stage, and
		the overall count of how many stages need coordinate generation
	*/
	dwAutoGenMode = dwValue & (0xffff0000);
	if	(dwAutoGenMode == D3DMTSS_TCI_PASSTHRU)
	{
		if	(psLState->dwCoordAutoGenMode != D3DMTSS_TCI_PASSTHRU)
		{
			psSWTNLState->dwTexTransformCount++;
		}
	}
	else
	{
		if	(psLState->dwCoordAutoGenMode == D3DMTSS_TCI_PASSTHRU)
		{
			psSWTNLState->dwTexTransformCount--;
		}
	}
	psLState->dwCoordAutoGenMode = dwAutoGenMode;

	/*
		Flag that TNL texture coordinate generation needs updating
	*/
	psSWTNLState->dwTNLFlags2 |= PVRD3DTNL_FLAGS2_TEXGEN_CHANGED;

	/*
		Update the HW addresing mode to use for the U and V coordinates

		NB:	Also depends upon coordinate-wrap enable state for the texture-
			coordinate set this state is currently using
	*/
	UpdateHWTexAddrMode(psContext, psLState, 0);
	UpdateHWTexAddrMode(psContext, psLState, 1);

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_TexCoordIndex"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_AddressU
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_AddressU(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 	psLState;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_AddressU"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_AddressU: Stage %d: Addr Mode = %d", psState->Stage, psState->Value));

	psLState = &psContext->sTState.sLState[(DWORD) psState->Stage];

	/*
		Save the new D3D addresing mode
	*/
	psLState->pdwD3DAddrMode[0] = psState->Value;

	/*
		Update the HW addresing mode to use for the U coordinate

		NB:	Also depends upon coordinate-wrap enable state for the texture-
			coordinate set this state is currently using
	*/
	UpdateHWTexAddrMode(psContext, psLState, 0);

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_AddressU"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_AddressV
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_AddressV(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 	psLState;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_AddressV"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_AddressV: Stage %d: Addr Mode = %d", psState->Stage, psState->Value));

	psLState = &psContext->sTState.sLState[(DWORD) psState->Stage];

	/*
		Save the new D3D addresing mode
	*/
	psLState->pdwD3DAddrMode[1] = psState->Value;

	/*
		Update the HW addresing mode to use for the U coordinate

		NB:	Also depends upon coordinate-wrap enable state for the texture-
			coordinate set this state is currently using
	*/
	UpdateHWTexAddrMode(psContext, psLState, 1);

	D3DM_DPF((DPF_EXIT, "<-D3DM_TSS_AddressV"));
}

/*----------------------------------------------------------------------------
<function>
 FUNCTION	: D3DM_TSS_MagFilter
    
 PURPOSE	: 

 PARAMETERS	: psContext - Current D3D context
			  psLState	- Layer state to be applied to...
			  dwValue	- Value to set
			  
 RETURNS	: 
</function>
------------------------------------------------------------------------------*/
void D3DM_TSS_MagFilter(LPD3DM_CONTEXT psContext,LPD3DM_TEXTURESTAGESTATE psState)
{
	PLAYER_TSTATE 	psLState;
	DWORD			dwValue;
	DWORD			dwTSPLCtl2;

	D3DM_DPF((DPF_ENTRY, "->D3DM_TSS_MagFilter"));
	D3DM_DPF((DPF_STATE, "D3DM_TSS_MagFilter: Stage %d: Filter = %d", psState->Stage, psState->Value));

	psLState = &psContext->sTState.sLState[(DWORD) psState->Stage];
	dwValue = psState->Value;

	psLState->dwMagFilter = dwValue;

	/* Get the max quality filter type between min and mag */
	dwValue = max(psLState->dwMagFilter, psLState->dwMinFilter);

	/*
		Update the required map filtering mode
	*/
	dwTSPLCtl2 = psLState->sTSPLState.dwLCtl2;

	psLState->dwLFlags &= ~LTSTATE_FLAGS_ANISOFILTERINGREQ;
	dwTSPLCtl2 |= MBX1_TSPPL2_MAPFILTERENABLE;

	switch (dwValue)
	{
		case D3DMTEXF_POINT:
		{
			/* Disable HW texture-filtering	*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -