TDGTexture

タスク

 一枚のテクスチャ(IDirect3DTexture9オブジェクト)をカプセル化します

 

リファレンス目次

プロパティ

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

サイズ情報 TotalWidth
TotalHeight
Format
Width
Height
U
V
テクセル Texels
設定 AutoKeep
その他 Texture
Pool
Usage

BorderColor

メソッド

コンストラクタ Create
デストラクタ Destroy
ファイルI/O LoadFromFile
LoadFromStream
LoadFromTBitmap
SaveToStream
テクセル操作 PerPixelOperation
SetColorKey
BlueToAlpha
Fill
サイズ設定 SetSize
ロック LockRect
UnlockRect

 

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

TotalWidth
TotalHeight

TotalWidth : UINT
TotalHeight : UINT

 テクスチャ全体の幅・高さをそれぞれ返します。

 多くの環境では、テクスチャの一辺のサイズは2の整数冪(2, 4, 8, 16, ... 256 など)である必要があります。このため、環境によっては、テクスチャのサイズは、SetSizeで設定したサイズや、LoadFromFileなどで読み込む画像ファイルのサイズと一致しないことがあります。

 そうした場合、TDGTextureは、その環境で指定可能なテクスチャサイズの制限内で、要求されたサイズの画像を包める最小のテクスチャのサイズを計算してIDirect3DTexture9オブジェクトを生成します。ImageWidth,ImageHeightプロパティは、そうして作られたIDirect3DTexture9オブジェクトの幅・高さを返します。

 参照: Width Height

 

Format

Format : D3DFORMAT

 テクスチャのフォーマットを返します

 

Width
Height

Width : UINT
Height : UINT

 テクスチャのうち、実際に画像の格納されている幅。高さを返します。

 Texels[0, 0,0] .. Textels[0, Width-1, Height-1] までが、画像の格納されている領域となります。

 

U
V

U : Single
V : Single

 U = Width / TotalWidth

 V = Height / TotalHeight

 を、それぞれ返します。 画像の右下隅のテクスチャ座標を生成する時に使えるでしょう。

 

Texels

Texels[level:UINT; x,y:Integer]:DWord

 levelで指定されるミップマップレベル ( 0が最上位のレベルです) の、座標 (x, y) にあるテクセルを示します。

 このプロパティで得られる値は、D3DCOLORやTColorなどと互換のある値では無く、テクスチャのフォーマットに合わせた値になっていますので、この値から例えば R要素やG要素だけを取り出したい場合には、PhysicalToARGB関数などを使って変換を行う必要があります。

 複数ピクセルにわたって連続して書き換える場合は、LockRectメソッドを呼び出してから一連の書き換えを行い、その後UnlockRectメソッドを呼び出すと高速に書き換えを行うことが可能です。

 

AutoKeep

AutoKeep : Boolean

 Trueならば、デバイスがロストしたり、解像度が切り替わってDirect3DDeviceが再生成されたときに、テクスチャの内容を自動的に復元します。

 デフォルトではTrueです。

 

Texture

Texture : IDirect3DTexture9

 このオブジェクトがカプセル化している、IDirect3DTexture9オブジェクトへの参照を返します。

 

Pool

Pool : D3DPOOL

 テクスチャがどこに格納されているかを示します。

 参照 : Create

 

Usage

Usage : UINT

 テクスチャの使われ方を示します。

 参照 : Create D3DUSAGE

 

BorderColor

BorderColor : D3DCOLOR

 LoadFromFileメソッドなどで画像を読み込む際に、実際に画像の読み込まれる領域よりテクスチャのサイズが大きい場合、BorderColorで指定された色でテクスチャの空いた領域が塗りつぶされます。

 

 参照 : LoadFromFile TotalWidth

 

リファレンス〜メソッド

Create

constructor Create(AOwner:TDGCarad; formats:Array of D3DFORMAT; _usage:UINT = 0;
 _pool:D3DPOOL = D3DPOOL_MANAGED; mipLevel:UINT = 0; debugName:String = '');

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

AOwnerには、使用しているTDGCaradオブジェクトを渡してください。

formatsには、第一希望から順に使用したいフォーマットを列挙します

_usageで、テクスチャの使い道を指定します。0 または、以下の値が指定できます

D3DUSAGE_RENDERTARGET レンダリングの対象として使います。メモリクラスにD3DPOOL_DEFAULTを指定して生成されているリソースである必要があります

_poolで、メモリクラス(どこにテクスチャを格納するか)を指定します。以下の値を指定できます

D3DPOOL_DEFAULT ドライバ側でもっとも適切な場所 (おそらくビデオメモリ又はAGPメモリ) を割り当て、そこに格納します。もっとも高速ですが、Direct3DDeviceのロストや再生成が起こると、内容は消去されっぱなしになります。自動復元の必要の無いリソースに用いてください
D3DPOOL_MANAGED 必要に応じて、デバイスからアクセスできるメモリに自動的にコピーされます。自動復元が利きますので、基本的には全てのリソースはこれを指定して生成されることになるでしょう。ただし、内容をロックなどで書き換える都度、メモリにコピーする処理が必要になるので、毎フレーム内容を全部書き換える必要のあるようなリソースには向きません
D3DPOOL_SYSTEMMEM システムメモリに生成されます。これも自動復元が利きます。環境によってはDirect3DDeviceからアクセスできません。バッファ用途に使うことになるでしょう

