[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20597] branches/soc-2009-yukishiro/source /blender/editors: light paint brush paints red
Jingyuan Huang
jingyuan.huang at gmail.com
Wed Jun 3 06:55:07 CEST 2009
Revision: 20597
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20597
Author: yukishiro
Date: 2009-06-03 06:55:07 +0200 (Wed, 03 Jun 2009)
Log Message:
-----------
light paint brush paints red
Modified Paths:
--------------
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_intern.h
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_utils.c
branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_vertex.c
branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c
branches/soc-2009-yukishiro/source/blender/editors/space_view3d/view3d_draw.c
Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_intern.h 2009-06-03 04:12:59 UTC (rev 20596)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_intern.h 2009-06-03 04:55:07 UTC (rev 20597)
@@ -29,6 +29,8 @@
#ifndef ED_PAINT_INTERN_H
#define ED_PAINT_INTERN_H
+#define MAXINDEX 512000
+
struct Scene;
struct Object;
struct Mesh;
@@ -64,6 +66,7 @@
void imapaint_pick_uv(struct Scene *scene, struct Object *ob, struct Mesh *mesh, unsigned int faceindex, int *xy, float *uv);
void paint_sample_color(struct Scene *scene, struct ARegion *ar, int x, int y);
+int sample_backbuf_area(struct ViewContext *vc, int *indexar, int totface, int x, int y, float size);
#endif /* ED_PAINT_INTERN_H */
Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c 2009-06-03 04:12:59 UTC (rev 20596)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_light.c 2009-06-03 04:55:07 UTC (rev 20597)
@@ -36,6 +36,8 @@
#include "PIL_time.h"
#include "BLI_threads.h"
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
#include "DNA_brush_types.h"
#include "DNA_lightenv_types.h"
@@ -76,9 +78,6 @@
#include "paint_intern.h"
-#define MAXINDEX 512000
-
-
typedef struct ShJob {
Scene *scene;
View3D *v3d;
@@ -203,11 +202,11 @@
static VPaint *new_lpaint()
{
- VPaint *vp= MEM_callocN(sizeof(VPaint), "VPaint");
+ VPaint *lp= MEM_callocN(sizeof(VPaint), "VPaint");
- vp->gamma= vp->mul= 1.0f;
- vp->flag= VP_AREA+VP_SOFT+VP_SPRAY; //TODO: not sure how to use flag for light brush
- return vp;
+ lp->gamma= lp->mul= 1.0f;
+ lp->flag= VP_AREA+VP_SOFT+VP_SPRAY; //TODO: not sure how to use flag for light brush
+ return lp;
}
static int light_paint_toggle_exec(bContext *C, wmOperator *op)
@@ -286,6 +285,7 @@
unsigned int paintcol;
int *indexar;
//float *vertexcosnos;
+ float vpimat[3][3];
} PaintOperation;
static void lpaint_exit(bContext *C, wmOperator *op)
@@ -299,6 +299,9 @@
static int light_paint_modal(bContext *C, wmOperator *op, wmEvent *event)
{
+ ToolSettings *ts= CTX_data_tool_settings(C);
+ VPaint *lp= ts->lpaint;
+
switch(event->type) {
case LEFTMOUSE:
if(event->val==0) { /* release */
@@ -308,7 +311,47 @@
/* pass on, first press gets painted too */
case MOUSEMOVE:
- break;
+ {
+ PaintOperation *pop= op->customdata;
+ ViewContext *vc= &pop->vc;
+ Scene *scene= vc->scene;
+ Object *ob= vc->obact;
+ Mesh *me= ob->data;
+ float mat[4][4];
+ int *indexar= pop->indexar;
+ int totindex, index;
+ short mval[2];
+
+ view3d_operator_needs_opengl(C);
+
+ /* load projection matrix */
+ wmMultMatrix(ob->obmat);
+ wmGetSingleMatrix(mat);
+ wmLoadMatrix(vc->rv3d->viewmat);
+
+ mval[0]= event->x - vc->ar->winrct.xmin;
+ mval[1]= event->y - vc->ar->winrct.ymin;
+
+ totindex= sample_backbuf_area(vc, indexar, me->totface, mval[0], mval[1], lp->brush->size);
+
+ for(index=0; index<totindex; index++) {
+ if(indexar[index] && indexar[index]<=me->totface) {
+ MFace *mface= ((MFace *)me->mface) + (indexar[index]-1);
+ DerivedMesh *dm = mesh_get_derived_final(scene, ob, vc->v3d->customdata_mask);
+ unsigned char *shcol= DM_get_face_data_layer(dm, CD_SH_MCOL);
+ unsigned int *mcol= (unsigned int*)shcol + 4*(indexar[index]-1);
+
+ *mcol = pop->paintcol;
+ *(mcol+1) = pop->paintcol;
+ *(mcol+2) = pop->paintcol;
+ if(mface->v4) {
+ *(mcol+3) = pop->paintcol;
+ }
+ }
+ }
+ ED_region_tag_redraw(vc->ar);
+ }
+ break;
}
return OPERATOR_RUNNING_MODAL;
@@ -316,16 +359,21 @@
static int light_paint_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
PaintOperation *pop;
- ToolSettings *ts= CTX_data_tool_settings(C);
- VPaint *lp= ts->lpaint;
+ Object *ob= CTX_data_active_object(C);
+ float mat[4][4], imat[4][4];
- printf("invoked\n");
op->customdata= pop = MEM_callocN(sizeof(struct PaintOperation), "LightPOP");
view3d_set_viewcontext(C, &pop->vc);
pop->indexar= get_indexarray();
- pop->paintcol= lpaint_get_current_col(lp);
+ //pop->paintcol= lpaint_get_current_col(lp);
+ pop->paintcol = rgba_to_mcol(200, 0, 0, 1.0f);
+ /* some old cruft to sort out later */
+ Mat4MulMat4(mat, ob->obmat, pop->vc.rv3d->viewmat);
+ Mat4Invert(imat, mat);
+ Mat3CpyMat4(pop->vpimat, imat);
+
light_paint_modal(C, op, event);
WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_utils.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_utils.c 2009-06-03 04:12:59 UTC (rev 20596)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_utils.c 2009-06-03 04:55:07 UTC (rev 20597)
@@ -1,7 +1,17 @@
#include <math.h>
#include <stdlib.h>
+#include <string.h>
+#ifdef WIN32
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
@@ -20,6 +30,9 @@
#include "ED_view3d.h"
+#include "WM_api.h"
+#include "WM_types.h"
+
#include "paint_intern.h"
/* 3D Paint */
@@ -180,3 +193,40 @@
}
}
+int sample_backbuf_area(ViewContext *vc, int *indexar, int totface, int x, int y, float size)
+{
+ ImBuf *ibuf;
+ int a, tot=0, index;
+
+ if(totface+4>=MAXINDEX) return 0;
+
+ if(size>64.0) size= 64.0;
+
+ ibuf= view3d_read_backbuf(vc, x-size, y-size, x+size, y+size);
+ if(ibuf) {
+ unsigned int *rt= ibuf->rect;
+
+ memset(indexar, 0, sizeof(int)*totface+4); /* plus 2! first element is total, +2 was giving valgrind errors, +4 seems ok */
+
+ size= ibuf->x*ibuf->y;
+ while(size--) {
+
+ if(*rt) {
+ index= WM_framebuffer_to_index(*rt);
+ if(index>0 && index<=totface)
+ indexar[index] = 1;
+ }
+
+ rt++;
+ }
+
+ for(a=1; a<=totface; a++) {
+ if(indexar[a]) indexar[tot++]= a;
+ }
+
+ IMB_freeImBuf(ibuf);
+ }
+
+ return tot;
+}
+
Modified: branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_vertex.c 2009-06-03 04:12:59 UTC (rev 20596)
+++ branches/soc-2009-yukishiro/source/blender/editors/sculpt_paint/paint_vertex.c 2009-06-03 04:55:07 UTC (rev 20597)
@@ -28,14 +28,7 @@
*/
#include <math.h>
-#include <string.h>
-#ifdef WIN32
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
#include "MEM_guardedalloc.h"
#include "IMB_imbuf.h"
@@ -78,9 +71,6 @@
#include "BKE_object.h"
#include "BKE_utildefines.h"
-#include "WM_api.h"
-#include "WM_types.h"
-
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -90,6 +80,11 @@
#include "ED_util.h"
#include "ED_view3d.h"
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "paint_intern.h"
+
/* vp->mode */
#define VP_MIX 0
#define VP_ADD 1
@@ -99,7 +94,6 @@
#define VP_LIGHTEN 5
#define VP_DARKEN 6
-#define MAXINDEX 512000
/* XXX */
static void error() {}
@@ -760,43 +754,6 @@
}
-static int sample_backbuf_area(ViewContext *vc, int *indexar, int totface, int x, int y, float size)
-{
- struct ImBuf *ibuf;
- int a, tot=0, index;
-
- if(totface+4>=MAXINDEX) return 0;
-
- if(size>64.0) size= 64.0;
-
- ibuf= view3d_read_backbuf(vc, x-size, y-size, x+size, y+size);
- if(ibuf) {
- unsigned int *rt= ibuf->rect;
-
- memset(indexar, 0, sizeof(int)*totface+4); /* plus 2! first element is total, +2 was giving valgrind errors, +4 seems ok */
-
- size= ibuf->x*ibuf->y;
- while(size--) {
-
- if(*rt) {
- index= WM_framebuffer_to_index(*rt);
- if(index>0 && index<=totface)
- indexar[index] = 1;
- }
-
- rt++;
- }
-
- for(a=1; a<=totface; a++) {
- if(indexar[a]) indexar[tot++]= a;
- }
-
- IMB_freeImBuf(ibuf);
- }
-
- return tot;
-}
-
static int calc_vp_alpha_dl(VPaint *vp, ViewContext *vc, float vpimat[][3], float *vert_nor, short *mval)
{
float fac, dx, dy;
Modified: branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c 2009-06-03 04:12:59 UTC (rev 20596)
+++ branches/soc-2009-yukishiro/source/blender/editors/space_view3d/drawobject.c 2009-06-03 04:55:07 UTC (rev 20597)
@@ -2293,7 +2293,7 @@
color[1] = mat->g;
color[2] = mat->b;
} else {
- color[0] = color[1] = color[2] = 0.8;
+ color[0] = color[1] = color[2] = 0.8;
}
brightness[0] = brightness[1] = brightness[2] = 0;
@@ -2323,10 +2323,10 @@
for (i=0; i<totface; i++, mf++) {
calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 0) * 4]);
- calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 1) * 4]);
- calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 2) * 4]);
+ calc_sh_vert_color(ob, mf->v2, mco, env->shcoeffs, &shcol[(i*4 + 1) * 4]);
+ calc_sh_vert_color(ob, mf->v3, mco, env->shcoeffs, &shcol[(i*4 + 2) * 4]);
if (mf->v4)
- calc_sh_vert_color(ob, mf->v1, mco, env->shcoeffs, &shcol[(i*4 + 3) * 4]);
+ calc_sh_vert_color(ob, mf->v4, mco, env->shcoeffs, &shcol[(i*4 + 3) * 4]);
}
}
Modified: branches/soc-2009-yukishiro/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list