- 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/
- 49 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:14:35 ]
- > Microsoft DirectPlay は不適切となっており、新しいアプリケーションを開発する際それを
> 使わないことを、Microsoft は強く推奨します。その代わり、拡張された Microsoft Windows > ネットワーク テクノロジを、ゲーム開発者は使うべきです。 もうぶち切れですよ(サポートが)
- 50 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:26:46 ]
- >>41
レンダリングターゲット以外に 画面サイズのテクスチャを2枚用意する まず光跡以外の部分をレンダリングターゲットにレンダリングする (そのときのZバッファの値をつかって)←発光部分が常に見えているならいらない テクスチャ1に発光部分をレンダリングする テクスチャ1を適当に透明度上げてテクスチャ2にレンダリングする テクスチャ2をレンダリングターゲットに加算合成する テクスチャ1と2を入れ替える (つまり前回の発光部分に新しい発光部分を書き加える) 以下繰り返し
- 51 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 13:26:19 ]
- >>50
ありがとうございます。 自分でも調べた結果、サンプルでもその方法で光跡を描画していました。 自分がやりたかったのは発射された弾の後で跡を残しながら飛んでいくというやつなので その方法ではやりにくいです 2Dなら複数描画して先に描画したものを徐々に半透明にしていくことで 自分のやりたい感じのことができるんですが 3Dで描画(メッシュ)している場合でもそれと同じ方法でやれるものなんでしょうか?
- 52 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:51:20 ]
- むしろ2Dは3Dの一部だから基本的に2Dでやってることは3Dで出来る。
なんか変だな。 DirectXの場合、2Dは3Dを平面にしただけと言うべきか。
- 53 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 15:21:06 ]
- ミサイルの煙(曲がるレーザとか)なら、2Dなら平面で楽だけど3Dになると何故か筒状にする人がいたり。
別に3Dだからって煙も3Dにする必要は無く、 ビルボード(常にカメラのほうを向いている面)にして描画してやれば2Dと同じことが表現できる。 この方法だとカメラの目の前からミサイルが飛んでいくと煙が細い線になってしまうので、 ビルボードで描画された煙+それとは別の独立した煙を描画するなど対応する必要がある。 これができれば 3Dシューティングであればミサイルの数を多くして煙の数を増やす→1つのミサイルの煙を出来るだけ軽く ロケットの打ち上げを見せ場にしたい→描画する自体を煙の数を増やしてロケットから大量の煙を出しているように見せる など、あとは自分がしたいことに合わせて調節していけばいい。
- 54 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 15:54:32 ]
- 光跡と行っても具体的に何を描きたいのか、
3Dの軌跡データをどういうケースでどうレンダリングするか、紙の上で考えてみるといいかと。 俺も今からやるとこなんだけど(・∀・)アヒャ
- 55 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 20:27:43 ]
- なぜメッシュだとできないと思ったのかが不思議だ
- 56 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 21:35:01 ]
- >>53が言うような感じで面倒なケースがあるからだろ。
- 57 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 21:52:18 ]
- 慣れれば大したことじゃないけど、分からない状態で組み立てていくと難しく感じるかもね。
やってることはシンプルなんだけど。
- 58 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 21:57:09 ]
- メッシュビューアーで見ると普通なのにメッシュとして読み込んで動かしてみると暗いって言うのは
法線の入れ忘れなんですか? ライトをFALSEにすると若干明るくなりますが
- 59 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 21:59:52 ]
- そのぐらいデータを見れば分かるだろ。
- 60 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:06:56 ]
- どうやら法線がないようでした
法線を計算して入れるのってどういう風にやればいいんでしょうか?
- 61 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:09:46 ]
- 何らかのツール使ってるなら情報出されてないので答えようが無いのは承知の通り。
自分で入れるなら面に対して垂直方向に法泉を入れればいいだけ。
- 62 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:11:18 ]
- メタセコイア+RokDeBoneです
今まで作ったのは勝手に法線入ってあったのになぁ・・・
- 63 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:12:48 ]
- D3DXは使いたくないんですぅってこだわりがないなら
D3DXComputeNormals なんてのもある
- 64 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:16:38 ]
- あ、すいません
法線はXファイルのMeshNormalsっていうのですよね? これだとベクトルがたくさん書いてあるので法線は入っているみたいです
- 65 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:22:24 ]
- 解決しました
>DirectX9の固定機能パイプラインのデフォルト設定では、 >頂点ごとに色が設定されている場合は、それをディフューズ色として使用し、 >設定されていない場合は、代わりにマテリアル(D3DMATERIAL9)の色を使用するようになっています。 >頂点色がある場合に、あえてマテリアルの色を頂点色にしたい場合は以下のようにします。 >g_pd3dDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL ); これを適用したら、ちゃんと表示されました
- 66 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 22:23:23 ]
- データに入っているならプログラムが悪い
ファイルの読み込み ライトの設定 描画の方法 この辺をかいてみそ?
- 67 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 01:28:34 ]
- D3DXFONTなんですが、これで描画するとものすごく遅いですよね
これってDrawText関数を呼び出す回数を減らせばちょっとでも早くなりますか? たとえば m_pText->Draw( "あいうえお" ); m_pText->Draw( "かきくけこ" ); とするより m_pText->Draw( "あいうえおかきくけこ" ); とやった方が速度的には早いんですか?
- 68 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 01:57:23 ]
- >>67
それで速度アップは無理だろうな ロード字に使う文字だけ一文字ずつテクスチャに描き込んでおいて一気に描画しろ
- 69 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 08:14:16 ]
- >>67
DirectX9cのD3DXSPRITEを用いたD3DXFONT->DrawTextは 結構実用的な速度だったけど、それじゃ駄目なの? あと、必ず同じ文字を出すなら>>68の方法でやった方が早いよ。
- 70 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:45:30 ]
- >>69
DirectX10だとどうすればいいの?
- 71 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:54:46 ]
- >>70
コンシューマなら使う文字をテクスチャとして用意して使っている。 DirectXだからってわざわざWindows(IME)が用意しているものを使おうとしていること自体が変じゃないかな。 便利さを取って速度を捨てるか、面倒くさくても速度を取るかはその人次第だけど。
- 72 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 16:24:42 ]
- Direct3D9EX(Vista専用の拡張9)だとフォント用の1bitテクスチャがあった希ガス。
あとそれを使った描画メソッドも。
- 73 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 16:49:05 ]
- ・フォントのライセンスどうしよう
・解像度を可変させたいが、作り置きのフォントが伸びてぼけるのはみっともない気がする (個人製作なら)自前フォントを作るのが手間的に無理
- 74 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 16:54:40 ]
- >>71
フォントとIMEは何の関係もない。 変なのはお前の頭。
- 75 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:09:15 ]
- 2D で画面がスクロールする描画をするときは、Sprite で背景画像をスクロールする分ピクセルをずらすのですか?
- 76 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:25:41 ]
- テクスチャが小規模、例えばそのエリアでは1枚のテクスチャしか使わないのであれば
画面サイズのメッシュを用意してテクスチャ座標をずらすだけでも表現できる。 これの応用で2枚のメッシュを使うことにより複数のテクスチャに対応できる。 手段に正解は無いのでまず適当に作ってから自分の好きなように調整すればヨロシ
- 77 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:49:37 ]
- 背景を筒状にしてしまうのも手だな
- 78 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:55:25 ]
- それはD3DXCreateCylinderとかで作ってテクスチャを貼り付けるとゆう事ですか?
- 79 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 21:28:35 ]
- 方法は自由。
「〜ですか?」ではなくまずやってみろ。
- 80 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 22:18:16 ]
- なんでいちいちD3DXの機能が出てくるのか馬鹿の思考は理解できない。
- 81 名前:デフォルトの名無しさん [2007/09/16(日) 22:55:48 ]
- D3DPOOL_DEFAULTなテクスチャがロストしたかどうか
調べるにはどうしたらいい?
- 82 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:03:19 ]
- >>81
リソースが個別にロストするなんて事は無い。 デバイスがロストしたら再構築不可能なリソースは全て無効になる。
- 83 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:04:46 ]
- 東京から大阪まで行くのはどうすればいいか → 自分で決めろ
車の場合、高速道路を利用すべきかどうか → 自分で決めろ こんな感じの疑問を問いたい気持ちは分かるが、間違ってでも自分で判断してくれ 失敗は成功の元 プログラミングに関してはこの言葉が当てはまるから、無謀でもどんどん失敗して欲しい ・・・と思うのは俺だけでいい(´・ω・`)
- 84 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:06:42 ]
- お説教もいらないから。
- 85 名前:デフォルトの名無しさん [2007/09/16(日) 23:10:48 ]
- >>82
>>6は嘘?
- 86 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:11:21 ]
- >>83
はじめの5行が無かったら素晴らしいレスだったのに
- 87 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:28:43 ]
- >>85
大嘘
- 88 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 23:30:54 ]
- >>1-88は全部嘘
- 89 名前:デフォルトの名無しさん [2007/09/17(月) 00:00:31 ]
- おまえもうそかよ?
- 90 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 00:04:14 ]
- 何を信じて生きていけばいいの?
- 91 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 00:04:50 ]
- 信じる者は騙される
- 92 名前:デフォルトの名無しさん [2007/09/17(月) 00:13:18 ]
- >>88がしんじつであるとすると
>>1-88はぜんぶうそになる >>88はうそつきであるから >>1-88はしんじつに… もういいかんがえるのつかれた
- 93 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 00:15:09 ]
- 安物RPGのダンジョンの謎解きみたいだな
- 94 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 03:55:13 ]
- >>81
だから、デバイスがロストするときとリソースだけロストするときがあるの デバイスがロストするとリソースも死亡 リソースだけロストしたときはデバイスは生きてる
- 95 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 04:00:40 ]
- BBXで説明されてるな
bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=32&vew=15
- 96 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 07:43:20 ]
- >>94
リソースだけロストするなんて事はない。 嘘もいい加減にしろ。
- 97 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 09:22:03 ]
- ・実体験に基づき、リソースだけロストする状況に遭遇したことがない。
・DirectXの仕様から推測し、リソースだけロストする状況が想定できる。 という葛藤。 前者は、そう言えるほど十分に広い事例を試したのかという問題がある。
- 98 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 09:47:00 ]
- >>96
研究が足り無いな 普通に動かしてりゃ2つの動作があることに気がつくだろ普通 それと、BBXのmasaさんのレス読んだのか? 【こっから】 ちょっとややこしいのですが、 リソースを再作成する必要が生じるタイミングには、 大きく二種類の状態があります。 まず、テクスチャ/頂点バッファ/スワップチェーンなど、 アダプタ(ビデオカード)内の VRAM のみが破棄され、 D3D ランタイムの D3D デバイス管理は生きているというケース。 #極簡単に言えばウィザードで生成されたコードの #CD3DApplication::m_pd3dDevice ポインタが有効である時 ヘルプに書かれている「デバイスの消失」はこれです。 この場合、ハードウェア内の、つまり VRAM に置いたデータのみが消失しています。 #ウィンドウサイズの変更などで簡単に起こります。 もう一つは、D3D ランタイムの管理する D3D デバイス自体が 完全に破棄/再作成される場合です。 【ここまで】
- 99 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 10:04:57 ]
- >>98
デバイスがロストでデバイスのインタフェイス自体が使えなくなるわけじゃない。 勘違いも甚だしい。
- 100 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 10:23:10 ]
- >これは、モニタ解像度/色数の変更、フルスクリーン化など
>「ディスプレイの表示モードが変化した場合」や、 >HAL-->REF などのデバイスの切り替えで行われます。 これ大嘘だから。 実際に試してみれば分かるけど、手動管理のリソース開放とResetだけで動く。 デバイスインタフェイス自体を再作成する必用はない。
- 101 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 10:31:02 ]
- ウインドウモードとフルスクリーンの切り替えなんて、
パラメータを変えて普通にリセットすれば切り替わるだろ。 いちいちデバイスを作り直している奴の方が少ないと思うが。
- 102 名前:デフォルトの名無しさん [2007/09/17(月) 14:37:33 ]
- xファイルを他の形式、dxf・mqo・3dsとかメタセコイヤで読み込める形式に変換してくれるツールってないかなあ?
形状だけで良いんだけど YJPコンバーターって奴見つけたけど1600円もするから、なんかフリーであればいいな
- 103 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:48:10 ]
- メタセコで変換するんじゃだめなの?
何がしたいのかよく分からん
- 104 名前:デフォルトの名無しさん [2007/09/17(月) 14:49:52 ]
- xファイルしかないモデルがあって、メタセコじゃXファイルインポート出来ないだよね〜
- 105 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:22:53 ]
- 昔のDirectXにmemtime(.exe)ってツールが在ったらしいのですが、
どこかに落ちてませんか? く、くっください!!!!!
- 106 名前:デフォルトの名無しさん [2007/09/17(月) 16:48:21 ]
- ちょっとさがしてみるよ
- 107 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:55:02 ]
- DirectDraw絡みの、VRAM・システムメモリの組み合わせ毎の速度測定ツール
だった記憶がある。こんなの今更要るの?
- 108 名前:デフォルトの名無しさん [2007/09/17(月) 17:02:42 ]
- DXSDK3のbinにあったけどゆそうしゅだんは?
- 109 名前:107 mailto:sage [2007/09/17(月) 17:18:01 ]
- >>108 熱烈感謝
ココにアップお願いします。 www.uploda.net/18.php >>107 ココを見て興味わいたのです ttp://www.sun-inet.or.jp/~yaneurao/intensive/diw1.html
- 110 名前:デフォルトの名無しさん [2007/09/17(月) 17:35:48 ]
- >>109
けいたいからあっぷしてみるよ ちょっとまってて…
- 111 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:07:54 ]
- >>110
お願いします。
- 112 名前:デフォルトの名無しさん [2007/09/17(月) 18:10:59 ]
- >>111
あっぷできたよかくにんよろしく ud.gs/409cx ぱすはふぁいるめい かくちょうしはてきすとになっているから きおつけてねw
- 113 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:36:35 ]
- >>112
熱烈感謝です。無事ダウンロードできました。有難うございました。 ぺコリ、ペコリ、ペコリ
- 114 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 19:31:17 ]
- >>99-101
は?何が言いたいの? デバイスのロストはその2種類でいいでしょ?
- 115 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 22:58:30 ]
- 馬鹿の書いた掲示板の書き込みを馬鹿が信じる典型的な例だな。
- 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
|

|