использование геометрического шейдера для создания новых типов примитивов - PullRequest
5 голосов
/ 22 сентября 2011

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

С помощью ответа здесь геометрический шейдер выполняет то, о чем я просил (если кому-то когда-нибудь понадобится):

#version 120
#extension GL_EXT_geometry_shader4 : enable

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

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

1 Ответ

4 голосов
/ 22 сентября 2011

Да, это вполне возможно, для этого и нужен геометрический шейдер.Просто укажите тип входного примитива как точку и тип выходного примитива как треугольник (или, скорее, полосу треугольника, независимо от того, является ли это только один треугольник), используя либо glProgramParameteri в приложении, либо используя более современный синтаксис layout непосредственно вшейдер.

...