У меня есть std::vector<MyVertex>
где MyVertex
- это структура. Я должен переместить эти данные в буфер вершин в Direct3D 9, а примеры, которые я видел, используют memcpy
. К сожалению, memcpy
сбой моего приложения, поэтому я определенно делаю что-то неправильно.Копировать std :: vector to void pointer
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]));
Update:
Это работало раньше, когда я только использовал array
вместо vector
. Кажется, мне не пришлось сначала инициализировать void*
, потому что пример работал очень хорошо. Затем я сменил его на vector
, и все пошло не так. Почему я должен инициализировать void*
внезапно, и это все равно сбой моего приложения.
memcpy (vbPtr, m_VertsBuff0.data(), sizeof(MyVertex) * m_VertsBuff0.size());
'vbPtr' не инициализирована. –
Почему вы сначала нарисовали (казалось бы, правильный) 'sizeof (MyVertex) * m_VertsBuff0.size()', но затем переключились на 'sizeof (m_VertsBuff0)'? Похоже, вы точно не знаете, какие аргументы нужно передать «memcpy». Он очень похож на безголовую попытку без правильного понимания того, что должно произойти там. Ничего хорошего из такого процесса не выйдет. Вы должны узнать больше о том, что делает memcpy, и о том, как это связано с vertexbuffer. –
Для начала вы должны проверить возвращаемое значение из вызова 'Lock', чтобы убедиться, что оно выполнено. – molbdnilo