diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Graphics/RenderBufferManager.h |
Diffstat (limited to 'Runtime/Graphics/RenderBufferManager.h')
-rw-r--r-- | Runtime/Graphics/RenderBufferManager.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Runtime/Graphics/RenderBufferManager.h b/Runtime/Graphics/RenderBufferManager.h new file mode 100644 index 0000000..5496acf --- /dev/null +++ b/Runtime/Graphics/RenderBufferManager.h @@ -0,0 +1,58 @@ +#ifndef RENDERBUFFERMANAGER_H +#define RENDERBUFFERMANAGER_H + +#include "Runtime/GfxDevice/GfxDeviceTypes.h" +#include "Runtime/Utilities/MemoryPool.h" +#include "Runtime/BaseClasses/BaseObject.h" + +class RenderTexture; + + +/* Manager for getting temporary render buffers. + * Use this instead of creating RenderTextures if you need a quick buffer. + * This is a low-overhead class that recycles render textures. + */ +class RenderBufferManager +{ + RenderBufferManager () { m_CurrentRBMFrame = m_TempBuffers = 0; } + +public: + + enum { kFullSize = -1 }; + enum { + kRBCubemap = (1<<0), + kRBCreatedFromScript = (1<<1), + kRBSampleOnlyDepth = (1<<2), + }; + enum { kKillFrames = 15 }; + + static void InitRenderBufferManager (); + static void CleanupRenderBufferManager (); + + // Get a RenderTexture with the specific sizes + // If the width & height parameters uses autosizing, viewport size is taken from the current camera. + RenderTexture *GetTempBuffer (int width, int height, DepthBufferFormat depthFormat, RenderTextureFormat colorFormat, UInt32 flags, RenderTextureReadWrite colorSpace, int antiAliasing = 1); + + // Release the temporary buffer. + void ReleaseTempBuffer (RenderTexture *rTex); + + void GarbageCollect (int framesDelay = kKillFrames); + + void Cleanup (); + +private: + + typedef std::set<PPtr<RenderTexture>, std::less< PPtr<RenderTexture> > , memory_pool<PPtr<RenderTexture> > > TakenTextures; + typedef std::pair <int, PPtr<RenderTexture> > IntPPtrPair; + typedef std::list<IntPPtrPair, memory_pool<IntPPtrPair > > FreeTextures; + + FreeTextures m_FreeTextures; + TakenTextures m_TakenTextures; + int m_TempBuffers; + int m_CurrentRBMFrame; +}; + +RenderBufferManager& GetRenderBufferManager (); +RenderBufferManager* GetRenderBufferManagerPtr (); + +#endif |