2013-04-04 44 views

回答

1

他们低估了它的原因是因为它好像你没有付出任何努力进入一个小小的谷歌搜索。

回答:当调用创建方法时,DirectX通常会将数据从系统内存传输到视频内存中。创建方法的一个例子是“ID3D11Device :: CreateBuffer”。这种方法需要一个指向数据存储位置的指针,以便从系统RAM复制到视频RAM。但是,如果传入的指针是空指针,那么它只是将空间量设置为边,以便稍后复制它。

例子:

如果您创建一个动态顶点缓冲区和你没有在第一,那么你将不得不使用地图/取消映射到数据复制到显存传递数据。

// Fill in a buffer description. 
    D3D11_BUFFER_DESC bufferDesc; 
    bufferDesc.Usage   = D3D11_USAGE_DYNAMIC; 
    bufferDesc.ByteWidth  = sizeof(Vertex_dynamic) * m_iHowManyVertices; 
    bufferDesc.BindFlags  = D3D11_BIND_VERTEX_BUFFER; 
    bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; 
    bufferDesc.MiscFlags  = 0; 
    bufferDesc.StructureByteStride = NULL; 

    // Fill in the subresource data. 
    D3D11_SUBRESOURCE_DATA InitData; 
    InitData.pSysMem = &_vData[0]; 
    InitData.SysMemPitch = NULL; 
    InitData.SysMemSlicePitch = NULL; 

    // Create the vertex buffer. 
/*Data is being copyed right now*/ 
m_pDxDevice->CreateBuffer(&bufferDesc, &InitData, &m_pDxVertexBuffer_PiecePos); 
+0

对不起,您从哪里得到了这个答案?如果指针不是NULL,它是否一直在create方法中执行复制?谢谢! – Yola 2013-04-13 13:54:22

+0

Yeahp ...它总是这样。这就是为什么在创建静态缓冲区时需要传入数据。 – Miguel 2013-04-14 15:17:25