4#include "n64/CommandMacros.h"
6#include <spdlog/spdlog.h>
7#include <spdlog/fmt/ostr.h>
8#include <lib/binarytools/BinaryWriter.h>
9#include <types/Vec3D.h>
28 NodeTranslationRotation,
47inline std::ostream& operator<<(std::ostream& out,
const GeoOpcode& opcode) {
50 case GeoOpcode::BranchAndLink:
51 output =
"GEO_BRANCH_AND_LINK";
56 case GeoOpcode::Branch:
57 output =
"GEO_BRANCH";
59 case GeoOpcode::Return:
60 output =
"GEO_RETURN";
62 case GeoOpcode::OpenNode:
63 output =
"GEO_OPEN_NODE";
65 case GeoOpcode::CloseNode:
66 output =
"GEO_CLOSE_NODE";
68 case GeoOpcode::AssignAsView:
69 output =
"GEO_ASSIGN_AS_VIEW";
71 case GeoOpcode::UpdateNodeFlags:
72 output =
"GEO_UPDATE_NODE_FLAGS";
74 case GeoOpcode::NodeRoot:
75 output =
"GEO_NODE_SCREEN_AREA";
77 case GeoOpcode::NodeOrthoProjection:
78 output =
"GEO_NODE_ORTHO";
80 case GeoOpcode::NodePerspective:
81 output =
"GEO_CAMERA_FRUSTUM";
83 case GeoOpcode::NodeStart:
84 output =
"GEO_NODE_START";
86 case GeoOpcode::NodeMasterList:
87 output =
"GEO_ZBUFFER";
89 case GeoOpcode::NodeLevelOfDetail:
90 output =
"GEO_RENDER_RANGE";
92 case GeoOpcode::NodeSwitchCase:
93 output =
"GEO_SWITCH_CASE";
95 case GeoOpcode::NodeCamera:
96 output =
"GEO_CAMERA";
98 case GeoOpcode::NodeTranslationRotation:
99 output =
"GEO_TRANSLATE_ROTATE";
101 case GeoOpcode::NodeTranslation:
102 output =
"GEO_TRANSLATE";
104 case GeoOpcode::NodeRotation:
105 output =
"GEO_ROTATE";
107 case GeoOpcode::NodeAnimatedPart:
108 output =
"GEO_ANIMATED_PART";
110 case GeoOpcode::NodeBillboard:
111 output =
"GEO_BILLBOARD";
113 case GeoOpcode::NodeDisplayList:
114 output =
"GEO_DISPLAY_LIST";
116 case GeoOpcode::NodeShadow:
117 output =
"GEO_SHADOW";
119 case GeoOpcode::NodeObjectParent:
120 output =
"GEO_RENDER_OBJ";
122 case GeoOpcode::NodeAsm:
125 case GeoOpcode::NodeBackground:
126 output =
"GEO_BACKGROUND";
129 output =
"GEO_NOP_1A";
131 case GeoOpcode::CopyView:
132 output =
"GEO_COPY_VIEW";
134 case GeoOpcode::NodeHeldObj:
135 output =
"GEO_HELD_OBJECT";
137 case GeoOpcode::NodeScale:
138 output =
"GEO_SCALE";
140 case GeoOpcode::NOP2:
141 output =
"GEO_NOP_1E";
143 case GeoOpcode::NOP3:
144 output =
"GEO_NOP_1F";
146 case GeoOpcode::NodeCullingRadius:
147 output =
"GEO_CULLING_RADIUS";
150 throw std::runtime_error(
"Unknown Opcode");
153 return out << output;
156#define cur_geo_cmd_u8(offset) \
157 (cmd[CMD_PROCESS_OFFSET(offset)])
159#define cur_geo_cmd_s16(offset) \
160 (int16_t)BSWAP16((*(int16_t *) &cmd[CMD_PROCESS_OFFSET(offset)]))
162#define cur_geo_cmd_s32(offset) \
163 (s32)BSWAP32((*(s32 *) &cmd[CMD_PROCESS_OFFSET(offset)]))
165#define cur_geo_cmd_u32(offset) \
166 (uint32_t) BSWAP32((*(uint32_t *) &cmd[CMD_PROCESS_OFFSET(offset)]))
170 virtual void Print(std::ostream& out) = 0;
171 virtual void Write(LUS::BinaryWriter& write) = 0;
Definition GeoCommand.h:168