[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17341] branches/projection-paint/source/ blender/src/imagepaint.c: support for brush blend modes (Mix, Multiply, Darken etc)
Campbell Barton
ideasman42 at gmail.com
Thu Nov 6 00:24:52 CET 2008
Revision: 17341
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17341
Author: campbellbarton
Date: 2008-11-06 00:24:52 +0100 (Thu, 06 Nov 2008)
Log Message:
-----------
support for brush blend modes (Mix, Multiply, Darken etc)
Modified Paths:
--------------
branches/projection-paint/source/blender/src/imagepaint.c
Modified: branches/projection-paint/source/blender/src/imagepaint.c
===================================================================
--- branches/projection-paint/source/blender/src/imagepaint.c 2008-11-05 23:23:04 UTC (rev 17340)
+++ branches/projection-paint/source/blender/src/imagepaint.c 2008-11-05 23:24:52 UTC (rev 17341)
@@ -793,7 +793,6 @@
return 1;
}
-
if ( cmp_uv(orig_tf->uv[orig_i1_fidx], tf->uv[i1_fidx]) &&
cmp_uv(orig_tf->uv[orig_i2_fidx], tf->uv[i2_fidx]) )
{
@@ -2307,14 +2306,19 @@
int redraw = 0;
int last_index = -1;
float rgba[4], alpha, dist, dist_nosqrt;
+ char rgba_ub[4];
float brush_size_sqared;
float min[2], max[2]; /* brush bounds in screenspace */
int bucket_min[2], bucket_max[2]; /* brush bounds in bucket grid space */
int bucket_index;
int a;
+ short blend= ps->blend;
+ char *cp;
+
int bucket_x, bucket_y;
+
mval_f[0] = mval[0]; mval_f[1] = mval[1];
min[0] = mval_f[0] - (ps->brush->size/2);
@@ -2373,48 +2377,34 @@
dist = (float)sqrt(dist_nosqrt);
- if (ps->tool==PAINT_TOOL_CLONE) { //&& ((ProjectPixelClone*)projPixel)->source ) {
-
+ if (ps->tool==PAINT_TOOL_CLONE && ((char *)((ProjectPixelClone*)projPixel)->clonebuf)[3]) { //&& ((ProjectPixelClone*)projPixel)->source ) {
alpha = brush_sample_falloff(ps->brush, dist);
- if (((char *)((ProjectPixelClone*)projPixel)->clonebuf)[3]) {
- projPixel->pixel[0] = FTOCHAR((((((char *)((ProjectPixelClone*)projPixel)->clonebuf)[0]/255.0) * alpha) + (((projPixel->pixel[0])/255.0)*(1.0-alpha))));
- projPixel->pixel[1] = FTOCHAR((((((char *)((ProjectPixelClone*)projPixel)->clonebuf)[1]/255.0) * alpha) + (((projPixel->pixel[1])/255.0)*(1.0-alpha))));
- projPixel->pixel[2] = FTOCHAR((((((char *)((ProjectPixelClone*)projPixel)->clonebuf)[2]/255.0) * alpha) + (((projPixel->pixel[2])/255.0)*(1.0-alpha))));
- }
-
-#if 0
if (alpha <= 0.0) {
/* do nothing */
} else {
+ cp = (char *)((ProjectPixelClone*)projPixel)->clonebuf;
if (alpha >= 1.0) {
- projPixel->pixel[0] = FTOCHAR(rgba[0]*ps->brush->rgb[0]);
- projPixel->pixel[1] = FTOCHAR(rgba[1]*ps->brush->rgb[1]);
- projPixel->pixel[2] = FTOCHAR(rgba[2]*ps->brush->rgb[2]);
+ projPixel->pixel[0] = FTOCHAR( cp[0] );
+ projPixel->pixel[1] = FTOCHAR( cp[1] );
+ projPixel->pixel[2] = FTOCHAR( cp[2] );
} else {
- projPixel->pixel[0] = FTOCHAR(((rgba[0]*ps->brush->rgb[0])*alpha) + (((projPixel->pixel[0])/255.0)*(1.0-alpha)));
- projPixel->pixel[1] = FTOCHAR(((rgba[1]*ps->brush->rgb[1])*alpha) + (((projPixel->pixel[1])/255.0)*(1.0-alpha)));
- projPixel->pixel[2] = FTOCHAR(((rgba[2]*ps->brush->rgb[2])*alpha) + (((projPixel->pixel[2])/255.0)*(1.0-alpha)));
+ projPixel->pixel[0] = FTOCHAR( (((cp[0]/255.0) * alpha) + (((projPixel->pixel[0])/255.0)*(1.0-alpha))) );
+ projPixel->pixel[1] = FTOCHAR( (((cp[1]/255.0) * alpha) + (((projPixel->pixel[1])/255.0)*(1.0-alpha))) );
+ projPixel->pixel[2] = FTOCHAR( (((cp[2]/255.0) * alpha) + (((projPixel->pixel[2])/255.0)*(1.0-alpha))) );
}
- }
-#endif
+ }
} else {
brush_sample_tex(ps->brush, projPixel->projCo2D, rgba);
alpha = rgba[3]*brush_sample_falloff(ps->brush, dist);
-
- if (alpha <= 0.0) {
- /* do nothing */
- } else {
- if (alpha >= 1.0) {
- projPixel->pixel[0] = FTOCHAR(rgba[0]*ps->brush->rgb[0]);
- projPixel->pixel[1] = FTOCHAR(rgba[1]*ps->brush->rgb[1]);
- projPixel->pixel[2] = FTOCHAR(rgba[2]*ps->brush->rgb[2]);
- } else {
- projPixel->pixel[0] = FTOCHAR(((rgba[0]*ps->brush->rgb[0])*alpha) + (((projPixel->pixel[0])/255.0)*(1.0-alpha)));
- projPixel->pixel[1] = FTOCHAR(((rgba[1]*ps->brush->rgb[1])*alpha) + (((projPixel->pixel[1])/255.0)*(1.0-alpha)));
- projPixel->pixel[2] = FTOCHAR(((rgba[2]*ps->brush->rgb[2])*alpha) + (((projPixel->pixel[2])/255.0)*(1.0-alpha)));
- }
- }
+ if (alpha > 0.0) {
+ rgba_ub[0] = FTOCHAR(rgba[0] * ps->brush->rgb[0]);
+ rgba_ub[1] = FTOCHAR(rgba[1] * ps->brush->rgb[1]);
+ rgba_ub[2] = FTOCHAR(rgba[2] * ps->brush->rgb[2]);
+ rgba_ub[3] = FTOCHAR(rgba[3]);
+
+ *((unsigned int *)projPixel->pixel) = IMB_blend_color( *((unsigned int *)projPixel->pixel), *((unsigned int *)rgba_ub), (int)(alpha*255), blend);
+ }
}
if (last_index != projPixel->image_index) {
More information about the Bf-blender-cvs
mailing list