Fix SkatterSky flare occlusion.

This commit is contained in:
LuisAntonRebollo 2014-12-08 23:31:22 +01:00 committed by Daniel Buckmaster
parent 6338b8cc82
commit 190f68b998
5 changed files with 105 additions and 40 deletions

View file

@ -130,6 +130,7 @@ GFXD3D9OcclusionQuery::OcclusionQueryStatus GFXD3D9OcclusionQuery::getStatus( bo
//If we're stalled out, proceed with worst-case scenario -BJR
if(GFX->mFrameTime->getElapsedMs()>4)
{
this->begin();
this->end();
return NotOccluded;
}

View file

@ -82,4 +82,71 @@ public:
virtual const String describeSelf() const = 0;
};
/// Handle for GFXOcclusionQuery than store last valid state
class GFXOcclusionQueryHandle
{
public:
GFXOcclusionQueryHandle()
: mLastStatus(GFXOcclusionQuery::Unset), mLastData(0), mQuery(NULL), mWaiting(false)
{}
~GFXOcclusionQueryHandle()
{
SAFE_DELETE(mQuery);
}
bool getLastStatus( bool block, GFXOcclusionQuery::OcclusionQueryStatus *statusPtr = NULL, U32 *data = NULL );
GFXOcclusionQuery* getQuery() const { return mQuery; }
void clearLastStatus()
{
mLastStatus = GFXOcclusionQuery::Unset;
mLastData = 0;
mWaiting = false;
if( !mQuery )
return;
mQuery->begin();
mQuery->end();
}
bool isWaiting() const { return mWaiting; }
protected:
GFXOcclusionQuery::OcclusionQueryStatus mLastStatus;
U32 mLastData;
bool mWaiting;
GFXOcclusionQuery *mQuery;
};
inline bool GFXOcclusionQueryHandle::getLastStatus( bool block, GFXOcclusionQuery::OcclusionQueryStatus *statusPtr, U32 *data )
{
if( !mQuery )
mQuery = GFX->createOcclusionQuery();
GFXOcclusionQuery::OcclusionQueryStatus status = mQuery->getStatus( block, data );
if( status == GFXOcclusionQuery::Waiting )
{
mWaiting = true;
if( statusPtr )
*statusPtr = mLastStatus;
if( data )
*data = mLastData;
return true;
}
if( statusPtr )
*statusPtr = status;
mWaiting = false;
mLastStatus = status;
mLastData = *data;
return true;
}
#endif // _GFXOCCLUSIONQUERY_H_