由于d3dcompiler*.dll
变得不受欢迎,我试图从我的应用程序中排除对它的依赖。我的新编译着色器对象 (.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 返回与我的char*
或std::vector<char>
等于.cso
文件大小的相同大小的缓冲区。我知道,MSDN 上有新的 Windows 8 示例,但它们使用了一些新的 Metro 东西。我想用普通的 C++ 来做。
XTRACE2
只是 DirectX 错误检查宏。
提前致谢!