DirectX9関数「D3DXCreateTexture」について

このQ&Aのポイント
  • DirectX 9の関数「D3DXCreateTexture」についての詳細な情報と使い方を教えてください。
  • 引数「Pool」を「D3DPOOL_DEFAULT」にした場合と「D3DPOOL_MANAGED」にした場合の違いについて教えてください。
  • 関数「D3DXCreateTexture」を使用する際に参考になる本やホームページがあれば教えてください。
回答を見る
  • ベストアンサー

DirectX9関数「D3DXCreateTexture」について

DirectX 9を使用して、関数「D3DXCreateTexture」を用いて、テクスチャ表示をしています。この関数について、教えてください。 テクスチャの作成に使っているのですが、引数によって、ソフトウエアの動作が違います。その理由を調べたいのですが、情報がいまいち、手に入りません。参考となる本やホームページがありましたら、教えてください。 D3DXCreateTexture(pDevice,Width,Height,MipLevels,Usage,Format,Pool,*ppTexture)の引数「Pool」を「D3DPOOL_DEFAULT」にした場合は表示画像が画面横方向にずれるまたは20ピクセル単位で入れ替わります。「D3DPOOL_MANAGED」にした場合は表示画像が正しくなります。 この2つの引数の違いがよくわかりません。 長文になって、申し訳ございません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

とりあえずドキュメント見ましょう。。。 DirectXなどのSDKはドキュメントが用意されていて、 関数の説明、使用方法、パラメータの説明が出ています。 本題のD3DPOOL_MANAGEDとD3DPOOL_DEFAULTですが、 大雑把にいえばリソースのメモリ配置の違いです。 D3DPOOL_DEFAULTはリソースをそれが使われる最も適した ビデオメモリに対して格納されます。格納したリソースが 動的に作成したテクスチャか特定のドライバフォーマット以外は ロックをかけることが出来ない為、通常これらのメモリに デバイスが直接アクセスすることが出来ません。 D3DPOOL_MANAGEDはリソースをデバイスがアクセスできる メモリ領域に配置するため、細かな操作がが出来るというわけです。 通常は D3DPOOL_MANAGED を使う方が多いようです。

freeman
質問者

お礼

回答、ありがとうございました。 また、何かありましたら、よろしくお願いします。

