示例#1
0
void CState::Save()
{
	// viewport
	m_D3DDev->GetViewport(&m_Vp);

	// render states
	m_D3DDev->GetRenderState(D3DRS_ZENABLE, &m_Z);
	m_D3DDev->GetRenderState(D3DRS_CULLMODE, &m_CullMode);
	m_D3DDev->GetRenderState(D3DRS_ALPHATESTENABLE, &m_AlphaTest);
	m_D3DDev->GetRenderState(D3DRS_ALPHABLENDENABLE, &m_AlphaBlend);
	m_D3DDev->GetRenderState(D3DRS_BLENDOP, &m_BlendOp);
	m_D3DDev->GetRenderState(D3DRS_SRCBLEND, &m_SrcBlend);
	m_D3DDev->GetRenderState(D3DRS_DESTBLEND, &m_DstBlend);
	m_D3DDev->GetRenderState(D3DRS_CLIPPLANEENABLE, &m_ClipPlane);
	m_D3DDev->GetRenderState(D3DRS_FILLMODE, &m_FillMode);
	m_D3DDev->GetRenderState(D3DRS_LASTPIXEL, &m_LastPixel);
	m_D3DDev->GetRenderState(D3DRS_FOGENABLE, &m_Fog);
	m_D3DDev->GetRenderState(D3DRS_STENCILENABLE, &m_Stencil);
	m_D3DDev->GetRenderState(D3DRS_COLORWRITEENABLE, &m_ColorWrite);
	m_D3DDev->GetRenderState(D3DRS_SCISSORTESTENABLE, &m_Scissor);
	if( m_Caps.PrimitiveMiscCaps & D3DPMISCCAPS_SEPARATEALPHABLEND )
		m_D3DDev->GetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, &m_SeparateAlphaBlend);
	//if( m_Caps.LineCaps & D3DLINECAPS_ANTIALIAS )
		m_D3DDev->GetRenderState(D3DRS_ANTIALIASEDLINEENABLE, &m_AntiAliasedLine);

	// primitive
	m_D3DDev->GetFVF(&m_FVF);
	m_D3DDev->GetStreamSource(0, &m_StreamData, &m_StreamOffset, &m_StreamStride);
	m_D3DDev->GetVertexShader(&m_VertexShader);

	// texture
	m_D3DDev->GetTexture(0, &m_Tex);
	m_D3DDev->GetPixelShader(&m_PixelShader);

	// texture stage states
	m_D3DDev->GetTextureStageState(0, D3DTSS_COLOROP, &m_ColorOp);
	m_D3DDev->GetTextureStageState(0, D3DTSS_COLORARG1, &m_ColorArg1);
	m_D3DDev->GetTextureStageState(0, D3DTSS_COLORARG2, &m_ColorArg2);
	m_D3DDev->GetTextureStageState(0, D3DTSS_ALPHAOP, &m_AlphaOp);
	m_D3DDev->GetTextureStageState(0, D3DTSS_ALPHAARG1, &m_AlphaArg1);
	m_D3DDev->GetTextureStageState(0, D3DTSS_TEXCOORDINDEX, &m_TexCoordIndex);
	m_D3DDev->GetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, &m_TexTransfFlags);
	m_D3DDev->GetSamplerState(0, D3DSAMP_ADDRESSU, &m_AddressU);
	m_D3DDev->GetSamplerState(0, D3DSAMP_ADDRESSV, &m_AddressV);
	m_D3DDev->GetSamplerState(0, D3DSAMP_MAGFILTER, &m_MagFilter);
	m_D3DDev->GetSamplerState(0, D3DSAMP_MINFILTER, &m_MinFilter);
	m_D3DDev->GetSamplerState(0, D3DSAMP_MIPFILTER, &m_MipFilter);
}