Skip to content

Commit

Permalink
Add enum string conversion, fix mistakes
Browse files Browse the repository at this point in the history
  • Loading branch information
intns committed Jul 4, 2024
1 parent 99a00af commit 1782a3e
Show file tree
Hide file tree
Showing 3 changed files with 262 additions and 28 deletions.
234 changes: 234 additions & 0 deletions common/gxdefines.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,4 +315,238 @@ inline std::string GXTevKAlphaSelToStringConverter(_GXTevKAlphaSel kAlphaSel)
}
}

typedef enum _GXTexMtx {
GX_TEXMTX0 = 0,
GX_TEXMTX1 = 1,
GX_TEXMTX2 = 2,
GX_TEXMTX3 = 3,
GX_TEXMTX4 = 4,
GX_TEXMTX5 = 5,
GX_TEXMTX6 = 6,
GX_TEXMTX7 = 7,
GX_TEXMTX8 = 8,
GX_TEXMTX9 = 9,
GX_IDENTITY = 0xFF,

} GXTexMtx;

inline std::string GXTexMtxToStringConverter(_GXTexMtx texMtx)
{
switch (texMtx) {
case GX_TEXMTX0:
return "GX_TEXMTX0";
case GX_TEXMTX1:
return "GX_TEXMTX1";
case GX_TEXMTX2:
return "GX_TEXMTX2";
case GX_TEXMTX3:
return "GX_TEXMTX3";
case GX_TEXMTX4:
return "GX_TEXMTX4";
case GX_TEXMTX5:
return "GX_TEXMTX5";
case GX_TEXMTX6:
return "GX_TEXMTX6";
case GX_TEXMTX7:
return "GX_TEXMTX7";
case GX_TEXMTX8:
return "GX_TEXMTX8";
case GX_TEXMTX9:
return "GX_TEXMTX9";
case GX_IDENTITY:
return "GX_IDENTITY";
default:
return std::to_string((u32)texMtx);
}
}

typedef enum _GXTexGenSrc {
GX_TG_POS = 0,
GX_TG_NRM,
GX_TG_BINRM,
GX_TG_TANGENT,
GX_TG_TEX0,
GX_TG_TEX1,
GX_TG_TEX2,
GX_TG_TEX3,
GX_TG_TEX4,
GX_TG_TEX5,
GX_TG_TEX6,
GX_TG_TEX7,
GX_TG_TEXCOORD0,
GX_TG_TEXCOORD1,
GX_TG_TEXCOORD2,
GX_TG_TEXCOORD3,
GX_TG_TEXCOORD4,
GX_TG_TEXCOORD5,
GX_TG_TEXCOORD6,
GX_TG_COLOR0,
GX_TG_COLOR1

} GXTexGenSrc;

inline std::string GXTexGenSrcToStringConverter(_GXTexGenSrc texGenSrc)
{
switch (texGenSrc) {
case GX_TG_POS:
return "GX_TG_POS";
case GX_TG_NRM:
return "GX_TG_NRM";
case GX_TG_BINRM:
return "GX_TG_BINRM";
case GX_TG_TANGENT:
return "GX_TG_TANGENT";
case GX_TG_TEX0:
return "GX_TG_TEX0";
case GX_TG_TEX1:
return "GX_TG_TEX1";
case GX_TG_TEX2:
return "GX_TG_TEX2";
case GX_TG_TEX3:
return "GX_TG_TEX3";
case GX_TG_TEX4:
return "GX_TG_TEX4";
case GX_TG_TEX5:
return "GX_TG_TEX5";
case GX_TG_TEX6:
return "GX_TG_TEX6";
case GX_TG_TEX7:
return "GX_TG_TEX7";
case GX_TG_TEXCOORD0:
return "GX_TG_TEXCOORD0";
case GX_TG_TEXCOORD1:
return "GX_TG_TEXCOORD1";
case GX_TG_TEXCOORD2:
return "GX_TG_TEXCOORD2";
case GX_TG_TEXCOORD3:
return "GX_TG_TEXCOORD3";
case GX_TG_TEXCOORD4:
return "GX_TG_TEXCOORD4";
case GX_TG_TEXCOORD5:
return "GX_TG_TEXCOORD5";
case GX_TG_TEXCOORD6:
return "GX_TG_TEXCOORD6";
case GX_TG_COLOR0:
return "GX_TG_COLOR0";
case GX_TG_COLOR1:
return "GX_TG_COLOR1";
default:
return "Unknown";
}
}

