アットウィキロゴ

DX10:関数




D3D10CreateDeviceAndSwapChain

Direct3D 10.0デバイスとスワップチェインの生成

HRESULT D3D10CreateDeviceAndSwapChain(
   IDXGIAdapter         *pAdapter,
   D3D10_DRIVER_TYPE    DriverType,
   HMODULE              Software,
   UINT                 Flags,
   UINT                 SDKVersion,
   DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,
   IDXGISwapChain       **ppSwapChain,
   ID3D10Device         **ppDevice
);

pAdapter [IN]
ディスプレイアダプタ(要はビデオカード)を表すIDXGIAdapterインターフェイスを渡す。これはビデオカードを2枚差している場合などにどちらかのビデオカードを指定する場合などに使いう。普通はプライマリビデオカードで良いのでNULLでオッケー。
DriverType [IN]
描画をハードウェアで行う(D3D10_DRIVER_TYPE_HARDWEAR)かソフトウェアで行う(D3D10_DRIVER_TYPE_REFERENCE)かを指定する。サポート環境を仮定するならD3D10_DRIVER_TYPE_HARDWEARで。D3D10_DRIVER_TYPEには他にもD3D10_DRIVER_TYPE_SOFTWAREとかもあるが、今後のために予約されているので指定できない。
Software [IN]
DriverTypeにD3D10_DRIVER_TYPE_SOFTWAREというフラグを立てた時に必要なソフトウェアラスタライザを実装したDLLを指定する。現時点ではこのフラグは立てられないのでNULLを指定することになる。もし指定する時期がやってきたら、DLLのモジュールハンドルはWinAPIのLoadLibrary, LoadLibraryEx, GetModuleHandleなどで取得することができる。
Flags [IN]
Direct3D10(コア)が使うAPIの種類や使い方を決めます。デフォルト(ハードウェアAPI)
で良いなら0で構いません。D3D10_CREATE_DEVICE_SINGLETHREADEDにするとシングルスレッドAPIになります。DirectXはスレッドセーフなマルチスレッドをサポートしているのでこれを指定する事はあまりありません。D3D10_CREATE_DEVICE_DEBUGにするとデバッグや妥当性検証が入ったAPIが使われます。デバッグ環境ではより詳細なエラー情報が得られます。D3D10_CREATE_DEVICE_SWITCH_TO_REFにするとハードウェアAPIとリファレンスAPIとが切り替わる環境になります。これはデバッグする時に役立ちます。
SDKVersion [IN]
DirectXのSDKバージョンを渡します。これはよほどの理由が無い限りはD3D10_SDK_VERSIONにして下さい(マニュアルにはD3D_SDK_VERSIONと記載されていますがミスプリです、多分)。
pSwapChainDesc [IN]
スワップチェインの能力を登録したDXGI_SWAP_CHAIN_DESC型の変数へのポインタを渡す。
ppSwapChain [OUT]
IDXGISwapChainインターフェースのアドレス
ppDevice [OUT]
ID3D10Deviceインターフェースのアドレス



D3DX10CreateEffectFromFile

ファイルからエフェクトを生成

HRESULT D3DX10CreateEffectFromFile(
  LPCTSTR pFileName,
  CONST D3D10_SHADER_MACRO *pDefines,
  ID3D10Include *pInclude,
  LPCSTR pProfile,
  UINT HLSLFlags,
  UINT FXFlags,
  ID3D10Device *pDevice,
  ID3D10EffectPool *pEffectPool,
  ID3DX10ThreadPump *pPump,
  ID3D10Effect **ppEffect,
  ID3D10Blob **ppErrors
  HRESULT *pHResult
);

pFileName [IN]
ASCII文字列でエフェクトファイル名を指定。コンパイラの設定がUnicodeの場合はLPCTSTRをLPCWSTRとして引数を指定。それ以外の場合はLPCSTRでいい。
pDefines [IN]
NULLでターミネイトされたシェーダーマクロの配列(D3D10_SHADER_MACROを参照)。NULLを指定すればマクロは使用しないという事。
pInclude [IN]
インクルドインターフェースのポインタ(ID3D10Includeインターフェースを参照)。このパラメータはNULLにでもよい。
pProfile [IN]
シェーダーモデルを指定するための文字列。DirectX10.0ならfx_4_0になる。
HLSLFlags [IN]
HLSLコンパイルオプション。HLSLとは上位レベルシェーダー言語
FXFlags [IN]
エフェクトコンパイルオプション。
pDevice [IN]
ID3D10Deviceのポインタ
pEffectPool [IN]
ID3D10EffectPoolのポインタ(エフェクト間の変数を共有するためのもの)
pPump [IN]
ID3DX10ThreadPumpのポインタ。NULLを指定することで、関数は処理が終わるまでリターンしない
ppEffect [OUT]
生成されたID3D10Effectのポインターのアドレス
ppErrors [OUT]
エフェクトコンパイルにエラーが生じた場合にその情報を格納するメモリのアドレス
pHResult [OUT]
何かの結果が入るらしい…。マニュアルにも書いてないし。



