diff --git a/Engine/source/gfx/D3D9/gfxD3D9OcclusionQuery.cpp b/Engine/source/gfx/D3D9/gfxD3D9OcclusionQuery.cpp index 142896f68..99e664652 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9OcclusionQuery.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9OcclusionQuery.cpp @@ -124,9 +124,16 @@ GFXD3D9OcclusionQuery::OcclusionQueryStatus GFXD3D9OcclusionQuery::getStatus( bo DWORD dwOccluded = 0; if ( block ) - { + { while( ( hRes = mQuery->GetData( &dwOccluded, sizeof(DWORD), D3DGETDATA_FLUSH ) ) == S_FALSE ) - ; + { + //If we're stalled out, proceed with worst-case scenario -BJR + if(GFX->mFrameTime->getElapsedMs()>4) + { + this->end(); + return NotOccluded; + } + } } else { diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index 3bb634027..528467f56 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -804,7 +804,7 @@ inline bool GFXDevice::beginScene() // Send the start of frame signal. getDeviceEventSignal().trigger( GFXDevice::deStartOfFrame ); - + mFrameTime->reset(); return beginSceneInternal(); } diff --git a/Engine/source/gfx/gfxDevice.h b/Engine/source/gfx/gfxDevice.h index 44a889f66..13620755e 100644 --- a/Engine/source/gfx/gfxDevice.h +++ b/Engine/source/gfx/gfxDevice.h @@ -54,6 +54,9 @@ #include "math/util/frustum.h" #endif +#ifndef _PLATFORM_PLATFORMTIMER_H_ +#include "platform/platformTimer.h" +#endif class FontRenderBatcher; class GFont; @@ -743,6 +746,7 @@ public: virtual void endScene(); virtual void beginField(); virtual void endField(); + PlatformTimer *mFrameTime; virtual GFXTexHandle & getFrontBuffer(){ return mFrontBuffer[mCurrentFrontBufferIdx]; }