I changed how outlines are created in the geometry shader.
void generateOutlineForTrianglec() {
float overlap_factor = u_thickness + 1;
for(int edge = 0; edge < 3; edge++) {
int i0 = edge;
int i1 = (edge + 1) % 3;
vec4 v0 = gl_PositionIn[i0];
vec4 v1 = gl_PositionIn[i1];
vec4 edge_center = (v0 + v1) * 0.5;
vec4 edge_vector = v1 - v0;
vec4 extended_v0 = mix(edge_center, v0, overlap_factor);
vec4 extended_v1 = mix(edge_center, v1, overlap_factor);
vec2 edge_dir = normalize((extended_v1.xy / extended_v1.w) - (extended_v0.xy / extended_v0.w));
vec2 edge_normal = vec2(-edge_dir.y, edge_dir.x);
for(int i = 0; i < 4; i++) {
vec4 pos;
float offset;
if(i < 2) {
pos = extended_v0;
offset = (i == 0 ? 0.5 : -0.5);
} else {
pos = extended_v1;
offset = (i == 2 ? 0.5 : -0.5);
}
pos.xy += edge_normal * u_thickness * offset * pos.w;
gl_Position = pos;
fColor = vec4(0.0, 0.0, 1.0, 1.0);
fTextureCoord = vTextureCoord[i0];
EmitVertex();
}
EndPrimitive();
}
}
but the intersections of each outline do not work well.
Is there a way to clean up the intersections in the outline?