GFX3D: Begin encapsulating stuff into the new NDSGeometryEngine() class.
- Also do some minor misc. code cleanup.
This commit is contained in:
parent
d03e4a6886
commit
669f1b05f5
File diff suppressed because it is too large
Load Diff
|
@ -653,6 +653,12 @@ union Vector16x4
|
||||||
s16 x, y, z, w;
|
s16 x, y, z, w;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
Vector16x3 vec3;
|
||||||
|
s16 :16;
|
||||||
|
};
|
||||||
|
|
||||||
u64 value;
|
u64 value;
|
||||||
};
|
};
|
||||||
typedef union Vector16x4 Vector16x4;
|
typedef union Vector16x4 Vector16x4;
|
||||||
|
@ -715,6 +721,12 @@ union Vector32x4
|
||||||
{
|
{
|
||||||
s32 x, y, z, w;
|
s32 x, y, z, w;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
Vector32x3 vec3;
|
||||||
|
s32 :32;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
typedef union Vector32x4 Vector32x4;
|
typedef union Vector32x4 Vector32x4;
|
||||||
typedef Vector32x4 VertexCoord32x4;
|
typedef Vector32x4 VertexCoord32x4;
|
||||||
|
@ -815,6 +827,41 @@ struct LegacyGFX3DStateSFormat
|
||||||
};
|
};
|
||||||
typedef struct LegacyGFX3D_StateSFormat LegacyGFX3D_StateSFormat;
|
typedef struct LegacyGFX3D_StateSFormat LegacyGFX3D_StateSFormat;
|
||||||
|
|
||||||
|
struct GeometryEngineLegacySave
|
||||||
|
{
|
||||||
|
u32 vtxFormat;
|
||||||
|
VertexCoord16x4 vtxCoord;
|
||||||
|
FragmentColor vtxColor;
|
||||||
|
u32 texCoordS;
|
||||||
|
u32 texCoordT;
|
||||||
|
u32 texCoordTransformedS;
|
||||||
|
u32 texCoordTransformedT;
|
||||||
|
TEXIMAGE_PARAM texParam;
|
||||||
|
u32 texPalette;
|
||||||
|
|
||||||
|
u8 vtxCoord16CurrentIndex;
|
||||||
|
|
||||||
|
u32 inBegin;
|
||||||
|
u32 vtxCount;
|
||||||
|
u32 vtxIndex[4];
|
||||||
|
u32 isGeneratingFirstPolyOfStrip;
|
||||||
|
u8 generateTriangleStripIndexToggle;
|
||||||
|
|
||||||
|
IOREG_VIEWPORT regViewport; // Historically, the viewport was stored as its raw register value.
|
||||||
|
};
|
||||||
|
typedef struct GeometryEngineLegacySave GeometryEngineLegacySave;
|
||||||
|
|
||||||
|
struct GFX3D_LegacySave
|
||||||
|
{
|
||||||
|
u32 isDrawPending;
|
||||||
|
u32 clCommand; // Exists purely for save state compatibility, historically went unused.
|
||||||
|
u32 clIndex; // Exists purely for save state compatibility, historically went unused.
|
||||||
|
u32 clIndex2; // Exists purely for save state compatibility, historically went unused.
|
||||||
|
IOREG_VIEWPORT rawPolyViewport[POLYLIST_SIZE]; // Historically, pending polygons kept a copy of the current viewport as a raw register value.
|
||||||
|
float PTcoords[4]; // Historically, PTcoords were stored as floating point values, not as integers.
|
||||||
|
};
|
||||||
|
typedef struct GFX3D_LegacySave GFX3D_LegacySave;
|
||||||
|
|
||||||
struct Viewer3D_State
|
struct Viewer3D_State
|
||||||
{
|
{
|
||||||
int frameNumber;
|
int frameNumber;
|
||||||
|
@ -827,8 +874,6 @@ extern Viewer3D_State viewer3D;
|
||||||
|
|
||||||
struct GFX3D
|
struct GFX3D
|
||||||
{
|
{
|
||||||
GFX3D_Viewport viewport;
|
|
||||||
|
|
||||||
GFX3D_State pendingState;
|
GFX3D_State pendingState;
|
||||||
GFX3D_State appliedState;
|
GFX3D_State appliedState;
|
||||||
GFX3D_GeometryList gList[2];
|
GFX3D_GeometryList gList[2];
|
||||||
|
@ -844,23 +889,87 @@ struct GFX3D
|
||||||
CACHE_ALIGN float rawPolySortYMax[POLYLIST_SIZE]; // Temp buffer used for processing polygon Y-sorting
|
CACHE_ALIGN float rawPolySortYMax[POLYLIST_SIZE]; // Temp buffer used for processing polygon Y-sorting
|
||||||
|
|
||||||
// Everything below is for save state compatibility.
|
// Everything below is for save state compatibility.
|
||||||
u32 inBeginLegacySave;
|
GeometryEngineLegacySave gEngineLegacySave;
|
||||||
u32 isDrawPendingLegacySave;
|
GFX3D_LegacySave legacySave;
|
||||||
u32 polyGenVtxCountLegacySave;
|
|
||||||
u32 polyGenVtxIndexLegacySave[4];
|
|
||||||
u32 polyGenIsFirstCompletedLegacySave;
|
|
||||||
u32 clCommandLegacySave; // Exists purely for save state compatibility, historically went unused.
|
|
||||||
u32 clIndexLegacySave; // Exists purely for save state compatibility, historically went unused.
|
|
||||||
u32 clIndex2LegacySave; // Exists purely for save state compatibility, historically went unused.
|
|
||||||
IOREG_VIEWPORT viewportLegacySave; // Historically, the viewport was stored as its raw register value.
|
|
||||||
IOREG_VIEWPORT rawPolyViewportLegacySave[POLYLIST_SIZE]; // Historically, pending polygons kept a copy of the current viewport as a raw register value.
|
|
||||||
float PTcoordsLegacySave[4]; // Historically, PTcoords were stored as floating point values, not as integers.
|
|
||||||
PAGE_ALIGN FragmentColor framebufferNativeSave[GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT]; // Rendered 3D framebuffer that is saved in RGBA8888 color format at the native size.
|
PAGE_ALIGN FragmentColor framebufferNativeSave[GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT]; // Rendered 3D framebuffer that is saved in RGBA8888 color format at the native size.
|
||||||
};
|
};
|
||||||
typedef struct GFX3D GFX3D;
|
typedef struct GFX3D GFX3D;
|
||||||
|
|
||||||
extern GFX3D gfx3d;
|
extern GFX3D gfx3d;
|
||||||
|
|
||||||
|
class NDSGeometryEngine
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
void __Init();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CACHE_ALIGN Vector32x4 _normal32;
|
||||||
|
CACHE_ALIGN s32 _mtxTexture32[16];
|
||||||
|
CACHE_ALIGN VertexCoord16x3 _vtxCoord16;
|
||||||
|
FragmentColor _vtxColor555X;
|
||||||
|
CACHE_ALIGN VertexCoord16x2 _texCoord16;
|
||||||
|
CACHE_ALIGN VertexCoord32x2 _texCoordTransformed;
|
||||||
|
|
||||||
|
u32 _vtxColor15;
|
||||||
|
FragmentColor _vtxColor666X;
|
||||||
|
float _vtxColorFloat[4];
|
||||||
|
float _texCoordTransformedFloat[2];
|
||||||
|
|
||||||
|
bool _doesViewportNeedUpdate;
|
||||||
|
bool _doesVertexColorNeedUpdate;
|
||||||
|
bool _doesTransformedTexCoordsNeedUpdate;
|
||||||
|
|
||||||
|
IOREG_VIEWPORT _regViewport;
|
||||||
|
GFX3D_Viewport _currentViewport;
|
||||||
|
POLYGON_ATTR _polyAttribute;
|
||||||
|
PolygonPrimitiveType _vtxFormat;
|
||||||
|
TEXIMAGE_PARAM _texParam;
|
||||||
|
TextureTransformationMode _texCoordTransformMode;
|
||||||
|
u32 _texPalette;
|
||||||
|
u8 _vtxCoord16CurrentIndex;
|
||||||
|
|
||||||
|
bool _inBegin;
|
||||||
|
size_t _vtxCount; // the number of vertices registered in this list
|
||||||
|
u16 _vtxIndex[4]; // indices to the main vert list
|
||||||
|
bool _isGeneratingFirstPolyOfStrip;
|
||||||
|
bool _generateTriangleStripIndexToggle;
|
||||||
|
|
||||||
|
public:
|
||||||
|
NDSGeometryEngine();
|
||||||
|
|
||||||
|
void Reset();
|
||||||
|
|
||||||
|
void SetViewport(const u32 param);
|
||||||
|
void SetViewport(const IOREG_VIEWPORT regViewport);
|
||||||
|
void SetViewport(const GFX3D_Viewport viewport);
|
||||||
|
void SetNormal(const Vector32x4 inNormal);
|
||||||
|
void SetVertexColor(const u32 param);
|
||||||
|
void SetVertexColor(const FragmentColor vtxColor555X);
|
||||||
|
void SetTextureParameters(const u32 param);
|
||||||
|
void SetTextureParameters(const TEXIMAGE_PARAM texParams);
|
||||||
|
void SetTexturePalette(const u32 texPalette);
|
||||||
|
void SetTextureCoordinates(const u32 param);
|
||||||
|
void SetTextureCoordinates(const VertexCoord16x2 &texCoord16);
|
||||||
|
void SetTextureMatrix(const s32 (&__restrict inTextureMatrix)[16]);
|
||||||
|
|
||||||
|
void VertexListBegin(const u32 param, const POLYGON_ATTR polyAttr);
|
||||||
|
void VertexListBegin(const PolygonPrimitiveType vtxFormat, const POLYGON_ATTR polyAttr);
|
||||||
|
void VertexListEnd();
|
||||||
|
bool SetCurrentVertex16x2(const u32 param);
|
||||||
|
bool SetCurrentVertex16x2(const VertexCoord16x2 inVtxCoord16x2);
|
||||||
|
void SetCurrentVertex10x3(const u32 param);
|
||||||
|
void SetCurrentVertex(const VertexCoord16x3 inVtxCoord16x3);
|
||||||
|
template<size_t ONE, size_t TWO> void SetCurrentVertex16x2Immediate(const u32 param);
|
||||||
|
template<size_t ONE, size_t TWO> void SetCurrentVertex16x2Immediate(const VertexCoord16x2 inVtxCoord16x2);
|
||||||
|
void SetCurrentVertex10x3Relative(const u32 param);
|
||||||
|
void SetCurrentVertexRelative(const VertexCoord16x3 inVtxCoord16x3);
|
||||||
|
void AddCurrentVertexToList(GFX3D_GeometryList &targetGList);
|
||||||
|
void GeneratePolygon(POLY &targetPoly, GFX3D_GeometryList &targetGList);
|
||||||
|
|
||||||
|
void SaveState(GeometryEngineLegacySave &outLegacySave);
|
||||||
|
void LoadState(const GeometryEngineLegacySave &inLegacySave);
|
||||||
|
};
|
||||||
|
|
||||||
//---------------------
|
//---------------------
|
||||||
|
|
||||||
extern CACHE_ALIGN u32 dsDepthExtend_15bit_to_24bit[32768];
|
extern CACHE_ALIGN u32 dsDepthExtend_15bit_to_24bit[32768];
|
||||||
|
|
Loading…
Reference in New Issue