NW4F Eft
Loading...
Searching...
No Matches
eft_Primitive.h
Go to the documentation of this file.
1#ifndef EFT_PRIMITIVE_H_
2#define EFT_PRIMITIVE_H_
3
4#include <nw/eft/eft_typeDef.h>
5#include <nw/eft/cafe/eft_CafeWrapper.h>
6
7namespace nw { namespace eft {
8
10{
11public:
13 {
14 mInitialized = false;
15 mPrimitiveIndexNum = 0;
16 }
17
18 void Initialize(Heap* heap, u32 indexNum,
19 void* posSrc, u32 posSrcSize,
20 void* norSrc, u32 norSrcSize,
21 void* colSrc, u32 colSrcSize,
22 void* texSrc, u32 texSrcSize,
23 void* idxSrc, u32 idxSrcSize)
24 {
25 if (posSrc && /*colSrc &&*/ texSrc && idxSrc)
26 mInitialized = true;
27 else
28 return;
29
30 mPrimitiveIndexNum = indexNum;
31
32 if (posSrc)
33 {
34 nw::math::VEC3* pos = static_cast<nw::math::VEC3*>(mPrimitivePosVB.AllocateVertexBuffer(heap, posSrcSize, 3));
35 /* MemUtil::Copy */ memcpy(pos, posSrc, posSrcSize);
36 fPos = &pos->x;
37 mPrimitivePosVB.Invalidate();
38 }
39
40 if (norSrc)
41 {
42 nw::math::VEC3* nor = static_cast<nw::math::VEC3*>(mPrimitiveNormalVB.AllocateVertexBuffer(heap, norSrcSize, 3));
43 /* MemUtil::Copy */ memcpy(nor, norSrc, norSrcSize);
44 fNor = &nor->x;
45 mPrimitiveNormalVB.Invalidate();
46 }
47
48 if (colSrc)
49 {
50 nw::math::VEC4* col = static_cast<nw::math::VEC4*>(mPrimitiveColorVB.AllocateVertexBuffer(heap, colSrcSize, 4));
51 /* MemUtil::Copy */ memcpy(col, colSrc, colSrcSize);
52 fCol = &col->x;
53 mPrimitiveColorVB.Invalidate();
54 }
55 else
56 {
57 nw::math::VEC4* col = static_cast<nw::math::VEC4*>(
58 mPrimitiveColorVB.AllocateVertexBuffer(heap, mPrimitiveIndexNum * sizeof(nw::math::VEC4), 4));
59 //fCol = &col->x; <-- NSMBU doesn't do this, but MK8 does. Bug in older Eft?
60 for (u32 i = 0; i < mPrimitiveIndexNum; ++i)
61 {
62 col->x = 1.0f;
63 col->y = 1.0f;
64 col->z = 1.0f;
65 col->w = 1.0f;
66 col++;
67 }
68 mPrimitiveColorVB.Invalidate();
69 }
70
71 if (texSrc && texSrcSize != 0)
72 {
73 nw::math::VEC2* tex = static_cast<nw::math::VEC2*>(mPrimitiveTexCrdVB.AllocateVertexBuffer(heap, texSrcSize, 2));
74 /* MemUtil::Copy */ memcpy(tex, texSrc, texSrcSize);
75 fUv = &tex->x;
76 mPrimitiveTexCrdVB.Invalidate();
77 }
78/*
79 else
80 {
81 // EFT_ASSERT( "[EFT] Primitive Texture Coord is Error." );
82 }
83*/
84
85 if (idxSrc && idxSrcSize != 0)
86 {
87 u32* idx = static_cast<u32*>(mPrimitiveIndexVB.AllocateVertexBuffer(heap, idxSrcSize, 1));
88 /* MemUtil::Copy */ memcpy(idx, idxSrc, idxSrcSize);
89 uIdx = reinterpret_cast<u32*>(idx);
90 mPrimitiveIndexVB.Invalidate();
91 }
92 else
93 {
94 // EFT_ASSERT( "[EFT] Primitive Index is Error." );
95 }
96 }
97
98 void Finalize(Heap* heap)
99 {
100 mPrimitivePosVB.Finalize(heap);
101 mPrimitiveNormalVB.Finalize(heap);
102 mPrimitiveColorVB.Finalize(heap);
103 mPrimitiveTexCrdVB.Finalize(heap);
104 mPrimitiveIndexVB.Finalize(heap);
105 }
106
107 void BindPosionBuffer(u32 attr)
108 {
109 if (attr != EFT_INVALID_ATTRIBUTE && mPrimitivePosVB.GetVertexBuffer())
110 mPrimitivePosVB.BindBuffer(attr, mPrimitivePosVB.GetVertexBufferSize(), sizeof(nw::math::VEC3));
111 }
112
113 void BindNormalBuffer(u32 attr)
114 {
115 if (attr != EFT_INVALID_ATTRIBUTE && mPrimitiveNormalVB.GetVertexBuffer())
116 mPrimitiveNormalVB.BindBuffer(attr, mPrimitiveNormalVB.GetVertexBufferSize(), sizeof(nw::math::VEC3));
117 }
118
119 void BindColorBuffer(u32 attr)
120 {
121 if (attr != EFT_INVALID_ATTRIBUTE && mPrimitiveColorVB.GetVertexBuffer())
122 mPrimitiveColorVB.BindBuffer(attr, mPrimitiveColorVB.GetVertexBufferSize(), sizeof(nw::math::VEC4));
123 }
124
125 void BindTextureCrdBuffer(u32 attr)
126 {
127 if (attr != EFT_INVALID_ATTRIBUTE && mPrimitiveTexCrdVB.GetVertexBuffer())
128 mPrimitiveTexCrdVB.BindBuffer(attr, mPrimitiveTexCrdVB.GetVertexBufferSize(), sizeof(nw::math::VEC2));
129 }
130
132 {
133 return mPrimitiveIndexVB.GetVertexBuffer();
134 }
135
137 {
138 return mPrimitiveIndexNum;
139 }
140
142 {
143 return mInitialized;
144 }
145
146 VertexBuffer& GetPositionVertexBuffer() { return mPrimitivePosVB; }
147 VertexBuffer& GetNoramlVertexBuffer() { return mPrimitiveNormalVB; }
148 VertexBuffer& GetColorVertexBuffer() { return mPrimitiveColorVB; }
149
150private:
153
159
165};
166static_assert(sizeof(Primitive) == 0x6C, "nw::eft::Primitive size mismatch");
167
168} } // namespace nw::eft
169
170#endif // EFT_PRIMITIVE_H_
Definition eft_Heap.h:9
Definition eft_Primitive.h:10
void BindTextureCrdBuffer(u32 attr)
Definition eft_Primitive.h:125
bool IsInitialized()
Definition eft_Primitive.h:141
f32 * fCol
Definition eft_Primitive.h:162
Primitive()
Definition eft_Primitive.h:12
bool mInitialized
Definition eft_Primitive.h:151
void BindColorBuffer(u32 attr)
Definition eft_Primitive.h:119
f32 * fNor
Definition eft_Primitive.h:161
VertexBuffer mPrimitiveTexCrdVB
Definition eft_Primitive.h:157
u32 mPrimitiveIndexNum
Definition eft_Primitive.h:152
VertexBuffer mPrimitiveIndexVB
Definition eft_Primitive.h:158
void Initialize(Heap *heap, u32 indexNum, void *posSrc, u32 posSrcSize, void *norSrc, u32 norSrcSize, void *colSrc, u32 colSrcSize, void *texSrc, u32 texSrcSize, void *idxSrc, u32 idxSrcSize)
Definition eft_Primitive.h:18
void BindNormalBuffer(u32 attr)
Definition eft_Primitive.h:113
u32 * uIdx
Definition eft_Primitive.h:164
VertexBuffer mPrimitiveNormalVB
Definition eft_Primitive.h:155
u32 GetIndexNum()
Definition eft_Primitive.h:136
VertexBuffer & GetColorVertexBuffer()
Definition eft_Primitive.h:148
f32 * fUv
Definition eft_Primitive.h:163
VertexBuffer & GetPositionVertexBuffer()
Definition eft_Primitive.h:146
VertexBuffer & GetNoramlVertexBuffer()
Definition eft_Primitive.h:147
VertexBuffer mPrimitivePosVB
Definition eft_Primitive.h:154
VertexBuffer mPrimitiveColorVB
Definition eft_Primitive.h:156
void * GetIndexBuffer()
Definition eft_Primitive.h:131
void BindPosionBuffer(u32 attr)
Definition eft_Primitive.h:107
f32 * fPos
Definition eft_Primitive.h:160
void Finalize(Heap *heap)
Definition eft_Primitive.h:98
Definition eft_CafeWrapper.h:92
#define EFT_INVALID_ATTRIBUTE
Definition eft_Data.h:123
Definition eft_CafeWrapper.cpp:117