C++ 一个或多个无效参数的结果失败

C++ 一个或多个无效参数的结果失败,c++,directx,hresult,C++,Directx,Hresult,我在电脑上看到这个错误 result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer); 它说的是无效的论点 Im使用directX11并创建顶点缓冲区类 代码如下: bool VertexBuffer::Init(ID3D11Device * device, Shader * shader, float size, bool writable) { m_sh

我在电脑上看到这个错误

result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer); 
它说的是无效的论点

Im使用directX11并创建顶点缓冲区类

代码如下:

bool VertexBuffer::Init(ID3D11Device * device, Shader * shader, float size, bool writable)
{

    m_shader = shader;


    unsigned long* indices;

    HRESULT result;
    D3D11_BUFFER_DESC vertexBufferDesc, indexBufferDesc;
    D3D11_SUBRESOURCE_DATA vertexData, indexData;

    m_vertexCount = 4;
    m_indexCount = 6;

    m_vertices = new VertexType[m_vertexCount];
    indices = new unsigned long[m_indexCount];

    float halfSize = size / 2.0f;

    //Hardcoded quad from here...
    //Load vertex array:


    m_vertices[0].position = D3DXVECTOR3(-halfSize, -halfSize, 0.0f);
    m_vertices[0].uv = D3DXVECTOR2(0.0f, 1.0f);

    m_vertices[1].position = D3DXVECTOR3(-halfSize, halfSize, 0.0f);
    m_vertices[1].uv = D3DXVECTOR2(0.0f, 0.0f);

    m_vertices[2].position = D3DXVECTOR3(halfSize, halfSize, 0.0f);
    m_vertices[2].uv = D3DXVECTOR2(1.0f, 0.0f);

    m_vertices[3].position = D3DXVECTOR3(halfSize, -halfSize, 0.0f);
    m_vertices[3].uv = D3DXVECTOR2(1.0f, 1.0f);

    //Load indices:
    indices[0] = 0;
    indices[1] = 1;
    indices[2] = 2;
    indices[3] = 0;
    indices[4] = 2;
    indices[5] = 3;

    //To here.

    //Setup vertex buffer desc:
    vertexBufferDesc.Usage = (writable) ? D3D11_USAGE_DYNAMIC : D3D11_USAGE_DEFAULT;
    vertexBufferDesc.ByteWidth = sizeof(VertexType)*m_vertexCount;
    vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vertexBufferDesc.CPUAccessFlags = (writable) ? D3D11_CPU_ACCESS_WRITE : D3D11_CPU_ACCESS_READ;
    vertexBufferDesc.MiscFlags = 0;
    vertexBufferDesc.StructureByteStride = 0;

    //Setup vertex data:
    vertexData.pSysMem = m_vertices;
    vertexData.SysMemPitch = 0;
    vertexData.SysMemSlicePitch = 0;

    //Create vertex buffer:
    result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer); // Here's the error im getting
    if (FAILED(result))
    {
        Error(41);
        return false;
    }

有什么问题吗?

我认为
vertexBufferDesc.CPUAccessFlags
设置为无效值,而
可写
false
。它应该设置为0,因为用法设置为
D3D11\u用法\u默认值
。发件人:

D3D11\u CPU\u访问\u读取

资源是可映射的,以便CPU可以读取其内容。使用此标志创建的资源不能设置为管道的输入或输出,必须使用暂存用法创建(请参阅D3D11_用法)


此问题包含的信息不足,无法回答此问题。我们必须看看m_vertexBuffer是什么来回答这个问题。当编译错误包含产生所描述行为的可编译示例时,有关编译错误的问题更容易回答。请阅读。打开DirectX调试层。这将告诉您有关无效参数的更多详细信息。m_vertexBuffer是一个d3dxBuffer*,当前为空,但应该在“创建缓冲区”中设置。感谢您刚刚救了我的命。或是我的理智,但非常感谢