Я использую вызов glDrawElements с VBO для рендеринга моей сцены.Сцена - это ткань с вершинами и координатами текстуры - в этом примере я рендеринг флага.
В моей сцене вершины являются динамическими, что означает, что мне нужно записывать в VBO каждый кадр.Большая часть моей обработки выполняется на GPU с использованием CUDA, поэтому я постоянно отображаю память процессора в память GPU.Координаты текстуры, с другой стороны, являются статическими.Чтобы выполнить рендеринг с помощью glDrawElements (насколько я понимаю), я должен чередовать координаты текстуры в вершинах VBO, а затем просто вызвать glTexCoordPointer () и glEnableClientState ().Это не оптимально, потому что тогда мне нужно будет рисовать все координаты текстуры при себе, когда я выполняю отображение памяти CPU <-> GPU.
Есть ли способ упорядочить мой vbo так, чтобы я мог обновитьданные вершин в VBO, не касаясь данных текстуры в VBO?Ниже приведен мой код для рендеринга - у меня есть три массива: индексный массив, массив вершин и массив текстур.
В приведенном ниже коде indexVbo сопоставлен с массивом индекса, а vbo сопоставлен с массивом вершин.Теперь мне нужно включить текстуры.Любое понимание или предложения будут высоко оценены.
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, flagTexId);
glPushMatrix();
glColor3f(1.0, 1.0, 1.0);
glVertexPointer(4, GL_FLOAT, 0, 0);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexVbo);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// Render flag mesh
glDrawElements(GL_TRIANGLES, numTriangles * 3, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
glDisable(GL_TEXTURE_2D);