sead
Loading...
Searching...
No Matches
aglIndexStream.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglVertexEnum.h>
4
5#include <cafe/gx2.h>
6
7namespace agl {
8
10{
11public:
12 typedef GX2PrimitiveType PrimitiveType; // Idk the actual type
13
14public:
16 virtual ~IndexStream();
17
19 void setPrimitiveType(PrimitiveType primitive_type) { mPrimitiveType = primitive_type; }
20
21 void setUpStream(const u16* addr, u32 count)
22 {
23 setUpStream_(addr, cIndexStreamFormat_u16, count);
24 }
25
26 void setUpStream(const u16* addr, u32 count, PrimitiveType primitive_type)
27 {
28 setUpStream_(addr, cIndexStreamFormat_u16, count);
29 setPrimitiveType(primitive_type);
30 }
31
32 void setUpStream(const u32* addr, u32 count)
33 {
34 setUpStream_(addr, cIndexStreamFormat_u32, count);
35 }
36
37 void setUpStream(const u32* addr, u32 count, PrimitiveType primitive_type)
38 {
39 setUpStream_(addr, cIndexStreamFormat_u32, count);
40 setPrimitiveType(primitive_type);
41 }
42
43 const void* getBufferPtr(u32 start) const
44 {
45 u32 offset = mFormat == cIndexStreamFormat_u16
46 ? sizeof(u16) * start
47 : sizeof(u32) * start;
48
49 return static_cast<const u8*>(mpBuffer) + offset;
50 }
51
52 u32 getCount() const { return mCount; }
53
54 void draw() const;
55 void draw(u32 start, u32 count) const;
56
57 void drawInstanced(u32 instance_num) const;
58 void drawInstanced(u32 start, u32 count, u32 instance_num) const;
59
60 void drawInstanced(u32 instance_num, u32 base_vertex) const;
61 void drawInstanced(u32 start, u32 count, u32 instance_num, u32 base_vertex) const;
62
63private:
64 void setUpStream_(const void* addr, IndexStreamFormat format, u32 count);
65 void cleanUp_();
66
67private:
70 const void* mpBuffer;
73};
74static_assert(sizeof(IndexStream) == 0x18, "agl::IndexStream size mismatch");
75
76}
77
78#ifdef __cplusplus
79
80#include <common/aglIndexStream.hpp>
81
82#endif // __cplusplus
Definition aglIndexStream.h:10
IndexStreamFormat mFormat
Definition aglIndexStream.h:68
const void * getBufferPtr(u32 start) const
Definition aglIndexStream.h:43
void setUpStream_(const void *addr, IndexStreamFormat format, u32 count)
Definition aglIndexStream.cpp:27
void cleanUp_()
Definition aglIndexStream.cpp:20
PrimitiveType getPrimitiveType() const
Definition aglIndexStream.h:18
IndexStream()
Definition aglIndexStream.cpp:6
void setUpStream(const u16 *addr, u32 count)
Definition aglIndexStream.h:21
PrimitiveType mPrimitiveType
Definition aglIndexStream.h:69
const void * mpBuffer
Definition aglIndexStream.h:70
void drawInstanced(u32 instance_num) const
Definition aglIndexStream.hpp:20
virtual ~IndexStream()
Definition aglIndexStream.cpp:15
u32 mCount
Definition aglIndexStream.h:71
void draw() const
Definition aglIndexStream.hpp:8
void drawInstanced(u32 instance_num, u32 base_vertex) const
Definition aglIndexStream.hpp:32
u32 getCount() const
Definition aglIndexStream.h:52
u32 mStride
Definition aglIndexStream.h:72
void setUpStream(const u16 *addr, u32 count, PrimitiveType primitive_type)
Definition aglIndexStream.h:26
void drawInstanced(u32 start, u32 count, u32 instance_num, u32 base_vertex) const
Definition aglIndexStream.hpp:38
void draw(u32 start, u32 count) const
Definition aglIndexStream.hpp:14
GX2PrimitiveType PrimitiveType
Definition aglIndexStream.h:12
void setPrimitiveType(PrimitiveType primitive_type)
Definition aglIndexStream.h:19
void drawInstanced(u32 start, u32 count, u32 instance_num) const
Definition aglIndexStream.hpp:26
Definition aglDisplayList.cpp:5
IndexStreamFormat
Definition aglVertexEnum.h:84