Re: モデルハンドル ( No.1 ) |
- 名前:いっち 日時:2010/03/08 02:08
"MV1LoadModel"等のハンドルを返す関数の戻り値の事だと思いますが、
DxLibで使用しているハンドルの値はおそらく「フラグ+ID」といった形なのだと思います。
ですので、正常なハンドルは -1 ( 0 も?)以外のあらゆる値を取る可能性があるのだと思います。
|
Re: モデルハンドル ( No.2 ) |
- 名前:Working 日時:2010/03/08 02:19
なるほど。
ありがとうございました
|
Re: モデルハンドル ( No.3 ) |
- 名前:いっち 日時:2010/03/12 13:16
せっかくなので管理人さんにお聞きしてみたいのですが、
"0"も不正なハンドル値として保証されておりますでしょうか?
自作の物は現状でそのような作りにはしていないので、まったく問題無いのですが、
気分的にちょっと嬉しいです。
(※追記)
ハンドルについて、もう一点お聞きしてみたいことがありました。
ハンドルの値はどの程度の範囲でユニークであることが保証されているのでしょうか?
具体的に言うと、"LoadGraph"で作成したハンドルの値は、それを"DeleteGraph"で削除しない限り、
何度"LoadGraph"を実行しても、同じ値のハンドルが作成されることは無く、ユニークであることが保証されていると思います。
ですが、たとえば"CreateDirLightHandle"や"MV1LoadModel"などで作成したハンドルの値と、
"LoadGraph"で作成したハンドルの値が同値となることはあるのでしょうか?
お忙しいところ申し訳ありませんが、ご教授下さい。
|
Re: モデルハンドル ( No.4 ) |
- 名前:管理人 日時:2010/03/15 23:50
> "0"も不正なハンドル値として保証されておりますでしょうか?
はい、保証されています
> ハンドルの値はどの程度の範囲でユニークであることが保証されているのでしょうか?
はい、されています、DeleteGraph した後に LoadGraph をした場合は DeleteGraph で削除したハンドルと同じ値を持つ
ハンドルが作成される可能性はありますが・・・
> 具体的に言うと、"LoadGraph"で作成したハンドルの値は、それを"DeleteGraph"で削除しない限り、
> 何度"LoadGraph"を実行しても、同じ値のハンドルが作成されることは無く、ユニークであることが保証されていると思います。
>
> ですが、たとえば"CreateDirLightHandle"や"MV1LoadModel"などで作成したハンドルの値と、
> "LoadGraph"で作成したハンドルの値が同値となることはあるのでしょうか?
ありません、というのもハンドル値の内訳は以下のようになっていて
0〜15bit:ポインタ配列のインデックス値(0〜65535)
16〜26bit:ハンドル値が被るのを防ぐための値(0〜2047)
27〜30bit:ハンドルタイプ(0〜15)
31bit:エラーチェックビット( かならず0で、1であることはありえない )
「ハンドルタイプ」で何のハンドルかが判断できるようになっていますので、
// ハンドルタイプ定義
#define DX_HANDLETYPE_GRAPH (0x08000000) // グラフィックハンドル
#define DX_HANDLETYPE_SOUND (0x10000000) // サウンドハンドル
#define DX_HANDLETYPE_MOVIE (0x18000000) // ムービーハンドル
#define DX_HANDLETYPE_FONT (0x20000000) // フォントハンドル
#define DX_HANDLETYPE_2DSURFACE (0x28000000) // 2Dサーフェスハンドル
#define DX_HANDLETYPE_3DSURFACE (0x30000000) // 3Dサーフェスハンドル
#define DX_HANDLETYPE_SURFACE (0x38000000) // サーフェスハンドル
#define DX_HANDLETYPE_GMASK (0x40000000) // マスクハンドル
#define DX_HANDLETYPE_NETWORK (0x48000000) // ネットワークハンドル
#define DX_HANDLETYPE_KEYINPUT (0x50000000) // 文字列入力ハンドル
#define DX_HANDLETYPE_MUSIC (0x58000000) // ミュージックハンドル
#define DX_HANDLETYPE_LIGHT (0x60000000) // ライトハンドル
#define DX_HANDLETYPE_MODEL (0x68000000) // 3Dモデルハンドル
#define DX_HANDLETYPE_SOFTIMAGE (0x70000000) // ソフトウエアで扱うイメージハンドル
LoadGraph で得たハンドル値と CreateXRGB8ColorSoftImage で作成したハンドル値が一致するということは無いようになっています
|
Re: モデルハンドル ( No.5 ) |
- 名前:いっち 日時:2010/03/16 00:36
詳細な解説ありがとうございます。
ヘッダやソースを拝見して大体見当はついていたのですが、
これで安心してハンドルの管理が行えます。
(しかし、ハンドルタイプには意外と余裕が無いのですね)
|