[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/06 18:57 / Filesize : 237 KB / Number-of Response : 929
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】 DirectX初心者質問スレ Part14 【C】



1 名前:デフォルトの名無しさん [2007/09/08(土) 22:21:46 ]
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part13 【C】
pc11.2ch.net/test/read.cgi/tech/1182351826/

116 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:38:37 ]
>>115
masaさんはダブルスティールの人だよ
デバイスロストが2種類あるっての正しいでしょ?
俺もこの辺すげー苦労した覚えあるし

D3DDeviceを各オブジェクトで保持する組み方してたから
そこの辺軒並み組み直しになった希ガス

このときはじめてポインタ保持はグローバル変数と同じぐらいの大罪だと知って死んだw

117 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:48:05 ]
>>116
BBX見てる奴でMasaを知らない人間は少数だと思うが、
誰々が言ってることなんだから正しい、とかそういう考えはよくないぞ

118 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:49:36 ]
デタラメをここまで盲目的に信じるとはもやは救いようがない。

119 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:09:30 ]
>>117
いや、だから、馬鹿じゃないってただそんだけだよ
だれにだって間違いはあるだろうし、別に盲信してるわけじゃないよ

>>118
だから何が間違ってるっていいたいの?
デバイスロストが2パターンあるところはいいんだよね?

120 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:17:16 ]
>デバイスロストが2パターンあるところはいいんだよね?
全然良くない。
馬鹿を盲信する一方、その他の人間の話を全く聞かないな。

121 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:19:09 ]
だれか正解をまとめてくれ

それか住民全員を納得させられるような攻撃力のあるリソースを提示してくれ

122 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:28:07 ]
>>120
え?詳細まで書けよ

D3DDeviceの指す先が変わってることってあるよな?
これは確実にあるよな?
なぜなら、俺が各オブジェクトに保持してほぼ全ソース修正する原因がこの出来事だから覚えてる
この件があって以来、ポインタ保持は絶対にしないと心に決めた出来事がこれだからだ

っつーことはデバイスが生きてて、リソースが死ぬって状況がないって言ってる?

123 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:29:35 ]
>>119
自らがReleaseして使えなくしているのを、パターンの一つに含めている時点でおかしい。
デバイスのインタフェイスを開放することをデバイスロストとは言わない。

あとは>>6
>Aの場合の対処はD3DDeviceは生きているので死んだリソースだけチェックして
>死んだリソースのみ復旧作業を行う
そもそもロストの原因を知る術も、個別にどのリソースが使用不能なのか確認するAPIも存在しない。
チェックできないのにどうやって特定のリソースのみ復旧できるんだ?

124 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:31:37 ]
>>121
俺のソースはそのBBXのしかない

デバイスロストは2種類あると思った
で、俺が対応したのは2種類ともD3DDeviceを作り直して解決する方法
つまり、デバイスが破棄されても、リソースだけ死んでも、
デバイスまで一度破棄して、デバイスから作り直す方法
昔のソースだけど製品として出荷したのはそういうコメントになってるし



125 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:32:05 ]
>>122
肝心の「なぜなら」の説明が、「〜心に決めた出来事がこれだから」てwww
自分の体験談かよwwww

126 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:34:10 ]
IDirect3DDevice9とそれ以前で違うって可能性ない?
だとしたらここまでみんなの記憶が混乱してるのも頷けるんだけど。

127 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:37:10 ]
>>123
>そもそもロストの原因を知る術も、個別にどのリソースが使用不能なのか確認するAPIも存在しない。
>チェックできないのにどうやって特定のリソースのみ復旧できるんだ?
実は俺のとった対応方法はデバイスを作り変えるっていう2つの方法に対応できる方法だけなので
各リソースの有無を判別して復旧させることはしてないから
各リソースごと判別っていうのは俺はやってないからそこは嘘なのかも

覚えてるのはりソースだけ死んで(一部か全部かは知らない)デバイスが生きている場合と
デバイスからまるごと死ぬ場合があるってところだけ
各リソースがってところにひっかかってるなら俺の嘘かもしれないので気にしなくていいス

128 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:38:45 ]
>D3DDeviceの指す先が変わってることってあるよな?
意味不明


