Потому что 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
размер файла.
Я знаю, что есть новые примеры Windows 8 на MSDN, но они используют некоторые новые вещи Metro. Я хочу сделать это с простым C ++.
XTRACE2
это просто макрос проверки ошибок DirectX.
Заранее спасибо!
Ошибка была вызвана чтением двоичного файла в текстовом режиме. Работает как задумано, если добавить двоичный флаг для чтения функции. Что-то вроде того:
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();
Позор мне = \
Других решений пока нет …