D3DX10CreateFont

デバイスに割り当てるフォントオブジェクトの作成

HRESULT D3DX10CreateFont(
  ID3D10Device *pDevice,
  INT          Height,
  UINT         Width,
  UINT         Weight,
  UINT         MipLevels,
  BOOL         Italic,
  UINT         CharSet,
  UINT         OutputPrecision,
  UINT         Quality,
  UINT         PitchAndFamily,
  LPCTSTR      pFaceName,
  LPD3DX10FONT *ppFont
);

pDevice [IN]
フォントに関連付けられるデバイス
Height [IN]
論理単位の文字の高さ
Width [IN]
論理単位の文字の幅
Weight [IN]
書体のウェイト。例えばボールドとか。WinGDI.hで定義されているFW_XXXXで指定
MipLevels [IN]
ミップマップレベル。ミップマップを使わない場合は1を指定。0にすると 1x1 レベルまでのミップマップチェーンを作成する。
Italic [IN]
斜体ならTRUEにする
CharSet [IN]
キャラセット。国とか文字のエンコードとかを指定するっぽい。WinGDI.hで定義されているXXXX_CHARSETで指定する。
OutputPrecision [IN]
ウィンドウズがフォントのサイズや形状を決める手段を指定。例えばOUT_TT_ONLY_PRECISを指定すれば、常にTrueTypeフォントを使用することになる。フラグはWinGDI.h内にOUT_XXXXという形で定義されている。
Quality [IN]
生成するフォントをリアルフォントにどれだけ近づけるかという手段。つまりその名のとおりクオリティの指定。この設定はラスターフォント(非TrueType。つまりドットテクスチャ)にのみ適用され、TrueTypeフォントには影響しない。
PitchAndFamily [IN]
フォントのピッチとファミリのインデックス
pFaceName [IN]
フォント名
ppFont [OUT]
生成されたフォントオブジェクトを表すID3DX10Fontインターフェースのポインタ。



IDXGISwapChain::GetBuffer

スワップチェインのバックバッファにアクセス

HRESULT GetBuffer(
  UINT Buffer,
  REFIID riid,
  void **ppSurface
);

Buffer [IN]
0から始まるバッファインデックス。スワップエフェクトがDXGI_SWAP_EFFECT_SEQUENTIALでない場合はこのメソッドは先頭バッファにのみアクセスするので、その場合はインデックスは0で固定
riid [IN]
バックバッファのインターフェースを示すGUIDを指定。__uiidof()を使って指定するとよい
pSurface [IN,OUT]
バックバッファインターフェースのポインタ



IDXGISwapChain::Present

レンダーイメージをスクリーンに描画

HRESULT Present(
  UINT SyncInterval,
  UINT Flags
);

SyncInterval [IN]
そのフレームでのV-Blankでの同期方法を指定する。0を指定すると同期は行わず、即時描画を行う。1,2,3,4を指定すると、n番目の垂直同期の後に描画が行われる。
Flags [IN]



ID3D10Device::CreateRenderTargetView

リソースデータにアクセスするためのレンダーターゲットビューを生成

HRESULT CreateRenderTargetView(
  ID3D10Resource *pResource,
  const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,
  ID3D10RenderTargetView **ppRTView
);

pResource [IN]
レンダーターゲットとして使われるリソースであるID3D10Resouceインターフェイスへのポインタ。このリソースはあらかじめ D3D10_BIND_RENDER_TARGETフラグを使って生成されていなければならない。
pDesc [IN]
デプス/ステンシルビューの記述用構造体 {D3D10_RENDER_TARGET_VIEW_DESC)のポインタ。このパラメータをNULLにして生成されたビューはリソース全体を通してミップマップレベル0のアクセスとなる(リソースが生成されたときのフォーマットを使う)。とりあえず、デフォルト設定でよいのならNULLを指定すればよい。
ppRTView [OUT]
ID3D10RenderTargetViewのポインタのアドレス。



