[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31490] branches/soc-2010-nicolasbishop/ source/blender: == Ptex ==
Daniel Salazar - 3Developer.com
zanqdo at gmail.com
Sat Aug 21 05:36:29 CEST 2010
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
<nicholasbishop at gmail.com> 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
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
More information about the Bf-committers
mailing list