BVB Source Codes

CRYENGINE Show DynamicSpanGrid.h Source code

Return Download CRYENGINE: download DynamicSpanGrid.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __MNM_DYNAMIC_SPAN_GRID_H
  4. #define __MNM_DYNAMIC_SPAN_GRID_H
  5.  
  6. #pragma once
  7.  
  8. #include <CryMemory/FixedAllocator.h>
  9.  
  10. namespace MNM
  11. {
  12. class DynamicSpanGrid
  13. {
  14. public:
  15.         struct Element
  16.         {
  17.                 inline Element()
  18.                         : bottom(0)
  19.                         , top(0)
  20.                         , next(0)
  21.                 {
  22.                 }
  23.  
  24.                 inline Element(uint16 _bottom, uint16 _top, bool _backface)
  25.                         : backface(_backface ? 1 : 0)
  26.                         , bottom(_bottom)
  27.                         , top(_top)
  28.                         , depth(0)
  29.                         , next(0)
  30.                 {
  31.                 }
  32.  
  33.                 enum { MaxWaterDepth = (1 << 10) - 1, };
  34.  
  35.                 uint32   backface : 1;
  36.                 uint32   flags    : 3; // unused at this point
  37.                 uint32   bottom   : 9;
  38.                 uint32   top      : 9;
  39.                 uint32   depth    : 10;
  40.                 Element* next;
  41.         };
  42.  
  43.         DynamicSpanGrid();
  44.         DynamicSpanGrid(size_t width, size_t height);
  45.         DynamicSpanGrid(const DynamicSpanGrid& other);
  46.  
  47.         void           Swap(DynamicSpanGrid& other);
  48.  
  49.         void           Reset(size_t width, size_t height);
  50.         Element*       operator[](size_t i);
  51.         const Element* operator[](size_t i) const;
  52.  
  53.         Element*       GetSpan(size_t x, size_t y);
  54.         const Element* GetSpan(size_t x, size_t y) const;
  55.         size_t         GetWidth() const;
  56.         size_t         GetHeight() const;
  57.         size_t         GetCount() const;
  58.         size_t         GetMemoryUsage() const;
  59.  
  60.         void           AddVoxel(size_t x, size_t y, size_t z, bool backface = false);
  61. private:
  62.         inline void    TryMergeNext(Element* span, uint16 top, bool backface)
  63.         {
  64.                 if (span->next && (span->next->bottom == top) && (span->next->backface == backface))
  65.                 {
  66.                         span->top = span->next->top;
  67.  
  68.                         Element* next = span->next;
  69.                         span->next = span->next->next;
  70.  
  71.                         --m_count;
  72.                         Destruct(next);
  73.                 }
  74.         }
  75.  
  76.         inline void TryMergePrev(Element* span, Element* prev, uint16 bottom, bool backface)
  77.         {
  78.                 if (prev && (prev->top == bottom) && (prev->backface == backface))
  79.                 {
  80.                         prev->next = span->next;
  81.                         prev->top = span->top;
  82.  
  83.                         --m_count;
  84.                         Destruct(span);
  85.                 }
  86.         }
  87.  
  88.         inline Element* Construct(const Element& span)
  89.         {
  90.                 return new(m_alloc.alloc())Element(span);
  91.         }
  92.  
  93.         inline void Destruct(Element* span)
  94.         {
  95.                 if (span)
  96.                 {
  97.                         span->~Element();
  98.                         m_alloc.dealloc(span);
  99.                 }
  100.         }
  101.  
  102.         size_t m_width;
  103.         size_t m_height;
  104.         size_t m_count;
  105.  
  106.         typedef std::vector<Element*> Grid;
  107.         Grid m_grid;
  108.  
  109.         typedef TypeFixedAllocator<Element, 256* 1024> Allocator;
  110.         Allocator m_alloc;
  111. };
  112. }
  113.  
  114. #endif  // #ifndef __MNM_DYNAMIC_SPAN_GRID_H
  115.  
downloadDynamicSpanGrid.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top