Re: Direct3Dバージョン等について ( No.1 ) |
- 名前:管理人 日時:2025/04/11 04:20
> DxLibはDirectX 9・10・11 に対応していると認識しておりますが、
DXライブラリが対応しているのは Direct3D 9 と Direct3D 11 の2つのバージョンです
> デフォルトで使用されるDirectXのバージョンは、あらかじめ決まっているのでしょうか?
はい、デフォルトでは Direct3D 11 が使用できる場合は Direct3D 11 を使用します
Direct3D 11 が使用できない場合で Direct3D 9Ex が使用できる場合は Direct3D 9Ex を使用します
Direct3D 9Ex が使用できない場合で Direct3D 9 が使用できる場合は Direct3D 9 を使用します
Direct3D 9 が使用できない場合はソフトウェアレンダリングになります
> また、SetUseDirect3DVersion 関数を使用して Direct3D のバージョンを明示的に指定した場合、
> 指定したバージョンにマシン側が対応していないときの挙動についても、併せて教えていただけますと幸いです。
SetUseDirect3D( DX_DIRECT3D_11 ); が実行された場合は、デフォルト動作と同じです
SetUseDirect3D( DX_DIRECT3D_9EX ); が実行された場合は Direct3D 9Ex が使用できる場合は Direct3D 9Ex を使用します
Direct3D 9Ex が使用できない場合で Direct3D 9 が使用できる場合は Direct3D 9 を使用します
Direct3D 9 が使用できない場合はソフトウェアレンダリングになります
SetUseDirect3D( DX_DIRECT3D_9 ); が実行された場合は Direct3D 9 が使用できる場合は Direct3D 9 を使用します
Direct3D 9 が使用できない場合はソフトウェアレンダリングになります
SetUseDirect3D( DX_DIRECT3D_NONE ); が実行された場合はソフトウェアレンダリングになります
|
Re: Direct3Dバージョン等について ( No.2 ) |
- 名前:たける 日時:2025/04/11 11:50
すみません。ご回答ありがとうございます。
DirectX10も対応していると勘違いしておりました。
該当の関数の挙動等についても概ね理解できたのですが、
ソフトウェアレンダリングというのは、CPUを主に使用した計算・描画という事なのでしょうか?
また、少し話が変わるのですが、ご相談させてください。
現在、ImGui と DxLib,及びDirectX9 を組み合わせてコードを書いておりまして、
LoadGraph で読み込んだ画像の、内部で使われている DirectX9 のテクスチャ(LPDIRECT3DTEXTURE9)を取得する方法があるのか気になっております。
当方は、DirectX に特別詳しいわけではないのですが、LoadGraph なども内部的には、
各DirectXバージョンに応じた方法で、テクスチャを作成し、GPU に送っているという理解で合っていますでしょうか。
今のところは LoadGraphとは別に、
D3DXCreateTextureFromFileEx等 経由でテクスチャを作成し、それを
ImGui::Image(static_cast<ImTextureID>(reinterpret_cast<intptr_t>(gTexture)), ImVec2(width, height));
という形で ImGui に渡して表示させています。
ただ、同じ画像を LoadGraph でもう一度読み込んでいるような状態になっていて、二重にリソースを作成してしまっている気がしており……
もし、LoadGraph で読み込んだ画像の Direct3D テクスチャポインタを取得する方法、その他対処法等があれば、ご教示いただけますと幸いです。
お忙しいところ恐縮ですが、ご回答頂けましたら幸いです
|
Re: Direct3Dバージョン等について ( No.3 ) |
- 名前:たける 日時:2025/04/11 23:35
すみません、先ほどの投稿で環境についての記述が抜けていました。
使用しているDxLibは「mingw版 12_2_0_x86_64_release_win32_seh_ucrt_rt_v10_rev2」で、ImGuiと併用しています。
よろしくお願いいたします。
|
Re: Direct3Dバージョン等について ( No.4 ) |
- 名前:管理人 日時:2025/04/12 02:45
> ソフトウェアレンダリングというのは、CPUを主に使用した計算・描画という事なのでしょうか?
はい、DrawGraph などの画像処理に Direct3D を介した GPU の機能を使用せず CPU だけで処理します
( 最終的に出来上がった画像を画面に出力するとき( ScreenFlip のとき )のみ Direct3D や Win32 API の画像処理 API を使用します )
> LoadGraph で読み込んだ画像の、内部で使われている DirectX9 のテクスチャ(LPDIRECT3DTEXTURE9)を取得する方法があるのか気になっております。
既存のバージョンでは取得する方法はありません
> 当方は、DirectX に特別詳しいわけではないのですが、LoadGraph なども内部的には、
> 各DirectXバージョンに応じた方法で、テクスチャを作成し、GPU に送っているという理解で合っていますでしょうか。
はい、合っています
> もし、LoadGraph で読み込んだ画像の Direct3D テクスチャポインタを取得する方法、その他対処法等があれば、ご教示いただけますと幸いです。
LoadGraph で読み込んだ画像のテクスチャポインタを取得する関数を追加しましたので、
よろしければその関数を追加したこちらの暫定最新バージョンをダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 12 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース
(中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
以下の関数を追加しました
// グラフィックハンドルが持つ IDirect3DTexture9 を取得する( Direct3D 9 を使用している場合のみ有効 )
// ( 戻り値を IDirect3DTexture9 * にキャストしてください )
const void *GetGraphIDirect3DTexture9( int GrHandle ) ;
注釈の通り LoadGraph の戻り値であるグラフィックハンドルを引数に渡すと IDirect3DTexture9 のアドレスが返ってきます
ただ、戻り値自体は void型のアドレスとなっていますので、戻り値を IDirect3DTexture9 * にキャストしてください m(_ _)m
LPDIRECT3DTEXTURE9 pTexture = ( LPDIRECT3DTEXTURE9 )GetGraphIDirect3DTexture9( GrHandle );
 |
Re: Direct3Dバージョン等について ( No.5 ) |
- 名前:たける 日時:2025/04/12 05:49
迅速なご対応とご返答、誠にありがとうございます。
DxLibGCC_MinGWTest.zipを試したところ、期待通りの動作を確認できました。
まさか、ちょうど欲しかった機能の関数が使えるようになるとは思っていなかったので、大変助かりました。
その他いろいろとお手数をおかけしてしまい、申し訳ありません。
無事に解決いたしましたので、このスレッドは解決済みとさせていただきます。
本当にありがとうございました。m(*_ _)m
|
Re: Direct3Dバージョン等について ( No.6 ) |
- 名前:たける(解決済み) 日時:2025/04/12 05:51
すみません。解決済みが抜けていました。
|