ページ 11

D3DXCreateTextureFromFileExについて

Posted: 2014年4月26日(土) 10:00
by cattail
はじめましてcattailと申します。
スプライトでノベルゲーム制作中です。よろしくお願いいたします。
D3DXCreateTextureFromFileExについてなのですが、
DirectXの初期化直後にテクスチャを読み込んで絵を表示できているのですが、
ゲーム中に別の画像をD3DXCreateTextureFromFileExで読み込むとフリーズしてしまいます。
D3D_OKが返っているのでエラーは出ていないと思います。
最初に全部読んでおくとうまくいくのですが沢山絵を使うとメモリが大変になってしまうので
一枚づつリリースして読み込み直して、というのをやりたいのです。
レンダリング中に読み込むのはいけないのでしょうか?
それとも何か気を付けなければならない所などありましたら教えて頂けないでしょうか?
よろしくお願いいたします。

Re: D3DXCreateTextureFromFileExについて

Posted: 2014年4月26日(土) 12:11
by h2so5
cattail さんが書きました: ゲーム中に別の画像をD3DXCreateTextureFromFileExで読み込むとフリーズしてしまいます。
D3D_OKが返っているのでエラーは出ていないと思います。
D3DXCreateTextureFromFileExの呼び出し自体がフリーズするわけではないのですね?
状況がよく分からないので、フリーズが再現できる最低限のコードを貼っていただけると助かります。

Re: D3DXCreateTextureFromFileExについて

Posted: 2014年4月26日(土) 12:50
by cattail
ご返事ありがとうございます。
以下のようなソースになっています。

コード:

  
//初期化のとき
        if (pTexture[1] != NULL){pTexture[1]->Release();}//テクチャーのリリース
        if(D3DXCreateTextureFromFileEx(pDevice,"test1.jpg",160,160,0,0,D3DFMT_UNKNOWN,//「テクスチャオブジェクト」の作成
              D3DPOOL_DEFAULT,D3DX_FILTER_NONE,D3DX_DEFAULT,0x000000ff,NULL,NULL,&pTexture[1]) != D3D_OK){
              //エラー処理
              }

//スプライトの表示のとき(マルチメディアタイマーの中で回っています)
    pSprite[1]->Begin(D3DXSPRITE_ALPHABLEND);
    pSprite[1]->Draw(pTexture[1],&rect1,&vec3Center,&g_vecPosition,D3DCOLOR_ARGB(g_bAlpha,255,255,255));
    pSprite[1]->End();

//F1キーで2枚目を表示のとき
case WM_KEYUP:
    if( wp == VK_F1 ){//F1
        if (pTexture[1] != NULL){pTexture[1]->Release();}//テクチャーのリリース
        if(D3DXCreateTextureFromFileEx(pDevice,"test2.jpg",160,160,0,0,D3DFMT_UNKNOWN,//「テクスチャオブジェクト」の作成
              D3DPOOL_DEFAULT,D3DX_FILTER_NONE,D3DX_DEFAULT,0x000000ff,NULL,NULL,&pTexture[1]) != D3D_OK){
              //エラー処理
              }
    }
もしかすると全体の構築がおかしいのかもしれませんが、
上記のコードに基本的な間違いがあるかどうかもわからない状況です。
よろしくお願いします。

Re: D3DXCreateTextureFromFileExについて

Posted: 2014年4月27日(日) 11:39
by cattail
自己解決しました。
大変お騒がせいたしました。
一週間以上も悩んでいたのですが、恥ずかしながら自分のプログラムのバグでした。
テクスチャを読み込む時はレンダリングしないようにしていたのですが、
現在レンダリング中のときはレンダリングを終わるのを待って読み込む、というのを見落としていて
フリーズしていたようです。
ここに書き込むことで冷静になれました。感謝です。
ご返事くださった方ありがとうございました。
がんばって作っていきます。