mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
cleanup old gfx symbol management code
This commit is contained in:
parent
aea1ab9b86
commit
8f1830b079
3 changed files with 60 additions and 160 deletions
|
|
@ -6,6 +6,7 @@ extern "C" {
|
|||
#include "include/textures.h"
|
||||
#include "src/pc/lua/smlua.h"
|
||||
#include "src/pc/lua/utils/smlua_gfx_utils.h"
|
||||
#include "include/macros.h"
|
||||
}
|
||||
|
||||
static std::map<std::string, std::pair<Gfx *, u32>> sGfxCommandCache;
|
||||
|
|
@ -574,117 +575,6 @@ static s64 ParseGfxSymbolArg(GfxData* aGfxData, DataNode<Gfx>* aNode, u64* pToke
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define gfx_symbol_0(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
Gfx _Gfx[] = { symb() }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_1(symb, ptr) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
if (ptr) { aGfxData->mPointerList.Add(aHead); } \
|
||||
Gfx _Gfx[] = { symb(_Arg0) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_2(symb, ptr) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
if (ptr) { aGfxData->mPointerList.Add(aHead); } \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_3(symb, ptr) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
if (ptr) { aGfxData->mPointerList.Add(aHead); } \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_4(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg3 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2, _Arg3) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_5(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg3 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg4 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2, _Arg3, _Arg4) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_6(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg3 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg4 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg5 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2, _Arg3, _Arg4, _Arg5) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_7(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg3 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg4 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg5 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg6 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2, _Arg3, _Arg4, _Arg5, _Arg6) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_symbol_8(symb) \
|
||||
if (_Symbol == #symb) { \
|
||||
s64 _Arg0 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg1 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg2 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg3 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg4 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg5 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg6 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
s64 _Arg7 = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, ""); \
|
||||
Gfx _Gfx[] = { symb(_Arg0, _Arg1, _Arg2, _Arg3, _Arg4, _Arg5, _Arg6, _Arg7) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define gfx_arg_with_suffix(argname, suffix) \
|
||||
CHECK_TOKEN_INDEX(aTokenIndex,); \
|
||||
const String& argname##_token = aNode->mTokens[aTokenIndex]; \
|
||||
|
|
@ -822,17 +712,29 @@ static void SetCurrentTextureAsPalette(GfxData* aGfxData) {
|
|||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
#include "gfx_symbols.h"
|
||||
}
|
||||
#define define_gfx_symbol(symb, params, ...) gfx_symbol_##params(symb, ##__VA_ARGS__)
|
||||
|
||||
static void ParseGfxSymbol(GfxData* aGfxData, DataNode<Gfx>* aNode, Gfx*& aHead, u64& aTokenIndex) {
|
||||
CHECK_TOKEN_INDEX(aTokenIndex,);
|
||||
const String& _Symbol = aNode->mTokens[aTokenIndex++];
|
||||
|
||||
// Simple symbols
|
||||
GFX_SYMBOLS();
|
||||
// Uses macro iterators to dynamically handle the correct number of parameters
|
||||
#define HANDLE_PARAM(paramNum) s64 _Arg##paramNum = ParseGfxSymbolArg(aGfxData, aNode, &aTokenIndex, "");
|
||||
#define GET_ARG(paramNum) _Arg##paramNum
|
||||
#define CALL_SYMB(symb, ...) symb(__VA_ARGS__)
|
||||
#define define_gfx_symbol(symb, params, addPtr, ...) \
|
||||
if (_Symbol == #symb) { \
|
||||
REPEAT(HANDLE_PARAM, params); \
|
||||
if (addPtr) { aGfxData->mPointerList.Add(aHead); } \
|
||||
Gfx _Gfx[] = { CALL_SYMB(symb, LIST_ARGS(GET_ARG, params)) }; \
|
||||
memcpy(aHead, _Gfx, sizeof(_Gfx)); \
|
||||
aHead += (sizeof(_Gfx) / sizeof(_Gfx[0])); \
|
||||
return; \
|
||||
}
|
||||
#include "gfx_symbols.h"
|
||||
#undef HANDLE_PARAM
|
||||
#undef GET_ARG
|
||||
#undef CALL_SYMB
|
||||
#undef define_gfx_symbol
|
||||
|
||||
// Special symbols
|
||||
if (_Symbol == "gsSPTexture") {
|
||||
|
|
|
|||
|
|
@ -1,45 +1,44 @@
|
|||
// To use this macro, define `define_gfx_symbol` before including this file.
|
||||
|
||||
#define GFX_SYMBOLS() \
|
||||
define_gfx_symbol(gsDPFullSync, 0); \
|
||||
define_gfx_symbol(gsDPTileSync, 0); \
|
||||
define_gfx_symbol(gsDPPipeSync, 0); \
|
||||
define_gfx_symbol(gsDPLoadSync, 0); \
|
||||
define_gfx_symbol(gsDPNoOp, 0); \
|
||||
define_gfx_symbol(gsDPNoOpTag, 1, false); \
|
||||
define_gfx_symbol(gsDPSetCycleType, 1, false); \
|
||||
define_gfx_symbol(gsSPLight, 2, true); \
|
||||
define_gfx_symbol(gsSPVertex, 3, true); \
|
||||
define_gfx_symbol(gsSP1Triangle, 4); \
|
||||
define_gfx_symbol(gsSP2Triangles, 8); \
|
||||
define_gfx_symbol(gsSPNumLights, 1, false); \
|
||||
define_gfx_symbol(gsDPSetDepthSource, 1, false); \
|
||||
define_gfx_symbol(gsDPSetTextureLUT, 1, false); \
|
||||
define_gfx_symbol(gsDPLoadBlock, 5); \
|
||||
define_gfx_symbol(gsDPSetRenderMode, 2, false); \
|
||||
define_gfx_symbol(gsSPGeometryMode, 2, false); \
|
||||
define_gfx_symbol(gsSPGeometryModeSetFirst, 2, false); \
|
||||
define_gfx_symbol(gsDPSetPrimColor, 6); \
|
||||
define_gfx_symbol(gsDPSetEnvColor, 4); \
|
||||
define_gfx_symbol(gsDPSetFogColor, 4); \
|
||||
define_gfx_symbol(gsSPFogPosition, 2, false); \
|
||||
define_gfx_symbol(gsDPSetAlphaCompare, 1, false); \
|
||||
define_gfx_symbol(gsDPSetTextureFilter, 1, false); \
|
||||
define_gfx_symbol(gsDPSetTexturePersp, 1, false); \
|
||||
define_gfx_symbol(gsDPSetTextureLOD, 1, false); \
|
||||
define_gfx_symbol(gsDPSetTextureConvert, 1, false); \
|
||||
define_gfx_symbol(gsSPCullDisplayList, 2, false); \
|
||||
define_gfx_symbol(gsDPSetAlphaDither, 1, false); \
|
||||
define_gfx_symbol(gsDPSetCombineKey, 1, false); \
|
||||
define_gfx_symbol(gsDPPipelineMode, 1, false); \
|
||||
define_gfx_symbol(gsSPSetOtherMode, 4); \
|
||||
define_gfx_symbol(gsDPSetTextureDetail, 1, false); \
|
||||
define_gfx_symbol(gsDPSetColorDither, 1, false); \
|
||||
define_gfx_symbol(gsDPSetPrimDepth, 2, false); \
|
||||
define_gfx_symbol(gsDPSetBlendColor, 4); \
|
||||
define_gfx_symbol(gsSPCopyLightEXT, 2, false); \
|
||||
define_gfx_symbol(gsSPCopyLightsPlayerPart, 1, false); \
|
||||
define_gfx_symbol(gsSPFogFactor, 2, false); \
|
||||
define_gfx_symbol(gsMoveWd, 3, false); \
|
||||
define_gfx_symbol(gsSPLoadGeometryMode, 1, false); \
|
||||
define_gfx_symbol(gsDPFullSync, 0, false);
|
||||
define_gfx_symbol(gsDPTileSync, 0, false);
|
||||
define_gfx_symbol(gsDPPipeSync, 0, false);
|
||||
define_gfx_symbol(gsDPLoadSync, 0, false);
|
||||
define_gfx_symbol(gsDPNoOp, 0, false);
|
||||
define_gfx_symbol(gsDPNoOpTag, 1, false);
|
||||
define_gfx_symbol(gsDPSetCycleType, 1, false);
|
||||
define_gfx_symbol(gsSPLight, 2, true);
|
||||
define_gfx_symbol(gsSPVertex, 3, true);
|
||||
define_gfx_symbol(gsSP1Triangle, 4, false);
|
||||
define_gfx_symbol(gsSP2Triangles, 8, false);
|
||||
define_gfx_symbol(gsSPNumLights, 1, false);
|
||||
define_gfx_symbol(gsDPSetDepthSource, 1, false);
|
||||
define_gfx_symbol(gsDPSetTextureLUT, 1, false);
|
||||
define_gfx_symbol(gsDPLoadBlock, 5, false);
|
||||
define_gfx_symbol(gsDPSetRenderMode, 2, false);
|
||||
define_gfx_symbol(gsSPGeometryMode, 2, false);
|
||||
define_gfx_symbol(gsSPGeometryModeSetFirst, 2, false);
|
||||
define_gfx_symbol(gsDPSetPrimColor, 6, false);
|
||||
define_gfx_symbol(gsDPSetEnvColor, 4, false);
|
||||
define_gfx_symbol(gsDPSetFogColor, 4, false);
|
||||
define_gfx_symbol(gsSPFogPosition, 2, false);
|
||||
define_gfx_symbol(gsDPSetAlphaCompare, 1, false);
|
||||
define_gfx_symbol(gsDPSetTextureFilter, 1, false);
|
||||
define_gfx_symbol(gsDPSetTexturePersp, 1, false);
|
||||
define_gfx_symbol(gsDPSetTextureLOD, 1, false);
|
||||
define_gfx_symbol(gsDPSetTextureConvert, 1, false);
|
||||
define_gfx_symbol(gsSPCullDisplayList, 2, false);
|
||||
define_gfx_symbol(gsDPSetAlphaDither, 1, false);
|
||||
define_gfx_symbol(gsDPSetCombineKey, 1, false);
|
||||
define_gfx_symbol(gsDPPipelineMode, 1, false);
|
||||
define_gfx_symbol(gsSPSetOtherMode, 4, false);
|
||||
define_gfx_symbol(gsDPSetTextureDetail, 1, false);
|
||||
define_gfx_symbol(gsDPSetColorDither, 1, false);
|
||||
define_gfx_symbol(gsDPSetPrimDepth, 2, false);
|
||||
define_gfx_symbol(gsDPSetBlendColor, 4, false);
|
||||
define_gfx_symbol(gsSPCopyLightEXT, 2, false);
|
||||
define_gfx_symbol(gsSPCopyLightsPlayerPart, 1, false);
|
||||
define_gfx_symbol(gsSPFogFactor, 2, false);
|
||||
define_gfx_symbol(gsMoveWd, 3, false);
|
||||
define_gfx_symbol(gsSPLoadGeometryMode, 1, false);
|
||||
define_gfx_symbol(gsSPVertexNonGlobal, 3, true);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
#include "utils/smlua_anim_utils.h"
|
||||
#include "utils/smlua_collision_utils.h"
|
||||
#include "game/hardcoded.h"
|
||||
#include "gfx_symbols.h"
|
||||
#include "include/macros.h"
|
||||
|
||||
bool smlua_functions_valid_param_count(lua_State* L, int expected) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue