Исходя из вашего вопроса, я предполагаю, что у вас есть какое-то огромное промежуточное ПО, и у вас есть доступ только к шейдерам, я прав?
В этом случае создайте в своем вершинном шейдере переменную, называемую, например, vertexID:
varying float vertexID; # in GLSL <= 3, or
out float vertexID; # in GLSL 4
и присвойте ему встроенный gl_VertexID:
vertexID = (float)gl_VertexID;
Таким образом, вы получите доступ к gl_VertexID из фрагментного шейдера, но с интерполяцией! Это здорово, потому что это будет, например, 2 в одной вершине, 3 в соседнем и 2.5 в промежутке.
Так что вам просто нужно проверить, близок ли vertexID к 2 (соответственно, 3): если это так, вы близки к краю. Этого должно быть достаточно для визуализации и отладки.
in float vertexID; # or
varying float vertexID;
// blabla
if (fract(vertexID) < 0.1){
outcolor = vec4(1,0,0,0); # in glsl 4
}
Обратите внимание, что таким образом вы получите только 2 ребра каждого треугольника. И, возможно, некоторые из них будут очень тонкими (если один vertexID равен 2, а другой 1000, зона 0.1 мало).