Ошибка создания шейдера из памяти

Потому что 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.

Заранее спасибо!

2

Решение

Ошибка была вызвана чтением двоичного файла в текстовом режиме. Работает как задумано, если добавить двоичный флаг для чтения функции. Что-то вроде того:

            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();

Позор мне = \

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector