Pioneer
Loading...
Searching...
No Matches
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 */
14namespace 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>
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:
60 };
61
62 template <typename T>
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
Mappable * m_map
Definition BufferCommon.h:59
ScopedMapping(const ScopedMapping &)=delete
T * operator->()
Definition BufferCommon.h:52
ScopedMapping & operator=(const ScopedMapping)=delete
~ScopedMapping()
Definition BufferCommon.h:42
T * m_data
Definition BufferCommon.h:58
bool isValid() const
Definition BufferCommon.h:55
T * data()
Definition BufferCommon.h:53