Desenhando uma borda em um polígono 2d com um sombreamento de fragmento

Eu tenho alguns polígonos simples (menos de 20 vértices) tornando-os planos em um simples plano xy, usando GL_TRIANGLES e uma cor plana, uma simulação 2D.

Eu gostaria de adicionar uma borda de espessura variável e uma cor diferente para esses polígonos. Eu tenho algo implementado usando os mesmos vértices e glLineWidth / GL_LINE_LOOP, que funciona, mas é outra passagem de renderização e repete todas as transformações de vértices.

Eu acho que eu deveria ser capaz de fazer isso no shader de fragmento usando gl_FragCoord e os dados de vértices e / ou coordenadas de textura, mas não tenho certeza, e minhas tentativas ingênuas foram obviamente incorretas.

Eu imagino algo como o seguinte.

uniform vec2 scale;  // viewport h/w
uniform float line_width;
uniform vec4 fill_color;
uniform vec4 border_color;

varying vec4 vertex; // in world coords

void main()
{
    if (distance_from_edge(gl_FragCoord, vertex, scale) < line_width)
    {
        // we're close to the edge the polygon, so we're the border.
        gl_FragColor = border_color;
    }
    else
    {
        gl_FragColor = fill_color;
    }
}

A parte que estou tentando descobrir é a função distance_from_edge - como isso pode ser calculado? Está usando gl_FragCoord a abordagem errada - eu deveria estar usando algum tipo de mapeamento de textura?

Como experiência, tentei converter o vértice em espaço de pixel com a escala e depois calcular a distância entre ele e gl_FragCoord em pixels, mas isso deu resultados estranhos que eu realmente não entendi. Além disso, preciso da distância até oBeira, não o vértice, mas não sei como conseguir isso.

Alguma ideia?

EDIT: com base na resposta de Nicol, minha pergunta se torna:

Assumindo que eu tenha um triângulo com 3 vértices de canto marcados como vértices de aresta e um vértice no meio marcado como não aresta (então renderizado com 3 triângulos no total), então como interpolar no sombreador de fragmento para desenhar uma borda de um dado espessura? Eu estou supondo que eu passar o sinalizador de borda para o sombreador de fragmento, bem como a espessura de linha desejada, e faz algum cálculo de interpolação para descobrir a distância entre a borda e não vértices de borda e limiares a cor como borda / preencher conforme apropriado ?

questionAnswers(1)

yourAnswerToTheQuestion