(まとめ) アンテナ延長コード 2070 【×10セット】_送料無料雑誌掲載で完売話題!

検索:
DirectX11, プログラム

D3DPreprocessでプリプロセス

1件のコメント

スクリプトやテキストデータを記述する際、Cプリプロセッサの機能があればかなり便利になります。しかし、それを実装するのは大変です。コンパイラ付属のプリプロセッサは入出力がファイルなので使い勝手がわるい。何かないか探していたところDirectxのシェーダコンパイラ関連の関数にD3DPreprocessというものを発見、使ってみる。

(まとめ) アンテナ延長コード 2070 【×10セット】_送料無料の激安価格出大放出

D3DPreprocess(MSDN)
1
2
3
4
5
6
7
8
9
HRESULT D3DPreprocess(
  in   LPCVOID pSrcData,
  in   SIZE_T SrcDataSize,
  in   LPCSTR pSourceName,
  in   const D3D_SHADER_MACRO *pDefines,
  in   ID3DInclude pInclude,
  out  ID3DBlob *ppCodeText,
  out  ID3DBlob *ppErrorMsgs
);

HLSLコード用のプリプロセッサですが、スクリプトなどにも使えそうです。ファイルではなくデータ(メモリ)を指定します 【最低でも5倍】 ブレーキパッド 低ダスト BMW E87 120i N46■ リアセット■ 型式 UD20■ 年式 07/05~10/04■ LP1924■ 送料無料税込【smtb-F】 RG/レーシングギア スーパーディスク RCD-608 ホンダ インテグラ タイプR DC5 K20A 2001年07月~2007年02月。引数には処理するデータのほかに、ID3DBlobで結果受け取り、/Dオプションに相当するD3D_SHADER_MACRO、そして#include処理を行うインターフェイスを指定します。

include処理のインターフェイス定義

#includeでのファイル読み込み処理を実装するインターフェイス(クラス)を指定します。プリプロセッサオプション/Iに相当する機能はD3DPreprocessにないためこのクラスで実装します。D3D_COMPILE_STANDARD_FILE_INCLUDEを指定するとデフォルトのinclude処理(カレントディレクトリとpSourceNameのディレクトリの検索)。

プリプロセス結果
コメント除去、include展開、define置き換えが行われます。それとプリプロセス前の行数とincludeしたファイル名がわかるように#lineが追加されます。スクリプトの解析などでエラー発生場所を特定できます(プリプロセス後の行数では発生場所がわからない)。
1
2
3
4
#line 6 "test.h"
 
lineからの行数でプリプロセス前のファイルと行数がわかる
ここはtest.hの8行目

サンプルコード

includeインターフェイス
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//D3DPreprocessでのinclude処理インターフェイス
// 検索パスを3つまで追加可能
class IInclude : public ID3DInclude
{
public:
    IInclude(const char* path0, const char* path1=nullptr, const char* path2=nullptr)
    {
        inc_path[0] = path0;
        inc_path[1] = path1;
        inc_path[2] = path2;
    }
    HRESULT __stdcall Open(D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes)
    {
        switch(IncludeType) {
        // とりあえず""と<>の区別なし
        case D3D_INCLUDE_LOCAL://#include ""
        case D3D_INCLUDE_SYSTEM://#include <>
            break;
        default:
            return E_FAIL;
        }
 
        for(auto& p : inc_path){
            if(!p)continue;
            std::string path = p;
            path += pFileName;
 
            std::ifstream input;
            input.open(path.c_str(), std::ios::binary);
            if(!input.is_open())continue;
            size_t fsize = (size_t)input.seekg(0, std::ios::end).tellg();
            input.seekg(0, std::ios::beg);
 
            void* data = ::operator new(fsize);
            input.read(static_cast<char*>(data), fsize);
            *ppData = data;
            *pBytes = fsize;
            return S_OK;
        }
        return E_FAIL;
    }
 
    HRESULT __stdcall Close(LPCVOID pData)
    {
        ::operator delete(const_cast<void*>(pData));
        return S_OK;
    }
 
    const char* inc_path[3];//検索パス
};

使用例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    const char* file_path = "data/test.fx";
    const char* inc_path = "data/";
 
    std::ifstream input;
    input.open("data/test.fx", std::ios::binary);
    //if(input.is_open())//省略
    size_t fsize = (size_t)input.seekg(0, std::ios::end).tellg();
    input.seekg(0, std::ios::beg);
    void* data = ::operator new(fsize);
    input.read(static_cast<char*>(data), fsize);
 
    IInclude iinc(inc_path);// /I inc_path
 
    // Cプリプロセッサでの/Dオプション
    D3D_SHADER_MACRO defines[] = {
        {"DEBUG", "1"},// /DDEBUG=1
        {nullptr, nullptr},// I'll be back
    };
 
    ID3DBlob* result = nullptr;
    ID3DBlob* error = nullptr;
    D3DPreprocess(data, fsize, file_path, defines, &iinc, &result, &error);
 
    if(result)OutputDebugStringA( (const char*)result->GetBufferPointer() );
    if(error)OutputDebugStringA( (const char*)error->GetBufferPointer() );
 
    ::operator delete(data);
    if(result)result->Release();
    if(error)error->Release();
 
// コードの色付けのバグにより ¥¥⇒/

おまけ

OutputDebugStringA関数などでエラー出力を行う場合
ファイルパス(数字):エラー文
という書式で出力すると、ダブルクリックでファイルパスのファイルをVisualStudioのエディタで開き、数字で指定した行数にエディットカーソルが移動した状態になります 。

ベレッツァ カジュアルG シートカバー マツダ フレアワゴン MM21S 2012年06月~2013年04月 選べる6カラー S633-3

2016人気の(まとめ) アンテナ延長コード 2070 【×10セット】_送料無料

店内全品送料無料!■サイズ・色違い・関連商品関連商品の検索結果一覧はこちら■商品内容【ご注意事項】・この商品は下記内容×10セットでお届けします。■ラジオアンテナコードの延長に■商品スペック■サイズ約0.5m■材質コード/絶縁被覆:塩化ビニール 導体:電気用軟銅線ジャック/ケース:ポリプロピレン 金属部:黄銅(ニッケルメッキ)プラグ/ケース:塩化ビニール 金属部:黄銅(ニッケルメッキ)■入り数1本■送料・配送についての注意事項●本商品の出荷目安は【1 - 6営業日 ※土日・祝除く】となります。●お取り寄せ商品のため、稀にご注文入れ違い等により欠品・遅延となる場合がございます。●本商品は同梱区分【TS1】です。同梱区分が【TS1】と記載されていない他商品と同時に購入された場合、梱包や配送が分かれます。●沖縄、離島および一部地域への配送時に追加送料がかかる場合や、配送ができない場合がございます。

(まとめ) アンテナ延長コード 2070 【×10セット】_送料無料.【カロ KARO】カリーナ 等にお勧め FLAXY フラクシー フロアマット 型式等:AT、ST17# 品番:354, 【ブレンボ】ブレーキパッド HONDA トルネオ [ CF4 CF5 ][ 97/9~02/10 ][ FRONT ] 【 セラミック 】, [KYB] カヤバ ショック ローファースポーツ 1台分 4本セット ティーダ C11 04/09~ HR15DE FF ハッチバック アクシス,オーテック除く [15S / 15M / 15G], 【USA在庫あり】 ダイナテック DYNATEK イグニッション FS 06年以降 CRF150F 2101-0347 HD店, ZX-14R(12年) バーハンドルキット(ジュラルミンコンチ3型ハンドル)シルバー ブレーキホース オリジナル フルステンレス製 HURRICANE(ハリケーン);クスコ CUSCO スタビライザー トヨタ アルテッツァ SXE10 3S-GE リヤ用, 『40番のみ』 スペーシア用 スライドドアエレクトリックSPLライトのユニット 36766-81M20 FIG366h スズキ純正部品, [ACRE] アクレ ブレーキパッド ライトスポーツ フロント用 ムーヴキャンバス LA810S 16/09~ 660cc 4WD ※代引不可 ※北海道・沖縄・離島は送料2160円, 【61100076】 ブラス フュエルキャップ ハーレー純正パーツ, 『シビック』 純正 FK7 FC1 ドアバイザー HATCH パーツ ホンダ純正部品 サイドバイザー 雨よけ 雨除け オプション アクセサリー 用品;

プロジェクトμ タイプHC+ フロント左右セット ブレーキパッド アルト/アルトワークス CN21S F883 プロジェクトミュー プロミュー プロμ TYPE HC+ ブレーキパット【店頭受取対応商品】;【1年保証】【新品】【最短当日発送】ステップワゴンスパーダラジエーター RG1・RG2・RG4 A/T (19010-RTA-901);

ディクセル ブレーキローター PD(プレーンディスク) フロント左右セット ギャラン/アスパイア EA1A/EC1A 3412763 DIXCEL ディスクローター ブレーキディスク【店頭受取対応商品】

UVカット IRカット フィルム オリジナル 製 クリア リア TOYOTA トヨタ エクシブ H05/10~H10/4 ST202 T027-01E 車種別 カット済み フィルム貼り 張替 ポイント消化

(まとめ) アンテナ延長コード 2070 【×10セット】_送料無料:トーヨー プロクセス TOYO PROXES Sport 265/35R19(98Y)XL(タイヤ単品1本価格);SUZUKI RF900R RR用ADVANTAGE EXACT2 フル鍛造アルミホイール

2019-06-17


ファイルパス(10,8)
とすると10行、8文字目にカーソルが移動 EXACT 2(アルミ鍛造ホイール)前後セット ADVANTAGE(アドバンテージ) CB1300SF(03~)。
プリプロセスでエラーが発生したときに、ダブルクリックでエラー発生場所に移動できたので何か特殊なデバッグ機能がD3DPreprocessに備わっているのではと考えましたが、単にデバッグ出力を特定の書式にすることで有効になる機能でした。スクリプトやテキストデータの解析時に使えそうです 【S660 JW5 エスケレート】S660 JW5 4点セット カーボン 「FIVE STAR Sシリーズ」 【車高調 30系 プリウス ZVW30 前期 後期 日本製 国産 フルタップ式 減衰力調整付 保証付 オーバーホール可能】。

{yahoojp}jpprem01-zenjp40-wl-zd-69164