@@ -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
{
@@ -804,7 +804,7 @@ inline bool GFXDevice::beginScene()
// Send the start of frame signal.
getDeviceEventSignal().trigger( GFXDevice::deStartOfFrame );
-
+ mFrameTime->reset();
return beginSceneInternal();
@@ -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]; }