2015-01-25 5 views
1

Итак, я начинаю создавать программу с использованием DirectX11. У меня возникли проблемы с пониманием, почему, когда я использую IASetVertexBuffers(), я получаю сообщение об ошибке, когда я использую 1 для количества буферов в массиве. Но когда я переключаю значение на 0, он загружается просто отлично. Она должна иметь значение 1.IASetVertexBuffers не работает

BOOL Graphics::InitializeVertexBuffer(D3D11_USAGE Usage, INT BindFlags, INT CPUAccessFlags, INT MiscFlags) 
{ 
    D3D11_BUFFER_DESC D3D11BufferDesc; 
    D3D11BufferDesc.Usage = Usage; 
    D3D11BufferDesc.ByteWidth = sizeof(VERTEX) * 3; 
    D3D11BufferDesc.BindFlags = BindFlags; 
    D3D11BufferDesc.CPUAccessFlags = CPUAccessFlags; 
    D3D11BufferDesc.MiscFlags = MiscFlags; 
    D3D11Device->CreateBuffer(&D3D11BufferDesc, NULL, &VertexBuffer); 
    D3D11DeviceContext->IASetVertexBuffers(0, 0, &VertexBuffer, NULL, NULL); 
    return 1; 
} 

Он должен быть следующим, но я получаю сообщение об ошибке

BOOL Graphics::InitializeVertexBuffer(D3D11_USAGE Usage, INT BindFlags, INT CPUAccessFlags, INT MiscFlags) 
{ 
    D3D11_BUFFER_DESC D3D11BufferDesc; 
    D3D11BufferDesc.Usage = Usage; 
    D3D11BufferDesc.ByteWidth = sizeof(VERTEX) * 3; 
    D3D11BufferDesc.BindFlags = BindFlags; 
    D3D11BufferDesc.CPUAccessFlags = CPUAccessFlags; 
    D3D11BufferDesc.MiscFlags = MiscFlags; 
    D3D11Device->CreateBuffer(&D3D11BufferDesc, NULL, &VertexBuffer); 
    D3D11DeviceContext->IASetVertexBuffers(0, 1, &VertexBuffer, NULL, NULL); 
    return 1; 
} 

ответ

1

Вы должны проверить HRESULT для всех Direct3D функций, которые возвращают HRESULT, а не пустота , Используйте макросы SUCCEEDED или FAILED или используйте вспомогательный помощник DX::ThrowIfFailed. Ваш код ничего не делает, чтобы проверить HREUSLTs от CreateBuffer, что, скорее всего, ключ.

Во-вторых, включите устройство Direct3D DEBUG и найдите ошибки или предупреждения в окне вывода отладки. Это обычно указывает сразу на проблему использования API или проверки параметров. См. this post.