/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// #include "drv_d3d9_visib.h" #define S3D_DRV_D3D9_VISIB_PIXCNT 4 /////////////////////////////////////////////////////////////////////////////// S3D_UTIL_RECOG_DEFINEINFO(s3d_CDrvD3d9Visib); s3d_CDrvD3d9Visib::s3d_CDrvD3d9Visib( s3d_CDrvD3d9VisibMgr *VisibMgr, s3d_CDrvD3d9QueryOcclusion &QueryOcclusion) { S3D_UTIL_RECOG_INITOBJ(s3d_CDrvD3d9Visib); m_VisibMgr = VisibMgr; m_QueryOcclusion = QueryOcclusion; } bool s3d_CDrvD3d9Visib::IsAvail() { return m_QueryOcclusion.IsAvail(false); } bool s3d_CDrvD3d9Visib::GetResult(bool Wait) { DWORD Result = m_QueryOcclusion.GetResult(Wait); bool IsVisib = Result > S3D_DRV_D3D9_VISIB_PIXCNT; return IsVisib; } void s3d_CDrvD3d9Visib::RefCntGotDownToZero() { m_VisibMgr->AddToPool(this); } /////////////////////////////////////////////////////////////////////////////// s3d_CDrvD3d9VisibMgr::s3d_CDrvD3d9VisibMgr( s3d_CUtilMsgHandler *MsgHandler, s3d_CDrvD3d9Env &Env, s3d_CDrvD3d9Param *D3dParam, s3d_CDrvD3d9Device &D3dDev) { m_MsgHandler = MsgHandler; m_Env = &Env; m_D3dDev = D3dDev; m_QueryOcclusion.Init(m_Env, D3dDev); } void s3d_CDrvD3d9VisibMgr::BeginVisib() { s3d_CDrvD3d9VisibPtr Visib = m_VisibFreePool.ExtractBack(); if(!Visib) Visib = S3D_SYS_NEW s3d_CDrvD3d9Visib(this, m_QueryOcclusion); m_QueryOcclusion.Begin(); m_VisibArray.InsertBack(Visib); } s3d_CDrvGfxVisibPtr s3d_CDrvD3d9VisibMgr::EndVisib() { s3d_CDrvD3d9VisibPtr Visib = m_VisibArray.ExtractBack(); m_QueryOcclusion.End(); return Visib.Get(); } void s3d_CDrvD3d9VisibMgr::Park() { m_VisibArray.Reset(); m_QueryOcclusion.Reset(); } void s3d_CDrvD3d9VisibMgr::Unpark() { m_QueryOcclusion.Init(m_Env, m_D3dDev); } void s3d_CDrvD3d9VisibMgr::AddToPool( s3d_CDrvD3d9Visib *Visib) { m_VisibFreePool.InsertBack(Visib); } ///////////////////////////////////////////////////////////////////////////////