Microsoft DirectX 8.0 (C++)

D3DXAssembleShaderFromFileA

ソース ファイルのファイル名が ANSI 文字列である場合に、シェーダの ASCII 記述をバイナリ形式にアセンブルする。

HRESULT D3DXAssembleShaderFromFileA(
  LPCSTR pSrcFile,
  DWORD Flags,
  LPD3DXBUFFER* ppConstants,
  LPD3DXBUFFER* ppCompiledShader,
  LPD3DXBUFFER* ppCompilationErrors
);

パラメータ

pSrcFile
[in] ソース ファイル名 (ANSI 形式) へのポインタ。
Flags
[in] アセンブリ オプションを指定する、次のフラグの組み合わせ。
D3DXASM_DEBUG
アセンブルされたシェーダに、デバッグ情報をコメントとして挿入する。
D3DXASM_SKIPVALIDATION
生成されたコードに対して既知の能力および制約の検証をしない。このオプションは、動作することがわかっているシェーダをアセンブルする場合 (つまり、前にこのオプションを使用せずにシェーダをアセンブルしたことがある場合) にのみ使用することを勧める。
ppConstants
[out] 返された定数宣言を表す、ID3DXBuffer インターフェイスへのポインタを返す。これらの定数は、頂点シェーダ宣言子フラグメントとして返される。アプリケーションは、このバッファの内容を定数宣言に挿入する必要がある。ピクセル シェーダの場合、定数宣言はアセンブルされたシェーダに含まれるため、このパラメータは意味を成さない。このパラメータが NULL の場合は無視される。
ppCompiledShader
[out] 返されたコンパイル済みのオブジェクト コードを表す、ID3DXBuffer インターフェイスへのポインタを返す。このパラメータが NULL の場合は無視される。
ppCompilationErrors
[out] 返された ASCII エラー メッセージを表す、ID3DXBuffer インターフェイスへのポインタを返す。このパラメータが NULL の場合は無視される。

戻り値

成功した場合は D3D_OK を返す。

失敗した場合は、次のいずれかの値を返す。

D3DERR_INVALIDCALL
D3DXERR_INVALIDDATA
E_OUTOFMEMORY

注意

D3DXAssembleShaderFromFile は、#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 を使用。

参照

D3DXAssembleShaderFromFileW