Pioneer
BufferCommon.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #pragma once
5 
6 #include "RefCounted.h"
7 #include "graphics/Types.h"
8 
9 /*
10  * This file contains code common to the implementation of different GPU data
11  * buffer classes. It provides a common interface for sending data to buffers
12  * and binding those buffers to the renderer interface.
13  */
14 namespace Graphics {
15 
16  class Mappable : public RefCounted {
17  public:
18  virtual ~Mappable() {}
19  virtual void Unmap() = 0;
20 
21  inline uint32_t GetSize() const { return m_size; }
22  inline uint32_t GetCapacity() const { return m_capacity; }
23 
24  protected:
25  explicit Mappable(const uint32_t size) :
27  m_size(size),
28  m_capacity(size) {}
29  BufferMapMode m_mapMode; //tracking map state
30 
31  // size is the current number of elements in the buffer
32  uint32_t m_size;
33  // capacity is the maximum number of elements that can be put in the buffer
34  uint32_t m_capacity;
35  };
36 
37  template <typename T>
38  struct ScopedMapping {
39  ScopedMapping(void *data, Mappable *map) :
40  m_data(reinterpret_cast<T *>(data)), m_map(map)
41  {}
43  {
44  if (m_data)
45  m_map->Unmap();
46  }
47 
48  // don't allow copying a scoped mapping
49  ScopedMapping(const ScopedMapping &) = delete;
51 
52  T *operator->() { return m_data; }
53  T *data() { return m_data; }
54  operator bool() const { return isValid(); }
55  bool isValid() const { return m_data != nullptr; }
56 
57  protected:
58  T *m_data;
60  };
61 
62  template <typename T>
63  struct BufferBinding {
64  T *buffer;
65  uint32_t offset;
66  uint32_t size;
67 
68  bool operator!=(const BufferBinding &rhs) const { return !(*this == rhs); }
69  bool operator==(const BufferBinding &rhs) const
70  {
71  return buffer == rhs.buffer && offset == rhs.offset && size == rhs.size;
72  }
73  };
74 
75 } // namespace Graphics
Definition: BufferCommon.h:16
virtual void Unmap()=0
uint32_t GetCapacity() const
Definition: BufferCommon.h:22
uint32_t m_capacity
Definition: BufferCommon.h:34
uint32_t m_size
Definition: BufferCommon.h:32
uint32_t GetSize() const
Definition: BufferCommon.h:21
BufferMapMode m_mapMode
Definition: BufferCommon.h:29
virtual ~Mappable()
Definition: BufferCommon.h:18
Mappable(const uint32_t size)
Definition: BufferCommon.h:25
Definition: RefCounted.h:11
Definition: Background.h:14
BufferMapMode
Definition: Types.h:70
@ BUFFER_MAP_NONE
Definition: Types.h:71
Definition: BufferCommon.h:63
uint32_t offset
Definition: BufferCommon.h:65
uint32_t size
Definition: BufferCommon.h:66
T * buffer
Definition: BufferCommon.h:64
bool operator==(const BufferBinding &rhs) const
Definition: BufferCommon.h:69
bool operator!=(const BufferBinding &rhs) const
Definition: BufferCommon.h:68
Definition: BufferCommon.h:38
ScopedMapping(void *data, Mappable *map)
Definition: BufferCommon.h:39
ScopedMapping & operator=(const ScopedMapping)=delete
T * operator->()
Definition: BufferCommon.h:52
Mappable * m_map
Definition: BufferCommon.h:59
T * data()
Definition: BufferCommon.h:53
ScopedMapping(const ScopedMapping &)=delete
~ScopedMapping()
Definition: BufferCommon.h:42
T * m_data
Definition: BufferCommon.h:58
bool isValid() const
Definition: BufferCommon.h:55