Referencia de API: Shader
Los shaders definen el color de cada píxel según su posición en el lienzo. Se utilizan principalmente para degradados, patrones y ruido. Los shaders se asignan a un objeto Paint mediante paint.setShader(shader).
Degradados
Los degradados son el tipo más común de shaders. Skija admite varios tipos:
Degradado lineal
Crea una transición suave entre dos puntos.
Ejemplo visual: Consulta examples/scenes/src/ShadersScene.java para ver ejemplos de degradados lineales, radiales, de barrido y cónicos, así como shaders de ruido.
Shader linear = Shader.makeLinearGradient(
0, 0, 100, 100, // x0, y0, x1, y1
new int[] { 0xFFFF0000, 0xFF0000FF } // Colores (Rojo a Azul)
);Degradado radial
Crea una transición circular desde un punto central.
Shader radial = Shader.makeRadialGradient(
50, 50, 30, // centro x, y, radio
new int[] { 0xFFFFFFFF, 0xFF000000 } // Colores (Blanco a Negro)
);Degradado de barrido (Sweep)
Crea una transición que barre alrededor de un punto central (como una rueda de colores).
Shader sweep = Shader.makeSweepGradient(
50, 50, // centro x, y
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 }
);Degradado cónico de dos puntos
Crea una transición entre dos círculos (útil para efectos de iluminación o destellos 3D).
Shader conical = Shader.makeTwoPointConicalGradient(
30, 30, 10, // inicio x, y, radio
70, 70, 40, // fin x, y, radio
new int[] { 0xFFFF0000, 0xFF0000FF }
);Ruido y Patrones
Ruido de Perlin
Genera texturas que parecen nubes, mármol o fuego.
// Ruido Fractal
Shader noise = Shader.makeFractalNoise(
0.05f, 0.05f, // baseFrequencyX, baseFrequencyY
4, // numOctaves
0.0f // seed
);
// Turbulencia
Shader turb = Shader.makeTurbulence(0.05f, 0.05f, 4, 0.0f);Shader de Imagen
Convierte una Image en un shader que puede ser repetido (tiled) o usado para rellenar formas.
// Acceso a través de la clase Image
Shader imageShader = image.makeShader(
FilterTileMode.REPEAT,
FilterTileMode.REPEAT,
SamplingMode.DEFAULT
);Composición y Modificación
Shader.makeBlend(mode, dst, src): Combina dos shaders usando un modo de fusión (blend mode).shader.makeWithLocalMatrix(matrix): Aplica una transformación al sistema de coordenadas del shader.shader.makeWithColorFilter(filter): Aplica un filtro de color a la salida del shader.
Modos de Repetición (FilterTileMode)
Cuando un shader (como un degradado o imagen) necesita rellenar un área mayor que sus límites definidos:
CLAMP: Usa el color del borde para rellenar el resto.REPEAT: Repite el patrón.MIRROR: Repite el patrón, reflejándolo en los bordes.DECAL: Renderiza transparencia fuera de los límites.