typedef enum _GXTexGenType {
GX_TG_MTX3x4 = 0,
GX_TG_MTX2x4,
GX_TG_BUMP0,
GX_TG_BUMP1,
GX_TG_BUMP2,
GX_TG_BUMP3,
GX_TG_BUMP4,
GX_TG_BUMP5,
GX_TG_BUMP6,
GX_TG_BUMP7,
GX_TG_SRTG

} GXTexGenType;

inline std::string GXTexGenTypeToStringConverter(_GXTexGenType texGenType)
{
switch (texGenType) {
case GX_TG_MTX3x4:
return "GX_TG_MTX3x4";
case GX_TG_MTX2x4:
return "GX_TG_MTX2x4";
case GX_TG_BUMP0:
return "GX_TG_BUMP0";
case GX_TG_BUMP1:
return "GX_TG_BUMP1";
case GX_TG_BUMP2:
return "GX_TG_BUMP2";
case GX_TG_BUMP3:
return "GX_TG_BUMP3";
case GX_TG_BUMP4:
return "GX_TG_BUMP4";
case GX_TG_BUMP5:
return "GX_TG_BUMP5";
case GX_TG_BUMP6:
return "GX_TG_BUMP6";
case GX_TG_BUMP7:
return "GX_TG_BUMP7";
case GX_TG_SRTG:
return "GX_TG_SRTG";
default:
return "Unknown";
}
}

typedef enum _GXTevColorArg {
GX_CC_CPREV,
GX_CC_APREV,
GX_CC_C0,
GX_CC_A0,
GX_CC_C1,
GX_CC_A1,
GX_CC_C2,
GX_CC_A2,
GX_CC_TEXC,
GX_CC_TEXA,
GX_CC_RASC,
GX_CC_RASA,
GX_CC_ONE,
GX_CC_HALF,
GX_CC_QUARTER,
GX_CC_ZERO,

GX_CC_TEXRRR,
GX_CC_TEXGGG,
GX_CC_TEXBBB
} GXTevColorArg;

inline std::string GXTevColorArgToStringConverter(_GXTevColorArg tevColorArg)
{
switch (tevColorArg) {
case GX_CC_CPREV:
return "GX_CC_CPREV";
case GX_CC_APREV:
return "GX_CC_APREV";
case GX_CC_C0:
return "GX_CC_C0";
case GX_CC_A0:
return "GX_CC_A0";
case GX_CC_C1:
return "GX_CC_C1";
case GX_CC_A1:
return "GX_CC_A1";
case GX_CC_C2:
return "GX_CC_C2";
case GX_CC_A2:
return "GX_CC_A2";
case GX_CC_TEXC:
return "GX_CC_TEXC";
case GX_CC_TEXA:
return "GX_CC_TEXA";
case GX_CC_RASC:
return "GX_CC_RASC";
case GX_CC_RASA:
return "GX_CC_RASA";
case GX_CC_ONE:
return "GX_CC_ONE";
case GX_CC_HALF:
return "GX_CC_HALF";
case GX_CC_QUARTER:
return "GX_CC_QUARTER";
case GX_CC_ZERO:
return "GX_CC_ZERO";
case GX_CC_TEXRRR:
return "GX_CC_TEXRRR";
case GX_CC_TEXGGG:
return "GX_CC_TEXGGG";
case GX_CC_TEXBBB:
return "GX_CC_TEXBBB";
default:
return "Unknown";
}
}

#endif // GXDEFINES_HPP
48 changes: 24 additions & 24 deletions common/material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,9 @@ std::string GetTexMtxName(u32 texMtxValue)

