NW4F G3d
Loading...
Searching...
No Matches
g3d_GfxObject.h
Go to the documentation of this file.
1#ifndef NW_G3D_FND_GFXOBJECT_H_
2#define NW_G3D_FND_GFXOBJECT_H_
3
4#include <nw/g3d/g3d_config.h>
5#include <nw/g3d/fnd/g3d_GX2Struct.h>
6
7#define NW_G3D_GFX_OBJECT(class_name) public
8 :
9 class_name();
10 typedef class_name self_type;
11 typedef class_name##_t base_type;
12 static self_type* DownCast(base_type* ptr) { return static_cast<self_type*>(ptr); }
13 static const self_type* DownCast(const base_type* ptr)
14 { return static_cast<const self_type*>(ptr); }
15 static self_type& DownCast(base_type& ref) { return static_cast<self_type&>(ref); }
16 static const self_type& DownCast(const base_type& ref)
17 { return static_cast<const self_type&>(ref); } private
18 :
20
21
22namespace nw { namespace g3d { namespace fnd {
23
46
47class GfxBuffer : public GfxBuffer_t
48{
50
51public:
52 void Setup();
53 void Cleanup();
54 void UpdateRegs();
55 void DCFlush(int bufferIndex = 0) const;
56 /*
57 void FlushExportBuffer(int bufferIndex = 0) const;
58 void DCRefresh();
59 */
60
61 void LoadIndices() const;
62 void LoadVertices(u32 slot) const;
63 void LoadVertexUniforms(u32 location, int bufferIndex = 0) const;
64 void LoadGeometryUniforms(u32 location, int bufferIndex = 0) const;
65 void LoadFragmentUniforms(u32 location, int bufferIndex = 0) const;
66 /*
67 void LoadComputeUniforms(u32 location, int bufferIndex = 0) const;
68 void LoadStreamOutBuffer(u32 location);
69 void LoadExportBuffer(int bufferIndex = 0) const;
70 */
71
72 void SetData(void* pData, u32 size, int bufferingCount = 1);
73
74 void* GetData(int bufferIndex = 0);
75 const void* GetData(int bufferIndex = 0) const;
76
77 int GetBufferingCount() const { return numBuffering; }
78
79 u32 GetSize() const { return size; }
80
81 void SetStride(u32 stride) { this->stride = static_cast<u16>(stride); }
82 u32 GetStride() const { return stride; }
83
84 /*
85 void SetStreamOutContext(GX2StreamOutContext* pCtx);
86 GX2StreamOutContext* GetStreamOutContext();
87 const GX2StreamOutContext* GetStreamOutContext() const;
88 */
89};
90
96
98{
100
101public:
102 void Setup();
103 void Cleanup();
104 void UpdateRegs();
105
106 void LoadVertexSampler(u32 unit) const;
107 void LoadGeometrySampler(u32 unit) const;
108 void LoadFragmentSampler(u32 unit) const;
109 // void LoadComputeSampler(u32 unit) const;
110
112 {
113 return reinterpret_cast<GX2Sampler*>(&gx2Sampler);
114 }
115
117 {
118 return reinterpret_cast<const GX2Sampler*>(&gx2Sampler);
119 }
120
121 /*
122 void SetDefault();
123
124 void SetClampX(GX2TexClamp clamp);
125 void SetClampY(GX2TexClamp clamp);
126 void SetClampZ(GX2TexClamp clamp);
127 void SetBorderType(GX2TexBorderType type);
128 */
129
130 GX2TexClamp GetClampX() const;
131 GX2TexClamp GetClampY() const;
132 GX2TexClamp GetClampZ() const;
134
135 /*
136 void SetMagFilter(GX2TexXYFilterType filter);
137 void SetMinFilter(GX2TexXYFilterType filter);
138 void SetZFilter(GX2TexZFilterType filter);
139 void SetMipFilter(GX2TexMipFilterType filter);
140 void SetMaxAniso(GX2TexAnisoRatio ratio);
141 */
142
145 // GX2TexZFilterType GetZFilter() const;
148
149 /*
150 void SetMinLOD(float minLOD);
151 void SetMaxLOD(float maxLOD);
152 void SetLODBias(float bias);
153 */
154
155 float GetMinLOD() const;
156 float GetMaxLOD() const;
157 float GetLODBias() const;
158
159 // void SetCompareFunc(GX2CompareFunction func);
161
162 // void SetCompareEnable(GX2Boolean enable);
163
164protected:
166};
167
174
176{
178
179public:
180 void Setup();
181 void Cleanup();
182 void UpdateRegs();
183 // void CalcSize();
184 void DCFlush() const;
185 // void DCRefresh();
186
187 void LoadVertexTexture(u32 unit) const;
188 void LoadGeometryTexture(u32 unit) const;
189 void LoadFragmentTexture(u32 unit) const;
190 // void LoadComputeTexture(u32 unit) const;
191
193 {
194 return reinterpret_cast<GX2Texture*>(&gx2Texture);
195 }
196
198 {
199 return reinterpret_cast<const GX2Texture*>(&gx2Texture);
200 }
201
202 // void SetDefault();
203
204 GX2SurfaceDim GetDimension() const { return gx2Texture.surface.dim; }
205 GX2SurfaceFormat GetFormat() const { return gx2Texture.surface.format; }
206 u32 GetWidth() const { return gx2Texture.surface.width; }
207 u32 GetHeight() const { return gx2Texture.surface.height; }
208 u32 GetDepth() const { return gx2Texture.surface.depth; }
209 u32 GetMipLevels() const { return gx2Texture.surface.numMips; }
210 u32 GetBaseSize() const { return gx2Texture.surface.imageSize; }
211 u32 GetMipSize() const { return gx2Texture.surface.mipSize; }
212
213 void SetImagePtrs(void* basePtr, void* mipPtr);
214
215 void* GetBasePtr();
216 const void* GetBasePtr() const;
217
218 void* GetMipPtr();
219 const void* GetMipPtr() const;
220
221 /*
222 void* GetImagePtr(int mipLevel);
223 const void* GetImagePtr(int mipLevel) const;
224 */
225
226 u32 GetAlignment() const { return gx2Texture.surface.alignment; }
227 u32 GetPitch() const { return gx2Texture.surface.pitch; }
228};
229
236
238{
240
241 enum
242 {
247 };
248
249public:
250 enum
251 {
252 SHADER_ALIGNMENT = 256 // GX2_SHADER_ALIGNMENT
253 };
254
255 void Setup();
256 void Cleanup();
257 // void UpdateRegs();
258 void DCFlush() const;
259 void CalcSize();
260
261 void Load() const;
262
264 {
265 return reinterpret_cast<GX2FetchShader*>(&gx2FetchShader);
266 }
267
269 {
270 return reinterpret_cast<const GX2FetchShader*>(&gx2FetchShader);
271 }
272
273 void SetAttribCount(u32 count) { gx2FetchShader.numAttribs = count; }
274 u32 GetAttribCount() const { return gx2FetchShader.numAttribs; }
275 u32 GetShaderSize() const { return gx2FetchShader.shaderSize; }
276
277 void SetShaderPtr(void* ptr);
278 void* GetShaderPtr();
279 const void* GetShaderPtr() const;
280
281 // void SetDivisors(u32 divisor2, u32 divisor3);
282
283 u32 GetDivisor(int divisorIndex) const
284 {
285 NW_G3D_ASSERT_INDEX_BOUNDS(divisorIndex, 4);
286 return divisorIndex < 2 ? static_cast<u32>(divisorIndex) : gx2FetchShader._divisors[divisorIndex - 2];
287 }
288
289 void SetVertexBuffer(int attribIndex, const GfxBuffer* pBuffer);
290 const GfxBuffer* GetVertexBuffer(int attribIndex) const;
291 /*
292 void ReplaceVertexBuffer(u32 slot, const GfxBuffer* pBuffer) const;
293 void ResetVertexBuffer() const;
294 */
295
297public:
298 void SetDefault() { SetDefault(GetGX2FetchShader()->shaderPtr); }
299
300 void SetLocation(int attribIndex, u32 location)
301 {
302 SetLocation(GetGX2FetchShader()->shaderPtr, attribIndex, location);
303 }
304
305 u32 GetLocation(int attribIndex) const
306 {
307 return GetLocation(GetGX2FetchShader()->shaderPtr, attribIndex);
308 }
309
310 void SetBufferSlot(int attribIndex, u32 slot)
311 {
312 SetBufferSlot(GetGX2FetchShader()->shaderPtr, attribIndex, slot);
313 }
314
315 /*
316 u32 GetBufferSlot(int attribIndex) const
317 {
318 return GetBufferSlot(GetGX2FetchShader()->shaderPtr, attribIndex);
319 }*/
320
321 void SetFormat(int attribIndex, GX2AttribFormat format)
322 {
323 SetFormat(GetGX2FetchShader()->shaderPtr, attribIndex, format);
324 }
325
326 /*
327 GX2AttribFormat GetFormat(int attribIndex) const
328 {
329 return GetFormat(GetGX2FetchShader()->shaderPtr, attribIndex);
330 }
331
332 void SetEndianSwapMode(int attribIndex, GX2EndianSwapMode mode)
333 {
334 SetEndianSwapMode(GetGX2FetchShader()->shaderPtr, attribIndex, mode);
335 }
336
337 GX2EndianSwapMode GetEndianSwapMode(int attribIndex) const
338 {
339 return GetEndianSwapMode(GetGX2FetchShader()->shaderPtr, attribIndex);
340 }
341
342 void SetDivisorSlot(int attribIndex, u32 slot)
343 {
344 SetDivisorSlot(GetGX2FetchShader()->shaderPtr, attribIndex, slot);
345 }
346 */
347
348 u32 GetDivisorSlot(int attribIndex) const
349 {
350 return GetDivisorSlot(GetGX2FetchShader()->shaderPtr, attribIndex);
351 }
352
353 void SetOffset(int attribIndex, u32 offset)
354 {
355 SetOffset(GetGX2FetchShader()->shaderPtr, attribIndex, offset);
356 }
357
358 u32 GetOffset(int attribIndex) const
359 {
360 return GetOffset(GetGX2FetchShader()->shaderPtr, attribIndex);
361 }
362
363protected:
364 u32* GetVFInst(int attribIndex)
365 {
366 return GetVFInst(GetGX2FetchShader()->shaderPtr, attribIndex);
367 }
368
369 const u32* GetVFInst(int attribIndex) const
370 {
371 return GetVFInst(GetGX2FetchShader()->shaderPtr, attribIndex);
372 }
373#endif // NW_G3D_HOST_PTRSIZE == NW_G3D_TARGET_PTRSIZE
374
375public:
376 void SetDefault(void* pShader);
377
378 void SetLocation(void* pShader, int attribIndex, u32 location);
379 u32 GetLocation(const void* pShader, int attribIndex) const;
380
381 void SetBufferSlot(void* pShader, int attribIndex, u32 slot);
382 // u32 GetBufferSlot(const void* pShader, int attribIndex) const;
383
384 void SetFormat(void* pShader, int attribIndex, GX2AttribFormat format);
385 /*
386 GX2AttribFormat GetFormat(const void* pShader, int attribIndex) const;
387
388 void SetEndianSwapMode(void* pShader, int attribIndex, GX2EndianSwapMode mode);
389 GX2EndianSwapMode GetEndianSwapMode(const void* pShader, int attribIndex) const;
390
391 void SetDivisorSlot(void* pShader, int attribIndex, u32 slot);
392 */
393 u32 GetDivisorSlot(const void* pShader, int attribIndex) const;
394
395 void SetOffset(void* pShader, int attribIndex, u32 offset);
396 u32 GetOffset(const void* pShader, int attribIndex) const;
397
398protected:
399 u32* GetVFInst(void* pShader, int attribIndex);
400 const u32* GetVFInst(const void* pShader, int attribIndex) const;
401
402 void LoadVertexAttribArray(u32 idxAttrib, const GfxBuffer* pBuffer) const;
403 void LoadVertexAttribArray() const;
404 void LoadVertexAttribValue() const;
405};
406
407/*
408void SetStreamOutEnable(GX2Boolean enable);
409
410void SetRasterizerClipControl(GX2Boolean rasterizerEnable, GX2Boolean zClipEnable);
411*/
412
413void SetPrimitiveRestartIndex(u32 restartIndex);
414
415/*
416void ClearBuffers(GfxColorBuffer* pColorBuffer, GfxDepthBuffer* pDepthBuffer,
417 float r, float g, float b, float a, GX2ClearMode mode);
418*/
419
420}}} // namespace nw::g3d::fnd
421
422#endif // NW_G3D_FND_GFXOBJECT_H_
Definition g3d_GfxObject.h:48
const void * GetData(int bufferIndex=0) const
Definition g3d_GfxObject.cpp:232
void UpdateRegs()
Definition g3d_GfxObject.cpp:163
void LoadIndices() const
Definition g3d_GfxObject.cpp:177
void LoadVertices(u32 slot) const
Definition g3d_GfxObject.cpp:181
void SetData(void *pData, u32 size, int bufferingCount=1)
Definition g3d_GfxObject.cpp:207
void LoadGeometryUniforms(u32 location, int bufferIndex=0) const
Definition g3d_GfxObject.cpp:193
u32 GetStride() const
Definition g3d_GfxObject.h:82
void Cleanup()
Definition g3d_GfxObject.cpp:159
int GetBufferingCount() const
Definition g3d_GfxObject.h:77
void * GetData(int bufferIndex=0)
Definition g3d_GfxObject.cpp:221
void LoadFragmentUniforms(u32 location, int bufferIndex=0) const
Definition g3d_GfxObject.cpp:200
void Setup()
Definition g3d_GfxObject.cpp:155
u32 GetSize() const
Definition g3d_GfxObject.h:79
void DCFlush(int bufferIndex=0) const
Definition g3d_GfxObject.cpp:167
void SetStride(u32 stride)
Definition g3d_GfxObject.h:81
void LoadVertexUniforms(u32 location, int bufferIndex=0) const
Definition g3d_GfxObject.cpp:186
Definition g3d_GfxObject.h:238
const void * GetShaderPtr() const
Definition g3d_GfxObject.cpp:488
u32 GetOffset(int attribIndex) const
Definition g3d_GfxObject.h:358
const u32 * GetVFInst(const void *pShader, int attribIndex) const
Definition g3d_GfxObject.cpp:621
u32 * GetVFInst(int attribIndex)
Definition g3d_GfxObject.h:364
void SetShaderPtr(void *ptr)
Definition g3d_GfxObject.cpp:468
void DCFlush() const
Definition g3d_GfxObject.cpp:433
void LoadVertexAttribArray(u32 idxAttrib, const GfxBuffer *pBuffer) const
Definition g3d_GfxObject.cpp:627
void Cleanup()
Definition g3d_GfxObject.cpp:429
u32 GetDivisor(int divisorIndex) const
Definition g3d_GfxObject.h:283
void SetBufferSlot(void *pShader, int attribIndex, u32 slot)
Definition g3d_GfxObject.cpp:552
@ VF_INST_SIZE
Definition g3d_GfxObject.h:246
@ FETCH_INST_ALIGNMENT
Definition g3d_GfxObject.h:244
@ CF_INST_SIZE
Definition g3d_GfxObject.h:245
@ MAX_INST_PER_FETCH_CLAUSE
Definition g3d_GfxObject.h:243
void SetDefault(void *pShader)
Definition g3d_GfxObject.cpp:497
u32 GetDivisorSlot(const void *pShader, int attribIndex) const
Definition g3d_GfxObject.cpp:589
void Setup()
Definition g3d_GfxObject.cpp:425
u32 GetAttribCount() const
Definition g3d_GfxObject.h:274
u32 GetShaderSize() const
Definition g3d_GfxObject.h:275
void SetFormat(void *pShader, int attribIndex, GX2AttribFormat format)
Definition g3d_GfxObject.cpp:562
void SetBufferSlot(int attribIndex, u32 slot)
Definition g3d_GfxObject.h:310
GX2FetchShader * GetGX2FetchShader()
Definition g3d_GfxObject.h:263
const GfxBuffer * GetVertexBuffer(int attribIndex) const
Definition g3d_GfxObject.cpp:462
void SetOffset(void *pShader, int attribIndex, u32 offset)
Definition g3d_GfxObject.cpp:598
void SetDefault()
Definition g3d_GfxObject.h:298
u32 GetDivisorSlot(int attribIndex) const
Definition g3d_GfxObject.h:348
void LoadVertexAttribValue() const
Definition g3d_GfxObject.cpp:637
const GX2FetchShader * GetGX2FetchShader() const
Definition g3d_GfxObject.h:268
void SetFormat(int attribIndex, GX2AttribFormat format)
Definition g3d_GfxObject.h:321
void SetVertexBuffer(int attribIndex, const GfxBuffer *pBuffer)
Definition g3d_GfxObject.cpp:455
void SetAttribCount(u32 count)
Definition g3d_GfxObject.h:273
const u32 * GetVFInst(int attribIndex) const
Definition g3d_GfxObject.h:369
void SetLocation(void *pShader, int attribIndex, u32 location)
Definition g3d_GfxObject.cpp:535
u32 * GetVFInst(void *pShader, int attribIndex)
Definition g3d_GfxObject.cpp:615
u32 GetLocation(int attribIndex) const
Definition g3d_GfxObject.h:305
@ SHADER_ALIGNMENT
Definition g3d_GfxObject.h:252
void LoadVertexAttribArray() const
Definition g3d_GfxObject.cpp:633
void Load() const
Definition g3d_GfxObject.cpp:450
void * GetShaderPtr()
Definition g3d_GfxObject.cpp:479
void CalcSize()
Definition g3d_GfxObject.cpp:442
u32 GetOffset(const void *pShader, int attribIndex) const
Definition g3d_GfxObject.cpp:607
void SetLocation(int attribIndex, u32 location)
Definition g3d_GfxObject.h:300
void SetOffset(int attribIndex, u32 offset)
Definition g3d_GfxObject.h:353
u32 GetLocation(const void *pShader, int attribIndex) const
Definition g3d_GfxObject.cpp:544
Definition g3d_GfxObject.h:98
GX2TexXYFilterType GetMinFilter() const
Definition g3d_GfxObject.cpp:294
GX2TexMipFilterType GetMipFilter() const
Definition g3d_GfxObject.cpp:299
float GetLODBias() const
Definition g3d_GfxObject.cpp:321
void LoadGeometrySampler(u32 unit) const
Definition g3d_GfxObject.cpp:259
GX2TexXYFilterType GetMagFilter() const
Definition g3d_GfxObject.cpp:289
void LoadFragmentSampler(u32 unit) const
Definition g3d_GfxObject.cpp:264
GX2TexAnisoRatio GetMaxAniso() const
Definition g3d_GfxObject.cpp:304
GX2TexBorderType GetBorderType() const
Definition g3d_GfxObject.cpp:284
void LoadVertexSampler(u32 unit) const
Definition g3d_GfxObject.cpp:254
GX2Boolean GetCompareEnable() const
Definition g3d_GfxObject.cpp:327
GX2Sampler * GetGX2Sampler()
Definition g3d_GfxObject.h:111
GX2TexClamp GetClampX() const
Definition g3d_GfxObject.cpp:269
void Cleanup()
Definition g3d_GfxObject.cpp:246
GX2TexClamp GetClampZ() const
Definition g3d_GfxObject.cpp:279
float GetMaxLOD() const
Definition g3d_GfxObject.cpp:315
void UpdateRegs()
Definition g3d_GfxObject.cpp:250
const GX2Sampler * GetGX2Sampler() const
Definition g3d_GfxObject.h:116
GX2CompareFunction GetCompareFunc() const
Definition g3d_GfxObject.cpp:332
float GetMinLOD() const
Definition g3d_GfxObject.cpp:309
GX2TexClamp GetClampY() const
Definition g3d_GfxObject.cpp:274
void Setup()
Definition g3d_GfxObject.cpp:242
Definition g3d_GfxObject.h:176
GX2Texture * GetGX2Texture()
Definition g3d_GfxObject.h:192
void LoadVertexTexture(u32 unit) const
Definition g3d_GfxObject.cpp:405
void Cleanup()
Definition g3d_GfxObject.cpp:343
u32 GetDepth() const
Definition g3d_GfxObject.h:208
u32 GetPitch() const
Definition g3d_GfxObject.h:227
u32 GetMipSize() const
Definition g3d_GfxObject.h:211
void Setup()
Definition g3d_GfxObject.cpp:338
const void * GetMipPtr() const
Definition g3d_GfxObject.cpp:396
void UpdateRegs()
Definition g3d_GfxObject.cpp:347
u32 GetWidth() const
Definition g3d_GfxObject.h:206
void LoadGeometryTexture(u32 unit) const
Definition g3d_GfxObject.cpp:410
u32 GetBaseSize() const
Definition g3d_GfxObject.h:210
u32 GetMipLevels() const
Definition g3d_GfxObject.h:209
u32 GetAlignment() const
Definition g3d_GfxObject.h:226
void SetImagePtrs(void *basePtr, void *mipPtr)
Definition g3d_GfxObject.cpp:369
void DCFlush() const
Definition g3d_GfxObject.cpp:352
void LoadFragmentTexture(u32 unit) const
Definition g3d_GfxObject.cpp:415
GX2SurfaceDim GetDimension() const
Definition g3d_GfxObject.h:204
u32 GetHeight() const
Definition g3d_GfxObject.h:207
const GX2Texture * GetGX2Texture() const
Definition g3d_GfxObject.h:197
const void * GetBasePtr() const
Definition g3d_GfxObject.cpp:387
GX2SurfaceFormat GetFormat() const
Definition g3d_GfxObject.h:205
#define NW_G3D_GFX_OBJECT(class_name)
Definition g3d_GfxObject.h:7
#define NW_G3D_ASSERT_INDEX_BOUNDS(index, size)
Definition g3d_assert.h:23
#define NW_G3D_DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition g3d_defs.h:81
#define NW_G3D_HOST_PTRSIZE
Definition g3d_defs.h:40
#define NW_G3D_TARGET_PTRSIZE
Definition g3d_defs.h:34
Definition g3d_GX2Struct.h:12
::GX2FetchShader GX2FetchShaderData
Definition g3d_GX2Struct.h:19
::GX2Texture GX2TextureData
Definition g3d_GX2Struct.h:15
Definition g3d_GfxManage.cpp:10
void SetPrimitiveRestartIndex(u32 restartIndex)
Definition g3d_GfxObject.cpp:641
Definition g3d_GfxManage.cpp:10
Definition g3d_GfxObject.h:25
u16 numBuffering
Definition g3d_GfxObject.h:36
GX2StreamOutContext * pCtxPtr
Definition g3d_GfxObject.h:41
u32 dataUIntPtr
Definition g3d_GfxObject.h:31
u32 size
Definition g3d_GfxObject.h:33
u16 stride
Definition g3d_GfxObject.h:35
void * pData
Definition g3d_GfxObject.h:29
u32 ctxUIntPtr
Definition g3d_GfxObject.h:43
u32 handle
Definition g3d_GfxObject.h:34
Definition g3d_GfxObject.h:231
internal::GX2FetchShaderData gx2FetchShader
Definition g3d_GfxObject.h:232
u32 handle
Definition g3d_GfxObject.h:234
u32 ofsVFInst
Definition g3d_GfxObject.h:233
Definition g3d_GfxObject.h:92
GX2Sampler gx2Sampler
Definition g3d_GfxObject.h:93
u32 handle
Definition g3d_GfxObject.h:94
Definition g3d_GfxObject.h:169
u32 handle
Definition g3d_GfxObject.h:171
internal::GX2TextureData gx2Texture
Definition g3d_GfxObject.h:170
u32 arrayLength
Definition g3d_GfxObject.h:172