Moteurs de brosses

Calcul de la couleur

vec3 getStandardColor(vec2 uv, float alpha)


Cette procédure calcule la couleur du tampon en tenant compte des paramètres de la brosse (couleur, couleur de la bordure, taux d'écoulement de la couleur de la brosse vers le calque). la couleur calculée est non pré-multipliée, les composantes rouge, vert, bleue sont données dans la variable vec3 de retour.


Remarque sur l'absorption de la couleur présente sur le calque par la brosse. Le mécanisme d'absorption fonctionne grâce à une prise d'échantillon régulière de la couleur du calque à la position des tapon de la brosse et en utilisant le taux d'absorption de la brosse. Cette étape n'est pas faite dans le shader des moteurs de brosse mais dans un shader dédié à cette effet qui est exécuté en amont. Cet échantillon est toutefois disponible dans le shader du moteur de brosse grâce à la variable de texture f_colorTexture.

Calcul de la composition

vec4 getStandardComposition(vec3 sourceColor, float alpha)

Cette procédure calcule les modes de composition de la brosse en suivant les spécifications du standard SVG (disponibles sur https://www.w3.org/TR/SVGCompositing/). La couleur source avant composition doit être fournie dans la variable sourceColor en non pré-multiplié et la transparence du fragment dans la variable alpha.

Calcul de la transparence

float getStandardAlpha(vec2 uv)


cette procédure calcule la transparence standard du fragment du tampon en tenant compte des paramètres de la brosse tels que la forme, l'utilisation d'une texture de brosse ou la dureté de la brosse. La variable uv doit contenir les coordonnées de texture du tampon, (fournies par v_texCoords0).

Restriction à la sélection

float getStandardClipping(float alpha)


Cette procédure calcule la restriction au buffer de sélection à partir de la transparence d'entrée : si le fragment est contenu dans la zone de sélection, la transparence est restituée en l'état sinon la transparence restituée est zéro.


Effets

bool inRect(float x, float y)


Cette procédure teste l'inclusion de coordonnées dans le rectangle peint. Si les coordonnées sont incluses retourne vrai, sinon faux. Les coordonnées x et y doivent être fournies dans le repère du canevas.


Pour calculer ces coordonnées à partir des coordonnées de texture, appliquer les formules suivantes :


float x = (v_texCoords0.x * f_textureSize + f_texturePos.x - f_paintedRectPos.x) / f_paintedRectWidth;

float y = (v_texCoords0.y * f_textureSize + f_texturePos.y - f_paintedRectPos.y) / f_paintedRectHeight;