Plasma Engine  2.0
Loading...
Searching...
No Matches
RenderDataBatch.h
1#pragma once
2
3#include <RendererCore/Pipeline/Declarations.h>
4
6{
7private:
8 struct SortableRenderData
9 {
10 PL_DECLARE_POD_TYPE();
11
12 const plRenderData* m_pRenderData;
13 plUInt64 m_uiSortingKey;
14 };
15
16public:
17 // PL_DECLARE_POD_TYPE(); // plDelegate has a destructor and therefore plRenderDataBatch can't be POD
18
20 using Filter = plDelegate<bool(const plRenderData*)>;
21
22 template <typename T>
24 {
25 public:
26 const T& operator*() const;
27 const T* operator->() const;
28
29 operator const T*() const;
30
31 void Next();
32
33 bool IsValid() const;
34
35 void operator++();
36
37 private:
38 friend class plRenderDataBatch;
39
40 Iterator(const SortableRenderData* pStart, const SortableRenderData* pEnd, Filter filter);
41
42 Filter m_Filter;
43 const SortableRenderData* m_pCurrent;
44 const SortableRenderData* m_pEnd;
45 };
46
47 plUInt32 GetCount() const;
48
49 template <typename T>
50 const T* GetFirstData() const;
51
52 template <typename T>
53 Iterator<T> GetIterator(plUInt32 uiStartIndex = 0, plUInt32 uiCount = plInvalidIndex) const;
54
55private:
56 friend class plExtractedRenderData;
57 friend class plRenderDataBatchList;
58
59 Filter m_Filter;
61};
62
64{
65public:
66 plUInt32 GetBatchCount() const;
67
68 plRenderDataBatch GetBatch(plUInt32 uiIndex) const;
69
70private:
71 friend class plExtractedRenderData;
72
75};
76
77#include <RendererCore/Pipeline/Implementation/RenderDataBatch_inl.h>
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition ExtractedRenderData.h:10
Definition RenderDataBatch.h:24
Definition RenderDataBatch.h:6
Definition RenderDataBatch.h:64
Base class for all render data. Render data must contain all information that is needed to render the...
Definition RenderData.h:14