, если мои данные вершин был заложен изв OPENGL Как изменить определенный атрибут буфера вершин из памяти
пример:
struct Vertex
{
float position[4];
float normal[3];
float texCoord[2];
}
я знаю, что мы используем
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_uiVertBufferHandle);
//get the pointer position where we can add verts
void* pPositionBuffer = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_READ_WRITE);
//now copy into our memory spot
//which we need to move to the right position
memcpy(((char*)pPositionBuffer) + (uiVertLocation*sizeof(VertexFormat)), pVerts, iNumVerts*sizeof(VertexFormat));
//now stop mapping
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
для полного копировать местоположение, это то, как я это делал, но мне просто нужно отредактировать данные позиции вершин и не изменять какие-либо другие атрибуты.
я просто обновление позиционных данных на стороне центрального процессора для некоторого тестирования
struct Vertex
{
float position[4]; <----
float normal[3];
float texCoord[2];
}
Вы, вероятно, следует использовать 'GL_WRITE_ONLY' в этом случае, так как вы не хотите, чтобы прочитать значения, вы просто хотите отправить GL - новый. Тем не менее, если вы часто это делаете, вы, вероятно, также захотите использовать 'glMapBufferRange (...)' и недействительность, чтобы сообщить GL, что он может отказаться от старой памяти, чтобы минимизировать накладные расходы синхронизации. Поскольку вы используете *** буферные объекты ARB ***, у меня есть ощущение, что это не вариант (явное недопустимое значение диапазона буфера довольно новое). –