last UpdataDate
see over ie5
KEY Depth Production
- PS2 Linux Developer[reference:ILibKD3DDevice] -
[TOP Page]
[BBS]
[PS2 Linux Developer]
■site
■news
.
[ILibKD3DDevice][インターフェイスの利用][リファレンス]
■ILibKD3DDevice
ここではILibKD3DDeviceの機能,使い方を説明します.
ILibKD3DDevice は GS(Graphics Synthesizer),VU0 (Vector Unit 0) 及び VU1 を初期化,制御するためのインターフェイスです.
主な機能としては以下の能力をもちます.
機能 |
DrawPrimitive ベースのレンダリング |
リソースの作成 |
システムレベル変数の処理 |
シェーダの作成 |
■ILibKD3DDevice インターフェイスの利用
ILibKD3DDevice インターフェイスの利用する例を示します.
(1)始めに,初期化について示します.
まずは,ILibKD3D, ILibKD3DDeviceDevice, ILibKD3DVertexBuffer と ILibKD3DTexture インターフェイスの宣言をします.
LPLIBKD3D g_p3D = NULL;
LPLIBKD3DDEVICE g_p3DDevice = NULL;
LPLIBKD3DVERTEXBUFFER g_pVB = NULL;
LPLIBKD3DTEXTURE g_pTexture = NULL;
ILibKD3DDevice インターフェイスを,関数"LibKD3DCreate"を利用して作成します.
g_p3D = LibKD3DCreate( LKD3D_SDK_VERSION );
ここで,CreateDevice に先立って情報を設定します.
_HWND g_hWnd;
g_hWnd.m_inter = PS2_GS_NOINTERLACE;
g_hWnd.m_out_mode = PS2_GS_VESA;
g_hWnd.m_ff_mode = PS2_GS_FRAME;
g_hWnd.m_resolution = PS2_GS_640x480;
g_hWnd.m_refresh_rate = PS2_GS_60Hz;
g_hWnd.m_psm = PS2_GS_PSMCT32;
g_hWnd.m_zpsm = PS2_GS_PSMZ24;
g_hWnd.m_zbits = 24;
インターフェイスを利用して,ILibKD3DDeviceDevice インターフェイスを生成します.また,失敗することも考慮して以下のように初期化を行います.
if( FAILED( ILibKD3DDevice_CreateDevice( g_p3D, D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, &g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
NULL, &g_p3DDevice )) )
{
exit(-1);
}
CreateVertexBuffer インターフェイスを用いて頂点バッファを生成します.
if( FAILED( ILibKD3DDevice_CreateVertexBuffer( g_p3DDevice,
g_numVertices*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB )) )
{
exit(-1);
}
場合によってはテクスチャを初期化します.
ILibKD3DDevice_CreateTexture( g_p3DDevice, 128,128,0,0,0,D3DPOOL_DEFAULT,&g_pTexture);
また以下の方法で,BMPテクスチャを初期化,ロードすることも出来ます.
D3DXCreateTextureFromFile( g_p3DDevice, "texture.bmp", &g_pTexture );
テクスチャやエッジアンチの設定をします.
// テクスチャの設定
ILibKD3DDevice_SetTexture( g_p3DDevice, 0, g_pTexture );
ILibKD3DDevice_SetRenderState( g_p3DDevice, D3DRS_ALPHABLENDENABLE, FALSE );
// エッジアンチエリアッシング
ILibKD3DDevice_SetRenderState( g_p3DDevice, D3DRS_EDGEANTIALIAS, TRUE );
(2)次に,レンダリングについて示します.
レンダリングを行うには,まずタスクをロックします.そして,レンダリングを行った後にタスクのロックを解除します.
一連のコードが以下のようになります.このとき,レンダリングする物体を変更するには SetStreamSource,レンダリング方法(頂点シェーダ)を変更するには SetVertexShader,描画するには DrawPrimitive インターフェイスを利用します.
// タスクのロック
ILibKD3DDevice_BeginScene( g_p3DDevice );
// 頂点選択
ILibKD3DDevice_SetStreamSource( g_p3DDevice, 0, g_pVB, sizeof(CUSTOMVERTEX) );
// シェーディング選択
ILibKD3DDevice_SetVertexShader( g_p3DDevice, D3DFVF_CUSTOMVERTEX );
// World 行列の設定.
ILibKD3DDevice_SetTransform( g_p3DDevice, D3DTS_WORLD, (D3DMATRIX*)&g_matWorld );
// 描画
ILibKD3DDevice_DrawPrimitive( g_p3DDevice, D3DPT_TRIANGLESTRIP, 0, g_numVertices-2 );
// フリップ
ILibKD3DDevice_Present( g_p3DDevice, NULL, NULL, NULL, NULL );
// タスクロックの解除
ILibKD3DDevice_EndScene( g_p3DDevice );
(3)最後に,解放について示します.
使い終わった ILibKD3DDevice インターフェイスを,関数"ILibKD3DDevice_Release"を利用して開放します.
ILibKD3DDevice_Release( g_p3DDevice );
■ILibKD3DDevice リファレンス
ILibKD3DDevice インターフェイスを取得するには,ILibKD3D::CreateDevice メソッドを呼び出す.
関数 | ULONG Release(); |
引数 | |
返値 | 新しい参照カウント値を返す.この値は,診断およびテストだけを目的とした値である. |
機能 | オブジェクトの参照カウントを 1 減少させる. |
備考 | インターフェイス,ILibKD3DDevice_Release |
関数 | HRESULT SetRenderState(
D3DRENDERSTATETYPE State,
DWORD Value
); |
引数 | State | [in] 変更対象のデバイス ステート変数.このパラメータには,D3DRENDERSTATETYPE 列挙型の任意のメンバを指定できる.
| Value | [in] デバイスのレンダリング ステートに設定する新しい値.このパラメータの意味は,State の指定値に依存する.たとえば,State が D3DRS_SHADEMODE の場合,第 2 パラメータは D3DSHADEMODE 列挙型のメンバのいずれかになる.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | レンダリングスレートの設定 |
備考 | インターフェイス,ILibKD3DDevice_SetRenderState. |
関数 | HRESULT CreateVertexBuffer(
UINT Length,
DWORD Usage,
DWORD FVF,
D3DPOOL Pool,
ILibKD3DVertexBuffer** ppVertexBuffer
); |
引数 | Length | [in] 頂点バッファのサイズ (バイト単位).柔軟な頂点フォーマット (FVF) 頂点バッファの場合は,Length は少なくとも 1 つの頂点を格納できる大きさでなければならないが,頂点サイズの倍数である必要はない.Length は非 FVF バッファについては検証されない.
| Usage | [in] このリソースの使用方法の制御情報を記述する,次の 1 つ以上のフラグの組み合わせ. (未実装)
| FVF | [in] 柔軟な頂点フォーマット フラグの組み合わせ.バッファ内の頂点の頂点フォーマットを記述する使用方法の指定子.このパラメータに有効な FVF コードを設定すると,FVF 頂点バッファが作成される (「注意」を参照).ゼロを設定すると,頂点バッファは非 FVF 頂点バッファになる.
| Pool | [in] D3DPOOL 列挙型のメンバ.リソースが配置される有効なメモリ クラスを記述する.
| ppVertexBuffer | [out, retval] 作成された頂点バッファ リソースを表す ILibKD3DVertexBuffer インターフェイスへのポインタのアドレス.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | 頂点バッファを作成する. |
備考 | インターフェイス,ILibKD3DDevice_CreateVertexBuffer. |
関数 | HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
ILibKD3DTexture** ppTexture
); |
引数 | Width | [in] 最上位のテクスチャの幅 (ピクセル単位).ミップマップ レベルが下のピクセル ディメンジョンは 1 つ上のレベルのピクセル ディメンジョンを (単純に) 1/2 した値である.それぞれの大きさは,1 ピクセルのサイズに収められる.したがって,2 で除算した結果が 0 の場合,代わりに 1 が使用される.
| Height | [in] 最上位のテクスチャの高さ (ピクセル単位).ミップマップ レベルが下のピクセル ディメンジョンは 1 つ上のレベルのピクセル ディメンジョンを (単純に) 1/2 した値である.それぞれの大きさは,1 ピクセルのサイズに収められる.したがって,2 で除算した結果が 0 の場合,代わりに 1 が使用される.
| Levels | [in] テクスチャにあるレベルの数.0 を指定すると,MIP マップ化テクスチャをサポートするハードウェアに対し,Microsoft® Direct3D® は,1 × 1 ピクセルまでのすべてのテクスチャ サブレベルを生成する.その他の値を指定した場合は,1 レベルを生成する.IDirect3DBaseTexture8::GetLevelCount を呼び出して,生成されたレベル数を確認する. (未実装)
| Usage | [in] このリソースの使用方法を記述する,次の 1 つ以上のフラグの組み合わせ. (未実装)
| Format | [in] D3DFORMAT 列挙型のメンバ.テクスチャの全レベルのフォーマットを示す.
| Pool | [in] D3DPOOL 列挙型のメンバ.テクスチャを格納するメモリ クラスを示す.
| ppTexture | [out, retval] 作成されたテクスチャ リソースを表す ILibKD3DTexture インターフェイスへのポインタのアドレス.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | テクスチャ リソースを作成する. |
備考 | インターフェイス,ILibKD3DDevice_CreateTexture. |
関数 | HRESULT Clear(
DWORD Count,
CONST D3DRECT* pRects,
DWORD Flags,
D3DCOLOR Color,
float Z,
DWORD Stencil
); |
引数 | Count | [in] pRects の配列にある矩形の数.pRects を NULL に設定する場合は,このパラメータを 0 に設定する.
| pRects | [in] クリアする矩形を記述する D3DRECT 構造体の配列へのポインタ.矩形をレンダリング ターゲットの寸法に設定すると,サーフェス全体がクリアされる.各矩形は,レンダリング ターゲット サーフェス上の点に対応するスクリーン座標を使用する.座標はビューポートの矩形の境界でクリップされる.このパラメータを NULL に設定すると,ビューポート矩形全体をクリアすることになる. (未実装)
| Flags | [in] クリアするサーフェスを示すフラグ.このパラメータでは,次のフラグの任意の組み合わせを指定できるが,少なくとも 1 つのフラグを使わなければならない.(未実装)
| Color | [in] レンダリング ターゲット サーフェスをクリアする 32 ビット ARGB カラー値.
| Z | [in] このメソッドが深度バッファに保存する新しい z 値.このパラメータには 0.0 から 1.0 までの値を使用できる (Z ベースまたは W ベースの深度バッファの場合).0.0 はビューアに最も近い距離,1.0 は最も遠い距離を表す.
| Stencil | [in] 各ステンシル バッファのエントリに保存する整数値.このパラメータには 0 から 2n-1 までの値を使用できる.n はステンシル バッファのビット深度.(未実装)
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | ビューポートまたはビューポート内の矩形セットを指定した RGBA 色にクリアし,深度バッファをクリアし,ステンシル バッファを削除する. |
備考 | インターフェイス,ILibKD3DDevice_Clear. |
関数 | HRESULT SetTransform(
D3DTRANSFORMSTATETYPE State,
CONST D3DMATRIX* pMatrix
); |
引数 | State | [in] 変更対象のデバイス ステート変数.このパラメータには,D3DTRANSFORMSTATETYPE 列挙型の任意のメンバまたは D3DTS_WORLDMATRIX マクロを指定できる.
| pMatrix | [in] 現在のトランスフォームを変更する D3DMATRIX 構造体へのポインタ.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | 単一デバイスのトランスフォーム関連ステートを設定する. |
備考 | インターフェイス,ILibKD3DDevice_SetTransform. |
関数 | HRESULT BeginScene(); |
引数 | |
返値 | 成功すれば LKD_OK が返る. |
機能 | シーンを開始する. |
備考 | インターフェイス,ILibKD3DDevice_BeginScene. |
関数 | HRESULT EndScene(); |
引数 | |
返値 | 成功すれば LKD_OK が返る. |
機能 | ILibKD3DDevice::BeginScene メソッドの呼び出しによって開始されたシーンを終了する. |
備考 | インターフェイス,ILibKD3DDevice_EndScene. |
関数 | HRESULT SetTexture(
DWORD Stage,
ILibKD3DTexture* pTexture
); |
引数 | Stage | [in] テクスチャを設定するステージ識別子.ステージ識別子は 0 から始まる.デバイスは最大 8 セットまでテクスチャを持つことができるので,Stage に指定できる最大値は 7 である.
| pTexture | [in] 設定するテクスチャを表す ILibKD3DTexture インターフェイスへのポインタ.ミップマップ テクスチャやキューブ テクスチャなどのように複雑なテクスチャの場合,このパラメータはトップレベルのサーフェスをポイントしていなければならない.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | テクスチャをデバイスのステージに割り当てる. |
備考 | インターフェイス,ILibKD3DDevice_SetTexture. |
関数 | HRESULT SetTextureStageState(
DWORD Stage,
D3DTEXTURESTAGESTATETYPE Type,
DWORD Value
); |
引数 | Stage | [in] ステート値を設定するテクスチャのステージ識別子.ステージ識別子は 0 から始まる.デバイスは最大 8 セットまでテクスチャを持つことができるので,Stage に指定できる最大値は 7 である.
| Type | [in] 設定するテクスチャのステート.このパラメータには,D3DTEXTURESTAGESTATETYPE 列挙型の任意のメンバを指定できる.
| Value | [in] 設定するステート値.この値の意味は Type パラメータで決まる.
|
|
返値 | 成功すれば LKD_OK が返る.(未実装) |
機能 | 現在割り当てられているテクスチャにステート値を設定する. |
備考 | インターフェイス,ILibKD3DDevice_SetTextureStageState. |
関数 | HRESULT SetStreamSource(
UINT StreamNumber,
ILibKD3DVertexBuffer* pStreamData,
UINT Stride
); |
引数 | StreamNumber | [in] 0 からストリームの最大数 - 1 までの範囲のデータ ストリームを指定する.
| pStreamData | [in] IDirect3DVertexBuffer8 インターフェイスへのポインタ.指定したデータ ストリームにバインドする頂点バッファを示す.
| Stride | [in] コンポーネントのストライド (バイト単位).
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | 頂点バッファをデバイスのデータ ストリームにバインドする. |
備考 | インターフェイス,ILibKD3DDevice_SetStreamSource. |
関数 | HRESULT SetVertexShader(
DWORD Handle
); |
引数 | Handle | [in] 設定する頂点シェーダを指定する頂点シェーダへのハンドル.このパラメータの値として,IDirect3DDevice8::CreateVertexShader から返るハンドルまたは FVF コードを使用できる.FVF コードは柔軟な頂点フォーマット フラグの組み合わせである.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | 以前に作成した頂点シェーダ,または柔軟な頂点フォーマット (FVF) の固定機能シェーダに,現在の頂点シェーダを設定する. |
備考 | インターフェイス,ILibKD3DDevice_SetVertexShader. |
関数 | HRESULT DrawPrimitive(
D3DPRIMITIVETYPE PrimitiveType,
UINT StartVertex,
UINT PrimitiveCount
); |
引数 | PrimitiveType | [in] D3DPRIMITIVETYPE 列挙型のメンバ.レンダリングするプリミティブの種類を記述する.
| StartVertex | [in] ロードする最初の頂点のインデックス.StartVertex を先頭に,正しい頂点数が頂点バッファから読み取られる.
| PrimitiveCount | [in] レンダリングするプリミティブの数.プリミティブの許容最大数は,D3DCAPS8 構造体の MaxPrimitiveCount メンバをチェックして決定される.PrimitiveCount は,プリミティブ タイプで指定されたプリミティブの数である.プリミティブ タイプが線リストの場合,各プリミティブは 2 つの頂点を持つ.プリミティブ タイプが三角形リストの場合は,各プリミティブは 3 つの頂点を持つ.
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | 現在のデータ入力ストリーム セットから,指定されたタイプの非インデックス付きジオメトリ プリミティブのシーケンスをレンダリングする. |
備考 | インターフェイス,ILibKD3DDevice_DrawPrimitive. |
関数 | HRESULT Present(
CONST RECT* pSourceRect,
CONST RECT* pDestRect,
HWND hDestWindowOverride,
CONST RGNDATA* pDirtyRegion
); |
引数 | pSourceRect | (未実装)
| pDestRect | (未実装)
| hDestWindowOverride | (未実装)
| pDirtyRegion | (未実装)
|
|
返値 | 成功すれば LKD_OK が返る. |
機能 | デバイスが所有するバック バッファのシーケンスの中で次のコンテンツを提示する. |
備考 | インターフェイス,ILibKD3DDevice_Present. |
関数 | HRESULT SetLight(
DWORD Index,
CONST D3DLIGHT8* pLight
); |
引数 | Index | [in] 設定するライト プロパティ セットのゼロから始まるインデックス.インデックスにライト プロパティ セットが存在する場合は,pLight で指定した新しいプロパティで上書きされる.
| pLight | [in] 設定するライティング パラメータが格納されている D3DLIGHT8 構造体へのポインタ.
|
|
返値 | 成功すれば LKD_OK が返る.(未実装) |
機能 | このデバイスに一連のライト プロパティを割り当てる. |
備考 | インターフェイス,ILibKD3DDevice_SetLight. |
過去の話題:
■links
[TOP Page]