std::ostream& operator<<(std::ostream& os, TexGenData const& t)
{
PrintIndent(os, 4, "DESTINATION_COORDS " << (u32)t.mDestinationCoords);
PrintIndent(os, 4, "FUNC " << (u32)t.mFunc);
PrintIndent(os, 4, "SOURCE_PARAM " << (u32)t.mSourceParam);
PrintIndent(os, 4, "DESTINATION_COORDS " << GXTexCoordIDToStringConverter(static_cast<GXTexCoordID>(t.mDestinationCoords)));
PrintIndent(os, 4, "FUNC " << GXTexGenTypeToStringConverter((GXTexGenType)t.mFunc));
PrintIndent(os, 4, "SOURCE_PARAM " << GXTexGenSrcToStringConverter((GXTexGenSrc)t.mSourceParam));
PrintIndent(os, 4, "TEXTURE_MTX " << GetTexMtxName(t.mTexMtx));
return os;
}
Expand Down Expand Up @@ -343,13 +343,13 @@ void TextureData::read(util::fstream_reader& reader)
mAnimLength = reader.readS32();
mAnimSpeed = reader.readF32();

mUv.read(reader);
mScale.read(reader);
mRotation = reader.readF32();
mPivot.read(reader);
mPosition.read(reader);

mPositionAnimData.resize(reader.readU32());
for (mat::TextureAnimData& posData : mPositionAnimData) {
mScaleAnimData.resize(reader.readU32());
for (mat::TextureAnimData& posData : mScaleAnimData) {
posData.read(reader);
}

Expand All @@ -358,8 +358,8 @@ void TextureData::read(util::fstream_reader& reader)
rotData.read(reader);
}

mScaleAnimData.resize(reader.readU32());
for (mat::TextureAnimData& scaleData : mScaleAnimData) {
mPivotAnimData.resize(reader.readU32());
for (mat::TextureAnimData& scaleData : mPivotAnimData) {
scaleData.read(reader);
}
}
Expand All @@ -381,13 +381,13 @@ void TextureData::write(util::fstream_writer& writer)
writer.writeS32(mAnimLength);
writer.writeF32(mAnimSpeed);

mUv.write(writer);
mScale.write(writer);
writer.writeF32(mRotation);
mPivot.write(writer);
mPosition.write(writer);

writer.writeU32(static_cast<u32>(mPositionAnimData.size()));
for (TextureAnimData& posData : mPositionAnimData) {
writer.writeU32(static_cast<u32>(mScaleAnimData.size()));
for (TextureAnimData& posData : mScaleAnimData) {
posData.write(writer);
}

Expand All @@ -396,8 +396,8 @@ void TextureData::write(util::fstream_writer& writer)
rotData.write(writer);
}

writer.writeU32(static_cast<u32>(mScaleAnimData.size()));
for (TextureAnimData& scaleData : mScaleAnimData) {
writer.writeU32(static_cast<u32>(mPivotAnimData.size()));
for (TextureAnimData& scaleData : mPivotAnimData) {
scaleData.write(writer);
}
}
Expand All @@ -411,24 +411,24 @@ std::ostream& operator<<(std::ostream& os, TextureData const& t)
PrintIndent(os, 5, "UNK5 " << (u32)t.mUnknown4);
PrintIndent(os, 5, "UNK6 " << (u32)t.mUnknown5);
PrintIndent(os, 5, "UNK7 " << (u32)t.mUnknown6);
PrintIndent(os, 5, "TEXTURE_MATRIX_ID " << (u32)t.mTextureMtxId);
PrintIndent(os, 5, "TEXTURE_MATRIX_ID " << GXTexMtxToStringConverter(static_cast<GXTexMtx>(t.mTextureMtxId)));
PrintIndent(os, 5, "ANIM_LENGTH " << (u32)t.mAnimLength);
PrintIndent(os, 5, "ANIM_SPEED " << t.mAnimSpeed);
PrintIndent(os, 5, "UV " << t.mUv);
PrintIndent(os, 5, "SCALE " << t.mScale);
PrintIndent(os, 5, "ROTATION " << t.mRotation);
PrintIndent(os, 5, "PIVOT " << t.mPivot);
PrintIndent(os, 5, "POSITION " << t.mPosition);

