Torque3D/Engine/source/gfx/gl/util/glFrameAllocatorLockableHelper.h
2014-11-08 20:21:50 +01:00

54 lines
1.2 KiB
C++

#ifndef GL_FRAMEALLOCATOR_LOCKABLE_HELPER_H
#define GL_FRAMEALLOCATOR_LOCKABLE_HELPER_H
#include "core/frameAllocator.h"
/// Helper class for simulate lock/unlock on gfx buffers using FrameAllocator
class FrameAllocatorLockableHelper
{
public:
FrameAllocatorLockableHelper()
: mFrameAllocatorMark(0),
mFrameAllocatorPtr(NULL)
#if TORQUE_DEBUG
, mFrameAllocatorMarkGuard(0)
#endif
{
}
U8* lock(const U32 size)
{
AssertFatal(!mFrameAllocatorMark && !mFrameAllocatorPtr, "");
mFrameAllocatorMark = FrameAllocator::getWaterMark();
mFrameAllocatorPtr = (U8*)FrameAllocator::alloc( size );
#if TORQUE_DEBUG
mFrameAllocatorMarkGuard = FrameAllocator::getWaterMark();
#endif
return mFrameAllocatorPtr;
}
void unlock()
{
#if TORQUE_DEBUG
AssertFatal(mFrameAllocatorMarkGuard == FrameAllocator::getWaterMark(), "");
#endif
FrameAllocator::setWaterMark(mFrameAllocatorMark);
mFrameAllocatorMark = 0;
mFrameAllocatorPtr = NULL;
}
U8* getlockedPtr() const { return mFrameAllocatorPtr; }
protected:
U32 mFrameAllocatorMark;
U8 *mFrameAllocatorPtr;
#if TORQUE_DEBUG
U32 mFrameAllocatorMarkGuard;
#endif
};
#endif //GL_FRAMEALLOCATOR_LOCKABLE_HELPER_H