uniform sampler2D brush_texture; uniform vec2 inv_brush_texture_size; uniform vec3 inv_matrix_m0; uniform vec3 inv_matrix_m1; uniform vec3 inv_matrix_m2; vec4 brush() { mat3 mat; mat[0] = inv_matrix_m0; mat[1] = inv_matrix_m1; mat[2] = inv_matrix_m2; vec3 hcoords = mat * vec3(gl_FragCoord.xy, 1); vec2 coords = hcoords.xy / hcoords.z; coords *= inv_brush_texture_size; return texture2D(brush_texture, coords); }