bool CRenderPipeline::Render(CRenderOperation* op,RenderParam* rp) { Ast( NULL != rp); SetRenderStyle(rp->m_RS); SetWorld( rp->m_Mat ); return RenderEx( op ); }
void CTerrainMgr::Render() { if ( !m_Param.m_RS.m_ShaderType.IsNull() || st_isEditor || HasRenderFlag(TerrainFlag::Cliff) ) { DWORD handle = (st_Terrain_PS_Shader_ID + (GetVtxDeclIndex(m_Mask) & ~(TerrainFlag::NormalSpecular)) ); m_Param.m_RS.m_ShaderType |= st_Terrain_VS_Shader_ID; m_Param.m_RS.m_ShaderType |= handle; } CRenderPipeline::GetInst()->SetRenderStyle(m_Param.m_RS); CRenderPipeline::GetInst()->SetWorld(m_Param.m_Mat); m_ShadowFilter->UpdateShadowParams(); RenderEx(); }
bool CEditRenderPipeline::Render( CRenderOperation* op,RenderParam* rp ) { Ast( NULL != rp); SetRenderStyle(rp->m_RS); SetWorld( rp->m_Mat ); if(IsPixelFillCount) { StencilParam tmpStencilParam; tmpStencilParam.m_bEnable=TRUE; tmpStencilParam.m_nCompFun=CMP_ALWAYS; tmpStencilParam.m_nRefrence=0; tmpStencilParam.m_nFailedFlag=STENCILOP_KEEP; tmpStencilParam.m_nZFailedFlag=STENCILOP_KEEP; tmpStencilParam.m_nPassFlag=STENCILOP_INCRSAT; tmpStencilParam.m_nReadMask=0xFFFFFFFF; tmpStencilParam.m_nWriteMask=0xFFFFFFFF; //开启模板测试 _SetRenderStyle( RS_STENCILENABLE, DWORD(tmpStencilParam.m_bEnable) ); _SetRenderStyle( RS_STENCILREF, DWORD(tmpStencilParam.m_nRefrence) ); _SetRenderStyle( RS_STENCILFUNC, tmpStencilParam.m_nCompFun ); _SetRenderStyle( RS_STENCILFAIL, tmpStencilParam.m_nFailedFlag ); _SetRenderStyle( RS_STENCILZFAIL, tmpStencilParam.m_nZFailedFlag ); _SetRenderStyle( RS_STENCILPASS, tmpStencilParam.m_nPassFlag ); _SetRenderStyle( RS_STENCILMASK, tmpStencilParam.m_nReadMask ); _SetRenderStyle( RS_STENCILWRITEMASK, tmpStencilParam.m_nWriteMask ); //绑定像素填充率计算的shader } else { //将模版缓存恢复到原来状态!即RS中 但是引擎没有封装,而且也不适合每一桢都调用 //所有将模版恢复到原来状态的设置代码写在外面 } return RenderEx( op ); }
HRESULT MPMadPresenter::Render(REFERENCE_TIME frameStart, int left, int top, int right, int bottom, int width, int height) { return RenderEx(frameStart, 0, 0, left, top, right, bottom, width, height); }