129 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:40:41 ]
>>126
この方式になったのは8からで、デバイスロストの仕様はそこから変わっていない。

130 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:41:21 ]
>>126
POOL_MANAGEDを設定することで確実に死ななくなってる可能性はあるね
だから、デバイスが死んだときだけ気にすればいいっていう

SDKのサンプルが復旧時にPOOL_MANAGEDであるかどうかしか見てないから
もしかしたらデバイスが死んだときしか気にしなくていいのかもね

131 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:42:56 ]
>>129
仕様はそうかもしれないけど挙動もそうなのかな?
なんかやけにSDKのサンプルがしつこく死なない気がするんだけど
前は解像度切り替えするだけで真っ黒だった希ガス

132 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:43:53 ]
デバイスロストしてもデバイスインタフェイスが使えなくなることも死ぬこともない。
そもそもインタフェイスが死んだらロストしたことを知ることも出来ないし、
メンバを呼び出した時点で例外を出してアプリが落ちる。

133 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:54:56 ]
>>132
あー、そうだ
俺がアフォでした

D3DDeviceを捨てて作り直してるのは俺なのなw
でも、D3DDeviceが死んだら作り直すしかないから、
結果各オブジェクトでD3DDeviceを保持してると困るってことで
別にD3DDeviceが違うもんになるわけじゃないのなw

すいませんでした

134 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 00:57:04 ]
どうしようもないオチが…



135 名前:デフォルトの名無しさん [2007/09/18(火) 01:01:21 ]
>>121
一応まとめてみたんで貼る。なんかもう解決しちゃってるぽいんで無視してくれ。


例のBBXのMasaの投稿を読み直してみたけど、彼は別に間違ったことは言っていない。

彼が言っているのは、あくまで「リソースを再作成する必要が生じるタイミング」が二種類ある、
ってことだけ。つまり、
1) デバイスがロストした時
2) プログラマが意図的にデバイスを開放した時
だと言っている。

問題なのは、この記述を「ロストが二種類ある」と誤って解釈してしまっている一部のスレ住人だ。
何故か、上の1)2)を「リソースのロスト」と「デバイスのロスト」などと区別してしまっているようだ。

DirectXのヘルプで書かれている「デバイス消失時の〜」ってのは要するに 1) の状態のことだ。
2) の状態のことを、ロストだとか消失だとか普通は言わない。

さらに混乱の元となっているのは、上のBBXのスレッドが、DirectXのサンプルフレームワークを
前提にした議論になってること。
本来ならプログラマが明示的にデバイスを開放しない限り 2) は起こりえないのだが、
サンプルフレームワークではHAL→HELの切り替えなどのタイミングでこれを内部で自動的に
行っているらしく、一部の住人がこれを
「もう一つのロスト状態」だとか「デバイスの指す先は勝手に変わることがあるよな?」
などと勘違いしている、という訳だ。

136 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:05:57 ]
>>135
なんかよくわかんね

状態だけでいうと
テクスチャのデータが吹っ飛んで一部のオブジェクトが黒くなっちゃうときと
Presentの関数が失敗するときってのは同じ現象でいいわけ?

137 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:11:41 ]
>>129

確かにD3D8からっぽいね。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndrive/htm/directx12192000.asp

>デバイスを処理状態に戻せない場合、アプリケーションはデバイスが元に戻るまで待機します。
>この場合、アプリケーションは IDirect3DDevice8::Resetを使用して、デバイス リソースをすべて削除し、
>デバイスを破棄する必要があります。
>その後、初期化の場合と同じように IDirect3DDevice8::CreateDevice を使用してデバイスを
>再作成する必要があります。
>アプリケーションを開発する場合は、デバイスの消失に対応するために 1 つのコード パスで
>アプリケーションを開発することをお勧めします。このコード パスは、
>起動時のデバイスの初期化に使用されるコード パスとほぼ同じになります。

しかし微妙に意味不明だなこれ。
どうせしばらくResetできなさそうなら、
いったん管理リソースも解放してメモリ節約しようって意味かいな?

ただそのちょっとあとにこういう一文も。

>デバイスをリセットできず、廃棄してから再作成する必要がある場合は、
>リソースもすべて再作成する必要があります。

問題はどういう場合にその「必要」があるか、か。

