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

このエントリーをはてなブックマークに追加
874デフォルトの名無しさん
はじめまして、DirectXの参考書のサンプルコードを入力して、動作確認行っています。

ビルドはできるのですが、実行時エラーが出て動作しません。

サンプルは以下の部分でエラーでとまります。原因は何が考えられるでしょうか?
875デフォルトの名無しさん:2009/10/21(水) 16:36:58
エラーは?
876874:2009/10/21(水) 16:36:59
// ビューイング行列の初期化
D3DXMatrixIdentity(&m_view);
D3DXMatrixLookAtLH(&m_view,
&D3DXVECTOR3( 0.0f, 0.0f, -6.0f),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f));

// シェーダプログラムの読み込みとコンパイル
LPD3DXBUFFER errors = 0;
D3DXCreateEffectFromFile(pD3DDevice, TEXT("basic.fx"), 0, 0, D3DXSHADER_DEBUG, 0, &m_pFX, &errors);
if( errors){
return E_FAIL;
}
// シェーダプログラムへテクニックへのハンドルの取得
m_hTech = m_pFX->GetTechniqueByName("BasicTech"); ここで止まる!

// シェーダープログラムのグローバル変数のハンドルの取得
m_hWvp = m_pFX->GetParameterByName(0, "g_wvp");
m_hColor = m_pFX->GetParameterByName(0, "g_color");

return S_OK;
-------------------------------------------------------------------
デバッガ出力
D3DFWSample.exe の 0x00a02311 で初回の例外が発生しました: 0xC0000005:
場所 0x00000000 を読み込み中にアクセス違反が発生しました。
D3DFWSample.exe の 0x00a02311 でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
877デフォルトの名無しさん:2009/10/21(水) 16:40:29
シェーダー側のプログラムにミスがあるんじゃないの?
fxc.exeで試してみろ
878874:2009/10/21(水) 16:59:15
fxc.exeの使い方はわかったのですが、HLSLファイルとはそのファイルでしょうか?
それらしきファイルとして、下記コードでbasic.fxというファイルがあるのですが、
これでしょうか?

879デフォルトの名無しさん:2009/10/21(水) 17:05:06
>>876
「0x00000000 を読み込み中」ってことはm_pFXがNULLになってるっぽいね。
D3DXCreateEffectFromFileは本当に成功してるのか?
errorsじゃなくて戻り値のHRESULTも見たほうがいいと思うよ。
880デフォルトの名無しさん:2009/10/21(水) 17:07:32
// グローバル変数
float4x4 g_wvp;
float4 g_color;

// 頂点シェーダ
void BasicVS( float3 in_pos : POSITION,
out float4 out_pos : POSITION,
out float4 out_color :COLOR0)
{
// 座標変換
out_pos = mul(float4(in_pos, 1.0f), g_wvp);
// 頂点の色の決定
out_color = g_color;
}
// ピクセルシェーダ
void BasicPS(float4 in_color : COLOR0,
out float4 out_color : COLOR0)
{
// 入力された色情報をそのまま設定
out_color = in_color;
}
// テクニック宣言
technique BasicTech
{
pass P0
{
vertexShader = compile vs_3_0 BasicVS();
pixelShader = compile ps_3_0 BasicPS();
}
}
881デフォルトの名無しさん:2009/10/21(水) 17:08:10
ぬるぽ
882874:2009/10/21(水) 17:20:22
>>881
サンプルプログラムを入力して、ビルド、実行させているだけで、
中身はあまりよくわからないです。

具体的に原因を指摘をお願いします。
883デフォルトの名無しさん:2009/10/21(水) 17:35:34
そのサンプルをうpするか書いた本人人に聞けよ
884デフォルトの名無しさん:2009/10/21(水) 17:37:36
>>882
どれを聞いてるのかな。
>>880はHLSLだよ。
basic.fxは実行時どこに置いてる?
885デフォルトの名無しさん:2009/10/21(水) 17:39:08
>>874
その動かないサンプルコードとやらをこの場ではお前しか持ってないのに
その挙動を人に尋ねるというのか?

そんなコンセンサスが得たいなら聖書でも読んでろ。

