Plasma Engine  2.0
Loading...
Searching...
No Matches
RenderDataBatch_inl.h
1
2template <typename T>
3PL_ALWAYS_INLINE const T& plRenderDataBatch::Iterator<T>::operator*() const
4{
5 return *plStaticCast<const T*>(m_pCurrent->m_pRenderData);
6}
7
8template <typename T>
9PL_ALWAYS_INLINE const T* plRenderDataBatch::Iterator<T>::operator->() const
10{
11 return plStaticCast<const T*>(m_pCurrent->m_pRenderData);
12}
13
14template <typename T>
15PL_ALWAYS_INLINE plRenderDataBatch::Iterator<T>::operator const T*() const
16{
17 return plStaticCast<const T*>(m_pCurrent->m_pRenderData);
18}
19
20template <typename T>
21PL_FORCE_INLINE void plRenderDataBatch::Iterator<T>::Next()
22{
23 ++m_pCurrent;
24
25 if (m_Filter.IsValid())
26 {
27 while (m_pCurrent < m_pEnd && m_Filter(m_pCurrent->m_pRenderData))
28 {
29 ++m_pCurrent;
30 }
31 }
32}
33
34template <typename T>
35PL_ALWAYS_INLINE bool plRenderDataBatch::Iterator<T>::IsValid() const
36{
37 return m_pCurrent < m_pEnd;
38}
39
40template <typename T>
42{
43 Next();
44}
45
46template <typename T>
47PL_FORCE_INLINE plRenderDataBatch::Iterator<T>::Iterator(const SortableRenderData* pStart, const SortableRenderData* pEnd, Filter filter)
48 : m_Filter(filter)
49{
50 const SortableRenderData* pCurrent = pStart;
51 if (m_Filter.IsValid())
52 {
53 while (pCurrent < pEnd && m_Filter(pCurrent->m_pRenderData))
54 {
55 ++pCurrent;
56 }
57 }
58
59 m_pCurrent = pCurrent;
60 m_pEnd = pEnd;
61}
62
63
64PL_ALWAYS_INLINE plUInt32 plRenderDataBatch::GetCount() const
65{
66 return m_Data.GetCount();
67}
68
69template <typename T>
70PL_FORCE_INLINE const T* plRenderDataBatch::GetFirstData() const
71{
72 auto it = Iterator<T>(m_Data.GetPtr(), m_Data.GetPtr() + m_Data.GetCount(), m_Filter);
73 return it.IsValid() ? (const T*)it : nullptr;
74}
75
76template <typename T>
77PL_FORCE_INLINE plRenderDataBatch::Iterator<T> plRenderDataBatch::GetIterator(plUInt32 uiStartIndex, plUInt32 uiCount) const
78{
79 plUInt32 uiEndIndex = plMath::Min(uiStartIndex + uiCount, m_Data.GetCount());
80 return Iterator<T>(m_Data.GetPtr() + uiStartIndex, m_Data.GetPtr() + uiEndIndex, m_Filter);
81}
82
84
85PL_ALWAYS_INLINE plUInt32 plRenderDataBatchList::GetBatchCount() const
86{
87 return m_Batches.GetCount();
88}
89
90PL_FORCE_INLINE plRenderDataBatch plRenderDataBatchList::GetBatch(plUInt32 uiIndex) const
91{
92 plRenderDataBatch batch = m_Batches[uiIndex];
93 batch.m_Filter = m_Filter;
94
95 return batch;
96}
PL_ALWAYS_INLINE plUInt32 GetCount() const
Returns the number of elements in the array.
Definition ArrayPtr.h:142
PL_ALWAYS_INLINE PointerType GetPtr() const
Returns the pointer to the array.
Definition ArrayPtr.h:118
Definition RenderDataBatch.h:24
Definition RenderDataBatch.h:6
constexpr PL_ALWAYS_INLINE T Min(T f1, T f2)
Returns the smaller value, f1 or f2.
Definition Math_inl.h:27