pSysMem
是普通可复制的,myvector.data()
是一个连续的块,对array<float,3>
来说是安全的,但是我认为这是不好的做法,希望您有充分的理由不传递指针,复制向量而不是原始数据,或使用vector.data()
。我有一个vector<array<float,3>>
用作渲染的3D坐标列表。我可以简单地将memcpy与sizeof(array<float,3>) * vector.size()
用作count
参数吗?向量的记忆可以安全复制吗?
€dit:这是我的代码段。我的问题现在措词有点不正确。
vector<array<float,3>> vertexPositions;
//read VertexPositions, one line represents a vertex position and put them into vertexPositions with push_back();
D3D11_BUFFER_DESC bufferDesc;
//initialize Buffer Description;
D3D11_SUBRESOURCE_DATA bufferInitialData;
bufferInitialData.pSysMem = vertexPositions.data(); //pSysMem is a void* and expects a sequence of floats
[pSysMem
只是一个void*
,并且该结构还有一个附加的大小参数,我将其设置为sizeof(array<float,3>) * vector.size()
向量的记忆是否可以安全复制?
是的,向量在这里没有做任何特殊的事情,元素的包装方式与数组相同。您可以轻松地看到这一点,因为说data()
返回的指针可以作为数组访问(对于[0]
至[myvec.size() - 1]
),直到执行了使返回无效的操作(例如破坏向量或调整向量的大小)为止。 >
我希望将浮子紧密包装(因为它们将被发送到GPU),这是否允许我这样做?
因此,这基本上意味着确保存储的[[向量中]]类型符合要求。 (例如,您实际上需要3浮点RGB格式,而不是整数格式或RGBA或RGBX 4元素格式之一)。根据您使用的API,您甚至可以直接将向量数据提供给它,而无需复制到单独的数组中(例如
ID3D11Device::CreateBuffer
取一个ID3D11Device::CreateBuffer
,如果将正确的类型存储在向量中,则只需设置[ C0]设为pInitialData
)。
pSysMem
是普通可复制的,myvector.data()
是一个连续的块,对array<float,3>
来说是安全的,但是我认为这是不好的做法,希望您有充分的理由不传递指针,复制向量而不是原始数据,或使用vector.data()
。要检查类型是否可以简单复制,可以使用memcpy
std::copy
的开头一样使用std::is_trivially_copyable。您没有采用向量地址的方法之一。std::array<float, 3> *
pSysMem
是普通可复制的,myvector.data()
是一个连续的块,对array<float,3>
来说是安全的,但是我认为这是不好的做法,希望您有充分的理由不传递指针,复制向量而不是原始数据,或使用vector.data()
。std::copy
的开头一样使用std::is_trivially_copyable。您没有采用向量地址的方法之一。