Я экспериментирую с геометрическими шейдерами на Macbook Pro с графикой Intel HD 4000, работающей с Mavericks. Я замечаю какое-то странное поведение в вызове EndPrimitive()
. Вот мой геометрический шейдер:GLSL EndPrimitive() разбивает треугольную полосу
#version 150 core
layout(points) in;
layout(triangle_strip, max_vertices = 512) out;
void main() {
vec4 start_pos = gl_in[0].gl_Position + vec4(-0.5, -0.5, 0.0, 0.0);
vec4 bottom_vertex = start_pos;
for (int i = 0; i < 17; ++i) {
bottom_vertex = start_pos + vec4(float(i) * float(1.0/16.0), 0.0, 0.0, 0.0);
gl_Position = bottom_vertex;
EmitVertex();
gl_Position = bottom_vertex + vec4(0.0, 1.0/16.0, 0.0, 0.0);
EmitVertex();
}
//EndPrimitive();
}
Программа использует glfw
и запрашивает основной контекст OpenGL 3.2. Я рисую только одну вершину в [0, 0]
, и моя цель состоит в том, чтобы мой геометрический шейдер вывел квадратную сетку из нескольких треугольных полосок. Шейдер, как есть, выводит одну строку сетки. Вот результат:
В этот момент я хочу завершить текущий треугольник полосу примитивной и начать новую для следующего ряда. Однако, просто раскомментирован EndPrimitive()
вызов в затенении выше шурупов до результата:
ли я что-то недоразумение о EndPrimitive()
? Я понимаю, что он должен закончить текущую полосу треугольника и начать новую. Поскольку я не делаю ничего после моей петли, результат моего шейдера должен быть таким же, как и с EndPrimitive()
или без него.
Кроме того, я не могу тестировать другую реализацию прямо сейчас, может быть, что моя ошибка? Есть ли что-нибудь, что я могу попытаться выявить эту проблему?