DG-Caradの中核をなすコンポーネントです。Direct3Dの初期化やテクスチャ等の各種リソースの管理を行います。
(凡例:
読み取り専用
Published)
| コンストラクタ | Create |
| デストラクタ | Destroy |
| リソース管理 | RegisterResouce |
| UnregisterResource | |
| Direct3Dデバイスの制御 | CreateDevice |
| ReleaseDevice | |
| WindowMode | |
| FullscreenMode | |
| Reset | |
| 画面モード情報取得 | GetCurrentDisplayMode |
| IsAvailableDisplayMode |
Adapter : UINT
現在使われているディスプレイアダプタを示します
DeviceType : D3DDEVTYPE
現在使われているDirect3DDeviceのタイプを示します。DG-Caradでは以下のいずれかが有効です
| D3DDEVTYPE_HAL | ハードウェアアクセラレーションの使える、HALデバイスを使用しています |
| D3DDEVTYPE_REF | ソフトウェアでエミュレーションを行う、リファレンスラスタライザを使用しています |
Windowed : Boolean
ウィンドウ内で実行されているならTrue、フルスクリーンで実行されているならFalseを示します
BackBufferWidth : UINT BackBufferHeight : UINT BackBufferFormat : D3DFORMAT
現在使われているバックバッファの幅・高さ・フォーマットをそれぞれ示します
PresentationParameters : D3DPRESENT_PARAMETERS
現在の画面設定の詳細を示します。
D3DPRESENT_PARAMETERS構造体については、DirectX9 SDKのリファレンスをどうぞ
BackBuffers[idx:Integer]:IDirect3DSurface9
バックバッファを示すIDirect3DSurface9オブジェクトを返します。
トリプルバッファリングなどを用いている場合は、バックバッファの数は2以上になるため、配列プロパティです。BackBuffers[0]に最初のバックバッファが入ります。
BackBufferCount : UINT
使用しているバックバッファの枚数を示します。
BackBuffers[0] 〜 BackBuffers[BackBufferCount-1] までが有効です。
DepthStencilSurface : IDirect3DSurface9
使用しているデプスステンシルサーフェスを示します。
デプスステンシルサーフェスを使用していない場合、Nil が格納されています。
UseREFDevice: Boolean
Trueの時、ハードウェア3Dアクセラレータの使用を避け、リファレンスラタライザによるエミュレーションを使うようにします。
Falseの時、出来る限りハードウェア3Dアクセラレータを使用します。
デフォルト値はFalseです。
Trueを指定すると多くの場合、極端に速度が低下するので、デバッグ目的以外でTrueをセットする事はまずないでしょう。
UseSoftwareVertexProcessing : Boolean
Trueの時、ハードウェア頂点処理機能の使用を避け、ソフトウェア頂点処理を使うようにします。
Falseの時、出来る限りハードウェア頂点処理機能を使用します。
デフォルト値はFalseです
DebugOption : TDGDebugOption TDGDebugOption = set of (dgoHaltOnError, dgoDebugMessage, dgoDetailedLog);
デバッグメッセージの出力についてのオプションです。
以下の組として指定します。
| dgoHaltOnError | 致命的なエラーが生じた場合、すぐにHaltしてプログラムを終了させます |
| dgoDebugMessage | デバッグメッセージを出力します |
| dgoDetailedLog | 詳細なデバッグメッセージを出力します。dgoDebugMessageが指定されていない場合、この値は意味を持ちません |
デバッグメッセージは、実行ファイルと同じディレクトリに、DGCarad_DebugLog.txtというファイル名で生成されます。
D3D : IDirect3D9
使用しているDirect3Dオブジェクトを示します。Direct3D APIを直接呼び出すときにどうぞ。
D3DDevice : IDirect3DDevice9
使用しているDirect3DDeviceオブジェクトを示します。Direct3D APIを直接呼び出すときにどうぞ。
…なんか投げやりな説明だな(^^;)
具体的には、レンダリングステートの設定などに用います。
constructor Create(AOwner:TComponent);
TDGCaradオブジェクトを生成します。
生成時にDirect3Dの初期化を行います。また、画面モードの初期化も行います。この際、バックバッファのサイズはウィンドウのクライアント領域のサイズにあわせて初期化します。
コンポーネントなので直接呼ぶことはまず無いでしょうけど。
destructor Destroy;
TDGCaradオブジェクトを解放します。
解放時にDirect3Dの解放を行い、必要ならば(明示的に解放されていなければ)DGCaradリソースの解放も行います。
コンポーネントなのでこれも直接呼ぶことは無いでしょうけれど(^^;)
function RegisterResouce(res:TObject; OnCleanup, OnRecover, OnReset, OnAfterReset:TDGNotifyEvent; debugName:String = ''):UINT; TDGNotifyEvent = procedure of Object;
resで示されるオブジェクトを、DGCaradリソースとして登録します。
DGCaradリソースとは、Direct3DDeviceの状態の変化 (画面モードが切り替わったとか、フルスクリーンでの実行中にフォーカスを変えられたとか) による影響を考慮しなければならないオブジェクトの事です。
Direct3DDeviceの状態の変化によって生じる、以下の4つのイベントを受け取ることが出来ます。
| OnCleanup | 画面モードの切り替え時、DGCaradオブジェクトの解放時など、使用中のDirect3DDeviceを解放する直前に発生します |
| OnRecover | 画面モードの切り替え後、新しくDirect3DDeviceを生成しなおした直後に発生します |
| OnReset | Direct3DDeviceがリセットされる直前に発生します |
| OnAfterReset | Direct3DDeviceがリセットされた直後に発生します |
それぞれ、同名の引数によってイベントハンドラを設定します。受理する必要のないイベントには、Nilを指定してください。
debugName引数は、デバッグメッセージに出力される、そのオブジェクトの名前です。アプリケーションの挙動とは直接関係ありません。
返り値に、リソースを識別する4バイト整数値を返します。
procedure UnregisterResource(id:UINT);
idで識別されるDGCaradリソースの登録を解除します。
DGCaradリソースとして登録したオブジェクトは、必ずオブジェクト自体の解放より前に、このメソッドを呼び出して登録解除を行ってください。
procedure CreateDevice(Adapter:UINT; DeviceType:D3DDEVTYPE;
hFocusWindow:HWND; BehaviorFlags:DWord;
var presentationParameters:D3DPRESENT_PARAMETERS);
Direct3DDeviceを作成します。すでに作成済みの場合、既存のDirect3DDeviceを解放した後に、作成が行われます。
パラメータの設定を詳細に行うことが出来ますが、面倒です(^^;) 画面モードの初期化をより簡単に行うためには、WindowModeメソッド、FullscreenModeメソッドを利用してください。どちらでも設定できないような画面モードにしたい場合のみ、このメソッドを使ってください。
UseREFDevice、UseSoftwareVertexProcessing プロパティより、こちらでの設定を優先します。
Adapterで指定されたディスプレイアダプタを使用し、デフォルトのディスプレイアダプタを指定したい場合は、D3DADAPTER_DEFAULTを指定してください。
DeviceTypeで、使用するDirect3DDeviceのタイプを選択できます。DG-Caradでは以下のいずれかが有効です
| D3DDEVTYPE_HAL | ハードウェアアクセラレーションの使える、HALデバイスを使用しています |
| D3DDEVTYPE_REF | ソフトウェアでエミュレーションを行う、リファレンスラスタライザを使用しています |
hFocusWindowで、Direct3Dが画面の出力先として利用するフォームのハンドルを指定します。基本的には、コンポーネントの貼られたフォームのハンドルを指定します。
BehaviorFlags、presentationParametersで、それぞれDirect3DDeviceの挙動、画面モードについての詳細を設定できます。詳細についてはDirectX SDKのリファレンスで、IDirect3D9::CreateDeviceの項をお読みください。
procedure ReleaseDevice;
Direct3DDeviceを解放します。
CreateDevice同様、あまり使われることは無いと思いますが、何らかの理由でプログラム実行中にDirect3DDeviceを一旦解放する必要が出た場合に呼び出してください。
TDGCarad解放時に、自動的にこのメソッドは実行されるので、ユーザがこのメソッドを使うことはあまり無いでしょう。
procedure WindowMode(width,height:UINT;
depthStencilFmt:Array of D3DFORMAT;
swapEffect:D3DSWAPEFFECT= D3DSWAPEFFECT_DISCARD;
multiSampleType:D3DMULTISAMPLE_TYPE = D3DMULTISAMPLE_NONE;
Adapter:UINT = D3DADAPTER_DEFAULT);
ウィンドウモードでDirect3DDeviceを作成します。すでに作成済みの場合、既存のDirect3DDeviceを解放した後に、作成が行われます。
width, height でバックバッファのサイズを指定します。また、フォームのクライアント領域のサイズも、これに合わせられます。
depthStencilFmtで、使用したいデプスステンシルサーフェスのフォーマットを、第一希望から順に指定します。 空の配列を渡すと、デプスステンシルサーフェスを使用しません。
swapEffectで、スワップエフェクトを指定します。
multisampleTypeで、FSAA(フルスクリーンアンチエイリアシング)の設定を行うことが出来ます。
Adapterで指定されたディスプレイアダプタを使用し、デフォルトのディスプレイアダプタを指定したい場合は、D3DADAPTER_DEFAULTを指定してください。
procedure FullscreenMode(width,height:UINT; format:D3DFORMAT;
depthStencilFmt:Array of D3DFORMAT;
refreshRate:UINT = 0;
presentationInterval:UINT = D3DPRESENT_INTERVAL_IMMEDIATE;
swapEffect:D3DSWAPEFFECT = D3DSWAPEFFECT_DISCARD;
multiSampleType:D3DMULTISAMPLE_TYPE = D3DMULTISAMPLE_NONE;
Adapter:UINT = D3DADAPTER_DEFAULT);
フルスクリーンモードでDirect3DDeviceを作成します。すでに作成済みの場合、既存のDirect3DDeviceを解放した後に、作成が行われます。
width, height でバックバッファのサイズを指定します。画面の解像度もこの値に合わせられます
formatでバックバッファのピクセルフォーマットを指定します。画面の色数などに影響します
refreshRateでモニタの垂直周波数をコントロールできます。Hz単位で指定し、0を指定するとデフォルトの周波数になります
presentationIntervalでスワップのタイミングを決定します。以下の値が有効です
| D3DPRESENT_INTERVAL_ONE | 直後の垂直帰線期間に合わせてスワップが起こります |
| D3DPRESENT_INTERVAL_TWO | 垂直帰線期間のうち2回に1度に合わせてスワップが起こります |
| D3DPRESENT_INTERVAL_THREE | 垂直帰線期間のうち3回に1度にに合わせてスワップが起こります |
| D3DPRESENT_INTERVAL_FOUR | 垂直帰線期間のうち4回に1度にに合わせてスワップが起こります |
| D3DPRESENT_INTERVAL_IMMEDIATE | 垂直帰線期間を待たずに、すぐスワップが起こります |
D3DPRESENT_INTERVAL_ONEとD3DPRESENT_INTERVAL_IMMEDIATE以外は、サポートしていない環境も多い事もありますし、使いみちはあまり無いでしょう。
depthStencilFmtで、使用したいデプスステンシルサーフェスのフォーマットを、第一希望から順に指定します。 空の配列を渡すと、デプスステンシルサーフェスを使用しません。
swapEffectで、スワップエフェクトを指定します。
multisampleTypeで、FSAA(フルスクリーンアンチエイリアシング)の設定を行うことが出来ます。
Adapterで指定されたディスプレイアダプタを使用し、デフォルトのディスプレイアダプタを指定したい場合は、D3DADAPTER_DEFAULTを指定してください。
使いたい解像度、色数の画面モードをディスプレイアダプタがサポートしているかどうかは、IsAvailableDisaplayModeメソッドを使うと簡単に知ることが出来ます。
procedure Reset;
ロストしたDirect3DDeviceを復元し、必要ならば、DG-Caradリソースに対して内容の復元を通知します。
function GetCurrentDisplayMode(Adapter:UINT):D3DDISPLAYMODE;
Adapterで示されるディスプレイアダプタについて、現在の画面モードを取得します。
BackBufferWidthプロパティなどを使っても、現在の画面モードについての情報を得ることは出来ますが、その方法ではReleaseDeviceなどを呼び出してDirect3DDeviceを解放した後の状態では、正しい状態を得ることが出来ません。
このメソッドを使えば、そうした状況でも、画面モードを正しく得ることが出来ます。
function IsAvailableDisplayMode(Adapter:UINT; screenWidth,screenHeight:UINT; freq:UINT; fmt:D3DFORMAT):Boolean;
Adapterで示されるディスプレイアダプタで、 幅screenWidth、高さscreenHeight、表示周波数freq Hz、バックバッファのフォーマット fmt という画面モードをサポートしているかテストします。