Originally I was using face select mode for ptex, but that's no longer the case; I added another mode flag for ptex editing. I didn't revert all the changes to face selection mode though, so perhaps some things are still broken?
Also, I have "taken over" the face select button for ptex resolution editing, so the old face selection mode isn't currently exposed in my branch. Ideally, the ptex editing mode should grow to support face hiding and such (unlike the older face select, the new mode uses the PBVH for selection, so it doesn't have any of that nasty backbuf selection stuff.) Is there anything other than masking and hiding that face select mode can do that the ptex edit mode can't? Thanks, -Nicholas On Fri, Aug 20, 2010 at 11:36 PM, Daniel Salazar - 3Developer.com <[email protected]> wrote: > Hi nick, I don know your plans about this but face select mode is used > to mask and/or hide faces on paint modes and his functionality is > colliding with your implementation. Care to shed some light into this? > > cheers > > Daniel Salazar > www.3developer.com > > > > On Fri, Aug 20, 2010 at 9:09 PM, Nicholas Bishop > <[email protected]> wrote: >> Revision: 31490 >> >> http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31490 >> Author: nicholasbishop >> Date: 2010-08-21 05:09:20 +0200 (Sat, 21 Aug 2010) >> >> Log Message: >> ----------- >> == Ptex == >> >> Resolution editing works now with VBO enabled >> >> Modified Paths: >> -------------- >> >> branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c >> branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c >> >> Modified: >> branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c >> =================================================================== >> --- >> branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c >> 2010-08-21 00:31:08 UTC (rev 31489) >> +++ >> branches/soc-2010-nicolasbishop/source/blender/editors/sculpt_paint/paint_ptex.c >> 2010-08-21 03:09:20 UTC (rev 31490) >> @@ -872,6 +872,31 @@ >> } >> } >> >> +static void ptex_redraw_selected(PBVHNode *node, void *data) >> +{ >> + PBVH *pbvh = data; >> + MPtex *mptex; >> + GridToFace *grid_face_map; >> + CustomData *fdata; >> + int totgrid, *grid_indices, i; >> + >> + BLI_pbvh_get_customdata(pbvh, NULL, &fdata); >> + mptex = CustomData_get_layer(fdata, CD_MPTEX); >> + grid_face_map = BLI_pbvh_get_grid_face_map(pbvh); >> + BLI_pbvh_node_get_grids(pbvh, node, >> + &grid_indices, &totgrid, NULL, NULL, >> + NULL, NULL, NULL); >> + >> + for(i = 0; i < totgrid; ++i) { >> + GridToFace *gtf = &grid_face_map[grid_indices[i]]; >> + if(mptex[gtf->face].subfaces[gtf->offset].flag & >> MPTEX_SUBFACE_SELECTED) { >> + BLI_pbvh_node_set_flags(node, >> + >> SET_INT_IN_POINTER(PBVH_UpdateColorBuffers| >> + >> PBVH_UpdateRedraw)); >> + } >> + } >> +} >> + >> static int ptex_face_resolution_set_exec(bContext *C, wmOperator *op) >> { >> ToolSettings *ts = CTX_data_tool_settings(C); >> @@ -891,6 +916,8 @@ >> } >> } >> >> + BLI_pbvh_search_callback(ob->paint->pbvh, NULL, NULL, >> ptex_redraw_selected, ob->paint->pbvh); >> + >> WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); >> >> return OPERATOR_FINISHED; >> >> Modified: >> branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c >> =================================================================== >> --- branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c >> 2010-08-21 00:31:08 UTC (rev 31489) >> +++ branches/soc-2010-nicolasbishop/source/blender/gpu/intern/gpu_buffers.c >> 2010-08-21 03:09:20 UTC (rev 31490) >> @@ -742,15 +742,22 @@ >> >> void GPU_update_grid_uv_buffer(GPU_Buffers *buffers, PBVH *pbvh, PBVHNode >> *node, DMDrawFlags flags) >> { >> + CustomData *fdata; >> + GridToFace *grid_face_map; >> + MPtex *mptex; >> float (*uv_data)[2]; >> int *grid_indices, totgrid, gridsize, totvert; >> >> if(!buffers->vert_buf) >> return; >> >> + BLI_pbvh_get_customdata(pbvh, NULL, &fdata); >> + mptex = CustomData_get_layer(fdata, CD_MPTEX); >> + grid_face_map = BLI_pbvh_get_grid_face_map(pbvh); >> BLI_pbvh_node_get_grids(pbvh, node, >> &grid_indices, &totgrid, NULL, &gridsize, >> NULL, NULL, NULL); >> + >> /* for now, pbvh is required to give one node per subface in ptex >> mode */ >> assert(totgrid == 1); >> >> @@ -758,11 +765,31 @@ >> uv_data= map_uv_buffer(buffers, (flags & DM_DRAW_PTEX), totvert); >> >> if(uv_data) { >> - int u, v; >> - for(v = 0; v < gridsize; ++v) { >> - for(u = 0; u < gridsize; ++u, ++uv_data) { >> - uv_data[0][0] = u / (gridsize - 1.0f); >> - uv_data[0][1] = v / (gridsize - 1.0f); >> + GridToFace *gtf = &grid_face_map[grid_indices[0]]; >> + MPtex *pt = &mptex[gtf->face]; >> + MPtexSubface *subface = &pt->subfaces[gtf->offset]; >> + float u, v, ustep, vstep, vstart = 0; >> + int x, y; >> + >> + if(flags & DM_DRAW_PTEX_TEXELS) { >> + ustep = subface->res[0] >> 1; >> + vstep = subface->res[1] >> 1; >> + /* make quad texel pattern appear uniform across all >> four subfaces */ >> + if(gtf->offset % 2) >> + vstart = 0.5; >> + } >> + else { >> + ustep = 1; >> + vstep = 1; >> + } >> + >> + ustep /= gridsize - 1.0f; >> + vstep /= gridsize - 1.0f; >> + >> + for(y = 0, v = vstart; y < gridsize; ++y, v += vstep) { >> + for(x = 0, u = 0; x < gridsize; ++x, u += ustep, >> ++uv_data) { >> + uv_data[0][0] = u; >> + uv_data[0][1] = v; >> } >> } >> >> @@ -1126,7 +1153,7 @@ >> >> if(ptex_edit) { >> if(subface->flag & MPTEX_SUBFACE_SELECTED) >> - glColor3ub(255, 255, 255); >> + glColor3ub(255, 255, 255); >> else >> glColor3ub(128, 128, 128); >> } >> @@ -1224,7 +1251,7 @@ >> glShadeModel((flags & DM_DRAW_FULLY_SMOOTH) ? GL_SMOOTH: GL_FLAT); >> >> if(buffers->vert_buf && buffers->index_buf) { >> - GLboolean colmat; >> + GLboolean use_colmat, colmat; >> >> glEnableClientState(GL_VERTEX_ARRAY); >> glEnableClientState(GL_NORMAL_ARRAY); >> @@ -1236,7 +1263,8 @@ >> glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf); >> glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, >> buffers->index_buf); >> >> - if(buffers->color_buf) { >> + use_colmat = buffers->color_buf || (flags & >> DM_DRAW_PTEX_TEXELS); >> + if(use_colmat) { >> glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); >> glGetBooleanv(GL_COLOR_MATERIAL, &colmat); >> glEnable(GL_COLOR_MATERIAL); >> @@ -1251,7 +1279,33 @@ >> } >> if(buffers->uv_buf) { >> glEnable(GL_TEXTURE_2D); >> - glBindTexture(GL_TEXTURE_2D, >> buffers->ptex[0]); >> + if(flags & DM_DRAW_PTEX_TEXELS) { >> + int *grid_indices; >> + CustomData *fdata; >> + GridToFace *gtf; >> + MPtex *mptex, *pt; >> + MPtexSubface *subface; >> + GridToFace *grid_face_map; >> + >> + BLI_pbvh_get_customdata(pbvh, NULL, >> &fdata); >> + mptex = CustomData_get_layer(fdata, >> CD_MPTEX); >> + grid_face_map = >> BLI_pbvh_get_grid_face_map(pbvh); >> + BLI_pbvh_node_get_grids(pbvh, node, >> + >> &grid_indices, NULL, NULL, NULL, >> + NULL, NULL, >> NULL); >> + >> + gtf = >> &grid_face_map[grid_indices[0]]; >> + pt = &mptex[gtf->face]; >> + subface = &pt->subfaces[gtf->offset]; >> + >> + gpu_bind_ptex_pattern(); >> + if(subface->flag & >> MPTEX_SUBFACE_SELECTED) >> + glColor3ub(255, 255, 255); >> + else >> + glColor3ub(128, 128, 128); >> + } >> + else >> + glBindTexture(GL_TEXTURE_2D, >> buffers->ptex[0]); >> glBindBufferARB(GL_ARRAY_BUFFER_ARB, >> buffers->uv_buf); >> glTexCoordPointer(2, GL_FLOAT, 0, (void*)0); >> } >> @@ -1273,7 +1327,7 @@ >> glDrawElements(GL_TRIANGLES, buffers->tot_tri * 3, >> buffers->index_type, 0); >> } >> >> - if(buffers->color_buf && !colmat) >> + if(use_colmat && !colmat) >> glDisable(GL_COLOR_MATERIAL); >> >> glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); >> >> >> _______________________________________________ >> Bf-blender-cvs mailing list >> [email protected] >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >> > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
