Page Menu
Home
Search
Configure Global Search
Log In
Files
F21699
texturepaintblendmodes.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Fredrik Hansson (fredrikh)
Nov 13 2013, 4:38 PM
Size
15 KB
Subscribers
None
texturepaintblendmodes.patch
View Options
Index: source/blender/imbuf/IMB_imbuf.h
===================================================================
--- source/blender/imbuf/IMB_imbuf.h (revision 51772)
+++ source/blender/imbuf/IMB_imbuf.h (working copy)
@@ -163,6 +163,22 @@
IMB_BLEND_DARKEN = 5,
IMB_BLEND_ERASE_ALPHA = 6,
IMB_BLEND_ADD_ALPHA = 7,
+ IMB_BLEND_OVERLAY = 8,
+ IMB_BLEND_HARDLIGHT = 9,
+ IMB_BLEND_COLORBURN = 10,
+ IMB_BLEND_LINEARBURN= 11,
+ IMB_BLEND_COLORDODGE= 12,
+ IMB_BLEND_SCREEN = 13,
+ IMB_BLEND_SOFTLIGHT = 14,
+ IMB_BLEND_PINLIGHT = 15,
+ IMB_BLEND_VIVIDLIGHT = 16,
+ IMB_BLEND_LINEARLIGHT = 17,
+ IMB_BLEND_DIFFERENCE = 18,
+ IMB_BLEND_EXCLUSION = 19,
+ IMB_BLEND_HUE = 20,
+ IMB_BLEND_SATURATION = 21,
+ IMB_BLEND_LUMINOSITY = 22,
+ IMB_BLEND_COLOR = 23,
IMB_BLEND_COPY = 1000,
IMB_BLEND_COPY_RGB = 1001,
Index: source/blender/imbuf/intern/rectop.c
===================================================================
--- source/blender/imbuf/intern/rectop.c (revision 51772)
+++ source/blender/imbuf/intern/rectop.c (working copy)
@@ -121,6 +121,553 @@
}
}
+static void blend_color_overlay(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ if(cp1[0] > 127)
+ temp=255-((255-2*(cp1[0]-127))*(255-cp2[0])/255);
+ else
+ temp=(2*cp1[0]*cp2[0])>>8;
+ temp=(temp*fac+cp1[0]*mfac)/255;
+ if(temp<255)
+ cp[0]=temp;
+ else
+ cp[0]=255;
+ if(cp1[1] > 127)
+ temp=255-((255-2*(cp1[1]-127))*(255-cp2[1])/255);
+ else
+ temp=(2*cp1[1]*cp2[1])/255;
+
+ temp=(temp*fac+cp1[1]*mfac)/255;
+ if(temp<255)
+ cp[1]=temp;
+ else
+ cp[1]=255;
+
+ if(cp1[2] > 127)
+ temp=255-((255-2*(cp1[2]-127))*(255-cp2[2])/255);
+ else
+ temp=(2*cp1[2]*cp2[2])/255;
+
+ temp=(temp*fac+cp1[2]*mfac)/255;
+ if(temp<255)
+ cp[2]=temp;
+ else
+ cp[2]=255;
+}
+static void blend_color_hardlight(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ if(cp2[0] > 127)
+ temp=255-((255-2*(cp2[0]-127))*(255-cp1[0])/255);
+ else
+ temp=(2*cp2[0]*cp1[0])>>8;
+ temp=(temp*fac+cp1[0]*mfac)/255;
+ if(temp<255)cp[0]=temp; else cp[0]=255;
+
+
+ if(cp2[1] > 127)
+ temp=255-((255-2*(cp2[1]-127))*(255-cp1[1])/255);
+ else
+ temp=(2*cp2[1]*cp1[1])/255;
+ temp=(temp*fac+cp1[1]*mfac)/255;
+ if(temp<255) cp[1]=temp; else cp[1]=255;
+
+
+ if(cp2[2] > 127)
+ temp=255-((255-2*(cp2[2]-127))*(255-cp1[2])/255);
+ else
+ temp=(2*cp2[2]*cp1[2])/255;
+
+ temp=(temp*fac+cp1[2]*mfac)/255;
+ if(temp<255) cp[2]=temp; else cp[2]=255;
+}
+static void blend_color_burn(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+
+ if(cp2[0]==0)
+ temp=0;
+ else
+ temp=255-((255-cp1[0])*255)/cp2[0];
+ if(temp<0)
+ temp=0;
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+
+ if(cp2[1]==0)
+ temp=0;
+ else
+ temp=255-((255-cp1[1])*255)/cp2[1];
+ if(temp<0)
+ temp=0;
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+
+ if(cp2[2]==0)
+ temp=0;
+ else
+ temp=255-((255-cp1[2])*255)/cp2[2];
+ if(temp<0)
+ temp=0;
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+static void blend_color_linearburn(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ temp=cp1[0]+cp2[0]-255;
+ if(temp<0)temp=0;
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ temp=cp1[1]+cp2[1]-255;
+ if(temp<0)temp=0;
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ temp=cp1[2]+cp2[2]-255;
+ if(temp<0)temp=0;
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+
+static void blend_color_dodge(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ if(cp2[0]==255)temp=255;
+ else temp=(cp1[0]*255)/(255-cp2[0]);
+ if(temp>255)temp=255;
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ if(cp2[1]==255)temp=255;
+ else temp=(cp1[1]*255)/(255-cp2[1]);
+ if(temp>255)temp=255;
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ if(cp2[2]==255)temp=255;
+ else temp=(cp1[2]*255)/(255-cp2[2]);
+ if(temp>255)temp=255;
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+}
+static void blend_color_screen(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ temp=255-(((255-cp1[0])*(255-cp2[0]))/255);
+ if(temp<0)temp=0;
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ temp=255-(((255-cp1[1])*(255-cp2[1]))/255);
+ if(temp<0)temp=0;
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ temp=255-(((255-cp1[2])*(255-cp2[2]))/255);
+ if(temp<0)temp=0;
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+static void blend_color_softlight(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ temp=((unsigned char)((cp1[0] < 127) ? ((2*((cp2[0]/2)+64)) * (cp1[0]))/255:(255 - (2*(255-((cp2[0] /2 ) + 64))*(255-cp1[0])/255))));
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ temp=((unsigned char)((cp1[1] < 127) ? ((2*((cp2[1]/2)+64)) * (cp1[1]))/255:(255 - (2*(255-((cp2[1] /2 ) + 64))*(255-cp1[1])/255))));
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ temp=((unsigned char)((cp1[2] < 127) ? ((2*((cp2[2]/2)+64)) * (cp1[2]))/255:(255 - (2*(255-((cp2[2] /2 ) + 64))*(255-cp1[2])/255))));
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+
+static void blend_color_pinlight(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ if(cp2[0] > 127) {
+ temp=2*(cp2[0]-127);
+ if(cp1[0]>temp)
+ temp=cp1[0];
+ }
+ else
+ {
+ temp=2*cp2[0];
+ if(cp1[0]<temp)
+ temp=cp1[0];
+ }
+
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+
+ if(cp2[1] > 127) {
+ temp=2*(cp2[1]-127);
+ if(cp1[1]>temp) temp=cp1[1];
+ }
+ else {
+ temp=2*cp2[1];
+ if(cp1[1]<temp) temp=cp1[1];
+ }
+
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+
+ if(cp2[2] > 127){
+ temp=2*(cp2[2]-127);
+ if(cp1[2]>temp) temp=cp1[2];
+ }
+ else {
+ temp=2*cp2[2];
+ if(cp1[2]<temp) temp=cp1[2];
+ }
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+
+
+static void blend_color_linearlight(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ if(cp2[0] > 127) {
+ temp=cp1[0]+2*(cp2[0]-127);
+ if(temp>255)
+ temp=255;
+ }
+ else {
+ temp=cp1[0]+2*cp2[0]-255;
+ if(temp<0)temp=0;
+ }
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ if(cp2[1] > 127) {
+ temp=cp1[1]+2*(cp2[1]-127);
+ if(temp>255)
+ temp=255;
+ }
+ else {
+ temp=cp1[1]+2*cp2[1]-255;
+ if(temp<0)temp=0;
+ }
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ if(cp2[2] > 127) {
+ temp=cp1[2]+2*(cp2[2]-127);
+ if(temp>255)
+ temp=255;
+ }
+ else {
+ temp=cp1[2]+2*cp2[2]-255;
+ if(temp<0)temp=0;
+ }
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+}
+
+static void blend_color_vividlight(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+
+ if(cp2[0]==255)
+ temp=255;
+ else if(cp2[0]==0)
+ temp=0;
+ else if(cp2[0] > 127) {
+ temp=((cp1[0])*255)/(2*(255-cp2[0]));
+ if(temp>255)temp=255;
+ }
+ else{
+ temp=255-((255-cp1[0])*255/(2*cp2[0]));
+ if(temp<0)temp=0;
+ }
+
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ if(cp2[1]==255)
+ temp=255;
+ else if(cp2[1]==0)
+ temp=0;
+ else if(cp2[1] > 127) {
+ temp=((cp1[1])*255)/(2*(255-cp2[1]));
+ if(temp>255)temp=255;
+ }
+ else{
+ temp=255-((255-cp1[1])*255/(2*cp2[1]));
+ if(temp<0)temp=0;
+ }
+
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ if(cp2[2]==255)
+ temp=255;
+ else if(cp2[2]==0)
+ temp=0;
+ else if(cp2[2] > 127) {
+ temp=((cp1[2])*255)/(2*(255-cp2[2]));
+ if(temp>255)temp=255;
+ }
+ else{
+ temp=255-((255-cp1[2])*255/(2*cp2[2]));
+ if(temp<0)temp=0;
+ }
+
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+}
+static void blend_color_difference(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ temp=cp1[0]-cp2[0];
+ if(temp<0)temp=-temp;
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ temp=cp1[1]-cp2[1];
+ if(temp<0)temp=-temp;
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ temp=cp1[2]-cp2[2];
+ if(temp<0)temp=-temp;
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+}
+static void blend_color_exclusion(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ temp=127-((2*(cp1[0]-127)*(cp2[0]-127))/255);
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+
+ temp=127-((2*(cp1[1]-127)*(cp2[1]-127))/255);
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+
+ temp=127-((2*(cp1[2]-127)*(cp2[2]-127))/255);
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+}
+
+
+struct FLOAT3Struct
+{
+ float x,y,z;
+};
+
+struct FLOAT3Struct rgb_to_hsv_struct(float r, float g, float b) // added cause the regular rgb_to_hsv crashes when running with threads
+{
+ struct FLOAT3Struct out;
+ float h, s, v;
+ float cmax, cmin, cdelta;
+ float rc, gc, bc;
+
+ cmax = r;
+ cmin = r;
+ cmax = (g>cmax ? g:cmax);
+ cmin = (g<cmin ? g:cmin);
+ cmax = (b>cmax ? b:cmax);
+ cmin = (b<cmin ? b:cmin);
+
+ v = cmax; /* value */
+ if (cmax != 0.0f)
+ s = (cmax - cmin)/cmax;
+ else {
+ s = 0.0f;
+ h = 0.0f;
+ }
+ if (s == 0.0f)
+ h = -1.0f;
+ else {
+ cdelta = cmax-cmin;
+ rc = (cmax-r)/cdelta;
+ gc = (cmax-g)/cdelta;
+ bc = (cmax-b)/cdelta;
+ if (r==cmax)
+ h = bc-gc;
+ else
+ if (g==cmax)
+ h = 2.0f+rc-bc;
+ else
+ h = 4.0f+gc-rc;
+ h = h*60.0f;
+ if (h < 0.0f)
+ h += 360.0f;
+ }
+
+ out.y = s;
+ out.x = h / 360.0f;
+ if(out.y < 0.0f) out.y= 0.0f;
+ out.z = v;
+ return out;
+}
+
+struct FLOAT3Struct hsv_to_rgb_struct(float h, float s, float v) // added cause the regular rgb_to_hsv crashes when running with threads
+{
+ struct FLOAT3Struct out;
+ int i;
+ float f, p, q, t;
+
+ h *= 360.0f;
+
+ if(s==0.0f) {
+ out.x = v;
+ out.y = v;
+ out.z = v;
+ }
+ else {
+ if(h== 360.0f) h = 0.0f;
+
+ h /= 60.0f;
+ i = (int)floor(h);
+ f = h - i;
+ p = v*(1.0f-s);
+ q = v*(1.0f-(s*f));
+ t = v*(1.0f-(s*(1.0f-f)));
+
+ switch (i) {
+ case 0 :
+ out.x = v;
+ out.y = t;
+ out.z = p;
+ break;
+ case 1 :
+ out.x = q;
+ out.y = v;
+ out.z = p;
+ break;
+ case 2 :
+ out.x = p;
+ out.y = v;
+ out.z = t;
+ break;
+ case 3 :
+ out.x = p;
+ out.y = q;
+ out.z = v;
+ break;
+ case 4 :
+ out.x = t;
+ out.y = p;
+ out.z = v;
+ break;
+ case 5 :
+ out.x = v;
+ out.y = p;
+ out.z = q;
+ break;
+ }
+ }
+ return out;
+}
+
+static void blend_color_color(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ struct FLOAT3Struct hsvvalue1;
+ struct FLOAT3Struct hsvvalue2;
+ struct FLOAT3Struct rgbout;
+
+
+ hsvvalue1=rgb_to_hsv_struct(cp1[0]/255.0f, cp1[1]/255.0f, cp1[2]/255.0f);
+ hsvvalue2=rgb_to_hsv_struct(cp2[0]/255.0f, cp2[1]/255.0f, cp2[2]/255.0f);
+
+ hsvvalue1.x=hsvvalue2.x;
+ hsvvalue1.y=hsvvalue2.y;
+ rgbout=hsv_to_rgb_struct(hsvvalue1.x,hsvvalue1.y,hsvvalue1.z);
+ temp=(int)(rgbout.x*255.0f);
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+ temp=(int)(rgbout.y*255.0f);
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+ temp=(int)(rgbout.z*255.0f);
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+
+}
+
+static void blend_color_hue(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ struct FLOAT3Struct hsvvalue1;
+ struct FLOAT3Struct hsvvalue2;
+ struct FLOAT3Struct rgbout;
+
+
+ hsvvalue1=rgb_to_hsv_struct(cp1[0]/255.0f, cp1[1]/255.0f, cp1[2]/255.0f);
+ hsvvalue2=rgb_to_hsv_struct(cp2[0]/255.0f, cp2[1]/255.0f, cp2[2]/255.0f);
+
+ hsvvalue1.x=hsvvalue2.x;
+ rgbout=hsv_to_rgb_struct(hsvvalue1.x,hsvvalue1.y,hsvvalue1.z);
+ temp=(int)(rgbout.x*255.0f);
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+ temp=(int)(rgbout.y*255.0f);
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+ temp=(int)(rgbout.z*255.0f);
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+
+}
+
+static void blend_color_saturation(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ struct FLOAT3Struct hsvvalue1;
+ struct FLOAT3Struct hsvvalue2;
+ struct FLOAT3Struct rgbout;
+
+
+ hsvvalue1=rgb_to_hsv_struct(cp1[0]/255.0f, cp1[1]/255.0f, cp1[2]/255.0f);
+ hsvvalue2=rgb_to_hsv_struct(cp2[0]/255.0f, cp2[1]/255.0f, cp2[2]/255.0f);
+ if(hsvvalue1.y>0.005) // don't add any saturation to a completly black and white image
+ hsvvalue1.y=hsvvalue2.y;
+ rgbout=hsv_to_rgb_struct(hsvvalue1.x,hsvvalue1.y,hsvvalue1.z);
+ temp=(int)(rgbout.x*255.0f);
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+ temp=(int)(rgbout.y*255.0f);
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+ temp=(int)(rgbout.z*255.0f);
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+
+}
+
+
+static void blend_color_luminosity(char *cp, char *cp1, char *cp2, int fac)
+{
+ int temp;
+ int mfac=255-fac;
+ struct FLOAT3Struct hsvvalue1;
+ struct FLOAT3Struct hsvvalue2;
+ struct FLOAT3Struct rgbout;
+
+
+ hsvvalue1=rgb_to_hsv_struct(cp1[0]/255.0f, cp1[1]/255.0f, cp1[2]/255.0f);
+ hsvvalue2=rgb_to_hsv_struct(cp2[0]/255.0f, cp2[1]/255.0f, cp2[2]/255.0f);
+
+ hsvvalue1.z=hsvvalue2.z;
+ rgbout=hsv_to_rgb_struct(hsvvalue1.x,hsvvalue1.y,hsvvalue1.z);
+ temp=(int)(rgbout.x*255.0f);
+ cp[0]=(temp*fac+cp1[0]*mfac)/255;
+ temp=(int)(rgbout.y*255.0f);
+ cp[1]=(temp*fac+cp1[1]*mfac)/255;
+ temp=(int)(rgbout.z*255.0f);
+ cp[2]=(temp*fac+cp1[2]*mfac)/255;
+
+
+
+}
unsigned int IMB_blend_color(unsigned int src1, unsigned int src2, int fac, IMB_BlendMode mode)
{
unsigned int dst;
@@ -147,6 +694,38 @@
blend_color_lighten(cp, cp1, cp2, fac); break;
case IMB_BLEND_DARKEN:
blend_color_darken(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_OVERLAY:
+ blend_color_overlay(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_HARDLIGHT:
+ blend_color_hardlight(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_COLORBURN:
+ blend_color_burn(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_LINEARBURN:
+ blend_color_linearburn(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_COLORDODGE:
+ blend_color_dodge(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_SCREEN:
+ blend_color_screen(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_SOFTLIGHT:
+ blend_color_softlight(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_PINLIGHT:
+ blend_color_pinlight(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_LINEARLIGHT:
+ blend_color_linearlight(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_VIVIDLIGHT:
+ blend_color_vividlight(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_DIFFERENCE:
+ blend_color_difference(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_EXCLUSION:
+ blend_color_exclusion(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_COLOR:
+ blend_color_color(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_HUE:
+ blend_color_hue(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_SATURATION:
+ blend_color_saturation(cp, cp1, cp2, fac); break;
+ case IMB_BLEND_LUMINOSITY:
+ blend_color_luminosity(cp, cp1, cp2, fac); break;
default:
cp[0] = cp1[0];
cp[1] = cp1[1];
Index: source/blender/makesrna/intern/rna_brush.c
===================================================================
--- source/blender/makesrna/intern/rna_brush.c (revision 51772)
+++ source/blender/makesrna/intern/rna_brush.c (working copy)
@@ -501,6 +501,22 @@
{IMB_BLEND_DARKEN, "DARKEN", 0, "Darken", "Use darken blending mode while painting"},
{IMB_BLEND_ERASE_ALPHA, "ERASE_ALPHA", 0, "Erase Alpha", "Erase alpha while painting"},
{IMB_BLEND_ADD_ALPHA, "ADD_ALPHA", 0, "Add Alpha", "Add alpha while painting"},
+ {IMB_BLEND_OVERLAY, "OVERLAY", 0, "Overlay", "Use overlay blending mode while painting"},
+ {IMB_BLEND_HARDLIGHT, "HARDLIGHT", 0, "Hard light", "Use hard light blending mode while painting"},
+ {IMB_BLEND_COLORBURN, "COLORBURN", 0, "Color burn", "Use color burn blending mode while painting"},
+ {IMB_BLEND_LINEARBURN, "LINEARBURN", 0, "Linear burn", "Use linear burn blending mode while painting"},
+ {IMB_BLEND_COLORDODGE, "COLORDODGE", 0, "Color dodge", "Use color dodge blending mode while painting"},
+ {IMB_BLEND_SCREEN, "SCREEN", 0, "Screen", "Use screen blending mode while painting"},
+ {IMB_BLEND_SOFTLIGHT, "SOFTLIGHT", 0, "Soft light", "Use softlight blending mode while painting"},
+ {IMB_BLEND_PINLIGHT, "PINLIGHT", 0, "Pin light", "Use pinlight blending mode while painting"},
+ {IMB_BLEND_VIVIDLIGHT, "VIVIDLIGHT", 0, "Vivid light", "Use vividlight blending mode while painting"},
+ {IMB_BLEND_LINEARLIGHT, "LINEARLIGHT", 0, "Linear light", "Use linearlight blending mode while painting"},
+ {IMB_BLEND_DIFFERENCE, "DIFFERENCE", 0, "Difference", "Use difference blending mode while painting"},
+ {IMB_BLEND_EXCLUSION, "EXCLUSION", 0, "Exclusion", "Use exclusion blending mode while painting"},
+ {IMB_BLEND_HUE, "HUE", 0, "Hue", "Use hue blending mode while painting"},
+ {IMB_BLEND_SATURATION, "SATURATION", 0, "Saturation", "Use saturation blending mode while painting"},
+ {IMB_BLEND_LUMINOSITY, "LUMINOSITY", 0, "Luminosity", "Use luminosity blending mode while painting"},
+ {IMB_BLEND_COLOR, "COLOR", 0, "Color", "Use color blending mode while painting"},
{0, NULL, 0, NULL, NULL}
};
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ff/ab/91f525d809fa4de490fe9fc72cb0
Event Timeline
Log In to Comment