2
由於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錯誤檢查宏。
在此先感謝!
是'data'編譯着色器?否則,你必須先編譯它。 –
是的,它是由VS2012創建的Compiled Shader Object(AFAIK它使用fxc.exe)。 – Drop