138 名前:137 mailto:sage [2007/09/18(火) 01:21:18 ]
あーもしかしてこういうことか。

(1)フルスクリーンでアプリケーションを作る。
(2)Alt+TABをフォーカスを失わせる
(3)この時点でIDirect3DDevice9::TestCooperativeLevelはD3DERR_DEVICELOSTを返す。

問題はここから。
IDirect3DDevice9::Resetを使えば確かにフルスクリーンからウィンドウモードに
デバイス再構築無しでモード変更は可能。
が、TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すまではResetは呼べない。

つまり、いったんAlt+TABでフォーカスを再取得できれば
D3DERR_DEVICENOTRESET→Reset→ウィンドウモード、のコンボが使えるけど、
フォーカスを得ないままウィンドウモードに変更しようと思ったら
いったんデバイスを破棄しないとダメぽと。

どう?

139 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:35:52 ]
>>138
んなこと誰も議論してないんだが。
一人で勝手に議題をすり替えといてどう?なんて言われてもなあ

ちなみに>>137の"必要"ってのは日本語版では訳がいまいちで分かりづらいが、
単にD3DPOOL_DEFAULTなリソースのことを言っている

140 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:37:52 ]
>>139
んじゃとりあえず>>101へのレスってことにしといてちょ。

141 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:43:32 ]
亀レス乙
ところで>>6とか>>114は同一人物なのかね?

142 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:44:43 ]
>>141
そうですよ

143 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:50:38 ]
>>6>>114
ネ申

144 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:12:58 ]
TestCooperativeLevelがD3DERR_DEVICENOTRESETを返すときって言うのはGPU側のコンテキストが無効になっている。
ちなみに、GPU側のコンテキストってのはVRAM上のリソース等(DEFAULTのリソースと考えて構わない)。
ただし、ランタイムがCPU側に対応するコンテキストを持っているから、これをReset()のまえに開放してあげなくてはいけない。

で、Reset()が失敗する場合は、ランタイム側がデバイスコンテキストすらも無効化してしまっている場合。
この場合はランタイムが全てを諦めてしまっているのでCPU側のリソース(MANAGED、SYSTEMMEM、SCRATCH)も全て無効化されてしまっている。
よって、全てを開放し、参照カウントを元に戻して、デバイスの削除を行い、全てを新デバイスから再初期化しないといけない。

つまり2段階って言うのは、最初がGPU側、次がCPU側って事。




145 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:42:22 ]
>>144
つまりReset()が失敗する場合は、MANAGED、SYSTEMMEM、SCRATCH全部アウトで、
>>139の「単にD3DPOOL_DEFAULTなリソースのことを言っている」ってのは誤読ってこと?

146 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:59:10 ]
亀レスついでに。>>100

HALからREFへの変更はD3DDEVTYPE変えないといけないんで
Resetじゃ無理だけよ。

>>100が抜き出したところだけ見るとできてしまうように見えるので
誤解する人が出てこないよう一応指摘しとく。

あとはBehaviorFlagsの変更もResetじゃ無理か。
ロストと関係なくてスマソ。

147 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 05:14:53 ]
たかがデバイスロストの対応だけでこの有様。
Windowsは腐ったジャムみたいだな。

148 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 06:24:12 ]
ここでDirectXにドップリ漬かっている俺が登場。

普通に使っている分には、D3DDeviceが使えなくなることは無いが
アプリケーション実行中にnViewのモードを切り替えるような無茶な
ことをしたら、Resetではどうしようもなくなった。

あと試してはいないが、プライマリモニタの切り替えとか、無効化も
駄目っぽい気がする。物理的に別のビデオカードにプライマリが
移ることもあるしね。

149 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 06:52:48 ]
POOL_MANAGEDなんてあんなメモリばかすか食った挙句
失敗してるんじゃ世話ねぇよこいつって感じ
結局、POOL_DEFAULTにして何かあったらD3DDeviceから作り直しするのが
一番楽だしコスト的にいいってのが昔の俺の結論だった・・・っぽい?w

150 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:43:04 ]
POOL_MANAGEDは内部的に転送にUpdateSurfaceに相当する機能が使えそうなんだけど
そうなるとPOOL_DEFAULTに比べてCPUパフォーマンスが良くなるんじゃない?

