書 式
-
#include <Ninja.h>
void njInitVertexBuffer( op, om, tp, tm, pt );
Uint32 op
Uint32 om
Uint32 tp
Uint32 tm
Uint32 pt
引 数
- op
- 不透明ポリゴン登録バッファサイズ
- om
- 不透明モディファイアボリューム登録バッファサイズ
- tp
- 半透明ポリゴン登録バッファサイズ
- tm
- 半透明モディファイアボリューム登録バッファサイズ
- pt
- 抜きテクスチャ登録バッファサイズ
返 値
-
なし
エラー
-
なし
機 能
-
頂点データ登録用のバッファをアロケートします。
3Vレーテンシモードの場合、アロケートされるサイズは引数*4 バイトであり、
これをダブルバッファで使用します。
また、引数の1つをマイナスにすると2Vレーテンシモードになります。
2Vレーテンシモード場合、通常のバッファはシングルバッファになり
マイナスにしたバッファは直接ハードに転送します。
3Vレーテンシと2Vレーテンシでの取得メモリサイズは以下のようになります。
・3Vの場合
取得メモリサイズ = (op + om + tp + tm + pt)x4 + 352(内部必要領域) バイト
・2Vレーテンシで上と同じ設定する場合
取得メモリサイズ = 100(マイナスを付けたバッファ) + (それ以外のバッファ)x4 + 352(内部必要領域) バイト
例:
・3Vの場合
njInitVertexBuffer( 100000, 0, 100000, 0, 0);
op = 100000*4 バイト = 400000バイト
tp = 100000*4 バイト = 400000バイト
内部必要領域 = 352バイト
合計 800352バイト
・2Vレーテンシで上と同じ設定する場合
njInitVertexBuffer( -100000, 0, 50000, 0 ,0);
op = マイナスは100バイト
to = 50000*4 バイト = 200000バイト(シングルバッファなので半分で良い)
内部必要領域 = 352バイト
合計 200452バイト
用 例
-
njInitVertexBuffer( 100000, 0, 100000, 0 , 0);
不透明ポリゴンと、半透明ポリゴンの頂点バッファをそれぞれ400KB確保します。
備 考
-
デバッグ文字を表示する場合は、半透明ポリゴン登録バッファを確保してください。
現在、抜きテクスチャ登録バッファは値を参照していません。
この関数は、内部でメモリ確保を行っています。よって、複数回呼ばれても良い様に、
前回確保したバッファ>を開放してから、新たに確保します。
Nindows で表示される値はバッファサイズを2で割った値です。
・エラーコールバック変数
システムのエラーの時、_nj_fatal_err_callback_変数にエラー情報が戻ります。
また、NJD_FATAL_ERR_OVERFLW_VTXBUFの時システムをストールしないように変更
しました。
(バッファオーバーによりメモリが壊れ、動かなくなる可能性はあります)
<Ninjadef.h>
#define NJD_FATAL_ERR_NOQEUE_INTR (1)
割り込みハンドラ内からDMAを起動しようとしたがQUEUEに空きがなかった
#define NJD_FATAL_ERR_OVERFLW_VTXBUF (2)
登録した頂点数がバッファをオーバーフローしていた
#define NJD_FATAL_ERR_TOO_MANY_VTX (3)
NativeBufferが根本的に足りない。
(登録ISP/TSPバッファがアロケートされたNativeBuufferより大きい)
#define NJD_FATAL_ERR_V_NOT_RESPOND (4)
VSYNCウェイト内でシーケンスがまったく進まなくなっている。
関 連
-