我有std::vector<MyVertex>
一个MyVertex
结构。我必须将此数据推送到 Direct3D 9 中的顶点缓冲区,并且我看到的示例使用memcpy
. 不幸的是,memcpy
我的应用程序崩溃了,所以我肯定做错了什么。
std::vector<MyVertex> m_VertsBuff0;
void* vbPtr;
vertexbuffer->Lock (0, 0, &vbPtr, D3DLOCK_DISCARD);
memcpy (vbPtr, &m_VertsBuff0[0], sizeof(m_VertsBuff0)); // also tried sizeof(MyVertex)*m_VertsBuff0.size()
// std::copy(m_VertsBuff0.begin(), m_VertsBuff0.end(), vbPtr); // gives a compiler error void* unknown size
vertexbuffer->Unlock ();
device->SetStreamSource (0, vertexbuffer, 0, sizeof(m_VertsBuff0[0]));
更新:
这在我刚刚使用 aarray
而不是vector
. 似乎我不必void*
首先初始化,因为该示例运行良好。然后我把它改成a vector
,它出错了。为什么我必须void*
突然初始化并且这样做仍然会使我的应用程序崩溃。
memcpy (vbPtr, m_VertsBuff0.data(), sizeof(MyVertex) * m_VertsBuff0.size());