From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Graphics/RenderBufferManager.h | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Runtime/Graphics/RenderBufferManager.h (limited to 'Runtime/Graphics/RenderBufferManager.h') 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, std::less< PPtr > , memory_pool > > TakenTextures; + typedef std::pair > IntPPtrPair; + typedef std::list > FreeTextures; + + FreeTextures m_FreeTextures; + TakenTextures m_TakenTextures; + int m_TempBuffers; + int m_CurrentRBMFrame; +}; + +RenderBufferManager& GetRenderBufferManager (); +RenderBufferManager* GetRenderBufferManagerPtr (); + +#endif -- cgit v1.1-26-g67d0