2012-04-02 7 views
0

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

// 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, поэтому любая помощь будет оценена, спасибо.

ответ

2

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

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

+0

Я проходил в четырех точках как GL_LINE_STRIP, я предполагал, что это подразумевает смежность. Я не знал о GL_LINES_ADJACENCY, я попробую следующее. – atb