Revision: 21410 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21410 Author: imbusy Date: 2009-07-07 19:16:05 +0200 (Tue, 07 Jul 2009)
Log Message: ----------- Vertex Paint mode works in some hacky way, don't like the way I did it, but couldn't think of anything better. There's still some bug with not being able to paint on one final vertex of a mesh. Modified Paths: -------------- branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c branches/soc-2009-imbusy/source/blender/windowmanager/intern/wm_subwindow.c branches/soc-2009-imbusy/source/blender/windowmanager/wm_subwindow.h Modified: branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c =================================================================== --- branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c 2009-07-07 15:42:08 UTC (rev 21409) +++ branches/soc-2009-imbusy/source/blender/blenkernel/intern/cdderivedmesh.c 2009-07-07 17:16:05 UTC (rev 21410) @@ -590,12 +590,13 @@ float *nors= dm->getFaceDataArray(dm, CD_NORMAL); int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX); + mc = DM_get_face_data_layer(dm, CD_WEIGHT_MCOL); if(!mc) mc = DM_get_face_data_layer(dm, CD_MCOL); if( GPU_buffer_legacy(dm) ) { - DEBUG_VBO( "Using legacy code. cdDM_drawFacesTex_common\n" ); + DEBUG_VBO( "Using legacy code. cdDM_drawMappedFaces\n" ); for(i = 0; i < dm->numFaceData; i++, mf++) { int drawSmooth = (mf->flag & ME_SMOOTH); Modified: branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c =================================================================== --- branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c 2009-07-07 15:42:08 UTC (rev 21409) +++ branches/soc-2009-imbusy/source/blender/editors/space_view3d/drawobject.c 2009-07-07 17:16:05 UTC (rev 21410) @@ -1716,12 +1716,44 @@ static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditFace *efa_act) { struct { unsigned char *cols[3]; EditFace *efa_act; } data; + unsigned char *colors; + int i,j; data.cols[0] = baseCol; data.cols[1] = selCol; data.cols[2] = actCol; data.efa_act = efa_act; - + + /* TODO: check this later. not this function... */ + /*colors = MEM_mallocN((sizeof(unsigned char)*dm->getNumFaces(dm)*16),"draw_dm_faces_sel"); + for(i=0; i < dm->getNumFaces(dm); i++) { + EditFace *efa = EM_get_face_for_index(i); + unsigned char *col; + if (efa->h==0) { + if (efa == efa_act) { + for(j=0;j<4;j++) { + colors[i*16+j*4] = data.cols[2][0]; + colors[i*16+j*4+1] = data.cols[2][1]; + colors[i*16+j*4+2] = data.cols[2][2]; + colors[i*16+j*4+3] = data.cols[2][3]; + } + } else { + col = data.cols[(efa->f&SELECT)?1:0]; + if (col[3]==0) memset(&colors[i*16],0,sizeof(unsigned char)*16); + for(j=0;j<4;j++) { + colors[i*16+j*4] = col[0]; + colors[i*16+j*4+1] = col[1]; + colors[i*16+j*4+2] = col[2]; + colors[i*16+j*4+3] = col[3]; + } + } + } else + { + memset(&colors[i*16],0,sizeof(unsigned char)*16); + } + }*/ + //CustomData_add_layer( &dm->faceData, CD_WEIGHT_PAINT, CD_ASSIGN, colors, dm->numFaceData ); dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0); + //CustomData_free_layer( &dm->faceData, CD_WEIGHT_PAINT, dm->numFaceData, 0 ); } static int draw_dm_creases__setDrawOptions(void *userData, int index) @@ -5579,10 +5611,34 @@ { DerivedMesh *dm = mesh_get_derived_final(scene, ob, v3d->customdata_mask); Mesh *me = (Mesh*)ob->data; + MCol *colors; + int i,j; glColor3ub(0, 0, 0); - dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0); + + colors = MEM_mallocN(dm->getNumFaces(dm)*sizeof(MCol)*4,"bbs_mesh_solid"); + for(i=0;i<dm->getNumFaces(dm);i++) { + if (!(me->mface[i].flag&ME_HIDE)) { + unsigned int fbindex = index_to_framebuffer(i); + for(j=0;j<4;j++) { + colors[i*4+j].b = ((fbindex)&0xFF); + colors[i*4+j].g = (((fbindex)>>8)&0xFF); + colors[i*4+j].r = (((fbindex)>>16)&0xFF); + colors[i*4+j].a = 255; + } + } + else { + memset(&colors[i*4],0,sizeof(MCol)); + } + } + + CustomData_add_layer( &dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, colors, dm->numFaceData ); + GPU_buffer_free(dm->drawObject->colors,0); + dm->drawObject->colors = 0; + dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 1); + CustomData_free_layer( &dm->faceData, CD_WEIGHT_MCOL, dm->numFaceData, 0 ); + dm->release(dm); } Modified: branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c =================================================================== --- branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c 2009-07-07 15:42:08 UTC (rev 21409) +++ branches/soc-2009-imbusy/source/blender/gpu/intern/gpu_buffers.c 2009-07-07 17:16:05 UTC (rev 21410) @@ -600,7 +600,8 @@ DEBUG_VBO("GPU_buffer_color\n"); mcol = DM_get_face_data_layer(dm, CD_WEIGHT_MCOL); - dm->drawObject->colType = CD_WEIGHT_MCOL; + if( mcol ) + dm->drawObject->colType = CD_WEIGHT_MCOL; if(!mcol) { mcol = DM_get_face_data_layer(dm, CD_MCOL); dm->drawObject->colType = CD_MCOL; Modified: branches/soc-2009-imbusy/source/blender/windowmanager/intern/wm_subwindow.c =================================================================== --- branches/soc-2009-imbusy/source/blender/windowmanager/intern/wm_subwindow.c 2009-07-07 15:42:08 UTC (rev 21409) +++ branches/soc-2009-imbusy/source/blender/windowmanager/intern/wm_subwindow.c 2009-07-07 17:16:05 UTC (rev 21410) @@ -434,7 +434,7 @@ /* apple seems to round colors to below and up on some configs */ -static unsigned int index_to_framebuffer(int index) +unsigned int index_to_framebuffer(int index) { unsigned int i= index; @@ -464,7 +464,7 @@ /* this is the old method as being in use for ages.... seems to work? colors are rounded to lower values */ -static unsigned int index_to_framebuffer(int index) +unsigned int index_to_framebuffer(int index) { unsigned int i= index; Modified: branches/soc-2009-imbusy/source/blender/windowmanager/wm_subwindow.h =================================================================== --- branches/soc-2009-imbusy/source/blender/windowmanager/wm_subwindow.h 2009-07-07 15:42:08 UTC (rev 21409) +++ branches/soc-2009-imbusy/source/blender/windowmanager/wm_subwindow.h 2009-07-07 17:16:05 UTC (rev 21410) @@ -45,6 +45,7 @@ void wm_subwindow_getorigin(wmWindow *win, int swinid, int *x, int *y); void wm_subwindow_getmatrix(wmWindow *win, int swinid, float mat[][4]); +unsigned int index_to_framebuffer(int index); #endif /* WM_SUBWINDOW_H */ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs