2

望ましくないためd3dcompiler*.dll、アプリから依存関係を除外しようとしています。また、新しい Compiled Shader Object (.cso) ファイルの読み込みコードに問題があります。

ifstream fstream;  
fstream.open (vsfile);
if(fstream.fail())
    return false;

fstream.seekg( 0, ios::end );  
size_t size = size_t(fstream.tellg());  
char* data = new char[size];

fstream.seekg(0, ios::beg);  
fstream.read( data, size);  
fstream.close();  

XTRACE2(pDevice->CreateVertexShader(&data, size, 0, &m_pVertexShader))

問題:エラーをCreateVertexShader()返しE_INVALIDARGます。

古いコードは正常にD3DReadFileToBlob()動作します。Blob は、mychar*またはファイル サイズstd::vector<char>と同じサイズのバッファーを返します。.csoMSDN に新しい Windows 8 の例がありますが、それらはいくつかの新しい Metro を使用しています。プレーンなC++でやりたいです。

XTRACE2DirectX エラー チェック マクロです。

前もって感謝します!

4

1 に答える 1

1

テキストモードでバイナリを読み取ったためにエラーが発生しました。読み取り関数にバイナリフラグを追加すると、意図したとおりに機能します。そんな感じ:

            std::ifstream fstream;  
            fstream.open (filename,  std::ifstream::in | std::ifstream::binary);
            if(fstream.fail())
                return false;

            fstream.seekg( 0, std::ios::end );  
            size_t size = size_t(fstream.tellg());  
            data.resize(size);  
            fstream.seekg(0, std::ios::beg);  
            fstream.read( &data[0], size);  
            fstream.close(); 

私の恥=\

于 2012-10-25T22:20:05.773 に答える