PrintList(os, t.mPositionAnimData, "POS_ANIM_FRAME_COUNT", "ENTRY", 6);
PrintList(os, t.mRotationAnimData, "ROT_ANIM_FRAME_COUNT", "ENTRY", 6);
PrintList(os, t.mScaleAnimData, "SCALE_ANIM_FRAME_COUNT", "ENTRY", 6);
PrintList(os, t.mRotationAnimData, "ROT_ANIM_FRAME_COUNT", "ENTRY", 6);
PrintList(os, t.mPivotAnimData, "PIVOT_ANIM_FRAME_COUNT", "ENTRY", 6);

return os;
}

void TextureInfo::read(util::fstream_reader& reader)
{
mUnknown = reader.readS32();
mUnknown1 = reader.readS32();
mUnknown2.read(reader);

mTextureGenData.resize(reader.readU32());
Expand All @@ -444,7 +444,7 @@ void TextureInfo::read(util::fstream_reader& reader)

void TextureInfo::write(util::fstream_writer& writer)
{
writer.writeS32(mUnknown);
writer.writeS32(mUnknown1);
mUnknown2.write(writer);

writer.writeU32(static_cast<u32>(mTextureGenData.size()));
Expand All @@ -461,7 +461,7 @@ void TextureInfo::write(util::fstream_writer& writer)
std::ostream& operator<<(std::ostream& os, TextureInfo const& ti)
{
os << "\tTEXTURE_INFO" << std::endl;
os << "\t\tUNK1 " << ti.mUnknown << std::endl;
os << "\t\tUNK1 " << ti.mUnknown1 << std::endl;
os << "\t\tUNK2 " << ti.mUnknown2 << std::endl;

u32 idx = 0;
Expand Down Expand Up @@ -690,10 +690,10 @@ void PVWCombiner::write(util::fstream_writer& writer) const

std::ostream& operator<<(std::ostream& os, PVWCombiner const& i)
{
PrintIndent(os, 4, "INPUT_A " << (u32)i.mInputABCD[0]);
PrintIndent(os, 4, "INPUT_B " << (u32)i.mInputABCD[1]);
PrintIndent(os, 4, "INPUT_C " << (u32)i.mInputABCD[2]);
PrintIndent(os, 4, "INPUT_D " << (u32)i.mInputABCD[3]);
PrintIndent(os, 4, "INPUT_A " << GXTevColorArgToStringConverter((GXTevColorArg)i.mInputABCD[0]));
PrintIndent(os, 4, "INPUT_B " << GXTevColorArgToStringConverter((GXTevColorArg)i.mInputABCD[1]));
PrintIndent(os, 4, "INPUT_C " << GXTevColorArgToStringConverter((GXTevColorArg)i.mInputABCD[2]));
PrintIndent(os, 4, "INPUT_D " << GXTevColorArgToStringConverter((GXTevColorArg)i.mInputABCD[3]));
PrintIndent(os, 4, "OP " << (u32)i.mOp);
PrintIndent(os, 4, "BIAS " << (u32)i.mBias);
PrintIndent(os, 4, "SCALE " << (u32)i.mScale);
Expand Down
8 changes: 4 additions & 4 deletions common/material.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,22 +158,22 @@ struct TextureData {
s32 mAnimLength = 0;
f32 mAnimSpeed = 0;

Vector2f mUv;
Vector2f mScale;
f32 mRotation = 0;
Vector2f mPivot;
Vector2f mPosition;

std::vector<TextureAnimData> mPositionAnimData;
std::vector<TextureAnimData> mRotationAnimData;
std::vector<TextureAnimData> mScaleAnimData;
std::vector<TextureAnimData> mRotationAnimData;
std::vector<TextureAnimData> mPivotAnimData;

void read(util::fstream_reader& reader);
void write(util::fstream_writer& writer);
friend std::ostream& operator<<(std::ostream& os, TextureData const& t);
};

struct TextureInfo {
s32 mUnknown = 0;
s32 mUnknown1 = 0;
Vector3f mUnknown2;
std::vector<TexGenData> mTextureGenData;
std::vector<TextureData> mTextureData;
Expand Down

0 comments on commit 1782a3e

Please sign in to comment.