Une multitudes de variables sont fournies en entrée des shaders et sont utilisables par ceux-ci :

Les variables des effets


// variables issues du vertex shader, fournies au fragment shader

in vec4 v_color; // color of the vertex

in vec2 v_texCoords0; //coordonnées de texture 0 : coordonnées de texture dans le layer courant

in vec2 v_texCoords1; //coordonnées de texture 1 : non utilisé pour l'instant

in vec2 v_texCoords2; //coordonnées de texture 2 : non utilisé pour l'instant


// variables uniformes

uniform vec2 f_texturePos; // position de la texture, dans les coordonnées du canevas

uniform float f_textureSize; // taille de la texture (512)

uniform vec2 f_paintedRectPos; // position du rectangle peint, dans les coordonnées du canevas

uniform float f_paintedRectWidth; // largeur du rectangle peint

uniform float f_paintedRectHeight;  // hauteur du rectangle peint

uniform bool f_clipToPaintedRect = true; // true -> restreindre au rectangle peint

uniform bool f_clipToSelection = false; // true -> restreindre à la sélection

uniform float f_opacity = 1; // opacité du calque courant

uniform float f_globalTime = 0; // temps écoulé depuis le démarrage de l'application

uniform sampler2D f_currentLayerTexture;  // id de texture du layer courant

uniform sampler2D f_underLayerTexture; // id de texture du layer sous le layer courant

uniform sampler2D f_paperTexture; // id de texture du papier

uniform sampler2D f_selectionLayerTexture; // id de texture du buffer de sélection


out vec4 f_color; // la couleur du fragment à calculer

Les variables des moteurs de brosse


// variables issues du vertex shader, fournies au fragment shader

in vec4 v_color; // la couleur de la brosse

in vec2 v_texCoords0; // les coordonnées de texture 0 : coordonnées de texture dans le stamp

in vec2 v_texCoords1; // les coordonnées de texture 1 : coordonnées de texture dans le layer courant

in vec2 v_texCoords2; // non utilisé pour l'instant


// variables uniformes

uniform float f_radius = 10; // rayon du tampon

uniform float f_hardness = 1.0; // dureté de la brosse

uniform float f_density = 1.0; // densité de la brosse

uniform float f_flow = 1.0; // densité du flux de couleur

uniform float f_opacity = 1.0; // opacité du trait de brosse

uniform int f_compositionMode = 0; // mode de composition de la brosse

uniform bool f_inheritAlphaUnder = false; // indique si la brosse doit composer avec l'alpha du layer sous le layer courant

uniform int f_alphaEquation = 0; // équation du masque (0 = pas de masque, 1 = masque alpha, 2 = masque 1 - alpha)

uniform bool f_inheritAlphaCurrent = false; // indique si la brosse doit composer avec l'alpha du layer courant

uniform bool f_hasTexture = false; // indique si la brosse à une texture associée

uniform bool f_preserveTextureColor = false; // indique si la couleur de la texture est utilisée

uniform float f_colorAbsorbtionRate = 0.0; // taux d’absorption de la couleur de la brosse

uniform float f_colorFlowingRate = 1.0; // taux d'écoulement de la couleur de la brosse

uniform int f_antialiasing = 0; // Type d'antialiasing (0 = antialiasing, 1 = pas d'antialiasing)

uniform bool f_clipToSelection = true; // indique s'il faut utiliser la sélection pour clipper le tampon

uniform int f_shape = 0; // forme de la brosse (0 = ellipse, 1 = rectangle)

uniform float f_factor = 1.0; // facteur [0, 1] applicable dans les formules

uniform vec4 f_borderColor = vec4(1, 1, 1, 1); // couleur de la bordure du tampon

uniform bool f_useBorderColor = false; // indique s'il faut utiliser la couleur de la bordure

uniform int f_stampCount = 1; // nombre de tampons depuis le début du trait

uniform float f_random = 1.0; // nombre aléatoire fourni à chaque tampon

uniform vec2 f_texturePos; // position de la texture, dans les coordonnées du canevas

uniform float f_textureSize; // taille de la texture (512)

uniform vec2 f_paintedRectPos; // position du rectangle peint, dans les coordonnées du canevas

uniform float f_paintedRectWidth; // largeur du rectangle peint

uniform float f_paintedRectHeight; // hauteur du rectangle peint

uniform sampler2D f_currentLayerTexture; // id de texture du layer courant

uniform sampler2D f_underLayerTexture; // id de texture du layer sous le layer courant

uniform sampler2D f_brushTexture; // id de texture de la brosse, si la brosse possède une texture

uniform sampler2D f_colorTexture; // id de texture du buffer de couleur utilisable pour le feedback (mélange des couleurs)

uniform sampler2D f_selectionLayerTexture; // id de texture du buffer de sélection


out vec4 f_color; // la couleur du fragment à calculer