-2

我的程序中有一些众所周知的步骤:

CreateBuffer

Create..View

CSSet..Views

Dispatch

数据是在哪一步复制到 GPU 上的?

4

2 回答 2

1

DirectX 为您管理内存,并在需要时将数据复制到 GPU。

于 2013-04-04T17:33:50.960 回答
1

他们投反对票的原因是因为看起来你似乎没有在谷歌搜索上付出任何努力。

答: DirectX 通常在调用创建方法时将数据从系统内存传输到显存。创建方法的一个示例是“ID3D11Device::CreateBuffer”。此方法需要一个指向数据所在内存位置的指针,以便可以将其从系统 RAM 复制到视频 RAM。但是,如果传入的指针是空指针,那么它只是将空间量设置到一边,以便您以后可以复制它。

例子:

如果您创建了一个动态顶点缓冲区并且一开始没有传入数据,那么您将不得不使用 map/unmap 将数据复制到视频内存中。

// 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);
于 2013-04-12T18:12:32.197 回答