トップページ > 過去ログ > 記事閲覧
グラフィックハンドルに直接画像を読み込む
名前:ふぉ 日時: 2008/12/08 17:06

別途アニメーション作成ソフトで作った連番画像をキャラクタのイメージに使用したいのですが、この連番画像をすべてビデオメモリ上に置くのは現実的ではありません。 そこでシステムメモリに読み込んでおき(大きい画像の場合はファイルから直接読み込み)、ビデオメモリに逐次書き込むという形をとりたいのですが、該当する関数が見当たりません。 DXライブラリでこのようなことは可能なのでしょうか? もし簡単な改造で済むのでしたらご教授ください。

Page: 1 |

Re: グラフィックハンドルに直接画像を読み込む ( No.1 )
名前:ふぉ 日時:2008/12/08 17:36

自動改行してくれないのですね、すいません。 ヘッダファイルを見たところ、ドキュメントに書いて ない関数を多数発見しました。 ドキュメントは最新ではないのですね。 システムメモリ→ビデオメモリ転送はコメントを見る 限りReCreateGraphFromSoftImageが使えそうですが、 ReCreateという命名からビデオメモリを再確保するよ うなニュアンスが 読み取れます。実際のところはどうなのでしょうか。 それと、画像ファイルからすでに確保してあるビデオ メモリに読み込むには、画像ファイルをメモリ上に読 み込んだ後ReCreateGraphFromMemしかないのでしょう か? ファイル名を直接指定できる関数はありませんか? (たいした手間ではないですが……)
Re: グラフィックハンドルに直接画像を読み込む ( No.2 )
名前:管理人 日時:2008/12/15 02:54

話が複雑になってしまうのでリファレンスでは画像を読み込むとVRAMに配置される、と書いていますが 現在DXライブラリでは通常の画像は Direct3D の管理テクスチャとして作成していますので、仮に連番画像を全て LoadGraph で読み込んでしまっても、描画される時まではシステムメモリ上に画像は保存されていると思います ( 管理テクスチャはVRAMにどのタイミングで転送するか、破棄するかは Direct3D 任せなので、VRAMが 一杯になったら使われていないテクスチャをVRAM上から解放する、といった処理を行っていると思われます ) 確実にシステムメモリに配置しておきたいということでしたら、既に発見されているようですが ReCreateGraphFromSoftImage を使用するのが最も効率的に既存の画像ハンドルに画像データを転送できます ReCreate と書かれていますが、内部では既存のテクスチャにイメージを転送するだけです、紛らわしくてすいません ただ、この方法は Direct3D の管理テクスチャシステムが行う「システムメモリ→VRAM」転送に比べて低速ですので リアルタイム性が問われる処理でしたら、連番画像が非常に多くグラフィックハンドルの有効数( 32768 )を無駄に 消費してしまいかねない、という程でなければ普通に全ての画像を画像ハンドルにしておいた方が良いと思います。 > 画像ファイルからすでに確保してあるビデオメモリに読み込むには 画像ファイルから既に作成してある画像ハンドルに読み込む場合は // 画像への画像データの読み込み int ReloadGraph( const char *FileName, int GrHandle ) ; があります( 第二引数に既存の画像ハンドルを渡します ) 宜しければお使い下さい m(_ _)m
Re: グラフィックハンドルに直接画像を読み込む ( No.3 )
名前:ふぉ 日時:2008/12/19 17:21

なるほど、わかりました。 関数の件も了解です。 ありがとうございました。

Page: 1 |