ID3D10Device::OMSetRenderTargets

1つ、もしくは複数のレンダーターゲット、デプスステンシルバッファーをしアウトプットマージャーステージにバインドする(OM = OutputMerger)
アウトプットマージャーステージというのはそのままマニュアルから引っ張ってきた単語だが、意味としてはパイプラインステート(ピクセルシェーダーから生成されたピクセルデータ、レンダーターゲットの内容、デプス/ステンシルバッファの内容)の結合により得られる最終的なピクセルカラーを生成するステージのこと。

void OMSetRenderTargets(
  UINT NumViews,
  ID3D10RenderTargetView *const *ppRenderTargetViews,
  ID3D10DepthStencilView *pDepthStencilView
);

NumViews [IN]
割り当てるレンダーターゲットの数
ppRenderTargetViews [IN]
デバイスに割り当てるレンダーターゲットの配列のポインタ。このパラメータにNULLを指定するとレンダーターゲットがバインドされていないことになる。
pDepthStencilView [IN]
デバイスに割り当てるデプス/ステンシルビューのポインタ。NULLなら割り当てされていないということに。



ID3D10Device::RSSetViewports

ビューポート配列をパイプラインのラスタライザステージに割り当てる(RS = Rasterizer Stage)

void RSSetViewports(
  UINT NumViewports,
  const D3D10_VIEWPORT *pViewports
);

