Сквозной геометрический шейдер для точек - PullRequest
3 голосов
/ 15 июня 2011

У меня проблемы с написанием простого сквозного геометрического шейдера для точек.Я подумал, что это должно быть примерно так:

#version 330
precision highp float;

layout (points) in;
layout (points) out;

void main(void)
{
    gl_Position = gl_in[0].gl_Position;
    EmitVertex();
    EndPrimitive();
}

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

Я использую C # и OpenTK, но я не думаю, что это проблема.

Редактировать: Люди запрашивали другие шейдеры, хотяЯ тестировал эти шейдеры без использования геометрического шейдера, и они прекрасно работали без геометрического шейдера.

Вершинный шейдер:

void main()
{
    gl_FrontColor = gl_Color;
    gl_Position = ftransform();
}

Фрагментный шейдер:

void main()
{
    gl_FragColor = gl_Color;
}

1 Ответ

4 голосов
/ 15 июня 2011

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

layout (points, max_vertices=1) out;

Возможно, шейдер успешно компилируется, потому что вы все равно можете указать количество вершин с помощью API (по крайней мере, в отношении совместимости, я думаю).

EDIT: Вы используете встроенную переменную gl_FrontColor (и читаете gl_Color в фрагментном шейдере), но затем в геометрическом шейдере вы не распространяете его на фрагментный шейдер (он не не распространяется автоматически).

Это подводит нас к другой проблеме. Вы смешиваете новый синтаксис (например, gl_in) со старым устаревшим синтаксисом (например, ftransform и встроенными цветовыми вариациями). Возможно, это не очень хорошая идея, и в этом случае у вас возникла проблема, поскольку у gl_in нет члена gl_Color или gl_FrontColor, если я правильно помню. Поэтому лучше всего использовать собственную переменную цвета в качестве out переменной вершинного и геометрического шейдеров и in переменной геометрического и фрагментного шейдеров (но помните, что in должен быть массивом в геометрия шейдера).

...