Я обрабатываю спрайты в 3d-пространстве, где каждый квадрат формируется с двумя треугольниками. Я рисую GL_TRIANGLES (см. Ниже). Поскольку в этой формации повторяются 2 вершины, вершинный шейдер выполняет в два раза один и тот же расчет.GLSL/OpenGL Повторное использование вывода из вершинного шейдера
5 3, 4
*---*
| /|
|/ |
*---*
1, 6 2
Я хотел бы оптимизировать это, используя геометрический шейдер, чтобы повторить две вершины. Причина этого в том, что вершинный шейдер дорог, и в сцене имеется большое количество треугольников. После многих хакеров мне удалось снять это. Он оказался очень неэффективным. Это на самом деле на 45% медленнее на моей машине. Я предполагаю, что это происходит из-за того, что примитивная сборка выполняется два раза, и много ненужного копирования данных происходит в геометрическом шейдере. Я не могу просмотреть код сборки, поэтому я могу только догадываться.
Теперь, на мой вопрос, есть ли лучший способ сделать это, что на самом деле будет быстрее, чем выполнение всех дополнительных операций вершинного шейдера.
Вы используете индексированный рендеринг? Если вы используете индексы и ссылаетесь на одну и ту же вершину несколько раз, результат вершинного шейдера будет часто кэшироваться. –