トップページ > 記事閲覧
LoadDivGraphなどについて
名前:たろう 日時: 2017/09/07 14:35

いつもすみません、たろうです。また質問させて下さい @ 最大テクスチャサイズが 16384ピクセル x 16384ピクセル のパソコンで作っているのですが 16384以上のサイズの画像(16896x960)もLoadDivGraphで分割すると読み込めてしまいます これは偶然運良く読み込めているのか、それとも 分割後の画像が最大テクスチャサイズより小さければ問題ないという事なのでしょうか? 運が良いだけであれば、環境によっては危険なので避けようかと思います A 画像を読み込んでDerivationGraphで分割した画像を他の変数に格納してそのあと 元画像を削除してしまっても、分割した画像は使えてしまっているのですが リファレンスに「抜き出し元となる SrcGraphHandle が示しているグラフィックと共有します」 とあるので念のため削除しないほうが良いのでしょうか? よろしくお願いいたします。
メンテ

Page: 1 |

Re: LoadDivGraphなどについて ( No.1 )
名前:管理人 日時:2017/09/09 16:41

> @ DXライブラリはグラフィックスデバイスが対応している最大テクスチャサイズよりも大きな画像が 読み込まれた場合は複数のテクスチャを使用して一つの画像を管理するようになっていますので、 最大テクスチャサイズ以上の画像も読み込むことができます ただ、SetDrawMode( DX_DRAWMODE_BILINEAR ) ; を設定して拡大描画した場合に テクスチャとテクスチャの境目が目立ってしまったり、DrawPolygon3D などのポリゴンに貼り付けるテクスチャとしては 正常に機能しなかったりと制約もあるので、なるべく最大テクスチャサイズを超えないようにした方が良いです > A DerivationGraph で抜き出したグラフィックハンドルが一つでも残っていれば抜き出し元のグラフィックハンドルを 削除しても抜き出したグラフィックハンドルが無効になることはありません イメージとしては『抜き出したグラフィックハンドルが子で抜き出し元のグラフィックハンドルの親』というようなものではなく、 同じ画像データを使用する兄弟のような関係なので、どちらかが残っていれば画像データが無くなる事はありません > リファレンスに「抜き出し元となる SrcGraphHandle が示しているグラフィックと共有します」 > とあるので念のため削除しないほうが良いのでしょうか? いえ、抜き出し元のグラフィックハンドルに特別な意味はないので、抜き出し後に抜き出し元の グラフィックハンドルを使用する予定が無いのでしたら、抜き出しが終わった時点で抜き出し元の グラフィックハンドルを削除した方が良いです( 使用しないグラフィックハンドルがあるのはごく僅かですが リソースの無駄となりますので… )
メンテ
Re: LoadDivGraphなどについて ( No.2 )
名前:たろう 日時:2017/09/09 23:36

いつもすみません、たろうです。 ご返信ありがとうございます。 @についてですが、例えば(16896x960)の画像を LoadDivGraphdeで読み込んだ場合、使用する画像が(8448x960)で切り抜かれていても あくまで(16896x960)の画像として内部で処理されていて (8448x960)の画像2個をLoadGraphで読み込んだ場合よりもDrawGraphなどで使用する場合に 処理がおそくなったりするということでしょうか? つまり、 LoadDivGraphdeで読み込むと処理がやや早くなるというように何処かでみた記憶があるのですが そういうメリットよりも、元画像が最大テクスチャサイズを超えてしまっている場合は、 分割前の画像が大きいことのデメリットのほうが大きいという事になるでしょうか? (※境目が目立つ事がある点とDrawPolygon3Dでの問題を無視した場合) 繰り返すようですみません、よろしくお願いいたしますm(_ _)m
メンテ
Re: LoadDivGraphなどについて ( No.3 )
名前:管理人 日時:2017/09/10 23:03

『LoadDivGraph で画像を読み込むと描画が速くなる』の理由は 『DXライブラリ内部で行う Direct3D への「使用テクスチャの切り替え」の操作回数が減る』からなので ( LoadDivGraph で読み込まれた画像は各グラフィックハンドルが使用するテクスチャの領域は違えど、  使用するテクスチャは最大テクスチャサイズに収まっている限り一つで済むので ) お察しの通り元画像が最大テクスチャサイズを超えてしまっている場合は複数のテクスチャに分かれるので LoadDivGraph で読み込んだグラフィックハンドルを使用しても『使用するテクスチャの切り替え』が 発生する可能性が高くなり『LoadDivGraph で画像を読み込むと描画が速くなる』の効果は薄くなります 『LoadDivGraph で画像を読み込むと描画が速くなる』は、要は 『同じテクスチャを使用するグラフィックハンドルを連続で使用して描画すると速い』なので 描画順序を制御できるのでしたら『最大テクスチャサイズを超える元画像を LoadDivGraph で読み込んだ グラフィックハンドルを使用する』より『(8448x960)の画像2個( 画像A, 画像B とします )をLoadDivGraphで 読み込んで( 若しくは LoadGraph + DerivationGraph で分割して )画像Aを使用する描画を連続して行い、 その後画像Bを使用する描画を連続して行う』方が描画速度は速くなります
メンテ
Re: LoadDivGraphなどについて ( No.4 )
名前:たろう(解決) 日時:2017/09/11 02:51

ありがとうございます。たろうです 実は最近、最大テクスチャサイズを越える画像をmakescreenで作り出す処理をうっかりしてしまい、 メモリリークだと思いますがPCをフリーズさせてしまいました。 最大テクスチャサイズは使うPCによって異なるので 理解が足りないと危険なプログラムを組んでしまっている可能性もあるぞということで 色々質問させていただきました。 最大テクスチャサイズを越える画像をLoadDivGraphで使う分には それほどの危険性はないかわりに速度は遅くなるということですね (※もし間違いがありましたらご指摘いただけると助かります) いろいろ教えて頂きありがとうございましたm(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存