151 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 10:53:05 ]
パフォーマンス重視で動的に更新するのが前提ならAGPメモリ上に置くのが常識なのに、
試しもしないで>>150みたいな適当なことをほざく馬鹿はなんとかなんとかならんのか?

152 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 11:02:43 ]
2chに厳正な書き込みを期待する馬鹿もなんとかならんかな。

153 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 11:24:31 ]
ドキュメント見てないけど、
D3DPOOL_MANAGEDってD3D10じゃないよね?
10からはデバイスロストしないから

154 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 12:43:21 ]
まだいじってないけど
10ならデバイスロストしなくなった?



155 名前:デフォルトの名無しさん [2007/09/18(火) 14:26:53 ]
画面の描画をウィンドウの範囲をしてしてする方法はありますか?
たとえば、1つのウィンドウの半分だけに3Dの画面を表示して、
片方の画面は文字入力用のテキストエディタのようにするような。

156 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:08:08 ]
10どころか9Exから簡単にはデバイスロストしなくなった。
もちろん無茶すればロストするよ。
例えばアプリ実行中にドライバーをアップデートするとか。

>>150
それ完璧に考え方が逝ってるから勉強し直しといで。


157 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:21:53 ]
>>156
いい加減無責任な発言は控えろよな。

158 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:29:04 ]
>アプリ実行中にドライバーをアップデートするとか。
>アプリ実行中にドライバーをアップデートするとか。
>アプリ実行中にドライバーをアップデートするとか。

159 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:11:03 ]
>>157
極論だが、至って分かりやすくて自分のアプリでもデバイスロストをテストするときに
デバイスマネージャーからドライバーを無効にしたりしてせめてエラー処理をテストするのは当然だけどな。


160 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:13:20 ]
今日のお題はドライバーのアップデートとデバイスロストの関係についてw

161 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:16:33 ]
>>159は本物のプログラマ

162 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:28:52 ]
いや本物じゃなくても普通それくらいはするだろ?
ドライバーを無効にする、ハードウェアアクセラレーションを切る、くらいは
やってテストしとかないと怖くて公開できないよ。

流石に実行中にドライバを更新するなんてテストはしたことないけどな

163 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:36:26 ]
どうやら真性です。本当にあり(ry

164 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:49:13 ]
真性だな



165 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:50:55 ]
>>162
ドライバーを更新するのとドライバーを無効にするってのは実行中のアプリからすると同じ意味だよ。
XPしか使っていないなら分からないかもしれないが、Vistaだとリブートなしでドライバー更新できるから、
更新するとまずはじめに現在のドライバーが無効化された後、アンインストールされ、その後新しいドライバーがインストールされる。


166 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:00:51 ]
>>156
>>165

これね。

ttp://www.microsoft.com/japan/msdn/windowsvista/general/AppComp.aspx#appcomp_topic17
>再起動なしのドライバ アップグレード

VistaではDirect3D描画アプリが大幅に増えた。
DWMは実質フルスクリーンアプリ相当だし
WPFアプリもオフスクリーンサーフェイスにD3D9Exで描画してる。

再起動なしのドライバアップグレードを実現するためには、
ドライバが対応することも当然ながら
D3Dを使うアプリがDevice Removedからの復帰コードを持つことも重要。

そこの対応が甘いと、Windows Updateを実行したらアプリが落ちたって羽目になる。

167 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:11:25 ]
そうだな5分に10回はWindowsUpdateするからな。
必要だな。

168 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:29:27 ]
>>166
フルスクリーンアプリが起動したり、リモートデスクトップで接続されたりしてもデバイスロストしたかも。


169 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:29:54 ]
どうせデバイスロストなんて頻繁に起こるものではないのだから、
残存リソースの再利用に拘るほどのものじゃないだろ。貧乏臭すぎ。

ってかこの話は >>81 が発端てことで良いんだよね?

170 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:55:56 ]
次はスマートポインタの是非を語ろうぜwww

171 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:03:56 ]
>>170 (゚∀゚)カエレ!

172 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:11:09 ]
この仕様だとPOOL_MANAGEDがなんのためにあるのか謎

173 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:27:01 ]
これだけは言える。管理を放棄してスマートポインタで逃げる事ばかり
考える奴は脳の病気。確実に逝っちゃってる人間の考え。

