Геометрический шейдер OpenGL, настройка размера ввода

Я успешно написал свой первый геометрический шейдер. Он принимает строки и выводит маленький треугольник в центре каждой. Я мог бы сделать то же самое для треугольников достаточно легко, но как насчет куба? Есть ли способ заставить геометрический шейдер работать с произвольным количеством точек или, по крайней мере, с более чем 3? Я знаю, что мог бы сам вычислить центр и выполнить другую операцию рисования, но я хотел бы знать, возможно ли это внутри шейдера.

Спасибо.


person Hal Gee    schedule 29.07.2020    source источник


Ответы (1)


Геометрические шейдеры принимают в качестве входных данных примитив, а не число вершин. Я имею в виду, да, конкретный примитив состоит из определенного количества вершин. Но GS не считает вершины; они берут примитивы.

Существует ряд специальных примитивных типов, которые позволяют GS получать доступ к большему количеству вершин, чем в базовом примитивном типе. Но они предназначены для ссылки на вершины, смежные с вершинами основного примитива, и трудно попытаться заставить их работать как общий механизм для использования X вершин.

Таким образом, вы можете использовать только такое количество вершин, которое соответствует количеству вершин примитива. : 1, 2, 3, 4 или 6. Вне этих конкретных количеств вершин вы не можете заставить GS делать то, что вы пытаетесь сделать.

Вы можете попытаться использовать тесселяцию, так как количество вершин патчей задается пользователем (хотя и ограничено реализацией). Но тесселяция более ограничена с точки зрения генерации вершин.

person Nicol Bolas    schedule 30.07.2020