mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-21 12:25:30 +00:00
Merge remote-tracking branch 'gg/development-3.6' into development
Conflicts: Engine/source/T3D/gameFunctions.cpp
This commit is contained in:
commit
014b566014
29 changed files with 252 additions and 129 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_
|
||||
Loading…
Add table
Add a link
Reference in a new issue