174 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:34:19 ]
>>173
実際すさまじいバグり方するよなw
メモリの解放忘れだけにしとけって感じだ



175 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:48:36 ]
test

176 名前:81 mailto:sage [2007/09/18(火) 21:50:01 ]
おお、やっと書き込めた。規制の巻き添え食らってた。
俺の最初のレスからここまで議論になるとは思わなかった。
正直レベル高すぎてついていける気がしないw

177 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:55:24 ]
しょーもない口論だからついていかなくていいよ。
質問に対する正解は>>6です。

178 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:00:34 ]
>>1-177
お前らはデバイスロストの話をいちいち蒸し返さないと死ぬ呪いにでもかかっているのか?

179 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:04:43 ]
>>178
なんで俺まで捲き込んでんだよ
俺をデバイスロスト厨と一緒にすんな

180 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:06:04 ]
>>177
少しは面白いネタを用意しろよ。
それじゃ外しまくり。

181 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:08:38 ]
>>180
ごめん、再挑戦してみる。

182 名前:81 mailto:sage [2007/09/18(火) 22:24:55 ]
ちなみに>>5も俺だ。

183 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:29:03 ]
>>182
さんざん考えてそれかよ
やっぱりだめ。つかさらに外してる。

184 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:34:26 ]
つかさちゃんとちゅっちゅしたいよ〜



185 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:37:42 ]
ばるさばるさばるさばるさみこみこす〜

186 名前:デフォルトの名無しさん [2007/09/18(火) 22:38:44 ]
>>178
>>105-113

187 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:03:56 ]
>>183
俺は>>177じゃないぞw

188 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:24:52 ]
俺って誰だよ

189 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:37:03 ]
>>188
   _ _
  ( ゚∀゚)
  (  ∩ミ  オレオレ
   | ωつ,゙
   し ⌒J


190 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:41:35 ]
>>177
正しくは>144だろ。>6もよく読むとなんか変。


191 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:10:27 ]
>>190
どこが変か書けよ

192 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:13:23 ]
とりあえず簡易的対策でかつ商品レベルで出すにはリソースはすべてPOOL_DEFAULTで作っておいて
なんか起きたらD3DDeviceから作り直すってことでFA?

193 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:14:49 ]
>>191
>>85

194 名前:デフォルトの名無しさん [2007/09/19(水) 01:43:22 ]
NowLoadingという画面をアニメーション使って描画している時に
マルチスレッドを使ってタイトル画面とかのシーン(クラス)を読み込ませるようにしたんですが、
プログラムを起動すると問題なく動作する時もあれば、頂点バッファやテクスチャの
読み込みが失敗して時々おかしくなってしまいます・・・

マルチスレッドを使わなければ読み込みも正常終了して問題なく動くので
明らかにそのロード用のスレッドで何かやらかしていると思うのですが、
何回かに1回起こるという現象なので原因が分かりませんorz

pD3DDevice->CreateVertexBuffer( 4*sizeof(VERTEX2D), D3DUSAGE_WRITEONLY,VERTEX2D_FVF, D3DPOOL_MANAGED,&pBuffer, NULL);
D3DXCreateTextureFromFileEx(pDevice, filename, 0, 0, 0, 0, D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_FILTER_NONE,D3DX_DEFAULT,0xff00ff00,NULL,NULL,&pTexture);

この関数がおかしな動作をしてるっぽいです。
D3DXCreateTextureFromFileExが時々E_OUTOFMEMORYを返して来ます。
↑と同じ関数で使って他のバッファやテクスチャをずらずらと作成してるんですが、正常に終了したヤツとそうでないのが
あってますます意味が分かりません・・・


どなたかヒント下さいorz



195 名前:194 [2007/09/19(水) 01:50:04 ]
ロード用スレッド内部では、

if(scenetitle == NULL)
{
scenetitle = new SceneTitle;
scenetitle->Create(pD3DDevice);
}

こんなのがずらずらと書き並べてあるだけです。


/* ロード用スレッド シーン作成 */
hThread = (HANDLE)_beginthreadex(NULL, 0, CreateScene, NULL, 0, &dwThreadId);

