FreeHand.+ Type.B

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

DirectX SDK (March 2008)のサンプル「SkinnedMesh」解析メモ

Microsoft DirectX SDK (March 2008)の
C:\Program Files\Microsoft DirectX SDK (March 2008)\Samples\C++\Direct3D\SkinnedMesh
の解析メモ

IDirect3D9* pD3D = DXUTGetD3D9Object();
が何をしているのか解析
現在のD3Dデバイスを渡しているのだろうけどたどっていくと関数が見つからない
どうやらサンプルユーティリティーコード内で関数をマクロで自動生成している模様だった?

#define SET_ACCESSOR( x, y ) inline void Set##y( x t ) { DXUTLock l; m_state.m_##y = t; };
#define GET_ACCESSOR( x, y ) inline x Get##y() { DXUTLock l; return m_state.m_##y; };
#define GET_SET_ACCESSOR( x, y ) SET_ACCESSOR( x, y ) GET_ACCESSOR( x, y )



IDirect3D9* WINAPI DXUTGetD3D9Object() { DXUTDelayLoadD3D9(); return GetDXUTState().GetD3D9(); }

GetDXUTState().GetD3D9()の定義を探すと

GET_SET_ACCESSOR( IDirect3D9*, D3D9 );


にたどり着く
GET_SET_ACCESSOR マクロは解釈すると

SET_ACCESSOR( IDirect3D9*, D3D9 ) GET_ACCESSOR( IDirect3D9*, D3D9 )


となり
さらにその先のマクロを解釈すると

inline void Set##D3D9( IDirect3D9* t ) { DXUTLock l; m_state.m_##D3D9 = t; };
inline IDirect3D9* Get##D3D9() { DXUTLock l; return m_state.m_##D3D9; };


となる
さらに解釈を進めると

void SetD3D9( IDirect3D9* t ){
DXUTLock l;
m_state.m_D3D9 = t;
}
IDirect3D9* GetD3D9(){
DXUTLock l;
return m_state.m_##D3D9;
}


と言うGETとSET関数が生成される

と言うことで
IDirect3D9* WINAPI DXUTGetD3D9Object() { DXUTDelayLoadD3D9(); return GetDXUTState().GetD3D9(); }

GetDXUTState().GetD3D9();
の部分が発見できた

マクロについては以下のサイトを参考にした
http://www.mtamaki.com/trac/mtamaki/ticket/50
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2009/01/12(月) 16:54:08|
  2. C/C++プログラム
  3. | トラックバック:0
  4. | コメント:0
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。