助言を得たいなら助言が得られるだけの詳しい情報を書け。
886デフォルトの名無しさん:2009/10/21(水) 18:53:41
単純にfxファイルの置き場所がおかしいんでないの
887デフォルトの名無しさん:2009/10/21(水) 19:06:35
だな。errorsに何も返ってないってことはコンパイル処理まで達してない。
888874:2009/10/21(水) 20:19:19
>>884
>>886

助言ありがとうございます。

fxファイルの置き場も、参考書のとおりにやっています。
Visual Studio 2008を使ってますので、その画面で説明します。

「ソリューションエクスプローラ」のプロジェクト名の直下にファイルを
置いています。

サンプルプログラムのcppファイルは「ソースファイルフォルダ」に
hファイルは「ヘッダファイル」に入れました。「リソースファイルフォルダ」
には何も入っていません。

889デフォルトの名無しさん:2009/10/21(水) 20:22:31
ファイルの位置ってのは、普通にエクスプローラで見た時のファイルの場所のことだぞ
890デフォルトの名無しさん:2009/10/21(水) 21:16:18
とりあえず参考書名とやってる章とプログラム名書きやがれ
891デフォルトの名無しさん:2009/10/21(水) 21:28:09
>>882
>中身はあまりよくわからないです。
>具体的に原因を指摘をお願いします。
何?その横柄な態度
自分で考えるつもりがないならさっさと止めろよ
892874:2009/10/21(水) 21:29:35
>>889

basic.fxをC:\にありました。

よろしくお願いします。
893デフォルトの名無しさん:2009/10/21(水) 21:34:49
>basic.fxをC:\にありました。
日本語でOK
894デフォルトの名無しさん:2009/10/21(水) 21:36:54
"C:\\basic.fx"でD3DXCreateEffectFromFile呼び出せばいいんじゃね
つか戻り値見れば、何が問題か特定できるだろ
895デフォルトの名無しさん:2009/10/21(水) 21:38:15
日本人じゃなさそうだなぁ・・・
896デフォルトの名無しさん:2009/10/21(水) 21:38:53
オレンジ君・・・?
897デフォルトの名無しさん:2009/10/21(水) 22:05:01
要は.vcprjとか.slnとかのファイルと同じとこに.fxがあれば、ファイルパスの問題は無いと思う
(ファイルパスに全角文字が含まれると問題あるけど)
898874:2009/10/21(水) 22:35:08
>>890

書籍名;DirectXシェーダプログラミング
仕組みからわかるゲームエフェクトテクニック

ページ:008から024まで
開発環境の準備とプロジェクトの作成

P18のサンプルプログラムの実行ができない。

よろしくお願いします。

899デフォルトの名無しさん:2009/10/21(水) 22:43:20
>>879>>894をやればいいんだよ
後、errorsはRelease()しないとリークすんぞ
900874:2009/10/21(水) 22:44:42
D3DXCreateEffectFromFileの引数を"c:\\basic,fx"にすると
実行時エラーはなくなりました。
ただ、この関数でエラーが帰り、次の行でreturnされました。

該当のコードは>>876

使っている参考書は、VS2003,VS2005を前提に書かれていますが、
私はVS2008でサンプルプログラムの実行しています。

それが原因でエラーがでることはないでしょうか?
901デフォルトの名無しさん:2009/10/21(水) 22:47:39
>>900
errorsに、エラーの詳細が書いてあるよ。
902デフォルトの名無しさん:2009/10/21(水) 22:48:08
>D3DXCreateEffectFromFile 関数
>戻り値

> 成功した場合は、D3D_OK を返す。

