00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef neo_render_buffermanager_h
00022 #define neo_render_buffermanager_h
00023
00027 #include "../core/platform.h"
00028 #include "../core/util.h"
00029 #include "../core/avltree.h"
00030
00031 #undef free
00032
00033 namespace neo {
00034 namespace render {
00035
00036 class BufferRegion;
00037
00039
00041 class BufferManager : public core::Noncopyable
00042 {
00043 public:
00044
00046
00048 BufferManager( unsigned int size = 0 );
00049
00051 virtual ~BufferManager();
00052
00054
00058 virtual BufferRegion* alloc( unsigned int size, unsigned int align = 0 );
00059
00061
00063 virtual void free( BufferRegion* p_region );
00064
00066
00068 virtual void setSize( unsigned int size );
00069
00071
00072 unsigned int getSize() const;
00073
00075 void checkMemoryIntegrity();
00076
00077 protected:
00078
00080 unsigned int _size;
00081
00083 BufferRegion* _p_root;
00084
00086 BufferRegion* _p_tail;
00087
00089 core::AVLTree< BufferRegion*, BufferRegion > _free;
00090 };
00091
00092 }
00093 }
00094
00095 #endif