# NNS_G3D_SBC_MAT

## 命令のフォーマット

オフセット（バイト単位） | 説明
--- | ---
0（上位3bitが[000]の場合） | `NNS_G3D_SBC_MAT | NNS_G3D_SBCFLG_000`
0（上位3bitが[001]の場合） | `NNS_G3D_SBC_MAT | NNS_G3D_SBCFLG_001`
0（上位3bitが[010]の場合） | `NNS_G3D_SBC_MAT | NNS_G3D_SBCFLG_010`
1 | マテリアルID

## 説明

`NNS_G3D_SBC_MAT`命令は、マテリアル情報をモデルリソースやアニメリソースから取得し、ジオメトリエンジンに送信するための命令です。この命令は、デフォルトではsbc.cの`NNSi_G3dFuncSbc_MAT`関数をコールします。関数の内部では以下のような処理が行われています。

1. `NNS_G3dRS`構造体の`pMatAnmResult`メンバに`NNSG3dMatAnmResult`のポインタをセットする。
2. タイミングAのコールバックをチェックします。この位置のコールバックは、マテリアルの計算をコールバック関数に代行させたい場合に便利です。なお、コールバック関数内で`NNS_G3dRS`構造体の`NNS_G3D_RSFLAG_SKIP`フラグをセットしておくと、次のコールバックまでの処理をスキップします。
3. マテリアル情報が静止画／アニメーションの場合に応じて、`*pMatAnmResult`にセットされます。
4. タイミングBのコールバックをチェックします。この位置のコールバックは、マテリアルの計算結果をコールバック関数に加工させたい場合に便利です。
5. マテリアル情報がジオメトリエンジンに送信されます。
6. タイミングCのコールバックをチェックします。この位置のコールバックは、この命令の終了後に何らかの動作をさせたい場合に利用します。

コールバック関数の呼び出しタイミング | 用途
--- | ---
`NNS_G3D_SBC_CALLBACK_TIMING_A` | マテリアルの計算をユーザーのプログラムに代行させたい場合。
`NNS_G3D_SBC_CALLBACK_TIMING_B` | マテリアルの計算結果をユーザーのプログラムに加工させたい場合。
`NNS_G3D_SBC_CALLBACK_TIMING_C` | この命令の終了後に何らかの処理を入れたい場合。

オプションフラグ | 動作
--- | ---
`NNS_G3D_SBCFLG_000` | マテリアルの計算結果を格納しているバッファをチェックせず、計算結果もバッファリングしない場合
`NNS_G3D_SBCFLG_001` | マテリアルの計算結果をバッファリングされている場合はそれを利用。バッファがない場合は計算するが計算結果はバッファリングしない。
`NNS_G3D_SBCFLG_010` | マテリアルの計算結果をバッファリングされている場合はそれを利用。バッファがない場合は計算して計算結果をバッファリングする。

## 参照

## 履歴

2004/10/14 記述の追加
2004/08/02 初版