NNSG3dRS Structure and Accessors

Description

The NNSG3dRS structure is a structure for holding data corresponding to the state during rendering. This structure is referenced and changed when doing rendering and animation calculations; in other words, it maintains the data equivalent to the machine state. This structure is normally internally allocated to the stack region (DTCM) by the NNS_G3dDraw function. When executing things such as callback functions or functions to process SBC commands, a pointer is passed to NNSG3dRS as the first argument. While the NNS_G3dDraw function is being executed, a pointer is also stored in the global variable NNSG3dRS.
Normally, lack of knowledge about this structure will not cause any problems, but if you want to customize rendering operations in detail using a callback, the data kept in this structure will need to be referenced and changed. The table below contains descriptions of the accessors to the data members in the NNS_G3dRS structure.

Accessor Functions

#include <nnsys/g3d/sbc.h>
void NNS_G3dRSSetCallBack(NNSG3dRS* rs, NNSG3dSbcCallBackFunc func, u8 cmd, NNSG3dSbcCallBackTiming timing);
Sets the callback corresponding to the SBC command cmd. For details on arguments, refer to the NNS_G3dRenderObjSetCallBack function. It is valid to have one callback for each cmd. If two or more callbacks are executed on the same cmd, the setting will be overwritten. To set multiple callbacks, use this function rather than calling the NNS_G3dRenderObjSetCallBack function multiple times.

#include <nnsys/g3d/sbc.h>
void NNS_G3dRSResetCallBack(NNSG3dRS* rs, u8 cmd);
Disables the callback that is set for the SBC command cmd.

#include <nnsys/g3d/sbc.h>
NNSG3dRenderObj* NNS_G3dRSGetRenderObj(NNSG3dRS* rs);
Obtains a pointer to the NNSG3dRenderObj structure.

#include <nnsys/g3d/sbc.h>
NNSG3dMatAnmResult* NNS_G3dRSGetMatAnmResult(NNSG3dRS* rs);
Obtains a pointer to the NNSG3dMatAnmResult structure. It can be referenced or changed with the timing A and timing B callbacks of the NNS_G3D_SBC_MAT command. For all other cases, it is NULL.

#include <nnsys/g3d/sbc.h>
NNSG3dJntAnmResult* NNS_G3dRSGetJntAnmResult(NNSG3dRS* rs);
Obtains a pointer to the NNSG3dJntAnmResult structure. It can be referenced or changed with the timing A and timing B callbacks of the NNS_G3D_SBC_NODEDESC command. For all other cases, it is NULL.

#include <nnsys/g3d/sbc.h>
NNSG3dVisAnmResult* NNS_G3dRSGetVisAnmResult(NNSG3dRS* rs);
Obtains a pointer to the NNSG3dVisAnmResult structure. It can be referenced or changed with the timing A and timing B callbacks of the NNS_G3D_SBC_NODE command. For all other cases, it is NULL.

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSGetSbcPtr(NNSG3dRS* rs);
Obtains a pointer to the SBC command that is currently being executed.

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSSetFlag(NNSG3dRS* rs, NNSG3dRSFlag flag);
Specifies the NNSG3dRSFlag type flag that is defined in sbc.h and turns it ON.

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSResetFlag(NNSG3dRS* rs, NNSG3dRSFlag flag);
Specifies the NNSG3dRSFlag type flag that is defined in sbc.h and turns it OFF.

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentMatID(const NNSG3dRS* rs);
Returns either the ID of the material being calculated on by the current NNS_G3D_SBC_MAT command, or that set by the previously executed NNS_G3D_SBC_MAT command. The material ID is set by the SBC NNS_G3D_SBC_MAT command. It will be maintained until the next NNS_G3D_SBC_MAT command overrides it, or it is modified inside a callback function. This function will return -1 if no NNS_G3D_SBC_MAT command has been run, or if the previous NNS_G3D_SBC_MAT command's results are invalid.

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentNodeID(const NNSG3dRS* rs);
Returns either the ID of the node being calculated on by the current NNS_G3D_SBC_NODE command, or that set by the previously executed NNS_G3D_SBC_NODE command. The node ID is set by the SBC NNS_G3D_SBC_NODE command. It will be maintained until the next NNS_G3D_SBC_NODE command overrides it, or it is modified inside a callback function. This function will return -1 if no NNS_G3D_SBC_NODE command has been run, or if the previous NNS_G3D_SBC_NODE command's results are invalid.

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentNodeDescID(const NNSG3dRS* rs);
Returns either the ID of the node being calculated on by the current NNS_G3D_SBC_NODEDESC command, or that set by the previously executed NNS_G3D_SBC_NODEDESC command. The node ID is set by the SBC NNS_G3D_SBC_NODEDESC command. It will be maintained until the next NNS_G3D_SBC_NODEDESC command overrides it, or it is modified inside a callback function. This function will return -1 if no NNS_G3D_SBC_NODEDESC command has been run, or if the previous NNS_G3D_SBC_NODEDESC command's results are invalid.

#include <nnsys/g3d/sbc.h>
fx32 NNS_G3dRSGetPosScale(const NNSG3dRS* rs);
Acquires a scale value for vertex coordinates that are cached in the NNSG3dRS structure.

#include <nnsys/g3d/sbc.h>
fx32 NNS_G3dRSGetInvPosScale(const NNSG3dRS* rs);
Acquires the inverse scale value for vertex coordinates that are cached in the NNSG3dRS structure.

Below is a description of the main values taken by the NNSG3dRSFlag type.

NNS_G3D_RSFLAG_NODE_VISIBLE
This flag is set with the NNS_G3D_SBC_NODE command when the polygons belonging to the node are visible.
NNS_G3D_RSFLAG_MAT_TRANSPARENT
This flag is set with the NNS_G3D_SBC_MAT command when the material is transparent.
NNS_G3D_RSFLAG_CURRENT_NODE_VALID
This flag is set when a valid value is in currentNode.
NNS_G3D_RSFLAG_CURRENT_MAT_VALID
This flag is set when a valid value is in currentMat.
NNS_G3D_RSFLAG_RETURN
If this flag is set, execution of the NNS_G3dDraw function will finish after the end of the current SBC command.
NNS_G3D_RSFLAG_SKIP
If this flag is set, then the processing will be skipped until the next callback point or the current command ends.

See Also

Revision History

2004/10/11 Revised version.
2004/08/02 Initial version.


CONFIDENTIAL