TDGCarad

タスク

 DG-Caradの中核をなすコンポーネントです。Direct3Dの初期化やテクスチャ等の各種リソースの管理を行います。

 

リファレンス目次

プロパティ

(凡例:    読み取り専用   Published)

現在の画面についての情報 Adapter
DeviceType
Windowed
BackBufferWidth
BackBufferHeight
BackBufferFormat
PresentationParameters
バッファ情報 BackBuffers
BackBufferCount
DepthStencilSurface
設定 UseREFDevice
UseSoftwareVertexProcessing
DebugOption
その他 D3D
D3DDevice

メソッド

コンストラクタ Create
デストラクタ Destroy
リソース管理 RegisterResouce
UnregisterResource
Direct3Dデバイスの制御 CreateDevice
ReleaseDevice
WindowMode
FullscreenMode
Reset
画面モード情報取得 GetCurrentDisplayMode
IsAvailableDisplayMode

 

リファレンス〜プロパティ

Adapter

Adapter : UINT

 現在使われているディスプレイアダプタを示します

 

DeviceType

DeviceType : D3DDEVTYPE

 現在使われているDirect3DDeviceのタイプを示します。DG-Caradでは以下のいずれかが有効です

D3DDEVTYPE_HAL ハードウェアアクセラレーションの使える、HALデバイスを使用しています
D3DDEVTYPE_REF ソフトウェアでエミュレーションを行う、リファレンスラスタライザを使用しています

 

Windowed

Windowed : Boolean

 ウィンドウ内で実行されているならTrue、フルスクリーンで実行されているならFalseを示します

BackBufferWidth
BackBufferHeight
BackBufferFormat

BackBufferWidth : UINT
BackBufferHeight : UINT
BackBufferFormat : D3DFORMAT

 現在使われているバックバッファの幅・高さ・フォーマットをそれぞれ示します

 

PresentationParameters

PresentationParameters : D3DPRESENT_PARAMETERS

 現在の画面設定の詳細を示します。

 D3DPRESENT_PARAMETERS構造体については、DirectX9 SDKのリファレンスをどうぞ

 

BackBuffers

BackBuffers[idx:Integer]:IDirect3DSurface9

 バックバッファを示すIDirect3DSurface9オブジェクトを返します。

 トリプルバッファリングなどを用いている場合は、バックバッファの数は2以上になるため、配列プロパティです。BackBuffers[0]に最初のバックバッファが入ります。

 

BackBufferCount

BackBufferCount : UINT

 使用しているバックバッファの枚数を示します。

 BackBuffers[0] 〜 BackBuffers[BackBufferCount-1] までが有効です。

 

DepthStencilSurface

DepthStencilSurface : IDirect3DSurface9

 使用しているデプスステンシルサーフェスを示します。

 デプスステンシルサーフェスを使用していない場合、Nil が格納されています。

 

UseREFDevice

UseREFDevice: Boolean

 Trueの時、ハードウェア3Dアクセラレータの使用を避け、リファレンスラタライザによるエミュレーションを使うようにします。

 Falseの時、出来る限りハードウェア3Dアクセラレータを使用します。

 デフォルト値はFalseです。

 Trueを指定すると多くの場合、極端に速度が低下するので、デバッグ目的以外でTrueをセットする事はまずないでしょう。

 

UseSoftwareVertexProcessing

UseSoftwareVertexProcessing : Boolean

 Trueの時、ハードウェア頂点処理機能の使用を避け、ソフトウェア頂点処理を使うようにします。

 Falseの時、出来る限りハードウェア頂点処理機能を使用します。

 デフォルト値はFalseです

 

DebugOption

DebugOption : TDGDebugOption

TDGDebugOption = set of (dgoHaltOnError, dgoDebugMessage, dgoDetailedLog);

 デバッグメッセージの出力についてのオプションです。

 以下の組として指定します。

dgoHaltOnError 致命的なエラーが生じた場合、すぐにHaltしてプログラムを終了させます
dgoDebugMessage デバッグメッセージを出力します
dgoDetailedLog 詳細なデバッグメッセージを出力します。dgoDebugMessageが指定されていない場合、この値は意味を持ちません

 デバッグメッセージは、実行ファイルと同じディレクトリに、DGCarad_DebugLog.txtというファイル名で生成されます。

 

D3D

D3D : IDirect3D9

 使用しているDirect3Dオブジェクトを示します。Direct3D APIを直接呼び出すときにどうぞ。

 

D3DDevice

