Graphics v0.0.0
A simple abstraction layer for the modern graphics APIs.
载入中...
搜索中...
未找到
Buffer.h
1// Copyright 2022 ShenMian
2// License(Apache-2.0)
3
4#pragma once
5
6#include <cstddef>
7#include <span>
8
12class Buffer
13{
14public:
18 enum class Type
19 {
20 Vertex,
21 Index,
22 Uniform
23 };
24
28 enum class Usage
29 {
30 Static,
31 Dynamic,
32 Stream
33 };
34
42 Buffer(size_t size, Type type, Usage usage);
43
50 template <typename T>
51 void write(std::span<T> data, size_t offset = 0);
52
60 void write(const void* data, size_t size, size_t offset = 0);
61
69 void read(void* data, size_t size, size_t offset = 0);
70
74 [[nodiscard]] size_t get_size() const;
75
79 [[nodiscard]] Type get_type() const;
80
84 [[nodiscard]] Usage get_usage() const;
85
89 [[nodiscard]] void* get_data();
90
97 virtual void map(size_t size = -1, size_t offset = 0) = 0;
98
102 virtual void unmap() = 0;
103
110 virtual void flush(size_t size = -1, size_t offset = 0) = 0;
111
112protected:
113 size_t size_;
114 Type type_;
115 Usage usage_;
116 void* data_ = nullptr;
117};
118
119template <typename T>
120void Buffer::write(std::span<T> data, size_t offset)
121{
122 write(data.data(), data.size_bytes(), offset);
123}
缓冲区.
Definition: Buffer.h:13
void read(void *data, size_t size, size_t offset=0)
读取映射缓冲区.
Definition: Buffer.cpp:40
virtual void unmap()=0
取消映射.
Type
缓冲区类型. 表明了缓冲区的用途.
Definition: Buffer.h:19
virtual void map(size_t size=-1, size_t offset=0)=0
映射缓冲区到内存.
size_t get_size() const
获取缓冲区大小, 单位: 字节.
Definition: Buffer.cpp:12
Type get_type() const
获取缓冲区类型.
Definition: Buffer.cpp:17
Usage
缓冲区使用方式.
Definition: Buffer.h:29
virtual void flush(size_t size=-1, size_t offset=0)=0
刷新映射缓冲区.
void write(std::span< T > data, size_t offset=0)
写入映射缓冲区.
Definition: Buffer.h:120
Usage get_usage() const
获取缓冲区使用方式.
Definition: Buffer.cpp:22
void * get_data()
获取映射的缓冲区.
Definition: Buffer.cpp:27