Microsoft DirectX 8.0 (C++) |
ソース ファイルのファイル名が Unicode 文字列である場合に、シェーダの ASCII 記述をバイナリ形式にアセンブルする。
HRESULT D3DXAssembleShaderFromFileW( LPCWSTR pSrcFile, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors );
成功した場合は D3D_OK を返す。
失敗した場合は、次のいずれかの値を返す。
D3DERR_INVALIDCALL |
D3DXERR_INVALIDDATA |
E_OUTOFMEMORY |
D3DXAssemblePixelShaderFromFile は、#define UNICODE スイッチが含まれているかどうかに応じて、 D3DXAssembleShaderFromFileA または D3DXAssembleShaderFromFileW のどちらかをマップする。#define UNICODE スイッチを挿入または除外して、アプリケーションで Unicode または ANSI 文字列のどちらを使用するかを指定する。
次のコードは、D3DXAssembleShaderFromFile の定義方法を示している。
#ifdef UNICODE #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW #else #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA #endif
次のラッパー関数 PreprocessAndAssembleShaderFromFile の例は、頂点シェーダ コードに対して C プリプロセッサを呼び出した後、D3DXAssembleShaderFromFile を使用してアセンブラを呼び出す方法を示している。
HRESULT PreprocessAndAssembleShaderFromFile( LPCSTR szFile, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCode, LPD3DXBUFFER* ppErrors) { char szPath[_MAX_PATH]; char szTemp[_MAX_PATH]; char szCmd [_MAX_PATH]; GetTempPath(sizeof(szPath), szPath); GetTempFileName(szPath, "vsa", 0, szTemp); _snprintf(szCmd, sizeof(szCmd), "cl /nologo /E %s > %s", szFile, szTemp); if(0 != system(szCmd)) return D3DERR_INVALIDCALL; return D3DXAssembleShaderFromFile(szTemp, Flags, ppConstants, ppCode, ppErrors); }
この関数が機能するためには、Microsoft®Visual C++® がインストールされていて、環境のセットアップにより Cl.exe のパスが設定されている必要がある。
ヘッダー : D3dx8core.h で宣言。
インポート ライブラリ : D3dx8.lib を使用。