[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37132] branches/soc-2011-onion: Revision: 29277
Jason Wilkins
Jason.A.Wilkins at gmail.com
Fri Jun 3 17:22:54 CEST 2011
Revision: 37132
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37132
Author: jwilkins
Date: 2011-06-03 15:22:54 +0000 (Fri, 03 Jun 2011)
Log Message:
-----------
Revision: 29277
Author: nicholasbishop
Date: 12:03:06 PM, Sunday, June 06, 2010
Message:
* PBVH can now iterate over mask data coming from a mesh (not multires yet)
* The paint_mask_set operator can be used to create a mask layer and fill it with zeroes, ones, or random data (for testing)
* gpu_buffers will display the mask layer (again, only for regular meshes not multires grids yet.)
** jwilkins:
** note: first masking update that actually does something visible
** note: only works for mesh (not multires) and with VBO enabled
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c
branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c
branches/soc-2011-onion/source/blender/blenlib/BLI_pbvh.h
branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c
branches/soc-2011-onion/source/blender/gpu/GPU_buffers.h
branches/soc-2011-onion/source/blender/gpu/intern/gpu_buffers.c
Property Changed:
----------------
branches/soc-2011-onion/
Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29265,29324,29350
/trunk/blender:36833-37054
+ /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29265,29277,29324,29350
/trunk/blender:36833-37054
Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/cdderivedmesh.c 2011-06-03 15:22:54 UTC (rev 37132)
@@ -236,7 +236,7 @@
cddm->pbvh = BLI_pbvh_new();
cddm->pbvh_draw = can_pbvh_draw(ob, dm);
BLI_pbvh_build_mesh(cddm->pbvh, me->mface, me->mvert,
- me->totface, me->totvert);
+ &me->vdata, me->totface, me->totvert);
if(ss->modifiers_active && ob->derivedDeform) {
DerivedMesh *deformdm= ob->derivedDeform;
Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c 2011-06-03 15:22:54 UTC (rev 37132)
@@ -2310,7 +2310,7 @@
Mesh *me= ob->data;
ob->sculpt->pbvh= ccgdm->pbvh = BLI_pbvh_new();
BLI_pbvh_build_mesh(ccgdm->pbvh, me->mface, me->mvert,
- me->totface, me->totvert);
+ &me->vdata, me->totface, me->totvert);
}
return ccgdm->pbvh;
Modified: branches/soc-2011-onion/source/blender/blenlib/BLI_pbvh.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenlib/BLI_pbvh.h 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/blenlib/BLI_pbvh.h 2011-06-03 15:22:54 UTC (rev 37132)
@@ -28,6 +28,7 @@
* \brief A BVH for high poly meshes.
*/
+struct CustomData;
struct MFace;
struct MVert;
struct DMGridAdjacency;
@@ -55,7 +56,7 @@
PBVH *BLI_pbvh_new(void);
void BLI_pbvh_build_mesh(PBVH *bvh, struct MFace *faces, struct MVert *verts,
- int totface, int totvert);
+ struct CustomData *vdata, int totface, int totvert);
void BLI_pbvh_build_grids(PBVH *bvh, struct DMGridData **grids,
struct DMGridAdjacency *gridadj, int totgrid,
int gridsize, void **gridfaces);
@@ -109,7 +110,7 @@
void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node,
int *uniquevert, int *totvert);
void BLI_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node,
- int **vert_indices, struct MVert **verts);
+ int **vert_indices, struct MVert **verts, struct CustomData **vdata);
void BLI_pbvh_node_get_BB(PBVHNode *node, float bb_min[3], float bb_max[3]);
void BLI_pbvh_node_get_original_BB(PBVHNode *node, float bb_min[3], float bb_max[3]);
@@ -158,15 +159,20 @@
/* mesh */
struct MVert *mverts;
+ struct CustomData *vdata;
int totvert;
int *vert_indices;
+ /* mask */
+ float *vdata_mask;
+
/* result: these are all computed in the macro, but we assume
that compiler optimizations will skip the ones we don't use */
struct MVert *mvert;
float *co;
short *no;
float *fno;
+ float *mask;
} PBVHVertexIter;
#ifdef _MSC_VER
@@ -177,17 +183,14 @@
{ \
struct DMGridData **grids; \
struct MVert *verts; \
+ struct CustomData *vdata; \
int *grid_indices, totgrid, gridsize, *vert_indices, uniq_verts, totvert; \
\
- vi.grid= 0; \
- vi.no= 0; \
- vi.fno= 0; \
- vi.mvert= 0; \
- vi.skip= 0; \
+ memset(&vi, 0, sizeof(PBVHVertexIter)); \
\
BLI_pbvh_node_get_grids(bvh, node, &grid_indices, &totgrid, NULL, &gridsize, &grids, NULL); \
BLI_pbvh_node_num_verts(bvh, node, &uniq_verts, &totvert); \
- BLI_pbvh_node_get_verts(bvh, node, &vert_indices, &verts); \
+ BLI_pbvh_node_get_verts(bvh, node, &vert_indices, &verts, &vdata); \
\
vi.grids= grids; \
vi.grid_indices= grid_indices; \
@@ -200,6 +203,9 @@
vi.totvert= uniq_verts; \
vi.vert_indices= vert_indices; \
vi.mverts= verts; \
+ vi.vdata= vdata; \
+ if(vi.vdata) \
+ vi.vdata_mask= CustomData_get_layer(vi.vdata, CD_PAINTMASK); \
}\
\
for(vi.i=0, vi.g=0; vi.g<vi.totgrid; vi.g++) { \
@@ -233,6 +239,8 @@
vi.mvert= &vi.mverts[vi.vert_indices[vi.gx]]; \
vi.co= vi.mvert->co; \
vi.no= vi.mvert->no; \
+ if(vi.vdata_mask) \
+ vi.mask= &vi.vdata_mask[vi.vert_indices[vi.gx]]; \
} \
#define BLI_pbvh_vertex_iter_end \
Modified: branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/blenlib/intern/pbvh.c 2011-06-03 15:22:54 UTC (rev 37132)
@@ -122,6 +122,7 @@
/* Mesh data */
MVert *verts;
MFace *faces;
+ CustomData *vdata;
/* Grid Data */
DMGridData **grids;
@@ -380,6 +381,7 @@
if(!G.background) {
node->draw_buffers =
GPU_build_mesh_buffers(map, bvh->verts, bvh->faces,
+ bvh->vdata,
node->prim_indices,
node->totprim, node->vert_indices,
node->uniq_verts,
@@ -506,7 +508,7 @@
}
/* Do a full rebuild with on Mesh data structure */
-void BLI_pbvh_build_mesh(PBVH *bvh, MFace *faces, MVert *verts, int totface, int totvert)
+void BLI_pbvh_build_mesh(PBVH *bvh, MFace *faces, MVert *verts, CustomData *vdata, int totface, int totvert)
{
BBC *prim_bbc = NULL;
BB cb;
@@ -514,6 +516,7 @@
bvh->faces = faces;
bvh->verts = verts;
+ bvh->vdata = vdata;
bvh->vert_bitmap = BLI_bitmap_new(totvert);
bvh->totvert = totvert;
bvh->leaf_limit = LEAF_LIMIT;
@@ -1042,6 +1045,7 @@
else {
GPU_update_mesh_buffers(node->draw_buffers,
bvh->verts,
+ bvh->vdata,
node->vert_indices,
node->uniq_verts +
node->face_verts);
@@ -1182,10 +1186,11 @@
node->flag |= PBVH_UpdateNormals|PBVH_UpdateBB|PBVH_UpdateOriginalBB|PBVH_UpdateDrawBuffers|PBVH_UpdateRedraw;
}
-void BLI_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node, int **vert_indices, MVert **verts)
+void BLI_pbvh_node_get_verts(PBVH *bvh, PBVHNode *node, int **vert_indices, MVert **verts, CustomData **vdata)
{
if(vert_indices) *vert_indices= node->vert_indices;
if(verts) *verts= bvh->verts;
+ if(vdata) *vdata= bvh->vdata;
}
void BLI_pbvh_node_num_verts(PBVH *bvh, PBVHNode *node, int *uniquevert, int *totvert)
Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_mask.c 2011-06-03 15:22:54 UTC (rev 37132)
@@ -60,7 +60,8 @@
PBVHVertexIter vd;
BLI_pbvh_vertex_iter_begin(pbvh, nodes[n], vd, PBVH_ITER_UNIQUE) {
- /* *vd.mask = get_mask_value(mode) */
+ if(vd.mask)
+ *vd.mask = get_mask_value(mode);
}
BLI_pbvh_vertex_iter_end;
@@ -68,8 +69,7 @@
}
BLI_pbvh_update(pbvh, PBVH_UpdateBB|PBVH_UpdateOriginalBB|PBVH_UpdateRedraw, NULL);
- //WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
- //ED_region_tag_redraw(CTX_wm_region(C));
+ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
}
return OPERATOR_FINISHED;
@@ -102,7 +102,8 @@
ot->poll= mask_poll;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ /* XXX: seems there is no need to register and undo will be handled by the operator itself */
+ ot->flag= 0;//OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
RNA_def_enum(ot->srna, "mode", mask_items, MASKING_CLEAR, "Mode", "");
Modified: branches/soc-2011-onion/source/blender/gpu/GPU_buffers.h
===================================================================
--- branches/soc-2011-onion/source/blender/gpu/GPU_buffers.h 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/gpu/GPU_buffers.h 2011-06-03 15:22:54 UTC (rev 37132)
@@ -140,11 +140,11 @@
/* Buffers for non-DerivedMesh drawing */
void *GPU_build_mesh_buffers(struct GHash *map, struct MVert *mvert,
- struct MFace *mface, int *face_indices,
+ struct MFace *mface, CustomData *vdata, int *face_indices,
int totface, int *vert_indices, int uniq_verts,
int totvert);
void GPU_update_mesh_buffers(void *buffers, struct MVert *mvert,
- int *vert_indices, int totvert);
+ struct CustomData *vdata, int *vert_indices, int totvert);
void *GPU_build_grid_buffers(struct DMGridData **grids,
int *grid_indices, int totgrid, int gridsize);
void GPU_update_grid_buffers(void *buffers_v, struct DMGridData **grids,
Modified: branches/soc-2011-onion/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- branches/soc-2011-onion/source/blender/gpu/intern/gpu_buffers.c 2011-06-03 15:15:14 UTC (rev 37131)
+++ branches/soc-2011-onion/source/blender/gpu/intern/gpu_buffers.c 2011-06-03 15:22:54 UTC (rev 37132)
@@ -449,7 +449,7 @@
/* For now this looks for just a single mask layer, eventually might include
other color layers like vertex colors or weights */
-static void update_mesh_color_buffers(GPU_Buffers *buffers, CustomData *vert_customdata, int totvert)
+static void update_mesh_color_buffers(GPU_Buffers *buffers, CustomData *vdata, int totvert)
{
unsigned char *color_data = NULL;
int i;
@@ -457,7 +457,7 @@
/* Make a color buffer if there's a mask layer and
get rid of any color buffer if there's no mask layer */
- pmask = CustomData_get_layer(vert_customdata, CD_PAINTMASK);
+ pmask = CustomData_get_layer(vdata, CD_PAINTMASK);
if(pmask && !buffers->color_buf)
glGenBuffersARB(1, &buffers->color_buf);
else if(!pmask && buffers->color_buf)
@@ -480,7 +480,7 @@
}
void GPU_update_mesh_buffers(void *buffers_v, MVert *mvert,
- int *vert_indices, int totvert)
+ CustomData *vdata, int *vert_indices, int totvert)
{
GPU_Buffers *buffers = buffers_v;
VertexBufferFormat *vert_data;
@@ -508,6 +508,8 @@
else
delete_buffer(&buffers->vert_buf);
+ update_mesh_color_buffers(buffers, vdata, totvert);
+
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
}
@@ -515,9 +517,10 @@
}
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list