関連するQ&A

  • D3DXCreateTextureFromFileInMemory関数について

    DirectXのSDK内に テクスチャ作成を行う D3DXCreateTextureFromFileInMemory関数がありますが、 この引数pSrcDataについて ([in] テクスチャの作成に使うメモリ内のファイルへのポインタ。) HBITMAPクラスのhBitmapハンドルを渡す事は可能でしょうか? (行いたいことは、DirectXの描画範囲にライブ画像のような 画像描画領域を作成したいです。) ご教授の程、宜しくお願いします。

  • DirectX9でのテクスチャフォーマットについて

    いつもお世話になります。 VC6.0&WIN2000、DirectX9.0でプログラムを作っています。 D3DXCreateTextureFromFileInMemoryEx関数でテクスチャを読み込んだあと、テクスチャのメンバ関数のGetLevelDescを行ってみました。 すると、フォーマットの返り値が必ず D3DFMT_A8R8G8B8 になります。 D3DXCreateTextureFromFileInMemoryEx関数で指定したフォーマットと違うのですが、これは何故でしょうか? また上記のせいか、元々の画像ファイルのサイズよりも、多くのメモリを使用しています。 おそらく、1ピクセルを D3DFMT_A8R8G8B8 の大きさでメモリを確保してしまうからだと思うのですが、本来の画像フォーマットの大きさで確保する方法はないでしょうか? それでは、どうぞ宜しくお願いします。

  • DirectXでのテクスチャの色抜きについて

    DirectXのテクスチャについて質問させていただきます. CreateTexture関数で空のテクスチャを作り,そこに画像を貼り付けることで任意の画像テクスチャを作成したのですが,こういったテクスチャを色抜きをして貼り付けるにはどうすればよろしいのでしょうか? イメージとしてはD3DXCreateTextureFromFileExのカラーキーで指定した色が透けるといったようなことを自作テクスチャでも行いたいのです.

  • DIRECTXのスプライト描画で質問です

    いつもお世話になってます。 DIRECTX9.0、VC++6.0を使っています。 DIRECTXでLPDIRECT3DTEXTURE9(テクスチャ)とLPD3DXSPRITE(スプライト)を使って描画しています。 ですが、テクスチャの縦と横のサイズが256*256を超えたものが正常に表示できません。 色々調べてみると、縦と横のピクセル数が2の乗数以外の中途半端なサイズのテクスチャは、キリの良いサイズに変換されるみたいですが、一応縦横共に2の乗数のテクスチャなのにうまく表示できません。 例:768*512ピクセルのTGA形式のファイル 大きな画像ファイルを表示する方法はないでしょうか? どうぞ宜しくお願いします。

  • テクスチャがうまく表示されない[DirectX]

    こんにちわ。初歩的な質問かもしれませんが、よろしくお願いします。 テクスチャは読み込まれてはいるのですが、(色だけは表示される。違う画像にすると色が変わる)どうも模様が表示されず、画像どおりになりません。 とりあえず関係ありそうなコードだけ。。 -----頂点定義-------- struct CUSTOMVERTEX {FLOAT X,Y,Z; D3DVECTOR NORMAL; FLOAT U,V;}; #define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1) ----頂点------ struct CUSTOMVERTEX t_vert[]={ {0.0f, 0.0f,0.0f,0,1,0, 0.0f, 0.0f,}, {-30.0f,0.0f,0.0f,0,1,0, 1.0f, 0.0f,}, {0.0f, 0.0f,30.0f,0,1,0, 0.0f, 1.0f,}, {-30.0f,0.0f,30.0f,0,1,0, 1.0f, 1.0f,}, }; -------描画処理------ d3ddev->SetStreamSource(0, t_buffer, 0, sizeof(CUSTOMVERTEX)); d3ddev->SetTexture( 0 , texture ); d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); ------------------------------------------------------------- テクスチャのサイズは512x512px、ライトはD3DRS_LIGHTNINGでTRUEにしてもFALSEにしても変化なし。 環境は以下のとおりです。 OS: WindowsXP コンパイラ:VisualStudio2005 DirectX9.0

  • [DirectX9.0]テクスチャのサイズについて

    Visual C++ 6.0でDirectX9.0を使用しています。 画像ファイルからテクスチャを作り、それを画面に表示します。 その時に、画像ファイルのサイズが縦横どちらとも2の階乗の数字でないと、勝手に拡大表示されたりしてうまく表示されません。 数字が2の階乗でないサイズの画像ファイルを、テクスチャを使用してそのままの大きさで貼り付けるのにはどうすれば良いのでしょうか? よろしくお願いします。

  • DirectXで画像表示

    DirextXでゲームを作ってるんですがわからないことがあるんで教えてください。 背景として640×640(ピクセル)の画像を表示したくて(ウィンドウはサイズ640,640で作成) RECT from; D3DXVECTOR3 to; D3DCOLOR color; from = makeRect(0,0,640,640); to = D3DXVECTOR3(0,0,0); color = D3DCOLOR_ARGB(255,255,255,255); if(g_pTexture != NULL) g_pSprite->Draw(g_pTexture, &from, NULL, &to, color); RECT makeRect(int x, int y, int w, int h) { RECT box; box.left = x; box.top = y; box.right = w; box.bottom = h; return (box); } //g_pTexture = D3DXCreateTextureFromFileEx関数で作成したテクスチャオブジェクト。 //g_pSprite = スプライトオブジェクト。 大体こんな感じの流れで背景画像を表示したらウィンドウ全体に画像の一部分だけが拡大されて表示されました。なぜ画像全体がうまく表示されないんでしょうか? 例えば64×64のキャラクタ画像を from = makeRect(0,0,64,64); to = D3DXVECTOR3(0,0,0); で表示したら画面左上にうまく表示されました。 初心者なんであまりうまく説明できないんでかなりわかりにくいかもしれませんが、わかる方よろしくお願いします。

  • エクセルの並び替えについて(少し特殊な条件)

    エクセルで画像の width と height の大きさがが一致して、なおかつ200ピクセル以上の画像を降順で並び変えたいのですがどのように関数を設定すればよいか分からず悩んでおります。 例) <img src="〇〇.jpg" width="250" height="250"/>〇〇</a> <img src="〇〇.jpg" width="200" height="200"/>〇〇</a> こういった並び替えがしたいのですがどのようにすればよいでしょうか? どなたかお教えいただけませんでしょうか? よろしくお願いいたします。

  • DirectX LPDIRECT3DDEVICE9のマルチスレッドでの使用について

    お世話になっております。 さて、現在DirectX 9.0cを用いたゲームを製作しています。 このゲーム内で、いわゆるNowLoadingの画面を作成しているのですが、ここで気になることがあります。 ここでのNowLoadingの要件は、"描画とは別にスレッドを作成し、そのスレッドでロード処理を行う"ことです。 そこで、ドキュメント(古いDirectXの日本語ドキュメント)でマルチスレッドについて言及している箇所を検索してみると、CreateDeviceの引数にD3DCREATE_MULTITHREADEDを入れると、マルチスレッドに対応すると書いてあります。しかし、同時にパフォーマンスを下げるとの記述もあります。 しかし、D3DXCreateTextureFromFileなどD3DXCreate**系の関数が、LPDIRECT3DDEVICE9に対して参照だけを行い、BeginSceneなど描画に関する関数の挙動には(LPDIRECT3DDEVICE9に同時にアクセスしたとしても)、なんら影響がないならば、わざわざこのD3DCREATE_MULTITHREADEDフラグを使いたくありません。 そこで、サンプルを作成してみました。 http://briefcase.yahoo.co.jp/bc/multithreaddevicesrc/lst?&.dir=/&.src=bc&.view=l このサンプルは、上記の処理をD3DCREATE_MULTITHREADEDフラグをいれず、そのまま行っているもので、テクスチャを別スレッドで、ひたすらロードと、解放を行っています。これを実行した結果、特に問題ない(強制終了などしない)ように見えました。 この結果は、"たまたま動いている"だけなのでしょうか、それとも"必然的"なもので、別段行ってもいいものなのでしょうか?もしくは、状況による(SetRenderStateなどの使い方による、など)ものなのでしょうか? ご教授よろしくお願いします。 環境は、DirectX9.0c (2008March)、XP sp3 になります。

  • DirectXでの半透明PNG画像について

    半分が半透明で、もう半分は透明でない単色のPNG画像(128×128サイズ)を作成しました。 ソフトはAdobe Photoshop Elements 6.0で、アルファ設定されている「PNG-24」です。 D3DXCreateTextureFromFileEx関数で、そのPNG画像を読み込んで描画したのですが、半透明の部分は描画されず、透明にしていない片方しか描画されませんでした。 半透明の部分も描画されるようにするにはどうすればよいでしょうか? 自分でもいろいろ調べてみたのですが、原因がよく分からないので質問させていただきます。 一応、参考程度に… // スプライトオブジェクトの作成 if ( FAILED( D3DXCreateSprite( g_pd3dDevice, &m_pSprite ) ) ) {     // エラー処理 } D3DXIMAGE_INFO info; // テクスチャの読み込み if( FAILED( D3DXCreateTextureFromFileExA( g_pd3dDevice,                                FileName,                                D3DX_DEFAULT,                                D3DX_DEFAULT,                                D3DX_DEFAULT,                                0,                                D3DFMT_A1R5G5B5,                                D3DPOOL_MANAGED,                                D3DX_FILTER_NONE,                                D3DX_FILTER_NONE,                                0,                                &info,                                NULL,                                &g_pd3dTexture) ) ) {     // エラー処理 }

専門家に質問してみよう