Based on reverse engineering the color node and contrary to my
expectations, the matrix/offset is expressed in, and applied to,
unpremultiplied colors. The colors are being explicitly
unpremultiplied, transformed according to the matrix/offset, and
premultiplied back (see color_matrix.glsl). The matrix is getting
transposed.
Also, copy the same blurb to the corresponding GtkSnapshot function.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
* Creates a `GskRenderNode` that will drawn the @child with
* @color_matrix.
*
- * In particular, the node will transform the operation
+ * In particular, the node will transform colors by applying
*
- * pixel = color_matrix * pixel + color_offset
+ * pixel = transpose(color_matrix) * pixel + color_offset
*
- * for every pixel.
+ * for every pixel. The transformation operates on unpremultiplied
+ * colors, with color components ordered R, G, B, A.
*
* Returns: (transfer full) (type GskColorMatrixNode): A new `GskRenderNode`
*/
* Modifies the colors of an image by applying an affine transformation
* in RGB space.
*
+ * In particular, the colors will be transformed by applying
+ *
+ * pixel = transpose(color_matrix) * pixel + color_offset
+ *
+ * for every pixel. The transformation operates on unpremultiplied
+ * colors, with color components ordered R, G, B, A.
+ *
* The image is recorded until the next call to [method@Gtk.Snapshot.pop].
*/
void