1) Мне дано понять, что в OpenGL ES координаты текстуры отображаются только в буфер вершин, а не в индексный буфер.
Правильно, координаты текстуры относятся к данным вершин (буферизованным или в пространстве процессора), а НЕ к индексным данным. Индексный механизм не зависит от текстурирования.
Предположим, у вас есть этот массив вершин, состоящий из 3 вершин (по 3 компонента в каждой):
float vdata[] = {x0,y0,z0, x1,y1,z1, x2,y2,z2};
и этот массив текстовых координат, состоящий из 3 координат (по 2 компонента в каждой):
float tdata[] = {u0,v0, u1,v1, u2,v2};
При объявлении этих данных в OpenGL вы связываете вершину 0 (x0, y0, z0) с координатой текстуры 0 (u0, v0), вершину 1 с координатой текстуры 1 и так далее. В конце он отобразит ваш треугольник, состоящий из 3 вершин / 3 координат текстуры, соответствующей части текстуры.
Вот традиционная картинка OpenGL, но для многоугольника с четырьмя вершинами.
(источник: glprogramming.com )
Индексные данные (буферизованные или нет) - это способ указания вершин с косвенным, а не последовательным образом. В моем предыдущем примере, если я хотел бы визуализировать треугольник дважды, я бы указал индексный массив следующим образом:
unsigned int idata[] = {0,1,2, 0,1,2};
Таким образом, для ответа на 1) данные индекса не зависят от texcoords или других атрибутов вершин, таких как цвета, нормали и т. Д., Поэтому нет смысла связывать texcoords с индексными данными.
2) В конце концов, чтобы правильно отобразить текстуры, нужно выписать буфер вершин со всей избыточностью, которая была бы сохранена с индексным буфером. Есть ли еще увеличение производительности или индексные буферы избыточны для текстурированных данных?
Как правило, индексирование ваших сеток является способом устранения избыточности при повторном использовании одних и тех же вершин и, следовательно, требует меньших затрат памяти. Я полагаю, что в большинстве случаев существует много увольнений.
Конечно, если вы возьмете 3D-куб, ни одна из вершин не будет использовать одни и те же текстовые координаты или нормали, но это не типичная модель! Я полагаю, что большинство сеток в игровых / CAD-приложениях представляют собой непрерывные поверхности с большим количеством избыточных вершин и обеспечивают большую степень индексации.
Во-вторых, при наличии индексов графический процессор может использовать кеш до / после вершины для ускорения рендеринга.
Что касается пропускной способности памяти, то наличие индексов почти бесплатно, поскольку графический драйвер помещает их в память pci-express (DMA) и поэтому не расходует пропускную способность видеопамяти.
В общем, я не думаю, что это плохо для исполнения, использующего индексные буферы, даже если у вас мало повторений вершин, но, как обычно, вы должны проверять различные реализации OpenGL и делать свои собственные тесты.