[HOME]
ここからダウンロード(27KB)できます.

Delphi3.0専用 Direct3D(DirectX2,X3)ヘッダーユニット
7/16/97

DirectDraw, Direct3DIM, Direct3DRMの部分に関して Microsoft DirectX3 のヘッダーファイルから新たにDelphi用に書き換えました. DirectX5またはDirectX6から追加された機能には対応していません.このソースを使用したプログラムを DirectX5またはDirectX6のランタイムライブラリで動作させることはできます.
DX3D3D04.LZHをDelphi3.0用に修正しました. (D3D.PAS,DDRAW.PAS,D3DCAPS.PAS,D3DRM.PAS,D3DRMWIN.PAS,D3DRMOBJ.PASを修正) 以下のファイルが含まれています.(DX3D3D30.LZH)
. readme.txt
DirectDraw ddraw.pas
Direct3D IM d3dtypes.pas, d3dcaps.pas, d3d.pas
Direct3D RM d3drmwin.pas, d3drmdef.pas, d3drm.pas, d3drmobj.pas

基本的に以下の方針に基づいて変換しました.
  1. 列挙型をすべてDWORDと宣言,要素は定数に変換.
  2. ポインタ渡しの引数は基本的に参照渡し(var)に変更.この時,引数の変数名は対応する型に合わせた.
  3. オリジナルのヘッダー中の引数が型名のみの部分はドキュメントで使用されてる名前を使用した.
  4. コメントは主として変数名以上の情報が含まれていない場合が多いことと,コードの見通しが悪くなるため削除. 日本語で記述する根性が無かった.
  5. COMオブジェクトはinterface型とした.

LHA E DX3D3D30.LZH として解凍してください。

これはDirectX2,X3のヘッダーユニットソースのみです。 実行するためには本 ソースを使用してプログラムを作成する必要があります。

作成したプログラムを実行するためにはDirectX2またはDirectX3のランタイ ムがインストールされていることが必要です

本ユニットを使用される場合はSDKのドキュメントか書籍(例えば DirextX2 開発マニュアル)と本ユニット中の宣言を比較しながら使用されることをお勧め します.また作業の都合上,宣言の順序は大きく異なっています.

Delphiの浮動小数点ユニットの使い方によると思われる問題が出る個所があり ます. 以下の関数を使用する場合は

  IDirect3DRMViewport.Render(...);
  IDirect3DDevice.Execute(...);
関数を呼出す直前に
    asm finit end; 

の1行を挿入すると改善されます.

Delphi3.0を使用する場合の注意

Delphi2.0でXXX.AddRef, XXX.Releaseを呼んでいた部分では, XXX._AddRef, XXX._Releaseのように,アンダスコアを付ける必要が ありますが,オブジェクトの解放はDelphiが内部で行うようで,例えば
DirectDraw._Release;

等のようにコード中に書く必要はなく,Delphi2.0用のソース中の DirectDraw.Release; 等は削除する必要があるようです.存在すると 2重に呼ばれることになって,実行時エラーとなります.

IUnknown interfaceとその子孫はDelphiにより自動的にReleaseが呼ば れて解放されます.従ってオブジェクトの解放の順序をコントロールす ることができなくなりますが,実験した範囲では,宣言の順序どおりに 解放されるようです.

現在以下に示す順で宣言した場合には正常に動作しましたが,この部 分を逆順にした場合は実行時エラーとなりました. したがって,解放は宣言の順番に従うと思われます.

    Viewport    : IDirect3DViewport;
    D3dDevice   : IDirect3DDevice;
    ZBuffer     : IDirectDrawSurface;
    BackBuffer  : IDirectDrawSurface;
    FrontBuffer : IDirectDrawSurface;
    D3D         : IDirect3D;
    DDraw2      : IDirectDraw2;
    DDraw       : IDirectDraw;
以上,本ユニットを使用する場合
  1. DirectXのCOMオブジェクトは明示的に解放しない.
  2. COMオブジェクトの宣言は解放する順に置く.
の対策をすれば良いと思われます.
(注意)
DDraw,D3DIM,D3DRMに関してはサンプルを作成して部分的に動作確認 を行いましたが,すべてを網羅してチェックしておりません.実行する 環境(ビデオカード,ドライバ)によっても動作が異なる場合があるよ うです.私の環境はPentium133, MELCO WGP-VG4(S3 ViRGE) + DirectX5 付属S3汎用ドライバ(またはMELCO WGP-VG専用ドライバ)です.

このソースおよびこのテキストの著作権は水谷 純, mizutani.jun@nifty.ne.jp が保有していますが,本ソースのすべて,または一部分の配布,使用,使用した プログラムの公開,販売,改変は自由にして頂いてかまいません.改変したソ ースを公開される場合は,改変した旨をソース内に記述してください. 本ソフトウェアによって生じた損害について著作者は責任を負いません.

バグ報告は歓迎いたします.また今後変更される可能性があることにご留意くだ さい.


ご意見・ご感想は,mizutani.jun@nifty.ne.jp まで.