Flexible y preciso: filtros
Use un filtro de texel en la textura en el lado de la CPU o si está usando una tubería programable OpenGL, directamente en el sombreador de fragmentos.
La idea de un filtro es simplemente que ejecute un bucle 2D para procesar cada texel. Si es blanco, entonces se ejecuta a través de un bucle 2D interno para cada uno de sus píxeles circundantes en algún radio, y se adapta en consecuencia. Esto también se conoce como un filtro de caja, aunque si incluye la verificación del radio, en realidad es un filtro circular, que evita la artefactos de eje.
Una forma más rápida de hacer esto es calcular previamente el conjunto de desplazamientos de cada píxel central que verifica; de esta manera, no necesita ejecutar una raíz cuadrada por cada píxel que rodea a un píxel dado. Desea mantener la complejidad en `O (texWidth * texHeight) en lugar de O (texWidth * texHeight * filterRadius * filterRadius), en otras palabras.
Fácil: múltiples renders
Otra forma de lograr el efecto sería no escalar el texto, sino representar su contorno rojo en cada una de las ocho (o más) direcciones, cada una ligeramente desviada del original en esa dirección:
\|/
--+--
/|\
Al compensar cada una de las versiones rojas como esta, obtendría un borde exterior bastante uniforme alrededor de su texto original. Tenga en cuenta que cuando cambie diagonalmente, debe usar la misma magnitud de vector que cuando cambia horizontal o verticalmente, en lugar de simplemente compensar con los mismos valores x e y (lo que conduce a una longitud aproximadamente 1.4x más larga - trigonométrico básico).
FYI
Este tipo de efecto se conoce como dilatación, y a veces se realiza a través de la suma de Minkowski , que es el enfoque basado en vectores (continuo) del filtro de caja basado en píxeles (cuantificado) que describí anteriormente.