source: GTP/trunk/App/Demos/Geom/Shark3D/src/drv_d3d9_visib.cpp @ 2236

Revision 2236, 2.5 KB checked in by gumbau, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14#include "drv_d3d9_visib.h"
15
16#define S3D_DRV_D3D9_VISIB_PIXCNT 4
17
18///////////////////////////////////////////////////////////////////////////////
19
20S3D_UTIL_RECOG_DEFINEINFO(s3d_CDrvD3d9Visib);
21
22s3d_CDrvD3d9Visib::s3d_CDrvD3d9Visib(
23        s3d_CDrvD3d9VisibMgr *VisibMgr,
24        s3d_CDrvD3d9QueryOcclusion &QueryOcclusion)
25{
26    S3D_UTIL_RECOG_INITOBJ(s3d_CDrvD3d9Visib);
27
28    m_VisibMgr = VisibMgr;
29    m_QueryOcclusion = QueryOcclusion;
30}
31
32bool s3d_CDrvD3d9Visib::IsAvail()
33{
34    return m_QueryOcclusion.IsAvail(false);
35}
36
37bool s3d_CDrvD3d9Visib::GetResult(bool Wait)
38{
39    DWORD Result = m_QueryOcclusion.GetResult(Wait);
40    bool IsVisib = Result > S3D_DRV_D3D9_VISIB_PIXCNT;
41    return IsVisib;
42}
43
44void s3d_CDrvD3d9Visib::RefCntGotDownToZero()
45{
46    m_VisibMgr->AddToPool(this);
47}
48
49///////////////////////////////////////////////////////////////////////////////
50
51s3d_CDrvD3d9VisibMgr::s3d_CDrvD3d9VisibMgr(
52            s3d_CUtilMsgHandler *MsgHandler,
53            s3d_CDrvD3d9Env &Env, s3d_CDrvD3d9Param *D3dParam,
54            s3d_CDrvD3d9Device &D3dDev)
55{
56    m_MsgHandler = MsgHandler;
57    m_Env = &Env;
58    m_D3dDev = D3dDev;
59
60    m_QueryOcclusion.Init(m_Env, D3dDev);
61}
62
63void s3d_CDrvD3d9VisibMgr::BeginVisib()
64{
65    s3d_CDrvD3d9VisibPtr Visib = m_VisibFreePool.ExtractBack();
66    if(!Visib)
67        Visib = S3D_SYS_NEW s3d_CDrvD3d9Visib(this, m_QueryOcclusion);
68
69    m_QueryOcclusion.Begin();
70    m_VisibArray.InsertBack(Visib);
71}
72
73s3d_CDrvGfxVisibPtr s3d_CDrvD3d9VisibMgr::EndVisib()
74{
75    s3d_CDrvD3d9VisibPtr Visib = m_VisibArray.ExtractBack();
76    m_QueryOcclusion.End();
77    return Visib.Get();
78}
79
80void s3d_CDrvD3d9VisibMgr::Park()
81{
82    m_VisibArray.Reset();
83    m_QueryOcclusion.Reset();
84}
85
86void s3d_CDrvD3d9VisibMgr::Unpark()
87{
88    m_QueryOcclusion.Init(m_Env, m_D3dDev);
89}
90
91void s3d_CDrvD3d9VisibMgr::AddToPool(
92        s3d_CDrvD3d9Visib *Visib)
93{
94    m_VisibFreePool.InsertBack(Visib);
95}
96
97///////////////////////////////////////////////////////////////////////////////
Note: See TracBrowser for help on using the repository browser.