mipLevelで、使用したいミップマップレベルの数を指定します。0を指定すると、最下位レベルのサイズがに1x1ピクセルになるまでミップマップチェーンを作成します。1を指定すると、1レベル(最上位レベルだけ)生成します。

debugNameで、デバッグメッセージに出力される、このテクスチャの名前を指定します。プログラムの挙動とは直接関係ありません。

 

Destroy

destructor Destroy;

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

 

LoadFromFile

procedre LoadFromFile(filename:String; qdaName:String = '');

 テクスチャへ画像を読み込みます。

filename でBMPファイルの名前を指定します。qdaNameが空文字でない場合は、QDAファイルの中のデータIDと解釈されます。

qdaNameQDAファイル名を指定します。空文字を指定すると、QDAファイルを用いず、filenameで指定されたファイルを直接開きます。

 対応している画像フォーマットはWindows Bitmap(*.bmp)形式のうち、以下のとおりです。

 

LoadFromStream

procedure LoadFromStream(source:TStream);

 ストリームに格納されたWindows Bitmap形式のデータを、テクスチャへ読み込みます。

 

LoadFromTBitmap

procedure LoadFromTBitmap(source:TBitmap);

 VCLのTBitmapオブジェクトから、テクスチャへ画像データを読み込みます。

 

SaveToStream

procedure SaveToStream(dest:TStream);

 ストリームにテクスチャの内容をWindowsBitmapの32ビット画像形式で書き出します。

 上位バイトから順に、A,R,G,B値が入ります。

 

PerPixelOperation

procedure PerPixelOperation(region:TRect; op:TDGPerPixelOp; data:Pointer);

TDGPerPixelOp = function (Sender:TDGTexture; srcColor:DWord; x,y:Integer; Data:Pointer):DWord;

 regionで示される矩形領域に対して、コールバック関数opで示される処理を行います。

 dataは、コールバック関数opのData引数として渡されます。

 region内の一ピクセルにつき、一回ずつopが呼び出されます。opのsrcColor引数には、元のピクセルの色が入るので、返り値として処理後の値を返すようにコールバック関数を設計してください。 この時、srcColorとopの返り値は、テクスチャのフォーマットを考慮しなければならない事に注意してください。

 

SetColorKey

procedure SetColorKey(region:TRect; col:D3DCOLOR);

 regionで示される矩形領域内の、colに一致するRGB値を持ったピクセルのα値を0に設定します。

 

BlueToAlpha

procedure BlueToAlpha(region:TRect);

 regionで示される矩形領域内の、B(青)要素をα要素にコピーします。

 

Fill

procedure Fill(region:TRect; col:D3DCOLOR; maskA:Boolean);

 regionで示される矩形領域内を、colで示される色で塗りつぶします。

 maskAをTrueにすると、α要素には影響を及ぼさずに塗りつぶします。

 

SetSize

procedure SetSize(w,h:UINT);

 wで示される幅、hで示される高さに、テクスチャのサイズを変更します。

 参照 : Width Height

 

LockRect

function LockRect(level:UINT; rect:TRect; flags:DWORD):D3DLOCKED_RECT;

D3DLOCKED_RECT = record
	Pitch	: Integer;
	pBits	: Pointer;
  end;

 levelで指定されたミップマップレベルの、rectで指定された矩形領域を直接アクセス可能にします。

 返り値の D3DLOCKED_RECT.Pitchには、テクスチャの一ラインのバイト数が入り、pBitsにはロックした画像の入っているメモリ領域へのポインタが入ります。

 一連のアクセスを終えた後や、他の範囲、ミップマップレベルをロックしたい場合は、必ずUnlockRectを呼び出してください。

 Flagsには、0または、以下の値の和を指定します。通常は0か、D3DLOCK_READONLYを指定する事になるでしょう。

D3DLOCK_NO_DIRTY_UPDATE デフォルトでは、リソースのロックはダーティー領域(ここからここまでが更新されました、という情報)をそのリソースに追加します。このフラグは、リソースのダーティー状態への変更を防ぎます。
D3DLOCK_NOSYSLOCK
ロック処理自体に少し時間がかかる代わりに、マウスカーソルの移動など、システムでほかの処理を実行することが可能になります。バックバッファをロックして前面書き換えする時のような、ロックが長時間に及び、システムの応答性に悪影響を与えてしまうようなロックに対して有効だそうです。
D3DLOCK_READONLY
バッファに書き込みを行わない事をあらかじめ宣言した上でロックします。ドライバによっては効率的なアクセスを期待できるようです。

 

UnlockRect

procedure UnlockRect;

 LockRectによるロックを解除します。