FCT
载入中...
搜索中...
未找到
IndexBuffer.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/4/10.
3//
4
5#ifndef INDEXBUFFER_H
6#define INDEXBUFFER_H
7namespace FCT
8{
9 namespace RHI
10 {
12 {
13 public:
14 virtual ~IIndexData() = default;
15 virtual void* getData() = 0;
16 virtual size_t getSize() = 0;
17 virtual size_t getStride() = 0;
18 };
19 template <typename T>
20 class IndexData : public IIndexData
21 {
22 public:
23 IndexData(std::vector<T>& indices) : m_indices(indices) {}
24
25 void* getData() override { return m_indices.data(); }
26 size_t getSize() override { return m_indices.size(); }
27 size_t getStride() override { return sizeof(T); }
28
29 private:
30 std::vector<T>& m_indices;
31 };
32
34 {
35 public:
42 virtual ~IndexBuffer()
43 {
44 if (m_indexData)
45 {
46 delete m_indexData;
47 m_indexData = nullptr;
48 }
49 }
50 template <typename T>
51 void indexBuffer(std::vector<T>& indices)
52 {
53 static_assert(std::is_integral<T>::value, "index must be integral type");
54 static_assert(std::is_unsigned<T>::value, "index must be unsigned type");
55 m_indexData = new IndexData<T>(indices);
56 if (m_size < indices.size())
57 {
58 m_size = indices.size();
59 }
60 m_stride = sizeof(T);
61 }
62 void reserve(size_t size)
63 {
64 m_size = size;
65 }
67 {
68 m_updateFrequency = frequency;
69 }
71 {
72 if (m_indexData)
73 {
74 //todo: 根据内存类型选择更新数据方式
75 mapBuffer(m_indexData->getData(), m_indexData->getSize() * m_indexData->getStride());
76 }
77 }
78 virtual void create() = 0;
79 virtual void mapBuffer(void* data, uint32_t size) = 0;
80 virtual void bind(CommandBuffer* buffer) = 0;
81 virtual void resize(size_t size) = 0;
82 protected:
83 size_t m_size;
84 size_t m_stride;
87 };
88 }
89}
90
91
92#endif //INDEXBUFFER_H
virtual ~IIndexData()=default
virtual size_t getStride()=0
virtual size_t getSize()=0
virtual void * getData()=0
virtual void mapBuffer(void *data, uint32_t size)=0
void reserve(size_t size)
void indexBuffer(std::vector< T > &indices)
UpdateFrequency m_updateFrequency
virtual void bind(CommandBuffer *buffer)=0
void updateFrequency(UpdateFrequency frequency)
virtual void resize(size_t size)=0
virtual void create()=0
size_t getStride() override
IndexData(std::vector< T > &indices)
void * getData() override
size_t getSize() override
std::vector< T > & m_indices
UpdateFrequency