> 失敗した場合は、次のいずれかの値を返す。
> D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドの引数に無効な値が設定されている場合などである。
> D3DXERR_INVALIDDATA データが無効である。
> E_OUTOFMEMORY MicrosoftR Direct3DR が呼び出しを完了するための十分なメモリを割り当てることができなかった。
903デフォルトの名無しさん:2009/10/21(水) 22:48:59
>"c:\\basic,fx"にすると
「,」
  _,._
 ( ゚Д゚)   ガシャ
 ( つ O __
 と_)_) (_()、o:。
       ゚*・:。
904デフォルトの名無しさん:2009/10/21(水) 22:58:11
DirectX初心者質問スレであってプログラミング初心者質問スレじゃないんだけど
905デフォルトの名無しさん:2009/10/21(水) 23:12:16
日本語初心者のスレでもないしな
906874:2009/10/21(水) 23:16:23
>>904
>>905

もう少しプログラムを勉強してから質問します。
ありがとうございました。
907デフォルトの名無しさん:2009/10/21(水) 23:53:55
バーテックスシェーダは動作するのですが、ピクセルシェーダがどうしても動作しません。
>>874がみてる本と同じものを見てるので、fxファイルは>>880と同じものです。
引数名の頭を大文字にしたり、ピクセルシェーダの出力型?をCOLOR0からCOLORにしたり、
いろいろやっているのですが、バーテックスシェーダで出力される色が画面にでてしまい、
ピクセルシェーダをとおってないような挙動をします。

D3DXCreateEffectFromFileは正常終了しており、errorも見ています。(.fxにわざと間違いを書くと、errorに情報が出力されるのも確認してます。)

私のグラフィックスボードが少し古く、ハードウェアでPSに対応しておらずVSにしか対応してないので、
D3DDEVTYPE_REFフラグで、以下のように初期化も行ってます。
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice )

何か教えてもらえると助かります。よろしくお願いいたします。
908デフォルトの名無しさん:2009/10/22(木) 00:08:54
>>907
>880のシェーダーって頂点の色そのまま出すだけのシェーダーに見えるけど
909デフォルトの名無しさん:2009/10/22(木) 00:28:25
>>908
説明不足でした。
実際には>>880から少し修正してます。以下に張り付けます。
VSの色出力にtexcoord情報をかけてますが、そのような色の三角形が画面に出力されてます。
PSを通ったら、白色の三角形が表示されるはずなのですが。
float4x4 g_wvp;
float4 g_color;

void BasicVS(float3 In_pos : POSITION, float2 In_tex : TEXCOORD0,
out float4 Out_pos : POSITION,
out float4 Out_color : COLOR0,
out float2 Out_tex : TEXCOORD0
)
{
Out_pos = mul(float4(In_pos, 1.f), g_wvp);
Out_color = g_color * In_tex.x;
Out_tex = In_tex;
}
float4 BasicPS(float4 In_color : COLOR0, float2 In_tex : TEXCOORD0) : COLOR
{
return float4(1.f, 1.f, 1.f, 1.f);
}
technique BasicTech
{
pass P0
{
VertexShader = compile vs_1_1 BasicVS();
PixelShader = compile ps_1_1 BasicPS();
}
}
910デフォルトの名無しさん:2009/10/22(木) 00:34:38
>>909
HLSL使うならピクセルシェーダーは2.0以上でコンパイルするべきじゃないの?
911デフォルトの名無しさん:2009/10/22(木) 00:37:24
1_1なんてもうサポートされてないだろ
912デフォルトの名無しさん:2009/10/22(木) 00:45:18
>>910, >>911ありがとうございます。
一応、2.0や3.0も試してるのですが、さっぱりなんです。
VSからの色出力には、.fxファイルの変更に応じて反応があるのですが…。

SetRenderStateとかで何か重要なパラメータを設定してないのか?
とかもいろいろ考えてますが…なかなかそれらしいものが見つからずです。
913871:2009/10/22(木) 00:52:12
>872-873
回答どうも
そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
シングルパスで描画できるんでしょうか?
それともやはりマルチパスでやった方が良いのでしょうか?
914デフォルトの名無しさん:2009/10/22(木) 00:54:41
>>912
REFモードのサンプルもねー状態でやってんの?
あったらまずそれを動かせよ
915デフォルトの名無しさん:2009/10/22(木) 01:51:43
>>913
> 2Dの、例えばオセロの盤面のような画面を作る場合、

オセロ盤はテクスチャ1枚、板ポリ1枚で済むでしょ?

>そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、

どういうこと?
916デフォルトの名無しさん:2009/10/22(木) 01:57:09
ゲーム進行に合わせて盤面を書き換えていかないといけないから、ってことじゃないの?
917デフォルトの名無しさん:2009/10/22(木) 01:58:17
MultiSampleTypeにD3DMULTISAMPLE_4_SAMPLES等の値を指定してやることで
アンチエイリアスがかかるのですが、露光表現等のピクセルシェーダの
エフェクトを使うために一度モデルをテクスチャに描画する必要がある場合に
これらの設定でのアンチエイリアスが無効になってます。
これって解決の方法があるんでしょうか?
できれば露光表現もアンチエイリアスも併用したいのですが。

