NNSG3dRS構造体とアクセサ

説明

NNSG3dRS構造体は、レンダリング中の状態を保持するための構造体です。この構造体は、レンダリングやアニメーションの計算において参照されたり変更されたりする、いわゆるマシンステートに相当するデータを保持するためのデータ構造です。この構造体は、通常NNS_G3dDraw関数内部でスタック領域(DTCM)に確保され、SBC命令を処理する関数やコールバック関数などの実行の際には、第1引数としてポインタが渡されています。また、NNS_G3dDraw関数の実行中には、グローバル変数のNNS_G3dRSにもポインタが格納されています。

通常は、この構造体についての知識はなくとも問題はないのですが、コールバックで描画中の動作を細かくカスタマイズしたい場合には、この構造体が保持するデータを、参照・改変する必要が生じてきます。そこでこの項では、NNS_G3dRS構造体のデータメンバへのアクセサについて説明いたします。

アクセサ関数

#include <nnsys/g3d/sbc.h>
void NNS_G3dRSSetCallBack(NNSG3dRS* rs, NNSG3dSbcCallBackFunc func, u8 cmd, NNSG3dSbcCallBackTiming timing);
SBC命令cmdに対してコールバックを設定します。引数についてはNNS_G3dRenderObjSetCallBack関数を参照してください。 コールバックはcmd1つにつき1つ有効となります。同じcmdに対して実行された場合は設定が上書きされます。コールバックを複数設定したい場合は、NNS_G3dRenderObjSetCallBack関数を複数回呼び出すのではなくこちらの関数を使用してください。

#include <nnsys/g3d/sbc.h>
void NNS_G3dRSResetCallBack(NNSG3dRS* rs, u8 cmd);
SBC命令cmdに対して設定されているコールバックを無効にします。

#include <nnsys/g3d/sbc.h>
NNSG3dRenderObj* NNS_G3dRSGetRenderObj(NNSG3dRS* rs);
NNSG3dRenderObj構造体へのポインタを取得します。

#include <nnsys/g3d/sbc.h>
NNSG3dMatAnmResult* NNS_G3dRSGetMatAnmResult(NNSG3dRS* rs);
NNSG3dMatAnmResult構造体へのポインタを取得します。NNS_G3D_SBC_MATコマンドのタイミングA, タイミングBのコールバックにおいて参照、変更可能。その他の場合はNULLです。

#include <nnsys/g3d/sbc.h>
NNSG3dJntAnmResult* NNS_G3dRSGetJntAnmResult(NNSG3dRS* rs);
NNSG3dJntAnmResult構造体へのポインタを取得します。NNS_G3D_SBC_NODEDESCコマンドのタイミングA, タイミングBのコールバックにおいて参照、変更可能。その他の場合はNULLです。

#include <nnsys/g3d/sbc.h>
NNSG3dVisAnmResult* NNS_G3dRSGetVisAnmResult(NNSG3dRS* rs);
NNSG3dVisAnmResult構造体へのポインタを取得します。NNS_G3D_SBC_NODEコマンドのタイミングA, タイミングBのコールバックにおいて参照、変更可能。その他の場合はNULLです。

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSGetSbcPtr(NNSG3dRS* rs);
現在実行中のSBC命令へのポインタを取得します。

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSSetFlag(NNSG3dRS* rs, NNSG3dRSFlag flag);
sbc.hで定義されているNNSG3dRSFlag型のフラグを指定してONにする。

#include <nnsys/g3d/sbc.h>
u8* NNS_G3dRSResetFlag(NNSG3dRS* rs, NNSG3dRSFlag flag);
sbc.hで定義されているNNSG3dRSFlag型のフラグを指定してOFFにする。

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentMatID(const NNSG3dRS* rs);
現在NNS_G3D_SBC_MATコマンドで計算中か直前に実行されたNNS_G3D_SBC_MATコマンドで設定されたマテリアルIDを返します。マテリアルIDはSBCのNNS_G3D_SBC_MATコマンドで設定され、次のNNS_G3D_SBC_MATコマンドがオーバーライドするか、コールバック関数内部で変更されるまで値を保持しつづけます。なお、NNS_G3D_SBC_MATコマンドが未実行か直前のNNS_G3D_SBC_MATコマンドの結果が無効とされている場合は-1を返します。

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentNodeID(const NNSG3dRS* rs);
現在計算中のNNS_G3D_SBC_NODEコマンドか直前に実行されたNNS_G3D_SBC_NODEコマンドで設定されたノードのIDを返します。ノードIDはSBCのNNS_G3D_SBC_NODEコマンドで設定され、次のNNS_G3D_SBC_NODEコマンドがオーバーライドするか、コールバック関数内部で変更されるまで値を保持しつづけます。なお、NNS_G3D_SBC_NODEコマンドが未実行か直前のNNS_G3D_SBC_NODEコマンドの結果が無効とされている場合は-1を返します。

#include <nnsys/g3d/sbc.h>
int NNS_G3dRSGetCurrentNodeDescID(const NNSG3dRS* rs);
現在計算中のNNS_G3D_SBC_NODEDESCコマンドか直前に実行されたNNS_G3D_SBC_NODEDESCコマンドで設定されたノードのIDを返します。ノードIDはSBCのNNS_G3D_SBC_NODEDESCコマンドで設定され、次のNNS_G3D_SBC_NODEDESCコマンドがオーバーライドするか、コールバック関数内部で変更されるまで値を保持しつづけます。なお、NNS_G3D_SBC_NODEDESCコマンドが未実行か直前のNNS_G3D_SBC_NODEDESCコマンドの結果が無効とされている場合は-1を返します。

#include <nnsys/g3d/sbc.h>
fx32 NNS_G3dRSGetPosScale(const NNSG3dRS* rs);
NNSG3dRS構造体にキャッシュされている頂点座標に対するスケール値を取得します。

#include <nnsys/g3d/sbc.h>
fx32 NNS_G3dRSGetInvPosScale(const NNSG3dRS* rs);
NNSG3dRS構造体にキャッシュされている頂点座標に対するスケール値の逆数を取得します。


以下は、NNSG3dRSFlag型の主要な値についての説明です。

NNS_G3D_RSFLAG_NODE_VISIBLE
NNS_G3D_SBC_NODEコマンドで、ノードに属するポリゴンがvisibleのときにセットされます。
NNS_G3D_RSFLAG_MAT_TRANSPARENT
NNS_G3D_SBC_MATコマンドで、マテリアルが透明の場合にセットされます。
NNS_G3D_RSFLAG_CURRENT_NODE_VALID
currentNodeに有効な値が入っている場合セットされています。
NNS_G3D_RSFLAG_CURRENT_MAT_VALID
currentMatに有効な値が入っている場合セットされています。
NNS_G3D_RSFLAG_RETURN
このフラグがセットされていると、現在のSBC命令終了後にNNS_G3dDraw関数の実行を終了します。
NNS_G3D_RSFLAG_SKIP
このフラグがセットされていると、次のコールバックポイントか現在の命令が終了するまで、処理をスキップします。

参照

履歴

2004/10/11 改訂版
2004/08/02 初版