Самый эффективный способ - использовать индексированное рисование, а затем повторять индексы между двумя прямоугольниками.
то есть индексы 0, 1, 2, 3, 3, 4, 4, 5, 6, 7 производят следующие треугольники из зачистки треугольника
0, 1, 2 - 1, 2, 3 - 2, 3, 3 - 3, 3, 4 - 3, 4, 4 - 4, 4, 5 - 4, 5, 6 - 5, 6, 7
треугольники 2, 3, 3 - 3, 3, 4 - 3, 4, 4 и 4, 4, 5 - все имеют нулевую площадь и будут отброшены очень рано на видеокарте. Таким образом, вы получите 4 треугольника, отображаемых за один вызов DrawIndexedPrimitive.
Конечно, это означает, что вы отправляете 10 индексов. Вы также можете просто отправить 12 индексов и нарисовать оба прямоугольника как 4 треугольника в списке три. При использовании индексированного чертежа вы обнаружите, что аппаратное обеспечение отслеживает, какие вершины оно уже преобразовало, чтобы ему больше не пришлось беспокоиться.
т.е. если вы определите свой индексный буфер как
0, 1, 2, 3, 0, 2, 4, 5, 6, 7, 4, 6
и у вас есть кэш посттрансформирования, по крайней мере, с 4 вершинами (почти каждая графическая карта имеет значительно больший кэш посттрансформации, конечно, GeForce 3!) будет преобразован только один раз. Неудобно на любом оборудовании после DX8 (то есть на любом оборудовании DX9 или 10) вы обнаружите, что использование этого кеша после преобразования и дополнительная простота списков треугольников означает, что вы на самом деле получите ЛУЧШУЮ производительность из списка треугольников, чем треугольника полоса.
Итак, в заключение, отвечая на вопрос "Итак, мой вопрос: как наиболее эффективно нарисовать два прямоугольника с помощью D3DPT_TRIANGLESTRIP?" ответ - нарисовать D3DPT_TRIANGLELIST и перестать беспокоиться об этом:)