NumViewport [IN]
割り当てるビューポートの数
pViewports [IN]
デバイスに割り当てるビューポート配列。それぞれのビューポートが以下の許容範囲内の値を持たなければならない(D3D10_VIEWPORT_BOUNDS_MIN, D3D10_VIEWPORT_BOUNDS_MAX, D3D10_MIN_DEPTH, D3D10_MAX_DEPTH



ID3D10Device::CreateInputLayout

インプットアセンブラステージ用の入力バッファデータの記述をするための入力レイアウトオブジェクトを生成する

HRESULT CreateInputLayout(
   const D3D10_INPUT_ELEMENT_DESC  *pInputElementDescs,
   UINT                            NumElements,
   const void                      *pShaderBytecodeWithInputSignature,
   SIZE_T                          BytecodeLength,
   ID3D10InputLayout               **ppInputLayout
);

pInputElementDescs [IN]
D3D10_INPUT_ELEMENT_DESCによって記述された入力データタイプの配列
NumElements [IN]
入力データ配列の要素数
pShaderBytecodeWithInputSignature [IN]
コンパイル済みのシェーダコードへのポインタ。これはすでにエフェクトインターフェイスを生成した時にできているのでパス情報を取得し、それを引数に与えればよい。
BytecodeLength [IN]
コンパイル済みシェーダコードの長さ。同様にパス情報に含まれているのでそれを渡す
ppInputLayout [OUT]
入力レイアウトオブジェクトへのポインタが格納される。他の入力パラメータを有効にする場合はこのポインタをNULLにし、関数の返り値がS_FALSEになることを確認する必要がある。要するに、入力レイアウトを切り替えたい場合は、このメソッドで一度ppInputLayout = NULLにしてリセットする必要があるということかな?




ID3D10Effect::CreateBuffer

バッファの生成(頂点バッファ、インデックスバッファ、シェーダー定数バッファ)

HRESULT CreateBuffer(
  const D3D10_BUFFER_DESC *pDesc,
  const D3D10_SUBRESOURCE_DATA *pInitialData,
  ID3D10Buffer **ppBuffer
);

pDesc [IN]
D3D10_BUFFER_DESCへのポインタ
pInitialData [IN]
D3D10_SUBRESOURCE_DATAへのポインタ
ppBuffer [OUT]
生成されたバッファのインターフェースのアドレス



ID3D10Effect::IASetVertexBuffers

頂点バッファ配列を入力アセンブラステージに割り当てる。
注意したいのは頂点バッファとしての配列ではなく、各頂点バッファの配列を渡すという点。
なので、pStride や pOffset もそれぞれの頂点バッファに対応すべくポインタ渡しとなっている。

void IASetVertexBuffers(
  UINT                 StartSlot,
  UINT                 NumBuffers,
  ID3D10Buffer *const *ppVertexBuffers,
  const UINT          *pStrides,
  const UINT          *pOffsets
);

StartSlot [IN]
最初に割り当てる入力スロット。最初の頂点バッファは明確にスタートスロットに割り当てられなければならない。他の頂点バッファを追加する場合はサブシーケンス入力スロットに割り当てる必要がある。入力スロット数は16ある。
NumBuffers [IN]
頂点バッファ配列の要素数。頂点バッファのサイズではないので注意。複数の頂点バッファをまとめて配列として登録できるので、この引数が必要となっている。この数は入力スロット数を上回ることはできない。
ppVertexBuffers [IN]
頂点バッファ配列のポインタ。頂点バッファは必ずD3D10_BIND_VERTEX_BUFFERフラグを立てた状態で生成されなければならない。
pStrides [IN]
各頂点バッファの要素の読み込み単位。基本的には頂点バッファを構成する頂点要素の構造体サイズとかを渡せばよい。
pOffsets [IN]
各頂点バッファにおいて、頂点バッファ先頭から最初の頂点要素へのオフセット。ヘッダとかが存在する場合はきっと非0の値が入るハズ。



ID3D10Effect::IASetPrimitiveTopology

入力データのプリミティブタイプ・オーダーを指定

void IASetPrimitiveTopology(
  D3D10_PRIMITIVE_TOPOLOGY Topology
);

Topology [IN]
プリミティブタイプ・プリミティブデータのオーダー(D3D10_PRIMITIVE_TOPOLOGYで指定)



ID3D10Device::ClearRenderTargetView

レンダーターゲットの全要素を単一の値にする(要するに指定色で塗りつぶす)

void ClearRenderTargetView(
  ID3D10RenderTargetView *pRenderTargetView,
  const FLOAT ColorRGBA[4]
);

pRenderTargetView [IN]
レンダーターゲットのポインタ
ColorRGBA [IN]
レンダーターゲットを塗りつぶすための4つの色要素(RGBA)


ID3D10Device::Draw

非インデックス、非インスタンスドなプリミティブの描画

void Draw(
  UINT VertexCount,
  UINT StartVertexLocation
);

VertexCount
描画する頂点の数
StartVertexLocation
最初の頂点のインデックス。主に頂点バッファ内のオフセット。インデックスはシェーダーパラメータの最初の頂点IDとしても使われる。



ID3D10Buffer::Map

リソースデータのポインタを取得し、その間のそのリソースへのGPUアクセスを抑制する

HRESULT Map(
  D3D10_MAP MapType,
  UINT      MapFlags,
  void      **ppData
);

MapType [IN]
CPUからのデータアクセスタイプを指定。D3D10_MAPで指定する。
MapFlags [IN]
GPUがビジー状態のときのCPUの挙動を指定。D3D10_MAP_FLAGで指定する。このフラグはオプション。
ppData [OUT]
リソースデータへのポインタ

返り値
成功するとS_OKを返す。いくつかの理由によりこのメソッドは失敗する
MapTypeD3D10_MAP_FLAG_DO_NOT_WAITに指定し、取得先のリソースにまだGPUがアクセスしていた場合は E_WASSTILLRENDERRINGを返す
・アクセスしようとしたリソース先が格納されているハードウェアデバイスが(例えばビデオカードとか)消失してしまった場合は E_DEVICEREMOVEDを返す

備考
CPUからリソースの内容に書き込みを行う場合は、そのリソースは D3D10_USAGE_DYNAMICフラグを指定して生成されていなければならない。読み込みと書き込みの両方を行う場合はD3D10_USAGE_STAGINGを指定して生成する必要がある。このメソッドはリソースデータへのポインタを取得する。効率的なリソースへのアクセスについては Copying and Accessing Resource Dataを参照。
ID3D10Buffer::Unmapを使ってリソースへのアクセスが終了したことを明示的に知らせる。
このメソッドには他にも制限がある
・同時に同じバッファのマッピングができない。言い換えれば、すでにマップ済みのバッファに対してこのメソッドをコールしてはならない
・パイプラインに関連付けられたバッファは描画処理を実行する時までにはアンマップ状態でなければならない。要するにマップ状態で描画処理をしてはならない



ID3D10Buffer::Unmap




ID3D10Effect::GetTechniqueByName

名前からテクニックを取得

ID3D10EffectTechnique* GetTechniqueByName(
  LPCSTR Name
);

Name [IN]
テクニックの名前

返り値
ID3D10EffectTechniqueインターフェースのポインタ。見付からない場合はNULL



ID3D10Effect::GetVariableByName

名前から変数を取得

ID3D10EffectVariable* GetVariableByName(
  LPCSTR Name
);

Name [IN]
変数名

返り値
ID3D10EffectVariableインターフェースのポインタ

備考
エフェクトは1つ以上の変数を含んでいることがある。テクニックの外側に定義されている変数はエフェクト全体のグローバル変数として考えられ、テクニックの内側で定義されている変数はそのテクニックの中だけで有効である(Cのスコープと同じ)。エフェクト変数は名前、もしくはインデックスでアクセスすることができる。
指定した名前の変数が存在しなくても、インターフェースのポインタは取得できるようなので、NULLチェックとかする必要はない。むしろ必要なのは指定した型のデータがインターフェースに存在するかどうかのチェックを行うこと。
いちおう、インターフェースポインタを取得した段階で、IsValid()メソッドを使うことで、指定した名前の変数の有無を確認することができる。



ID3D10EffectTechnique::GetPassByIndex

インデックスからパスを取得する。パスは1つのテクニックに複数存在する。パスの構成は例えば頂点シェーダ -> ジオメトリシェーダ -> ピクセルシェーダ のような一連の処理。

ID3D10EffectPass* GetPassByIndex(
  UINT Index
);

Index [IN]
ゼロベースのインデックス

返り値
ID3D10EffectPassインターフェースのポインタ



ID3D10EffectTechnique::GetPassByIndex

パス名からパスのインターフェースを取得

ID3D10EffectPass* GetPassByName(
  LPCSTR Name
);

Name [IN]
パスの名前

返り値
ID3D10EffectPassインターフェースのポインタ



ID3D10EffectPass::GetDesc

パスの詳細を取得

HRESULT GetDesc(
  D3D10_PASS_DESC *pDesc
);

pDesc [IN]
D3D10_PASS_DESCへのポインタ

返り値
結果を表すHRESULT値



ID3D10EffectPass::Apply

パスをデバイスに関連付ける

HRESULT Apply(
  UINT Flags
);

Flags [IN]
未使用



ID3D10Effectvariable::AsScalar

スカラー値を取得

ID3D10EffectScalarVariable* AsScalar();

返り値
ID3D10EffectScalarvariableインターフェースへのポインタ



ID3DX10Font::DrawText

テキストの表示

INT DrawText(
  LPD3DX10SPRITE pSprite,
  LPCTSTR        pString,
  INT            Count,
  LPRECT         pRect,
  UINT           Format,
  D3DXCOLOR      Color
);

pSprite [IN]
描画に使うスプライト。
「NULL」の場合、内部のスプライトオブジェ(システム側が用意する)を使って文字列を描画する。
pString [IN]
描画する文字列。
「Count」が -1 の場合、「NULL」で終端する文字列でなければならない。
Count [IN]
文字列の文字数。-1 の場合、文字数を自動的に計算する。
pRect [IN][OUT]
テキストを描画する矩形。
FormatDT_CALCRECTを指定した場合はここに表示する文字列の矩形サイズが計算され、出力される。
Format [IN]
領域内への描画方法。以下のフラグを任意に組み合わせることができる。
Color [IN]
テキストの色。

DT_BOTTOM 矩形の底部でテキストを両端揃えにする。必ず「DT_SINGLELINE」と組み合わせる。
DT_CALCRECT 指定したテキストが描画される矩形の幅と高さを計算する。描画はしない
テキストが複数行の場合、最後の行が含まれるように矩形の底辺を修正。
テキストが1行の場合、行の最後の文字が収まるように矩形の右辺を修正。
DT_CENTER 矩形内でテキストを水平方向で中央揃えにする。
DT_EXPANDTABS タブ文字を拡張する。タブの文字数は8字。
DT_LEFT テキストを左揃えにする。
DT_NOCLIP クリッピングせずに描画する。やや高速に描画される。
DT_RIGHT テキストを右揃えにする。
DT_RTLREADING 右から左の順に読むようにテキストを表示する。
DT_SINGLELINE テキストを1行で表示する。改行と行送りを無視。
DT_TOP テキストの上端を揃える。
DT_VCENTER 上下方向でテキストを中央揃えにする(1行のみ)。
DT_WORDBREAK 語と語の間で自動的に改行される。改行/行送りのシーケンスも改行する。
最終更新:2008年11月05日 15:44
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。