//---------------------------------------------------------------------------- void PdrPixelShader::Disable (Renderer* renderer, const PixelShader* pshader, const ShaderParameters* parameters) { IDirect3DDevice9* device = renderer->mData->mDevice; HRESULT hr; WM5_UNUSED(hr); #ifdef WM5_PDR_DEBUG // Verify that the active shader is the one making the disable request. IDirect3DPixelShader9* activePShader = 0; hr = device->GetPixelShader(&activePShader); assertion(hr == D3D_OK, "Failed to get pixel shader: %s\n", DXGetErrorString(hr)); assertion(activePShader == mShader, "Mismatched pixel shaders\n"); activePShader->Release(); #endif int profile = PixelShader::GetProfile(); DisableTextures(renderer, pshader, profile, parameters, renderer->mData->mMaxPShaderImages, 0); // Disable the shader by clearing the state. hr = device->SetPixelShader(0); assertion(hr == D3D_OK, "Failed to set pixel shader: %s\n", DXGetErrorString(hr)); }
//---------------------------------------------------------------------------- void PdrPixelShader::Disable (Renderer* renderer, const PixelShader* pshader, const ShaderParameters* parameters) { IDirect3DDevice9* device = renderer->mData->mDevice; HRESULT hr; PX2_UNUSED(hr); #ifdef PX2_PDR_DEBUG // 检测需要被取消激活的数据,是否匹配。 IDirect3DPixelShader9* activePShader = 0; hr = device->GetPixelShader(&activePShader); assertion(hr == D3D_OK, "Failed to get pixel shader: %s\n", DXGetErrorString(hr)); assertion(activePShader == mShader, "Mismatched pixel shaders\n"); activePShader->Release(); #endif int profile = PixelShader::GetProfile(); DisableTextures(renderer, pshader, profile, parameters, renderer->mData->mMaxPShaderImages, 0); // 取消激活着色器 hr = device->SetPixelShader(0); assertion(hr == D3D_OK, "Failed to set pixel shader: %s\n", DXGetErrorString(hr)); }
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); }