2015-01-25 7 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; 
} 
그것은 다음과 같이 할 필요가

의 값을 가질 필요하지만 오류를 얻을 당신은 무효가 아닌 HRESULT를 반환하는 모든 Direct3D를 기능에 대한 HRESULT를 확인해야

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

. SUCCEEDED 또는 FAILED 매크로를 사용하거나 DX::ThrowIfFailed 도우미를 사용하십시오. 귀하의 코드는 HREUSLT를 확인하는 데 아무런 의미가 없을 것입니다 (CreateBuffer).

둘째, Direct3D를 DEBUG 장치를 활성화하고 디버그 출력 창에서 오류 또는 경고를 찾습니다. 이는 대개 API 사용 또는 매개 변수 유효성 검사와 관련된 문제를 즉시 지적합니다. this post을 참조하십시오.