分かりやすくいうと。
バックサーフェイスにモデルを描画するとアンチエイリアスがかかる。
テクスチャにモデルを描画するとアンチエイリアスがかからん。
918デフォルトの名無しさん:2009/10/22(木) 02:06:28
>>917
もしNVだったらバグでAAされない事がある。XPで発生する。
コピー先とコピー元のサイズを違うようにすれば何故か回避される。
同一サイズの場合なんらかの、インチキスケジューリングが発動する模様。
やってるとは思うがレンダ後の映像を得たいなら非マルチサンプリング化も忘れずに。
919871:2009/10/22(木) 02:08:21
>915
オセロの盤面がマスごとに白丸や黒丸を置かれるように、
マスごとに状況に応じてテクスチャを貼り付けたいわけです
その場合の描画処理はどういう手順にするのが効率が良いのかを聞きたくて質問しました
わかりにくくてすいません
920デフォルトの名無しさん:2009/10/22(木) 02:11:38
●ごとにポリゴン置けばいいじゃないか?
自由に置けるしアニメーションもできる。
わざわざ一体化させる意味がわからん。
921871:2009/10/22(木) 02:16:54
つまり、複数のポリゴンを作って描画した方がいいということですね
わかりました
922デフォルトの名無しさん:2009/10/22(木) 06:29:38
全マスに置いたときを考えると
○●□をマスごとおいたほうが描画処理軽いなたしかに
923デフォルトの名無しさん:2009/10/22(木) 07:43:02
テクスチャのアルファ部分だけをフェースカラーで塗りつぶしたいときは、
ピクセルシェーダでアルファ値で条件分けして出力を変えればいいんでしょうか?
(テクスチャの透明でない部分はテクスチャの色をそのまま出力したい)
もっと簡単な方法はありますか

SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
でやればできるのかと思ったら、テクスチャの透明でない部分がフェースカラーと混ざってしまうので
924デフォルトの名無しさん:2009/10/22(木) 08:32:29
素直に二回プリみれよ
925デフォルトの名無しさん:2009/10/22(木) 08:33:45
>>917
テクスチャにMSAAの指定があるのはDirectX10からだぞ。
DirectX9でやりたいならMSAA指定のサーフェイスと深度バッファ作って
レンダリング後にStrechRectでテクスチャに転送ってやらないとダメだぞ。

