Ell
1214d4acf1
app: move all special-case mode processing optimizations to GimpOperationLayerMode
...
Stuff like passing "input" directly if "aux"'s opacity is 0, etc.
Used to be partly handled by normal mode, even though it applies
to other modes too.
Adjust the logic for the new compositing modes.
Add a GimpLayerModeAffectMask enum, and a corresponding
get_affect_mask() function to GimpOperationLayerMode, which
specifies which of the op's inputs, if any, are affected by the
mode, apart from the overlapping regions. Most modes affect only
the overlapping regions, but dissolve and replace also affect the
rest of the input. This information is used for determining if
the optimizations are applicable.
2017-02-02 17:40:05 -05:00
Jehan
e957347dd6
app: build layer mode operations with SSE2 flags.
...
Some of the generic files still contain SSE2 code, in particular
gimpoperationlayermode.c. The reason why it often works without is that
native gcc will usually pre-define SSE macros by default.
To check this: gcc -dM -E - < /dev/null | grep SSE
Yet I had a case on a small netbook where the SSE macros were not
pre-defined even though supported. Consequently the build failed.
2017-02-02 21:41:15 +01:00
Jehan
7447b505f9
app: tab and space cleaning.
2017-02-02 21:41:15 +01:00
Michael Natterer
2a96d598c3
app: add internal and PDB API and UI to control a layer's composite mode
...
Largely based on a patch by Ell, with the enum type renamed and
various small changes. Adds another axis of configurability to the
existing layer mode madness, and is WIP too.
2017-02-02 00:38:25 +01:00
Ell
c6a2a64604
app: add composite mode support to erase mode
2017-01-31 18:16:44 -05:00
Michael Natterer
9397aff96f
app: add GIMP_LAYER_MODE_LUMA_DARKEN_ONLY and _LUMA_DARKEN_ONLY
...
which are perceptual versions of the new LUMINANCE_DARKEN_ONLY and
LUMINANCE_LIGHTEN_ONLY modes. Add the new modes to the UI.
2017-01-30 22:07:51 +01:00
Øyvind Kolås
e9a6d93197
app: add darken only, lighten only that uses luminance
...
These variations on darken only and lighten only have the advantage over the
componentvise versions that they always use the full triplet of either original
or new layer - meaning no new colors/hues will be introduced. This is similar
to how these modes operated/operates in picture publisher and photo-paint.
2017-01-29 22:27:28 +01:00
Michael Natterer
5389e8e417
app, libgimp: rename GIMP_LAYER_MODE_NORMAL to NORMAL_LINEAR
...
and NORMAL_NON_LINEAR to NORMAL, so it's consistent with all other
modes.
2017-01-28 21:38:52 +01:00
Michael Natterer
31241a984e
app, libgimp: remove GIMP_LAYER_MODE_DARKEN,LIGHTEN_ONLY_LINEAR
...
There is no _LINEAR variant, the modes always do the same.
2017-01-25 22:08:06 +01:00
Øyvind Kolås
09af8dbca5
app: slight optimization of sse2 for src_atop
2017-01-25 21:14:14 +01:00
Øyvind Kolås
e1c1a5a9a8
app: implement SSE2 acceleration of src_atop
2017-01-25 12:54:20 +01:00
Michael Natterer
0fcf4ca59d
app: remove gimpblendcomposite.h from Makefile.am, it's gone
2017-01-24 23:54:56 +01:00
Øyvind Kolås
579676cfe4
app: fix grain_extract behavior
...
The blending function of grain merge was being used instead of grain extract.
2017-01-24 19:19:19 +01:00
Øyvind Kolås
6a1d49bc6d
app: fix legacy divide blend mode
...
The porting from 8bit per component scaled some 8bit fractions up to huge
floating point numbers, this works for most values but causes trouble for near
transparent pixel values. This commit copies the inner blend loop from the new
divide layer mode, but keeps the old compositing logic.
2017-01-24 18:36:08 +01:00
Ell
9128f3fc87
app: skip color calculation in the blend funcs if either dest or src ...
...
... is fully transparent, instead of just src.
The blend func results only affect the intersection of dest and src.
Run time is currently dominated by the compositing step for most modes,
so the difference in performance is pretty negligible, but it does make
a difference for the more expensive modes, like the HSV ones.
2017-01-24 11:27:40 -05:00
Øyvind Kolås
59471adfee
app: remove default from gimp_layer_mode_get_blend_fun switch
...
This makes gcc warn when new cases have been added to the layer mode enum,
better than silently failing at runtime.
2017-01-24 02:53:39 +01:00
Øyvind Kolås
d836d94114
app: implement non-legacy blend modes in GimpOperationLayerMode
...
For operations needing to override default behavior sub-classes should still be
used.
This commit also enables pinligh, vividlight and linearlight blend mode modes
2017-01-23 23:47:56 +01:00
Øyvind Kolås
5978def585
app: improve vivid-light formula
2017-01-23 22:40:10 +01:00
Øyvind Kolås
774687dcfe
app: improve formulas of softlight and linear light blending modes
2017-01-23 19:03:44 +01:00
Michael Natterer
d3b8a0d007
app: s/trc/space/ in the property names too
2017-01-22 17:14:44 +01:00
Øyvind Kolås
2537d3d0e9
app: refer to (color) space instead of trc for blend/composite
...
Since CIE Lab is one of the supported color spaces for doing the blending -
this enum is not only about transfer functions/curves or gamma. This finishes
already started cleanups.
2017-01-22 16:04:50 +01:00
Michael Natterer
b10fc58802
app: add a "layer-mode" property to GimpOperationLayerMode
2017-01-22 14:41:21 +01:00
Øyvind Kolås
c9ad09df61
app: add a handful more blending innerloops
...
Adding linear burn, vivid light, linear light, pinlight and exclusion formulas
as described on
http://www.deepskycolors.com/archivo/2010/04/21/formulas-for-Photoshop-blending-modes.html
2017-01-22 13:41:49 +01:00
Michael Natterer
05f3d38acb
app: rename GimpOperationPointLayerMode to GimpOperationLayerMode
...
and formatting cleanup.
2017-01-21 21:35:52 +01:00
Ell
0c35baecca
app: in gimp_composite_blend(), more alloca avoiding
2017-01-21 09:06:08 -05:00
Øyvind Kolås
c993adf91e
app: remove a trampoline in layer/paint mode dispatch
...
Fully removes one trampoline level and passing fewer args through the remaining
trampoline.
2017-01-21 14:10:03 +01:00
Ell
fb3b99553c
app: in gimp_composite_blend(), avoid another alloca when doing in-place output
2017-01-21 07:18:47 -05:00
Ell
4d985d11df
app: in gimp_composite_blend(), avoid an alloca when doing in-place output
2017-01-21 06:36:03 -05:00
Ell
5da89f0daf
app: in gimp_composite_blend(), avoid overwriting input in some cases (again)
...
Revert commit f6436eee96
, which was wrong,
and redo it the right way.
2017-01-19 16:16:44 -05:00
Øyvind Kolås
e9d72ef2a8
app: finish GimpLayerColorSpace rename
2017-01-19 19:22:40 +00:00
Øyvind Kolås
386e18e510
app: rename GimpLayerBlendTRC to GimpLayerColorSpace
...
It is used both for blending and compositing, the repeated use of the word
BLEND in code made the logic involving both blending and compositing hard to
read.
2017-01-19 19:17:24 +00:00
Ell
f6436eee96
app: in gimp_composite_blend(), avoid overwriting input in some cases
...
Note that in some cases the alloca may be unnecessary, but this keeps
the code clean, and we have to be able to *potentially* do the alloca
anyway, so what the hell.
2017-01-19 13:51:48 -05:00
Michael Natterer
a5ee5f28f9
app: cast ops using (gpointer) everywhere instead of 3 different ways
2017-01-19 19:04:49 +01:00
Michael Natterer
268e35a996
app: remove prepare() impls from erase and anti-erase
...
the calling code makes sure the ops have the right linear formats.
2017-01-19 18:49:22 +01:00
Michael Natterer
349cff8c16
app: remove "gboolean linear" from gimp_get_layer_mode_function()
...
and get rid of the two process_pixels() functions in the LCH modes,
they always take linear now.
2017-01-19 18:43:31 +01:00
Ell
417d9553b5
app: in gimpblendcomposite.h, small fix in compfun_dst_atop()
2017-01-19 12:03:39 -05:00
Ell
7df1bb4c0e
app: in gimp_blend_composite(), fix dst_atop and avoid some conversions
...
Also s/comp_alpha/layer_alpha/ for consistency.
2017-01-19 11:55:21 -05:00
Michael Natterer
d656fbab86
app: coding style cleanup in all layer modes, fiddle with includes a bit
2017-01-19 17:48:45 +01:00
Øyvind Kolås
80c947f04f
app: add missing breaks in switches of gimpblendcomposite
2017-01-19 14:25:04 +00:00
Michael Natterer
4e9ce952d9
app: indentation in operations-types.h
2017-01-19 14:47:48 +01:00
Michael Natterer
4683b986f3
app: use the GimpBlendFunc typedef in gimpblendcomposite.h
2017-01-19 14:46:29 +01:00
Øyvind Kolås
f645665324
app: unconditionally set alpha in hardlight/softlight/overlay
2017-01-19 14:44:39 +01:00
Michael Natterer
bfdea93a9c
app: indentation and formatting cleanup in gimpblendcomposite.h
...
Also remove all includes, they should already be there when this
header gets included.
2017-01-19 14:31:40 +01:00
Øyvind Kolås
72cbda11ae
app: composite_blend, fix src_over
2017-01-19 04:57:14 +01:00
Øyvind Kolås
41fff6990e
app: make layer modes more configurable
...
Implement a common utility function gimp_blend_composite that uses utility
functions for implementing layer modes, with separate (possibly SIMD) optimized
loops for blending and compositing, with configured linear TRC, perceptual
gamma TRC or even using CIE Lab as the space.
2017-01-19 01:04:15 +01:00
Michael Natterer
6e72d3eddf
app: add blend-trc and composite-mode properties to GimpOperationPointLayerMode
...
and set them to unused default values.
2017-01-17 15:09:17 +01:00
Michael Natterer
5c4eb75361
app: register the enums in operations-enums.h as GTypes
...
and rename them to GimpLayerBlendTRC and GimpLayerCompositeMode.
2017-01-17 01:19:06 +01:00
Michael Natterer
e267d87963
app: add operations-enums.h with two soon-needed enums
2017-01-16 23:07:50 +01:00
Michael Natterer
69c4644e15
app: rename GimpLayerModeFunction to GimpLayerModeFunc
...
like all other function typedefs and add GimpBlendFunc typedef which
will be needed soon. Also rename get_layer_mode_function() to
gimp_get_layer_mode_function().
2017-01-16 22:44:01 +01:00
Øyvind Kolås
e1b7eb7245
app: divide blend mode, limit high values to 5.0
...
Possibly counteracting inaccuracies in used babl conversions, but with this the
result match legacy as expected.
2017-01-16 02:36:11 +01:00
Øyvind Kolås
60847cce73
app: remove odd ratio scaling, replace with range check for nan
2017-01-15 01:33:40 +01:00
Øyvind Kolås
315ccc7f82
app: remove clamping in multiply mode
2017-01-15 01:33:40 +01:00
Michael Natterer
50669fe6d4
app, libgimp: rename BEHIND enum values to be consistent with others
...
Also update gimplayermodefunctions.c which I forgot before.
2017-01-15 00:01:09 +01:00
Øyvind Kolås
f01374798e
app: remove clamps from addition, subtract and grain blend modes
2017-01-14 21:06:06 +01:00
Øyvind Kolås
39adf3627d
app: use hypotf in lhc chroma blend mode
2017-01-14 21:03:29 +01:00
Øyvind Kolås
f8c65367f0
app: cache fishes in lch blend modes
2017-01-13 19:21:01 +00:00
Øyvind Kolås
975a0a6943
app: reuse more code
2017-01-13 19:21:01 +00:00
Øyvind Kolås
be8c2015a0
app: move factored out compositing to common header
2017-01-13 19:21:01 +00:00
Øyvind Kolås
acd20fb55b
app: use cached fishes in lch chroma mode
2017-01-13 19:21:00 +00:00
Øyvind Kolås
7959141eb4
app: make compositing of hsv value blend mode consistent
2017-01-13 14:26:36 +01:00
Øyvind Kolås
75173b97d9
app: make compositing of grain extract blend mode consistent
2017-01-13 14:26:05 +01:00
Øyvind Kolås
954030fab6
app: make compositing of dodge blend mode consistent with rest
2017-01-13 14:25:46 +01:00
Øyvind Kolås
13eab78ecc
app: improve and simplify alpha handling of LCH blending modes
2017-01-13 14:15:35 +01:00
Øyvind Kolås
feb2bb4083
app: lch color modes remove unneeded includes
2017-01-13 13:53:08 +01:00
Øyvind Kolås
0b1f684e8f
app: remove unneded variable named tmp
2017-01-13 13:38:12 +01:00
Øyvind Kolås
24b04c0b40
app: use single precision hypotf and constants for performance
2017-01-13 13:17:25 +01:00
Øyvind Kolås
dc5b86f0eb
app: add TRC variants to get_layer_mode_function()
2017-01-12 15:18:44 +01:00
Øyvind Kolås
36ebe03770
app: remove lingering old files of dead code
2017-01-11 15:18:52 +01:00
Michael Natterer
a187329777
app: sort includes in gimp-operations.c
2017-01-11 15:00:37 +01:00
Michael Natterer
77f9659c98
app: move gimplayermodefunctions.[ch] to layer-modes/
2017-01-11 14:58:43 +01:00
Michael Natterer
b959e0b69b
app: move GimpOperationPointLayerMode to layer-modes/
2017-01-11 14:44:10 +01:00
Ell
e17f640fba
app: eliminate unnecessary condition in GimpOperationReplaceMode
...
8-bit relic.
2017-01-11 08:21:02 -05:00
Michael Natterer
ad134263d2
app: clean up Makefile.am in layer-modes/ and layer-modes-legacy/
2017-01-11 13:00:27 +01:00
Michael Natterer
8b5553cef6
app: move the remaining 3 layer modes to layer-modes/
...
Not exactly sure if all are correct, but the file moving is almost
done now.
2017-01-11 12:55:13 +01:00
Michael Natterer
b90fa4f0d3
app: clean up spaces in GimpOperationColorEraseMode
2017-01-11 12:42:27 +01:00
Michael Natterer
01b25baffd
app: change mask handling in GimpOperationReplaceMode
...
to be like in the other modes, and proably speed it up a little.
2017-01-11 12:38:58 +01:00
Øyvind Kolås
f45fc97eba
app: add missing op .h files
2017-01-11 04:54:36 +01:00
Øyvind Kolås
ec1f7a94e3
app: split legacy out of grain extract and merge
2017-01-11 04:40:26 +01:00
Øyvind Kolås
8f3842434c
app: split legacy out of soft and hard light
2017-01-11 04:10:06 +01:00
Øyvind Kolås
784a8ee224
app: split legacy out of burn and divide
2017-01-11 03:17:53 +01:00
Michael Natterer
0891028232
app: forgot to s/gimp:normal-mode/gimp:normal/g
2017-01-11 00:28:57 +01:00
Michael Natterer
9142bb1805
app: move erase and anti-erase to layer-modes/
2017-01-11 00:23:31 +01:00
Øyvind Kolås
56ba42a97c
app: correct names of screen and difference layer ops
2017-01-10 21:48:03 +01:00
Øyvind Kolås
71030f49e9
app: duplicate hsv layer modes, and fix alpha handling
2017-01-10 21:48:03 +01:00
Øyvind Kolås
c3e5e30450
app: split legacy lighten only and darken only ops
2017-01-10 11:18:52 +01:00
Michael Natterer
99189d7a28
app: move dissolve to layer-modes/
2017-01-10 09:06:16 +01:00
Øyvind Kolås
153796df9b
app: fix names of addition and subtract ops
2017-01-10 02:29:34 +01:00
Øyvind Kolås
dfcb5c11de
app: add new files for subtract/addition ops
2017-01-10 01:42:34 +01:00
Øyvind Kolås
5a7fd54d34
app: split addition and subract in legacy and new
2017-01-10 01:40:14 +01:00
Michael Natterer
60e1d8e35f
app: move the LCH layer modes to layer-modes/
2017-01-10 01:04:49 +01:00
Øyvind Kolås
92047ea949
app: layer op fission cleanup
2017-01-10 00:00:31 +01:00
Michael Natterer
b001626b31
app: move overlay to operations/layer-modes/ and call it GimpOperationOverlay
2017-01-09 23:54:51 +01:00
Øyvind Kolås
b6be1b768e
app: duplicate difference mode, new and legacy
2017-01-09 23:49:08 +01:00
Øyvind Kolås
9d5893f402
app: add the ops for screen blend ops
2017-01-09 23:25:59 +01:00
Øyvind Kolås
3a50cdcd4f
app: split screen op in legacy and new
2017-01-09 23:19:29 +01:00
Michael Natterer
fd070eeb25
app: start moving layer modes into their own build directories
...
New directories:
operations/layer-modes/
operations/layer-modes-legacy/
2017-01-09 21:58:18 +01:00
Øyvind Kolås
076621dd75
app: split dodge op in legacy and new
2017-01-09 20:10:17 +01:00
Øyvind Kolås
c2583faa5a
app: add new multiply op
2017-01-09 20:10:04 +01:00
Michael Natterer
178794f6f1
libgimpbase: rename enum GimpHueRange's values
...
and add compat cruft for the old names.
2017-01-09 02:45:16 +01:00
Michael Natterer
152adbb1bd
Rename GIMP_LAYER_MODE_FOO_BROKEN to GIMP_LAYER_MODE_FOO_LEGACY
...
"Broken" sounds like it needs fixing, but it's legacy compat stuff
that will have to stay for all eternity.
2017-01-09 01:27:20 +01:00