【C++】 DirectX初心者質問スレ Part25 【C】
はじめまして、DirectXの参考書のサンプルコードを入力して、動作確認行っています。
ビルドはできるのですが、実行時エラーが出て動作しません。
サンプルは以下の部分でエラーでとまります。原因は何が考えられるでしょうか?
エラーは?
876 :
874: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で試してみろ
878 :
874:2009/10/21(水) 16:59:15
fxc.exeの使い方はわかったのですが、HLSLファイルとはそのファイルでしょうか?
それらしきファイルとして、下記コードでbasic.fxというファイルがあるのですが、
これでしょうか?
>>876 「0x00000000 を読み込み中」ってことはm_pFXがNULLになってるっぽいね。
D3DXCreateEffectFromFileは本当に成功してるのか?
errorsじゃなくて戻り値のHRESULTも見たほうがいいと思うよ。
// グローバル変数
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();
}
}
ぬるぽ
882 :
874:2009/10/21(水) 17:20:22
>>881 サンプルプログラムを入力して、ビルド、実行させているだけで、
中身はあまりよくわからないです。
具体的に原因を指摘をお願いします。
そのサンプルをうpするか書いた本人人に聞けよ
>>882 どれを聞いてるのかな。
>>880はHLSLだよ。
basic.fxは実行時どこに置いてる?
>>874 その動かないサンプルコードとやらをこの場ではお前しか持ってないのに
その挙動を人に尋ねるというのか?
そんなコンセンサスが得たいなら聖書でも読んでろ。
助言を得たいなら助言が得られるだけの詳しい情報を書け。
単純にfxファイルの置き場所がおかしいんでないの
だな。errorsに何も返ってないってことはコンパイル処理まで達してない。
888 :
874:2009/10/21(水) 20:19:19
>>884 >>886 助言ありがとうございます。
fxファイルの置き場も、参考書のとおりにやっています。
Visual Studio 2008を使ってますので、その画面で説明します。
「ソリューションエクスプローラ」のプロジェクト名の直下にファイルを
置いています。
サンプルプログラムのcppファイルは「ソースファイルフォルダ」に
hファイルは「ヘッダファイル」に入れました。「リソースファイルフォルダ」
には何も入っていません。
889 :
デフォルトの名無しさん:2009/10/21(水) 20:22:31
ファイルの位置ってのは、普通にエクスプローラで見た時のファイルの場所のことだぞ
とりあえず参考書名とやってる章とプログラム名書きやがれ
>>882 >中身はあまりよくわからないです。
>具体的に原因を指摘をお願いします。
何?その横柄な態度
自分で考えるつもりがないならさっさと止めろよ
892 :
874:2009/10/21(水) 21:29:35
>>889 basic.fxをC:\にありました。
よろしくお願いします。
>basic.fxをC:\にありました。
日本語でOK
"C:\\basic.fx"でD3DXCreateEffectFromFile呼び出せばいいんじゃね
つか戻り値見れば、何が問題か特定できるだろ
日本人じゃなさそうだなぁ・・・
オレンジ君・・・?
要は.vcprjとか.slnとかのファイルと同じとこに.fxがあれば、ファイルパスの問題は無いと思う
(ファイルパスに全角文字が含まれると問題あるけど)
898 :
874:2009/10/21(水) 22:35:08
>>890 書籍名;DirectXシェーダプログラミング
仕組みからわかるゲームエフェクトテクニック
ページ:008から024まで
開発環境の準備とプロジェクトの作成
P18のサンプルプログラムの実行ができない。
よろしくお願いします。
900 :
874:2009/10/21(水) 22:44:42
D3DXCreateEffectFromFileの引数を"c:\\basic,fx"にすると
実行時エラーはなくなりました。
ただ、この関数でエラーが帰り、次の行でreturnされました。
該当のコードは
>>876 使っている参考書は、VS2003,VS2005を前提に書かれていますが、
私はVS2008でサンプルプログラムの実行しています。
それが原因でエラーがでることはないでしょうか?
>>900 errorsに、エラーの詳細が書いてあるよ。
>D3DXCreateEffectFromFile 関数
>戻り値
>
> 成功した場合は、D3D_OK を返す。
>
> 失敗した場合は、次のいずれかの値を返す。
> D3DERR_INVALIDCALL メソッドの呼び出しが無効である。たとえば、メソッドの引数に無効な値が設定されている場合などである。
> D3DXERR_INVALIDDATA データが無効である。
> E_OUTOFMEMORY MicrosoftR Direct3DR が呼び出しを完了するための十分なメモリを割り当てることができなかった。
>"c:\\basic,fx"にすると
「,」
_,._
( ゚Д゚) ガシャ
( つ O __
と_)_) (_()、o:。
゚*・:。
DirectX初心者質問スレであってプログラミング初心者質問スレじゃないんだけど
日本語初心者のスレでもないしな
906 :
874:2009/10/21(水) 23:16:23
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 )
何か教えてもらえると助かります。よろしくお願いいたします。
>>907 >880のシェーダーって頂点の色そのまま出すだけのシェーダーに見えるけど
>>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以上でコンパイルするべきじゃないの?
1_1なんてもうサポートされてないだろ
912 :
デフォルトの名無しさん:2009/10/22(木) 00:45:18
>>910,
>>911ありがとうございます。
一応、2.0や3.0も試してるのですが、さっぱりなんです。
VSからの色出力には、.fxファイルの変更に応じて反応があるのですが…。
SetRenderStateとかで何か重要なパラメータを設定してないのか?
とかもいろいろ考えてますが…なかなかそれらしいものが見つからずです。
913 :
871:2009/10/22(木) 00:52:12
>872-873
回答どうも
そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
シングルパスで描画できるんでしょうか?
それともやはりマルチパスでやった方が良いのでしょうか?
>>912 REFモードのサンプルもねー状態でやってんの?
あったらまずそれを動かせよ
>>913 > 2Dの、例えばオセロの盤面のような画面を作る場合、
オセロ盤はテクスチャ1枚、板ポリ1枚で済むでしょ?
>そうすると、一枚のポリゴンに何十というテクスチャを貼ることになるのですが、
どういうこと?
ゲーム進行に合わせて盤面を書き換えていかないといけないから、ってことじゃないの?
MultiSampleTypeにD3DMULTISAMPLE_4_SAMPLES等の値を指定してやることで
アンチエイリアスがかかるのですが、露光表現等のピクセルシェーダの
エフェクトを使うために一度モデルをテクスチャに描画する必要がある場合に
これらの設定でのアンチエイリアスが無効になってます。
これって解決の方法があるんでしょうか?
できれば露光表現もアンチエイリアスも併用したいのですが。
分かりやすくいうと。
バックサーフェイスにモデルを描画するとアンチエイリアスがかかる。
テクスチャにモデルを描画するとアンチエイリアスがかからん。
>>917 もしNVだったらバグでAAされない事がある。XPで発生する。
コピー先とコピー元のサイズを違うようにすれば何故か回避される。
同一サイズの場合なんらかの、インチキスケジューリングが発動する模様。
やってるとは思うがレンダ後の映像を得たいなら非マルチサンプリング化も忘れずに。
919 :
871:2009/10/22(木) 02:08:21
>915
オセロの盤面がマスごとに白丸や黒丸を置かれるように、
マスごとに状況に応じてテクスチャを貼り付けたいわけです
その場合の描画処理はどういう手順にするのが効率が良いのかを聞きたくて質問しました
わかりにくくてすいません
●ごとにポリゴン置けばいいじゃないか?
自由に置けるしアニメーションもできる。
わざわざ一体化させる意味がわからん。
921 :
871:2009/10/22(木) 02:16:54
つまり、複数のポリゴンを作って描画した方がいいということですね
わかりました
全マスに置いたときを考えると
○●□をマスごとおいたほうが描画処理軽いなたしかに
テクスチャのアルファ部分だけをフェースカラーで塗りつぶしたいときは、
ピクセルシェーダでアルファ値で条件分けして出力を変えればいいんでしょうか?
(テクスチャの透明でない部分はテクスチャの色をそのまま出力したい)
もっと簡単な方法はありますか
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
でやればできるのかと思ったら、テクスチャの透明でない部分がフェースカラーと混ざってしまうので
924 :
デフォルトの名無しさん:2009/10/22(木) 08:32:29
素直に二回プリみれよ
>>917 テクスチャにMSAAの指定があるのはDirectX10からだぞ。
DirectX9でやりたいならMSAA指定のサーフェイスと深度バッファ作って
レンダリング後にStrechRectでテクスチャに転送ってやらないとダメだぞ。
デバイス生成時のMSAAの設定は「バックバッファサーフェイス」への設定でしかないぞ。
926 :
917:2009/10/22(木) 10:20:14
>>925 テクスチャへのMSAAはDirect10からなのですね。
ありがとうございました。
927 :
デフォルトの名無しさん:2009/10/22(木) 13:50:56
/ ̄\
r ┤ ト
|. \_/ \
| __( ̄ | 彡
| __)_ノノハ@ < >>ゲッツ!!!
ヽ___) ノ‘д‘.) / ̄\
. > ⌒ヽ | ├ r
/ へ/ \_/ .|
/ / |  ̄)__ | ))
レ ノ ヽ_(__ |
/ ミ (___/
/ /|
/ /(
( 、 \
| | 、 \ サッ !
| | \ \
. | / \ ⌒l
| | ) /
ノ )゛゛゛゛゛゛ し'゛゛゛゛゛゛゛゛゛゛゛゛゛゛゛
(_/
すみません関数の引数で2D座標を1つの変数で受け取りたいんですが
D3DVECTOR2とすると定義されていない識別子と警告が出ます。
DirectX9でd3d9.hとd3dx9.hをインクルードしているのですが・・。
2D座標を1つの変数で受け取るにはどうすれば良いでしょうか?
D3DXVECTOR2
>>929 Xが抜けてたんですね・・ありがとうございました。
せめてヘルプくらいダウンロードしようよ・・・
932 :
デフォルトの名無しさん:2009/10/22(木) 18:46:19
MSDNじゃだめなん?
ドキュメントブラウザじゃなくて、普通のWebブラウザで見れる形式でDLってできる?
MSDNライブラリ
DirectSoundを使いたいんだけど
IDirectSound8 *g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
ってのと
LPDIRECTSOUND8 g_pDSound;
のどっちが正しいんですか?
なぜか下の方は
g_pDSound->SetCooperativeLevel(hWnd,DSSCL_NORMAL);
でエラーが出るんです
これはもしかして持ってる資料が古い・・・?
エラーコードを書きたくない理由は?
面倒くさい
だるい
えーとエラーは
0x00416858 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
あとは・・・hWndに式を評価できないとでているんですが
妙だな他のは問題ないはずなんだが・・・
眠い
IDirectSound8* = LPDIRECTSOUND8
LPDIRECTSOUND8 g_pDSound;
DirectSoundCreate8(NULL, &g_pDSound, NULL);
が正しい
941 :
934:2009/10/22(木) 23:30:55
あーそうなんですか
ちょっと資料調べてみます
もしかするとかなりショボイミスをしてる気がしてきた
すいませんでした
もしかして、”下の方”ってのは、宣言文を置き換えただけじゃなくて、
DirectSoundCreate8を呼ばないってことなのか
シャドウマップに収めるZ値って
普通の透視変換のやつじゃ駄目かな?
ライトに近いほど精度高くなるって意味なさそう。
みんなはどうしてる?
944 :
デフォルトの名無しさん:2009/10/22(木) 23:59:36
普通にLSPSM使えばいいじゃん
すみませんDirectX9でなのですが、
バウンディングボックスからD3DXVec3Projectでメッシュに対応する2D座標を作っているのですが
バウンディングボックスのmin max値は正常に出力できていて
そこからカメラ横回転を4分割(90度毎)。 縦を水平以上か以下かで2分割の計8分割し
どの3D頂点が2D座標のどの最大/最小値になるかリストを作って計算しているのですが、
2Dのxの最大値と最小値が入れ替わっていたり
2Dのy座標が角度によって入れ替わったりとアベコベな状態になってしまいます。
2日程無理やり数値が合うようにならないかあれこれ試しているのですが上手く行きません;
バウンディングボックスから正しい2D座標を割り出す計算式は有ったら紹介して下さると助かります orz
もしかしてD3DXVec3Project使ってるのは自分くらいで他の方法で実現するのが定番だったりするのでしょうか;
正直日本語が分からん
お前の頭の中ではそれで完結してるのかもしれんが
他人に理解してもらうにはもう少し努力が必要
言葉が抜けてますね・・すみません orz
なんとか無理矢理補正する方法を見つけたので
ブラックボックスが出来たような嫌な気分ですが・・実装は出来ました。
失礼しましたー・・ orz
948 :
858:2009/10/23(金) 14:13:00
SetDialogBoxMode()を正常に呼び出せるようになった。
なんとD3DDeviceの初期化時に画面モードをA8R8G8B8にしていたのが原因だった!
X8R8G8B8にしたら問題なし。
ただ描画を止めている間、再描画が行われないので他のウィンドウで隠れた部分がつぶれてしまうな。
WM_PAINTのハンドラを実装するのが面倒に感じたので、
いったんビットマップでゲーム画面のキャプチャを作成して
PixtureBoxに貼り付けて表示させることにした。
Win32APIで直接書いてるならここまでやらなくてもいいけど、
さしあたりこれでも速度上の問題はないのでよしとする。
すみません。
メッシュコンテナからバウンディングボックスを生成する関数は無いでしょうか?
D3DXFrameCalculateBoundingSphere()なら見つかるのですが・・。
D3DXComputeBoundingBox
>>948 SetDialogBoxModeをTRUEにすると、Presentでダイアログが上書きされなくなるから
描画を止める必要はないよ。
>>950 やっぱりメッシュコンテナから直接ボックスってのは無いんでしょうね。
ありがとうございました。
リソースの作成に関してヘルプにほとんどのアプリケーションはD3DPOOL_MANAGEDが
良いみたいな事を書いてあったので疑問に思ったことを質問させてください。
D3DPOOL_MANAGEDを指定するとビデオ メモリーとシステム メモリーの両方にメモリが確保されるようですが
これを使うメリットってデバイスリセット時の自動復旧だけなんですか?
だとするとデバイス失効時の対処が苦にならない場合は静的なバッファであっても
D3DPOOL_DEFAULTで作成した方が速度の面でもメモリの面でも
有利という事ですか?
MANAGEDにしておけばビデオメモリが足りなくなっても何とかしてくれるかもね。
>>953 色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
それが分かっているなら好きにすればいい。
プログラミングは自由なものなんだから。
D3DPOOL_MANAGEDはIDirect3D9Ex以降で使えない
D3D9では素直にD3DPOOL_MANAGEDを使っておく方がいいよ。
頑張って作っても複雑怪奇なシステムに仕上がるし、どうせ将来性がない。
D3d9前提ののシステムをVista以降に向けてリファクタリングする過程で9Exを通過し、
そこでMANAGED不要になっておくのが吉。
>>955 >色々と制限があるぞ。例えば一部初期化方法を除いてロックできないとか。
確実に使い方が分かっていない。
出直してこい。
色々とレスありがとうございます。
>>954 今までビデオメモリが足りなくなるという状況は考えていませんでした・・・。
そういう場合、普通は確保時に失敗するんでしょうね。
仮にMANAGEDが自動で何とかするとしても描画毎にシステムメモリとビデオメモリを
往復しないといけないので毎回デバイスをリセットするのと同じように重くなる気はします。
>>955 MANAGEDには制限がありますが、DEFAULTはそれに比べフリーですよね。
>>956 まじっすか?レガシー気味?
>>957 将来性がないっていうのは、複雑奇怪なシステムを作った場合の話ですよね?
私はリソース管理をDXUTを通して行なう予定なので
リソース管理におけるMANAGEDとDEFAULTの複雑さは変わらないし
描画シーンの管理としては動的なバッファを多用するほうが楽な気がします。
960 :
953:2009/10/23(金) 22:15:46
皆様のレスに答えながらHELPを読み直した結果を、
自問自答っぽいくなりますが、まとめてみます。
>静的なバッファであってもD3DPOOL_DEFAULTで作成した方が
>速度の面でもメモリの面でも有利か?
DEFAULTで作成したバッファはMANAGEDで作成したバッファより
速度重視の領域に置かれやすい。
逆に言えば動的なバッファ用にその領域を残しておくのが吉。
もしも動的なバッファを作らなければMANGEDがその領域を使うだろうし。
そしてMANAGEDが使うシステムメモリもRAMを奪うわけではないので
メモリの面でMANAGEDがネックになるとも思えない。
結局、DEFAULTのリソースがひとつでもあれば
それ用の管理機能が必要になるし、
その管理機能があればMANAGEDはいらないし。
多少凝ったことをすればDEFAULTは外せないし。
エフェクトファイルが複数ある場合、1つのテクニックで書き直さないといけないのでしょうか?
トゥーン+映り込み(環境マッピング)+バンプの3つのエフェクトファイル(.fx)があってそれぞれ単体では正常に動くのですが、
同時に2つ以上を使いたい場合どうなるのかと思いまして。
964 :
デフォルトの名無しさん:2009/10/23(金) 23:33:13
質問させてください。
VC++2008ExpressEditonを使ってDirect3Dを触っているのですが、
.ddsファイルを点灯表示するプログラムを作りました。
しかし、exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
exeに.ddsファイルを組み込む方法はないのでしょうか?
>>964 普通にexeにリソースとして放り込んでおけばいいんじゃね?
D3DXでリソースを読み込むAPIだってあるんだし。
DirectX関係ないし?
>exeの相対パス上に.ddsファイルがないとエラーで終了してしまいます。
意味が分からん
exeと同じフォルダにddsがないと落ちるって意味なのか?
967 :
デフォルトの名無しさん:2009/10/24(土) 00:01:59
関係ないかも
DirectX使う上で外部にあったらじゃまなファイルを
exe内に取り込むVC++的技があるんじゃないかな〜・・・と思いまして
あーHSPみたいに必要なファイルをまとめたいのね
シェーダーをソースに書くってのは出来るけど・・・
リソースで埋め込む方法も知らないなんてどんだけ素人なんだよ!
埋め込むのはいいけど
データが増えると数100MBとか数GBのexeが出来上がるけどいいの?
EEだとリソースの管理できないのでテキストで.rcファイル作ってビルド時にrc.exeを外部プログラムの実行できるようにすればいい
作るほうはDirectX関係ないのでここじゃ説明しない
二つに分ければ50MBだな
973 :
デフォルトの名無しさん:2009/10/24(土) 00:57:44
左様ですか
お作法的には外だしが基本ということですかね。
>>962 2つのエフェクトファイルを同時に使うということ?
それは無いな。include使えばいい。
DirectXでリストボックスの代わりに使えるようなものがSDKのサンプルの中にあるでしょうか?
あったら実装する方法を教えてください
大抵のサンプルのデバイス設定はリストボックスになってるだろ
お前の目は節穴か
977 :
975:2009/10/24(土) 10:30:10
設定のとこはプルダウンメニューっぽいですが、
ボタンを押さずリストボックスだけ利用する方法があるのでしょうか?
あるのなら実装方法を教えて欲しいのですが
DXUTguiとDXUTsettingsdlgにあるのだろうとは思いますが、
どこが使われているのか分かりません
あ、プルダウンメニューじゃなくてドロップダウンリストぽい、でした
よく分からないけどCDXUTListBox classってのが見つかったので、
多分これですよね
詳しく見てみます
DirectSoundでwavを再生しようと思うんですが
LPDIRECTSOUNDBUFFERに音楽データーを書き込むわけですから
音一つにつきバッファは一つずつ用意した方が良いんでしょうか?
はい
>>980 オンメモリ再生したいのかストリーミング再生したいのかで話が変わってくるんじゃね?
ていうか今時ならXAudio2使ったらどうよ。
983 :
980:2009/10/24(土) 18:38:00
オンメモリって一回全部読むやつですよね
じゃあそれです
Xaudio2か・・・健闘してみます
何度も実行しているうちにテクスチャが表示されなくなるんですけど
これはもしかして終了時に解放してない部分があるって事なんでしょうか?
何度も実行してるのかコードの一部なのかプログラム自体なのかで話が変わってくるだろ常考。
なんで質問する子は舌っ足らずなのばかりなのか……。
わかってりゃしつもんしねーよあほ
988 :
985:2009/10/25(日) 00:13:18
毎度毎度出現する貴様はだれだ?
>>986 はあ
プログラムのスタート時にXファイルを読み込んで
終了時にデータを破棄しているんですが
実行→終了を繰り返しているうちにオブジェクトのテクスチャが消え
真っ白になってしまうんです
やはり何か解放忘れがあるからこのような症状が出るんでしょうか?
>>985 とりあえず、リソースの開放と取得のタイミングでログを書き出して眺めてみたら?
リソースリークはトレースして解析するのが基本。
でも毎回思うんだけど
この辺に関してVCが役立たずすぎる
リークにしてもせめて確保したソースの場所ぐらい
newやdelete、createやreleaseに仕組みを入れてもいんじゃねぇか?
デバッグバージョンぐらいにはよ
Managed DirectXでも使えばいいじゃないか。
見捨てられてるけど
>>992 すでにそれがなにもんかすらわからねぇよw
それは無知なだけ
>>994 じゃあ、これからManaged DirectXって流行るの?
>>988 Xファイルのテクスチャが複数あるのに1つしか解放していないとかよくあるミスはまさかね。
テクスチャを読み込んでいる部分がメモリ破壊されていて、偶然上手く動いているという面倒な原因もあるから注意ね。
まぁ、テクスチャやXファイルなんかは管理するクラスを作っておいて、
最悪実行終了時に全解放する関数を走らせるのが無難かな。
Xファイルだとそこらの解説サイト通りに組み込むと使用するテクスチャが同じなのに別々に読み込む無駄が出るし。
与謝蕪村って誰? → お前無知だな → え、この人って流行るの?
そんな時代もありました。
DirectInputでジョイスティックの軸入力の分解能とか取得できますか?
>>991 そういう機能ってVC6の頃からあるよ。
VCは悪くない。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。