Геометрический шейдер GLSL с использованием lines_adjacency - PullRequest
0 голосов
/ 02 апреля 2012

Я пишу геометрический шейдер GLSL и пытаюсь использовать входной макет lines_adjacency, но он не работает.Мой первый проходной тест с использованием схемы ввода lines работает нормально:

// GLSL GEOMETRY SHADER
#version 410

layout (lines) in;
layout (line_strip, max_vertices = 2) out;

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

, но когда я переключаюсь на ввод lines_adjacency, он ничего не рисует:

// GLSL GEOMETRY SHADER
#version 410

layout (lines_adjacency) in;
layout (line_strip, max_vertices = 2) out;

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

Я знаю, что на самом деле я здесь не использую точки смежности, но в конечном итоге они мне понадобятся.Я новичок GLSL, поэтому любая помощь будет оценена, спасибо.

1 Ответ

2 голосов
/ 03 апреля 2012

Вы изменили свои входные вершины, чтобы предоставить данные о смежности, верно?Потому что OpenGL не анализирует ваши данные вершин, чтобы выяснить, что рядом с чем.Существуют типы смежности, позволяющие you сообщать шейдеру о смежной информации.Поэтому вы должны предоставить эти данные.

Короче говоря, вы не можете визуализировать с точно такими же атрибутами и индексировать данные с помощью геометрического шейдера смежности.Не берите в голову тот факт, что ваши glDraw* звонки должны использовать GL_LINES_ADJACENCY вместо GL_LINES.

...