デバイス生成時のMSAAの設定は「バックバッファサーフェイス」への設定でしかないぞ。
926917:2009/10/22(木) 10:20:14
>>925
テクスチャへのMSAAはDirect10からなのですね。
ありがとうございました。
927デフォルトの名無しさん:2009/10/22(木) 13:50:56
    / ̄\ 
  r ┤    ト
  |.  \_/ \
  |   __( ̄  |      彡
  |    __)_ノノハ@     < >>ゲッツ!!!
  ヽ___) ノ‘д‘.) / ̄\        
      . >  ⌒ヽ  |    ├ r   
       /    へ/ \_/  .|
       /    /  |   ̄)__   |  ))
      レ  ノ   ヽ_(__    | 
     /  ミ         (___/
     /  /|  
    /  /( 
   (   、 \   
    |  |  、 \   サッ !
    |  |  \ \
.    | /    \ ⌒l
     | |      ) / 
    ノ  )゛゛゛゛゛゛ し'゛゛゛゛゛゛゛゛゛゛゛゛゛゛゛     
   (_/
928デフォルトの名無しさん:2009/10/22(木) 15:05:31
すみません関数の引数で2D座標を1つの変数で受け取りたいんですが
D3DVECTOR2とすると定義されていない識別子と警告が出ます。

DirectX9でd3d9.hとd3dx9.hをインクルードしているのですが・・。
2D座標を1つの変数で受け取るにはどうすれば良いでしょうか?
929デフォルトの名無しさん:2009/10/22(木) 15:15:14
D3DXVECTOR2
930デフォルトの名無しさん:2009/10/22(木) 15:24:24
>>929
Xが抜けてたんですね・・ありがとうございました。
931デフォルトの名無しさん:2009/10/22(木) 16:30:38
せめてヘルプくらいダウンロードしようよ・・・
932デフォルトの名無しさん:2009/10/22(木) 18:46:19
MSDNじゃだめなん?
933デフォルトの名無しさん:2009/10/22(木) 18:50:42
ドキュメントブラウザじゃなくて、普通のWebブラウザで見れる形式でDLってできる?
MSDNライブラリ
934デフォルトの名無しさん:2009/10/22(木) 23:12:05
DirectSoundを使いたいんだけど
IDirectSound8 *g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
ってのと
LPDIRECTSOUND8 g_pDSound;

のどっちが正しいんですか?
なぜか下の方は
g_pDSound->SetCooperativeLevel(hWnd,DSSCL_NORMAL);
でエラーが出るんです
これはもしかして持ってる資料が古い・・・?
935デフォルトの名無しさん:2009/10/22(木) 23:17:55
エラーコードを書きたくない理由は?
936デフォルトの名無しさん:2009/10/22(木) 23:19:02
面倒くさい
937デフォルトの名無しさん:2009/10/22(木) 23:26:53
だるい
938デフォルトの名無しさん:2009/10/22(木) 23:27:10
えーとエラーは
0x00416858 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。

あとは・・・hWndに式を評価できないとでているんですが
妙だな他のは問題ないはずなんだが・・・
939デフォルトの名無しさん:2009/10/22(木) 23:28:07
眠い
940デフォルトの名無しさん:2009/10/22(木) 23:28:37
IDirectSound8* = LPDIRECTSOUND8

LPDIRECTSOUND8 g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);

が正しい
941934:2009/10/22(木) 23:30:55
あーそうなんですか
ちょっと資料調べてみます
もしかするとかなりショボイミスをしてる気がしてきた

すいませんでした
942デフォルトの名無しさん:2009/10/22(木) 23:40:09
もしかして、”下の方”ってのは、宣言文を置き換えただけじゃなくて、
DirectSoundCreate8を呼ばないってことなのか
943デフォルトの名無しさん:2009/10/22(木) 23:51:41
シャドウマップに収めるZ値って
普通の透視変換のやつじゃ駄目かな?
ライトに近いほど精度高くなるって意味なさそう。
みんなはどうしてる?
944デフォルトの名無しさん:2009/10/22(木) 23:59:36
普通にLSPSM使えばいいじゃん
945デフォルトの名無しさん:2009/10/23(金) 12:58:47
すみませんDirectX9でなのですが、
バウンディングボックスからD3DXVec3Projectでメッシュに対応する2D座標を作っているのですが
バウンディングボックスのmin max値は正常に出力できていて
そこからカメラ横回転を4分割(90度毎)。 縦を水平以上か以下かで2分割の計8分割し
どの3D頂点が2D座標のどの最大/最小値になるかリストを作って計算しているのですが、
2Dのxの最大値と最小値が入れ替わっていたり
2Dのy座標が角度によって入れ替わったりとアベコベな状態になってしまいます。

2日程無理やり数値が合うようにならないかあれこれ試しているのですが上手く行きません;
バウンディングボックスから正しい2D座標を割り出す計算式は有ったら紹介して下さると助かります orz
もしかしてD3DXVec3Project使ってるのは自分くらいで他の方法で実現するのが定番だったりするのでしょうか;
946デフォルトの名無しさん:2009/10/23(金) 13:22:29
正直日本語が分からん
お前の頭の中ではそれで完結してるのかもしれんが
他人に理解してもらうにはもう少し努力が必要
947デフォルトの名無しさん:2009/10/23(金) 13:52:54
言葉が抜けてますね・・すみません orz
なんとか無理矢理補正する方法を見つけたので
ブラックボックスが出来たような嫌な気分ですが・・実装は出来ました。
失礼しましたー・・ orz
948858:2009/10/23(金) 14:13:00
SetDialogBoxMode()を正常に呼び出せるようになった。
なんとD3DDeviceの初期化時に画面モードをA8R8G8B8にしていたのが原因だった!
X8R8G8B8にしたら問題なし。

ただ描画を止めている間、再描画が行われないので他のウィンドウで隠れた部分がつぶれてしまうな。
WM_PAINTのハンドラを実装するのが面倒に感じたので、
いったんビットマップでゲーム画面のキャプチャを作成して
PixtureBoxに貼り付けて表示させることにした。

Win32APIで直接書いてるならここまでやらなくてもいいけど、
さしあたりこれでも速度上の問題はないのでよしとする。
949デフォルトの名無しさん:2009/10/23(金) 15:43:12
すみません。
メッシュコンテナからバウンディングボックスを生成する関数は無いでしょうか?
D3DXFrameCalculateBoundingSphere()なら見つかるのですが・・。
950デフォルトの名無しさん:2009/10/23(金) 16:21:42
D3DXComputeBoundingBox
951デフォルトの名無しさん:2009/10/23(金) 16:53:32
>>948
SetDialogBoxModeをTRUEにすると、Presentでダイアログが上書きされなくなるから
描画を止める必要はないよ。
952デフォルトの名無しさん:2009/10/23(金) 17:22:39
>>950
やっぱりメッシュコンテナから直接ボックスってのは無いんでしょうね。
ありがとうございました。
953デフォルトの名無しさん:2009/10/23(金) 17:51:57
リソースの作成に関してヘルプにほとんどのアプリケーションはD3DPOOL_MANAGEDが
良いみたいな事を書いてあったので疑問に思ったことを質問させてください。
D3DPOOL_MANAGEDを指定するとビデオ メモリーとシステム メモリーの両方にメモリが確保されるようですが
これを使うメリットってデバイスリセット時の自動復旧だけなんですか?
だとするとデバイス失効時の対処が苦にならない場合は静的なバッファであっても
D3DPOOL_DEFAULTで作成した方が速度の面でもメモリの面でも
有利という事ですか?
954デフォルトの名無しさん:2009/10/23(金) 18:26:22
MANAGEDにしておけばビデオメモリが足りなくなっても何とかしてくれるかもね。
955デフォルトの名無しさん:2009/10/23(金) 18:29:18
>>953
色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
それが分かっているなら好きにすればいい。
プログラミングは自由なものなんだから。
956デフォルトの名無しさん:2009/10/23(金) 20:27:41
D3DPOOL_MANAGEDはIDirect3D9Ex以降で使えない
957デフォルトの名無しさん:2009/10/23(金) 20:50:31
D3D9では素直にD3DPOOL_MANAGEDを使っておく方がいいよ。
頑張って作っても複雑怪奇なシステムに仕上がるし、どうせ将来性がない。

D3d9前提ののシステムをVista以降に向けてリファクタリングする過程で9Exを通過し、
そこでMANAGED不要になっておくのが吉。
958デフォルトの名無しさん:2009/10/23(金) 20:59:51
>>955
>色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
確実に使い方が分かっていない。
出直してこい。
959デフォルトの名無しさん:2009/10/23(金) 21:28:55
色々とレスありがとうございます。
>>954
今までビデオメモリが足りなくなるという状況は考えていませんでした・・・。
そういう場合、普通は確保時に失敗するんでしょうね。
仮にMANAGEDが自動で何とかするとしても描画毎にシステムメモリとビデオメモリを
往復しないといけないので毎回デバイスをリセットするのと同じように重くなる気はします。
>>955
MANAGEDには制限がありますが、DEFAULTはそれに比べフリーですよね。
>>956
まじっすか?レガシー気味?
>>957
将来性がないっていうのは、複雑奇怪なシステムを作った場合の話ですよね?
私はリソース管理をDXUTを通して行なう予定なので
リソース管理におけるMANAGEDとDEFAULTの複雑さは変わらないし
描画シーンの管理としては動的なバッファを多用するほうが楽な気がします。


960953:2009/10/23(金) 22:15:46
皆様のレスに答えながらHELPを読み直した結果を、
自問自答っぽいくなりますが、まとめてみます。

>静的なバッファであってもD3DPOOL_DEFAULTで作成した方が
>速度の面でもメモリの面でも有利か?

DEFAULTで作成したバッファはMANAGEDで作成したバッファより
速度重視の領域に置かれやすい。
逆に言えば動的なバッファ用にその領域を残しておくのが吉。
もしも動的なバッファを作らなければMANGEDがその領域を使うだろうし。

そしてMANAGEDが使うシステムメモリもRAMを奪うわけではないので
メモリの面でMANAGEDがネックになるとも思えない。
961デフォルトの名無しさん:2009/10/23(金) 22:16:18
結局、DEFAULTのリソースがひとつでもあれば
それ用の管理機能が必要になるし、
その管理機能があればMANAGEDはいらないし。
多少凝ったことをすればDEFAULTは外せないし。
962デフォルトの名無しさん:2009/10/23(金) 23:20:48
エフェクトファイルが複数ある場合、1つのテクニックで書き直さないといけないのでしょうか?
トゥーン+映り込み(環境マッピング)+バンプの3つのエフェクトファイル(.fx)があってそれぞれ単体では正常に動くのですが、
同時に2つ以上を使いたい場合どうなるのかと思いまして。
963デフォルトの名無しさん:2009/10/23(金) 23:32:31
>>958
MSDN読め。
http://msdn.microsoft.com/ja-jp/library/bb172584%28VS.85%29.aspx

「D3DPOOL_DEFAULT プールに配置されたテクスチャーは、ダイナミック テクスチャーか、プライベートな FOURCC ドライバー フォーマットでない限り、ロックすることはできません。」
964デフォルトの名無しさん:2009/10/23(金) 23:33:13
質問させてください。
VC++2008ExpressEditonを使ってDirect3Dを触っているのですが、
.ddsファイルを点灯表示するプログラムを作りました。
しかし、exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
exeに.ddsファイルを組み込む方法はないのでしょうか?
965デフォルトの名無しさん:2009/10/23(金) 23:36:57
>>964
普通にexeにリソースとして放り込んでおけばいいんじゃね?
D3DXでリソースを読み込むAPIだってあるんだし。
966デフォルトの名無しさん:2009/10/23(金) 23:39:22
DirectX関係ないし?

>exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
意味が分からん
exeと同じフォルダにddsがないと落ちるって意味なのか?
967デフォルトの名無しさん:2009/10/24(土) 00:01:59
関係ないかも
DirectX使う上で外部にあったらじゃまなファイルを
exe内に取り込むVC++的技があるんじゃないかな〜・・・と思いまして
968デフォルトの名無しさん:2009/10/24(土) 00:08:06
あーHSPみたいに必要なファイルをまとめたいのね
シェーダーをソースに書くってのは出来るけど・・・
969デフォルトの名無しさん:2009/10/24(土) 00:19:58
リソースで埋め込む方法も知らないなんてどんだけ素人なんだよ!
970デフォルトの名無しさん:2009/10/24(土) 00:34:13
埋め込むのはいいけど
データが増えると数100MBとか数GBのexeが出来上がるけどいいの?
971デフォルトの名無しさん:2009/10/24(土) 00:36:22
EEだとリソースの管理できないのでテキストで.rcファイル作ってビルド時にrc.exeを外部プログラムの実行できるようにすればいい
作るほうはDirectX関係ないのでここじゃ説明しない
972デフォルトの名無しさん:2009/10/24(土) 00:53:24
二つに分ければ50MBだな
973デフォルトの名無しさん:2009/10/24(土) 00:57:44
左様ですか
お作法的には外だしが基本ということですかね。
974デフォルトの名無しさん:2009/10/24(土) 02:12:47
>>962
2つのエフェクトファイルを同時に使うということ?
それは無いな。include使えばいい。
975デフォルトの名無しさん:2009/10/24(土) 06:22:34
DirectXでリストボックスの代わりに使えるようなものがSDKのサンプルの中にあるでしょうか?
あったら実装する方法を教えてください
976デフォルトの名無しさん:2009/10/24(土) 07:43:58
大抵のサンプルのデバイス設定はリストボックスになってるだろ
お前の目は節穴か
977975:2009/10/24(土) 10:30:10
設定のとこはプルダウンメニューっぽいですが、
ボタンを押さずリストボックスだけ利用する方法があるのでしょうか?
あるのなら実装方法を教えて欲しいのですが
DXUTguiとDXUTsettingsdlgにあるのだろうとは思いますが、
どこが使われているのか分かりません
978デフォルトの名無しさん:2009/10/24(土) 10:32:53
あ、プルダウンメニューじゃなくてドロップダウンリストぽい、でした
979デフォルトの名無しさん:2009/10/24(土) 10:57:48
よく分からないけどCDXUTListBox classってのが見つかったので、
多分これですよね
詳しく見てみます
980デフォルトの名無しさん:2009/10/24(土) 18:28:39
DirectSoundでwavを再生しようと思うんですが
LPDIRECTSOUNDBUFFERに音楽データーを書き込むわけですから
音一つにつきバッファは一つずつ用意した方が良いんでしょうか?
981デフォルトの名無しさん:2009/10/24(土) 18:33:54
はい
982デフォルトの名無しさん:2009/10/24(土) 18:35:16
>>980
オンメモリ再生したいのかストリーミング再生したいのかで話が変わってくるんじゃね?
ていうか今時ならXAudio2使ったらどうよ。
983980:2009/10/24(土) 18:38:00
オンメモリって一回全部読むやつですよね
じゃあそれです

Xaudio2か・・・健闘してみます
984デフォルトの名無しさん:2009/10/24(土) 18:39:08
985デフォルトの名無しさん:2009/10/24(土) 23:55:09
何度も実行しているうちにテクスチャが表示されなくなるんですけど
これはもしかして終了時に解放してない部分があるって事なんでしょうか?
986デフォルトの名無しさん:2009/10/24(土) 23:59:28
何度も実行してるのかコードの一部なのかプログラム自体なのかで話が変わってくるだろ常考。

なんで質問する子は舌っ足らずなのばかりなのか……。
987デフォルトの名無しさん:2009/10/25(日) 00:08:37
わかってりゃしつもんしねーよあほ
988985:2009/10/25(日) 00:13:18
毎度毎度出現する貴様はだれだ?
>>986
はあ
プログラムのスタート時にXファイルを読み込んで
終了時にデータを破棄しているんですが

実行→終了を繰り返しているうちにオブジェクトのテクスチャが消え
真っ白になってしまうんです
やはり何か解放忘れがあるからこのような症状が出るんでしょうか?
989デフォルトの名無しさん:2009/10/25(日) 00:15:05
>>985
とりあえず、リソースの開放と取得のタイミングでログを書き出して眺めてみたら?
リソースリークはトレースして解析するのが基本。
990デフォルトの名無しさん:2009/10/25(日) 00:16:06
>>989
うぃ
なんとかやってみます
991デフォルトの名無しさん:2009/10/25(日) 00:21:26
でも毎回思うんだけど
この辺に関してVCが役立たずすぎる
リークにしてもせめて確保したソースの場所ぐらい
newやdelete、createやreleaseに仕組みを入れてもいんじゃねぇか?
デバッグバージョンぐらいにはよ
992デフォルトの名無しさん:2009/10/25(日) 00:31:04
Managed DirectXでも使えばいいじゃないか。

見捨てられてるけど
993デフォルトの名無しさん:2009/10/25(日) 00:38:44
>>992
すでにそれがなにもんかすらわからねぇよw
994デフォルトの名無しさん:2009/10/25(日) 00:41:09
それは無知なだけ
995デフォルトの名無しさん:2009/10/25(日) 00:43:40
>>994
じゃあ、これからManaged DirectXって流行るの?
996デフォルトの名無しさん:2009/10/25(日) 00:45:16
>>988
Xファイルのテクスチャが複数あるのに1つしか解放していないとかよくあるミスはまさかね。
テクスチャを読み込んでいる部分がメモリ破壊されていて、偶然上手く動いているという面倒な原因もあるから注意ね。

まぁ、テクスチャやXファイルなんかは管理するクラスを作っておいて、
最悪実行終了時に全解放する関数を走らせるのが無難かな。
Xファイルだとそこらの解説サイト通りに組み込むと使用するテクスチャが同じなのに別々に読み込む無駄が出るし。
997デフォルトの名無しさん:2009/10/25(日) 00:47:17
与謝蕪村って誰? → お前無知だな → え、この人って流行るの?

そんな時代もありました。
998デフォルトの名無しさん:2009/10/25(日) 01:34:41
DirectInputでジョイスティックの軸入力の分解能とか取得できますか?
999デフォルトの名無しさん:2009/10/25(日) 01:51:13
>>991
そういう機能ってVC6の頃からあるよ。
VCは悪くない。
1000デフォルトの名無しさん:2009/10/25(日) 02:07:18
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。