この後すぐ、
Sleep(1300);
を追加するとどうやらこのバグ起きないようです。
でもこれをするとNowLoadingの意味がないんです・・・(´・ω・`)

196 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:55:34 ]
デバイス作成する時に
D3DCREATE_MULTITHREADED
とか要るんじゃなかったっけ

今はいらないのかな

197 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:04:43 ]
>>166
お前さん見事なもんだな。
俺なら「ドライバ更新する場合はアプリを一度終了してください」という文章で終わらす
そうしないとロストでアプリサスペンド(と書いてもいい?)したとき、
更新前と更新後の挙動が変わった場合のことまで追いかけなくてはならなくなる。

D3D10だとある程度ルールはあるんだろうが、そこまでするのはお断り

198 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:07:08 ]
>>196
そのフラグは単なるヒント。
そのフラゲで環境によっては何かが変わるかもしれんし、変わらなくても文句は言えない。

199 名前:194 mailto:sage [2007/09/19(水) 02:29:17 ]
>>196
ちょおおおおおおおお!!
そのフラグ1つで全てが解決しました。

デバイス作成の辺りはコピペ以降全然かまってなかったので盲点でした。
こんなに早く的確なヒントありがとう!!

200 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 06:43:26 ]
>>193
だからどこが?

201 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 07:53:44 ]
>>192
俺は作り直すにしても、POOL_MANAGEDがいいかなと思う。
UMAやTurboCacheまで考慮したテクスチャマネージメントは難しいし、
最近の先読みレンダリングならドライバの方がプログラマよりも正確に
テクスチャの使われ方を把握することが可能だから、VRAMのやりくりは
任せてしまった方が良いんじゃないかな。

202 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 08:32:41 ]
>>201
その問題より単純にメモリを食うことで遅くなってる場合のほうが多いっぽい
それと全部システムメモリにとっておくってのは個人的にやりすぎだと思うし思想に賛同できない
んで重要なデバイスロストに関しては対応できてないとかいうマヌケっぷり
こんなもんいらんわw

203 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 09:18:23 ]
xfileの仕様が詳しく書いてあるサイトってありますか?


204 名前:デフォルトの名無しさん [2007/09/19(水) 10:12:04 ]
「シェーダー」の定義がよくわかりません
狭義では陰影を計算してテクスチャーを擬似立体化するらしいですが、
色々と読んでみれば別のこともできるみたいです。
(というか法線マップが使われるようになったのは近年になってからのはず)
頂点シェーダーは別にポリゴン数(頂点数)を出すために活動するわけでも、
ピクセルシェーダーはテクスチャー情報を扱うわけでもないんですよね?

具体的にシェーダー(ストリーミングプロセッサ)は何をするんですか?



205 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:16:09 ]
テクスチャがシステムメモリから直接表示されるらしいw

206 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:45:27 ]
>>200
>>135

207 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:49:00 ]
>>203
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/graphics/reference/xfile/xfilereference.asp

>>204
実際に使ってみればわかるだろ

208 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 10:50:26 ]
こっちだった
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/graphics/reference/fileformat/xfileformat.asp

209 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 11:10:18 ]
>>204
いままで固定機能パイプラインで
半ば自動的に処理されていた部分をある程度自由に
プログラムできるように(又はプログラムしなくてはいけなく)なった

頂点シェーダでは
頂点データを2D画面に表示できるようになるまでの
座標変換とライティングまでを行い
ピクセルシェーダーでは
頂点シェーダから渡された頂点データを元に
ポリゴンをピクセル単位に分解して
最終的に描画される色を決定する

210 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 11:39:26 ]
>>207
ありがとうございmす


211 名前:デフォルトの名無しさん [2007/09/19(水) 12:53:17 ]
>>135は普通に嘘っぱちだろ

212 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 12:56:08 ]
>>211は大嘘

213 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 14:25:52 ]
>>213は嘘

214 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 15:00:53 ]
>>92に戻る



215 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:10:33 ]
いちいち蒸し返す意味がわからん

216 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:11:41 ]
デバイスロスト厨は>>133で懲りて降参したんじゃないの?
まだ仲間がいるわけ?

ロストは2種類あるだの、これは嘘あれは嘘だの、いい加減うざいんだが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<237KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef