Я не совсем уверен (не имею реального опыта работы с геометрическими шейдерами), но вам не нужно указывать максимальное количество выходных вершин. В вашем случае это всего лишь один, так что попробуйте
layout (points, max_vertices=1) out;
Возможно, шейдер успешно компилируется, потому что вы все равно можете указать количество вершин с помощью API (по крайней мере, в отношении совместимости, я думаю).
EDIT: Вы используете встроенную переменную gl_FrontColor
(и читаете gl_Color
в фрагментном шейдере), но затем в геометрическом шейдере вы не распространяете его на фрагментный шейдер (он не не распространяется автоматически).
Это подводит нас к другой проблеме. Вы смешиваете новый синтаксис (например, gl_in
) со старым устаревшим синтаксисом (например, ftransform
и встроенными цветовыми вариациями). Возможно, это не очень хорошая идея, и в этом случае у вас возникла проблема, поскольку у gl_in
нет члена gl_Color
или gl_FrontColor
, если я правильно помню. Поэтому лучше всего использовать собственную переменную цвета в качестве out
переменной вершинного и геометрического шейдеров и in
переменной геометрического и фрагментного шейдеров (но помните, что in
должен быть массивом в геометрия шейдера).