D3DDevice : IDirect3DDevice9

 使用しているDirect3DDeviceオブジェクトを示します。Direct3D APIを直接呼び出すときにどうぞ。

 …なんか投げやりな説明だな(^^;)

 具体的には、レンダリングステートの設定などに用います。

 

 

リファレンス〜メソッド

Create

constructor Create(AOwner:TComponent);

 TDGCaradオブジェクトを生成します。

 生成時にDirect3Dの初期化を行います。また、画面モードの初期化も行います。この際、バックバッファのサイズはウィンドウのクライアント領域のサイズにあわせて初期化します。

 コンポーネントなので直接呼ぶことはまず無いでしょうけど。

 

Destroy

destructor Destroy;

 TDGCaradオブジェクトを解放します。

 解放時にDirect3Dの解放を行い、必要ならば(明示的に解放されていなければ)DGCaradリソースの解放も行います。

 コンポーネントなのでこれも直接呼ぶことは無いでしょうけれど(^^;)

 

RegisterResouce

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バイト整数値を返します。

 

UnregisterResource

procedure UnregisterResource(id:UINT);

 idで識別されるDGCaradリソースの登録を解除します。

 DGCaradリソースとして登録したオブジェクトは、必ずオブジェクト自体の解放より前に、このメソッドを呼び出して登録解除を行ってください。

 

CreateDevice

procedure CreateDevice(Adapter:UINT; DeviceType:D3DDEVTYPE;
        hFocusWindow:HWND;  BehaviorFlags:DWord;
        var presentationParameters:D3DPRESENT_PARAMETERS);

 Direct3DDeviceを作成します。すでに作成済みの場合、既存のDirect3DDeviceを解放した後に、作成が行われます。

 パラメータの設定を詳細に行うことが出来ますが、面倒です(^^;) 画面モードの初期化をより簡単に行うためには、WindowModeメソッド、FullscreenModeメソッドを利用してください。どちらでも設定できないような画面モードにしたい場合のみ、このメソッドを使ってください。

 UseREFDeviceUseSoftwareVertexProcessing プロパティより、こちらでの設定を優先します。

 Adapterで指定されたディスプレイアダプタを使用し、デフォルトのディスプレイアダプタを指定したい場合は、D3DADAPTER_DEFAULTを指定してください。

 DeviceTypeで、使用するDirect3DDeviceのタイプを選択できます。DG-Caradでは以下のいずれかが有効です

D3DDEVTYPE_HAL ハードウェアアクセラレーションの使える、HALデバイスを使用しています
D3DDEVTYPE_REF ソフトウェアでエミュレーションを行う、リファレンスラスタライザを使用しています

 hFocusWindowで、Direct3Dが画面の出力先として利用するフォームのハンドルを指定します。基本的には、コンポーネントの貼られたフォームのハンドルを指定します。

 BehaviorFlagspresentationParametersで、それぞれDirect3DDeviceの挙動、画面モードについての詳細を設定できます。詳細についてはDirectX SDKのリファレンスで、IDirect3D9::CreateDeviceの項をお読みください。

 

ReleaseDevice

procedure ReleaseDevice;

 Direct3DDeviceを解放します。

 CreateDevice同様、あまり使われることは無いと思いますが、何らかの理由でプログラム実行中にDirect3DDeviceを一旦解放する必要が出た場合に呼び出してください。

 TDGCarad解放時に、自動的にこのメソッドは実行されるので、ユーザがこのメソッドを使うことはあまり無いでしょう。

 

WindowMode

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を指定してください。

 

FullscreenMode

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メソッドを使うと簡単に知ることが出来ます。

 

Reset

procedure Reset;

 ロストしたDirect3DDeviceを復元し、必要ならば、DG-Caradリソースに対して内容の復元を通知します。

 

GetCurrentDisplayMode

function GetCurrentDisplayMode(Adapter:UINT):D3DDISPLAYMODE;

 Adapterで示されるディスプレイアダプタについて、現在の画面モードを取得します。

 BackBufferWidthプロパティなどを使っても、現在の画面モードについての情報を得ることは出来ますが、その方法ではReleaseDeviceなどを呼び出してDirect3DDeviceを解放した後の状態では、正しい状態を得ることが出来ません。

 このメソッドを使えば、そうした状況でも、画面モードを正しく得ることが出来ます。

 

IsAvailableDisplayMode

function IsAvailableDisplayMode(Adapter:UINT; screenWidth,screenHeight:UINT; freq:UINT; fmt:D3DFORMAT):Boolean;

 Adapterで示されるディスプレイアダプタで、 幅screenWidth、高さscreenHeight、表示周波数freq Hz、バックバッファのフォーマット fmt という画面モードをサポートしているかテストします。