[Bf-blender-cvs] [1e36188] master: Fix T46469: Data Transfer Modifier don't work.
Commit: 1e361880a9bcfba136a556c4201ca96dbdd88eb1 Author: Bastien Montagne Date: Fri Nov 13 20:31:34 2015 +0100 Branches: master https://developer.blender.org/rB1e361880a9bcfba136a556c4201ca96dbdd88eb1 Fix T46469: Data Transfer Modifier don't work. Pretty nice copy/paste typo in looptri work... === M source/blender/blenkernel/intern/mesh_remap.c === diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index 258131f..cb2d7ff 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -583,7 +583,7 @@ void BKE_mesh_remap_calc_verts_from_dm( } if (mesh_remap_bvhtree_query_nearest(, , tmp_co, max_dist_sq, _dist)) { - const MLoopTri *lt = [rayhit.index]; + const MLoopTri *lt = [nearest.index]; MPoly *mp = _src[lt->poly]; if (mode == MREMAP_MODE_VERT_POLY_NEAREST) { @@ -812,7 +812,7 @@ void BKE_mesh_remap_calc_edges_from_dm( } if (mesh_remap_bvhtree_query_nearest(, , tmp_co, max_dist_sq, _dist)) { - const MLoopTri *lt = [rayhit.index]; + const MLoopTri *lt = [nearest.index]; MPoly *mp_src = _src[lt->poly]; MLoop *ml_src = _src[mp_src->loopstart]; int nloops = mp_src->totloop; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [d7f0c33] decklink: Merge remote-tracking branch 'origin' into decklink
Commit: d7f0c33b3d708a6c4ce4aa342c0831ca086fa872 Author: Benoit Bolsee Date: Fri Nov 13 18:32:08 2015 +0100 Branches: decklink https://developer.blender.org/rBd7f0c33b3d708a6c4ce4aa342c0831ca086fa872 Merge remote-tracking branch 'origin' into decklink Conflicts: source/gameengine/Ketsji/BL_Shader.cpp source/gameengine/Ketsji/BL_Shader.h === === diff --cc source/gameengine/Ketsji/BL_Shader.cpp index 8c69e6a,4b229f5..0b4a48a --- a/source/gameengine/Ketsji/BL_Shader.cpp +++ b/source/gameengine/Ketsji/BL_Shader.cpp @@@ -81,22 -80,13 +82,22 @@@ bool BL_Uniform::Apply(class BL_Shader switch (mType) { case UNI_FLOAT: { - float *f = (float*)mData; - glUniform1fARB(mLoc,(GLfloat)*f); + float *f = (float *)mData; + glUniform1fARB(mLoc, (GLfloat)*f); break; } + case UNI_FLOAT_EYE: + { + float *f = (float*)mData; + ras = KX_GetActiveEngine()->GetRasterizer(); + *f = (ras->GetEye() == RAS_IRasterizer::RAS_STEREO_LEFTEYE) ? 0.0f : 0.5f; + glUniform1fARB(mLoc, (GLfloat)*f); + mDirty = (ras->Stereo()) ? true : false; + break; + } case UNI_INT: { - int *f = (int*)mData; + int *f = (int *)mData; glUniform1iARB(mLoc, (GLint)*f); break; } @@@ -278,13 -271,15 +282,13 @@@ void BL_Shader::SetUniformiv(int locati void BL_Shader::ApplyShader() { #ifdef SORT_UNIFORMS - if (!mDirty) + if (!mDirty) { return; + } - for (unsigned int i = 0; i < mUniforms.size(); i++) { - mUniforms[i]->Apply(this); - } - mDirty = false; + for (unsigned int i=0; iApply(this); #endif } @@@ -317,79 -314,74 +323,81 @@@ bool BL_Shader::LinkProgram( spit("Vertex shaders not supported"); return false; } + - // -- vertex shader -- - tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); - glShaderSourceARB(tmpVert, 1, (const char **), 0); - glCompileShaderARB(tmpVert); - glGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint *)); - - // print info if any - if (vertlen > 0 && vertlen < MAX_LOG_LEN) { - logInf = (char *)MEM_mallocN(vertlen, "vert-log"); - glGetInfoLogARB(tmpVert, vertlen, (GLsizei *)_len, logInf); - - if (char_len > 0) { - spit(" Vertex Shader Error "); - spit(logInf); + if (vertProg[0] != 0) + { + // -- vertex shader -- + tmpVert = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + glShaderSourceARB(tmpVert, 1, (const char**), 0); + glCompileShaderARB(tmpVert); + glGetObjectParameterivARB(tmpVert, GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint*)); + + // print info if any + if (vertlen > 0 && vertlen < MAX_LOG_LEN) { + logInf = (char*)MEM_mallocN(vertlen, "vert-log"); + glGetInfoLogARB(tmpVert, vertlen, (GLsizei*)_len, logInf); + if (char_len > 0) { + spit(" Vertex Shader Error "); + spit(logInf); + } + MEM_freeN(logInf); + logInf = 0; + } + // check for compile errors + glGetObjectParameterivARB(tmpVert, GL_OBJECT_COMPILE_STATUS_ARB, (GLint*)); + if (!vertstatus) { + spit(" Vertex shader failed to compile "); + goto programError; } - - MEM_freeN(logInf); - logInf = 0; - } - - // check for compile errors - glGetObjectParameterivARB(tmpVert, GL_OBJECT_COMPILE_STATUS_ARB, (GLint *)); - if (!vertstatus) { - spit(" Vertex shader failed to compile "); - goto programError; } - // -- fragment shader - tmpFrag = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); - glShaderSourceARB(tmpFrag, 1, (const char **), 0); - glCompileShaderARB(tmpFrag); - glGetObjectParameterivARB(tmpFrag, GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint *)); - - if (fraglen > 0 && fraglen < MAX_LOG_LEN) { -
[Bf-blender-cvs] [9281942] master: Fix T46762: UV transfer Object transform crash.
Commit: 92819425d86017f371fa8e78db54d4fb976a0235 Author: Bastien Montagne Date: Fri Nov 13 20:54:07 2015 +0100 Branches: master https://developer.blender.org/rB92819425d86017f371fa8e78db54d4fb976a0235 Fix T46762: UV transfer Object transform crash. Own very stupid mistake this time... :| === M source/blender/blenkernel/intern/mesh_remap.c === diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c index cb2d7ff..fcc01c8 100644 --- a/source/blender/blenkernel/intern/mesh_remap.c +++ b/source/blender/blenkernel/intern/mesh_remap.c @@ -1438,7 +1438,9 @@ void BKE_mesh_remap_calc_loops_from_dm( if (mode == MREMAP_MODE_LOOP_NEAREST_POLYNOR) { copy_v3_v3(pnor_dst, poly_nors_dst[pidx_dst]); - BLI_space_transform_apply_normal(space_transform, pnor_dst); + if (space_transform) { + BLI_space_transform_apply_normal(space_transform, pnor_dst); + } } if ((size_t)mp_dst->totloop > islands_res_buff_size) { @@ -1473,7 +1475,9 @@ void BKE_mesh_remap_calc_loops_from_dm( if (mode == MREMAP_MODE_LOOP_NEAREST_LOOPNOR) { copy_v3_v3(tmp_no, loop_nors_dst[plidx_dst + mp_dst->loopstart]); - BLI_space_transform_apply_normal(space_transform, tmp_no); + if (space_transform) { + BLI_space_transform_apply_normal(space_transform, tmp_no); + } nor_dst = _no; nors_src = loop_nors_src; vert_to_refelem_map_src = vert_to_loop_map_src; ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [a6413f2] wiggly-widgets: Cleanup: Add and use widget map context to store wmap runtime data
Commit: a6413f23cd1f0ec261e97584573d637370b56841 Author: Julian Eisel Date: Fri Nov 13 21:58:08 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rBa6413f23cd1f0ec261e97584573d637370b56841 Cleanup: Add and use widget map context to store wmap runtime data We might need this for a couple of other things and IMHO it's nicer to keep it a bit separated. === M source/blender/editors/space_graph/graph_edit.c M source/blender/editors/space_sequencer/sequencer_view.c M source/blender/windowmanager/WM_types.h M source/blender/windowmanager/intern/wm_event_system.c M source/blender/windowmanager/intern/wm_widgets.c === diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index dbf1ce1..c86c416 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -2651,7 +2651,7 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co SpaceIpo *sipo = CTX_wm_space_graph(C); /* only end modal if we're not dragging a widget */ - if (!wmap->active_widget && event->val == KM_PRESS) { + if (!wmap->wmap_context.active_widget && event->val == KM_PRESS) { copy_v2_v2(sipo->backdrop_offset, data->init_offset); sipo->backdrop_zoom = data->init_zoom; diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c index 3208a11..790fcc0 100644 --- a/source/blender/editors/space_sequencer/sequencer_view.c +++ b/source/blender/editors/space_sequencer/sequencer_view.c @@ -378,7 +378,7 @@ static int sequencer_overdrop_transform_modal(bContext *C, wmOperator *op, const SpaceSeq *sseq = CTX_wm_space_seq(C); /* only end modal if we're not dragging a widget */ - if (!wmap->active_widget && event->val == KM_PRESS) { + if (!wmap->wmap_context.active_widget && event->val == KM_PRESS) { copy_v2_v2(sseq->overdrop_offset, data->init_offset); sseq->overdrop_zoom = data->init_zoom; @@ -531,7 +531,7 @@ static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, c /* no offset needed in this case */ offset[0] = offset[1] = 0; - WM_widget_set_offset(wmap->active_widget, offset); + WM_widget_set_offset(wmap->wmap_context.active_widget, offset); break; } diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 3e43047..0e09f2c 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -719,18 +719,25 @@ typedef struct wmWidgetGroupType { typedef struct wmWidgetMap { struct wmWidgetMap *next, *prev; - struct wmWidgetMapType *type; + wmWidgetMapType *type; ListBase widgetgroups; - /* highlighted widget for this map. We redraw the widgetmap when this changes */ - struct wmWidget *highlighted_widget; - /* active widget for this map. User has clicked currently this widget and it gets all input */ - struct wmWidget *active_widget; - /* selected widget for this map. */ - struct wmWidget *selected_widget; - - /* active group - set while widget is highlighted/active */ - struct wmWidgetGroup *activegroup; + /** +* \brief Widget map runtime context +* +* Contains information about this widget map. Currently +* highlighted widget, currently selected widget, ... +*/ + struct { + /* we redraw the widgetmap when this changes */ + wmWidget *highlighted_widget; + /* user has clicked this widget and it gets all input */ + wmWidget *active_widget; + wmWidget *selected_widget; + + /* set while widget is highlighted/active */ + wmWidgetGroup *activegroup; + } wmap_context; } wmWidgetMap; /* *** migrated stuff, clean later? ** */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 58b413c..83137e9 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2092,9 +2092,9 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers }
[Bf-blender-cvs] [4d33c37] master: Fix T46726 shading issues in sculpt mode.
Commit: 4d33c37c9eb4fc46482f7b2a7227b54c5cfda07a Author: Antony Riakiotakis Date: Fri Nov 13 21:57:00 2015 +0100 Branches: master https://developer.blender.org/rB4d33c37c9eb4fc46482f7b2a7227b54c5cfda07a Fix T46726 shading issues in sculpt mode. This fixes two issues: * Normals were not being recalculated correctly when not using optimized drawing for CDDerivedMesh (Multires actually handles that correctly). * Loop normals (autosmooth option) were also not being calculated. Doing this calculation is not desirable, since it can't be done correctly without a severe performance hit. This is easy to test by doing a dependency flush on the mesh after each scuplt stroke step. Instead they are now disabled during sculpting. === M source/blender/blenkernel/intern/cdderivedmesh.c M source/blender/blenkernel/intern/subsurf_ccg.c M source/blender/editors/sculpt_paint/sculpt.c === diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 3b86c42..be4f001 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -344,9 +344,6 @@ static void cdDM_update_normals_from_pbvh(DerivedMesh *dm) CDDerivedMesh *cddm = (CDDerivedMesh *) dm; float (*face_nors)[3]; - if (!cddm->pbvh || !cddm->pbvh_draw || !dm->numPolyData) - return; - face_nors = CustomData_get_layer(>polyData, CD_NORMAL); BKE_pbvh_update(cddm->pbvh, PBVH_UpdateNormals, face_nors); @@ -446,18 +443,18 @@ static void cdDM_drawFacesSolid( CDDerivedMesh *cddm = (CDDerivedMesh *) dm; int a; - if (cddm->pbvh && cddm->pbvh_draw) { - if (BKE_pbvh_has_faces(cddm->pbvh)) { + if (cddm->pbvh) { + if (cddm->pbvh_draw && BKE_pbvh_has_faces(cddm->pbvh)) { float (*face_nors)[3] = CustomData_get_layer(>faceData, CD_NORMAL); - cdDM_update_normals_from_pbvh(dm); - BKE_pbvh_draw(cddm->pbvh, partial_redraw_planes, face_nors, setMaterial, false, false); glShadeModel(GL_FLAT); + return; + } + else { + cdDM_update_normals_from_pbvh(dm); } - - return; } GPU_vertex_setup(dm); @@ -505,14 +502,18 @@ static void cdDM_drawFacesTex_common( * textured view, but object itself will be displayed gray * (the same as it'll display without UV maps in textured view) */ - if (cddm->pbvh && cddm->pbvh_draw && BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH) { - if (BKE_pbvh_has_faces(cddm->pbvh)) { - cdDM_update_normals_from_pbvh(dm); + if (cddm->pbvh) { + if (cddm->pbvh_draw && + BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH && + BKE_pbvh_has_faces(cddm->pbvh)) + { GPU_set_tpage(NULL, false, false); BKE_pbvh_draw(cddm->pbvh, NULL, NULL, NULL, false, false); + return; + } + else { + cdDM_update_normals_from_pbvh(dm); } - - return; } colType = CD_TEXTURE_MLOOPCOL; @@ -878,14 +879,18 @@ static void cdDM_drawMappedFacesGLSL( * will skip using textures (dyntopo currently destroys UV anyway) and * works fine for matcap */ - if (cddm->pbvh && cddm->pbvh_draw && BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH) { - if (BKE_pbvh_has_faces(cddm->pbvh)) { - cdDM_update_normals_from_pbvh(dm); + if (cddm->pbvh) { + if (cddm->pbvh_draw && + BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH && + BKE_pbvh_has_faces(cddm->pbvh)) + { setMaterial(1, ); BKE_pbvh_draw(cddm->pbvh, NULL, NULL, NULL, false, false); + return; + } + else { + cdDM_update_normals_from_pbvh(dm); } - - return; } matnr = -1; @@ -1147,14 +1152,18 @@ static void cdDM_drawMappedFacesMat( * works fine for matcap */ - if (cddm->pbvh && cddm->pbvh_draw && BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH) { - if (BKE_pbvh_has_faces(cddm->pbvh)) { - cdDM_update_normals_from_pbvh(dm); + if (cddm->pbvh) { + if (cddm->pbvh_draw && + BKE_pbvh_type(cddm->pbvh) == PBVH_BMESH && +
[Bf-blender-cvs] [8a78bbc] wiggly-widgets: Fix widgets swallowing RMB events, reported by Psy-fi
Commit: 8a78bbc62e570efc95c8002e85c038a53894c5ae Author: Julian Eisel Date: Fri Nov 13 23:06:39 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rB8a78bbc62e570efc95c8002e85c038a53894c5ae Fix widgets swallowing RMB events, reported by Psy-fi === M source/blender/windowmanager/intern/wm_widgets.c === diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c index aa1a197..4b7d7a0 100644 --- a/source/blender/windowmanager/intern/wm_widgets.c +++ b/source/blender/windowmanager/intern/wm_widgets.c @@ -628,6 +628,7 @@ static int widget_set_select_invoke(bContext *C, wmOperator *UNUSED(op), const w if (widget) { if (widget->flag & WM_WIDGET_SELECTABLE) { wm_widgetmap_set_selected_widget(C, wmap, widget); + return OPERATOR_FINISHED; } break; } @@ -637,7 +638,7 @@ static int widget_set_select_invoke(bContext *C, wmOperator *UNUSED(op), const w } } - return OPERATOR_FINISHED; + return OPERATOR_PASS_THROUGH; } void WIDGETGROUP_OT_widget_set_select(wmOperatorType *ot) ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [1fbb124] wiggly-widgets: Fix crash reading .blend with bones that don't have Face Map object assigned
Commit: 1fbb124154b44aa91d35416409654d45a6668edd Author: Julian Eisel Date: Fri Nov 13 23:01:04 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rB1fbb124154b44aa91d35416409654d45a6668edd Fix crash reading .blend with bones that don't have Face Map object assigned === M source/blender/blenloader/intern/readfile.c === diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 1677bb1..50483c8 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3218,8 +3218,10 @@ static void lib_link_pose(FileData *fd, Main *bmain, Object *ob, bPose *pose) pchan->bone = BKE_armature_find_bone_name(arm, pchan->name); pchan->fmap_object = newlibadr_us(fd, arm->id.lib, pchan->fmap_object); - /* fix fmap pointer now that we've got updated fmap_object */ - pchan->fmap = fmap_find_name(pchan->fmap_object, pchan->fmap->name); + if (pchan->fmap_object) { + /* fix fmap pointer now that we've got updated fmap_object */ + pchan->fmap = fmap_find_name(pchan->fmap_object, pchan->fmap->name); + } pchan->custom = newlibadr_us(fd, arm->id.lib, pchan->custom); if (pchan->bone == NULL) ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [c21cfbf] wiggly-widgets: Minor correction to Face Map registering
Commit: c21cfbfb506468f24313307a2f1ff5a7591b6602 Author: Julian Eisel Date: Fri Nov 13 22:04:07 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rBc21cfbfb506468f24313307a2f1ff5a7591b6602 Minor correction to Face Map registering (And whitespace cleanup) === M source/blender/windowmanager/intern/wm_generic_widgets.c === diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c b/source/blender/windowmanager/intern/wm_generic_widgets.c index 2790f37..b138d08 100644 --- a/source/blender/windowmanager/intern/wm_generic_widgets.c +++ b/source/blender/windowmanager/intern/wm_generic_widgets.c @@ -1366,7 +1366,7 @@ static bool widget_rect_transform_get_property(wmWidget *widget, const int slot, static int widget_rect_transform_invoke(bContext *UNUSED(C), const wmEvent *event, wmWidget *widget) { - RectTransformWidget *cage = (RectTransformWidget *) widget; + RectTransformWidget *cage = (RectTransformWidget *)widget; RectTransformInteraction *data = MEM_callocN(sizeof (RectTransformInteraction), "cage_interaction"); copy_v2_v2(data->orig_offset, widget->offset); @@ -1475,7 +1475,7 @@ static int widget_rect_transform_handler(bContext *C, const wmEvent *event, wmWi static void widget_rect_transform_bind_to_prop(wmWidget *widget, const int slot) { - RectTransformWidget *cage = (RectTransformWidget *) widget; + RectTransformWidget *cage = (RectTransformWidget *)widget; if (slot == RECT_TRANSFORM_SLOT_OFFSET) widget_rect_transform_get_property(widget, RECT_TRANSFORM_SLOT_OFFSET, widget->offset); @@ -1485,7 +1485,7 @@ static void widget_rect_transform_bind_to_prop(wmWidget *widget, const int slot) static void widget_rect_transform_cancel(bContext *C, wmWidget *widget) { - RectTransformWidget *cage = (RectTransformWidget *) widget; + RectTransformWidget *cage = (RectTransformWidget *)widget; RectTransformInteraction *data = widget->interaction_data; /* reset properties */ @@ -1598,7 +1598,7 @@ wmWidget *WIDGET_facemap_new( wmWidgetGroup *wgroup, const char *name, const int style, Object *ob, const int facemap) { - FacemapWidget *fmap_widget = MEM_callocN(sizeof(FacemapWidget), "CageWidget"); + FacemapWidget *fmap_widget = MEM_callocN(sizeof(FacemapWidget), name); BLI_assert(facemap > -1); ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [1c89597] wiggly-widgets: Fix mistake with start offset of many facemaps
Commit: 1c8959781e9db4e092a17a4a88bd89e72ec914b8 Author: Antony Riakiotakis Date: Sat Nov 14 01:25:09 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rB1c8959781e9db4e092a17a4a88bd89e72ec914b8 Fix mistake with start offset of many facemaps === M source/blender/editors/space_view3d/drawobject.c === diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8a928de..09effb8 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -8727,10 +8727,10 @@ void ED_draw_object_facemap(Scene *scene, struct Object *ob, int facemap) if (dm->drawObject->facemapindices) { if (dm->drawObject->facemapindices->use_vbo) glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT, - (int *)NULL + dm->drawObject->facemap_start[facemap]); + (int *)NULL + dm->drawObject->facemap_start[facemap] * 3); else glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT, - (int *)dm->drawObject->facemapindices->pointer + dm->drawObject->facemap_start[facemap]); + (int *)dm->drawObject->facemapindices->pointer + dm->drawObject->facemap_start[facemap] * 3); } glPopAttrib(); ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [b9132c0] wiggly-widgets: Fix widgetmap drawing.
Commit: b9132c0be3a21d8dff545c48c5c245b24554368e Author: Antony Riakiotakis Date: Sat Nov 14 00:38:51 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rBb9132c0be3a21d8dff545c48c5c245b24554368e Fix widgetmap drawing. === M source/blender/blenkernel/intern/cdderivedmesh.c M source/blender/editors/space_view3d/drawobject.c === diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 54ee5c3..0177d36 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1619,7 +1619,7 @@ static void cdDM_buffer_copy_facemap(DerivedMesh *dm, unsigned int *varray) facemap_offset[*facemap_iter] += numtri; - for (; numtri > 0; numtri--) { + for (; numtri > 0; numtri--, ltri_iter++) { varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[0]].v].point_index; varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[1]].v].point_index; varray[fmap_offset++] = gdo->vert_points[mloop[ltri_iter->tri[2]].v].point_index; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d7e1ca8..8a928de 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -8726,15 +8726,15 @@ void ED_draw_object_facemap(Scene *scene, struct Object *ob, int facemap) if (dm->drawObject->facemapindices) { if (dm->drawObject->facemapindices->use_vbo) - glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap], GL_UNSIGNED_INT, + glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT, (int *)NULL + dm->drawObject->facemap_start[facemap]); else - glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap], GL_UNSIGNED_INT, + glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT, (int *)dm->drawObject->facemapindices->pointer + dm->drawObject->facemap_start[facemap]); } glPopAttrib(); - GPU_buffer_unbind(dm->drawObject->facemapindices, GPU_BINDING_INDEX); + GPU_buffers_unbind(); glPolygonOffset(0.0, 0.0); dm->release(dm); ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [95b1a59] wiggly-widgets: Facemap support for subsurf modifier
Commit: 95b1a590cd4429980ad78f31fd4dd962154ce40b Author: Antony Riakiotakis Date: Sat Nov 14 01:20:08 2015 +0100 Branches: wiggly-widgets https://developer.blender.org/rB95b1a590cd4429980ad78f31fd4dd962154ce40b Facemap support for subsurf modifier === M source/blender/blenkernel/intern/subsurf_ccg.c === diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index a2c625a..e0312d3 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -2102,6 +2102,73 @@ static void ccgDM_buffer_copy_triangles( MEM_freeN(fc); } +static void ccgDM_buffer_copy_facemaps(DerivedMesh *dm, unsigned int *varray) +{ + GPUDrawObject *gdo = dm->drawObject; + CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm; + CCGSubSurf *ss = ccgdm->ss; + CCGKey key; + int *facemap = DM_get_poly_data_layer(dm, CD_FACEMAP); + int gridSize = ccgSubSurf_getGridSize(ss); + int gridFaces = gridSize - 1; + int i, totface = ccgSubSurf_getNumFaces(ss); + int offset = 0; + int totloops = 0; + int *facemap_offset; + + CCG_key_top_level(, ss); + + gdo->totfacemaps = 0; + + /* pretty crappy to iterate so many times but it's only being done on creation */ + for (i = 0; i < totface; i++) { + gdo->totfacemaps = max_ii(facemap[ccgdm->faceMap[i].startFace], gdo->totfacemaps); + } + /* account for 0 - n -1 range */ + gdo->totfacemaps++; + + gdo->facemap_start = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_start), "GDO_facemap_start"); + gdo->facemap_count = MEM_callocN(gdo->totfacemaps * sizeof(*gdo->facemap_count), "GDO_facemap_count"); + facemap_offset = MEM_callocN(gdo->totfacemaps * sizeof(*facemap_offset), "facemap_offset"); + + for (i = 0; i < totface; i++) { + CCGFace *f = ccgdm->faceMap[i].face; + int numVerts = ccgSubSurf_getFaceNumVerts(f); + gdo->facemap_count[facemap[ccgdm->faceMap[i].startFace]] += gridFaces * gridFaces * numVerts * 2; + } + + for (i = 0; i < gdo->totfacemaps; i++) { + gdo->facemap_start[i] = offset; + offset += gdo->facemap_count[i]; + } + + for (i = 0; i < totface; i++) { + CCGFace *f = ccgdm->faceMap[i].face; + int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); + int facemap_index = facemap[ccgdm->faceMap[i].startFace]; + int fmap_offset = (gdo->facemap_start[facemap_index] + facemap_offset[facemap_index]) * 3; + + facemap_offset[facemap_index] += gridFaces * gridFaces * numVerts * 2; + + for (S = 0; S < numVerts; S++) { + for (y = 0; y < gridFaces; y++) { + for (x = 0; x < gridFaces; x++) { + varray[fmap_offset++] = totloops + 3; + varray[fmap_offset++] = totloops + 2; + varray[fmap_offset++] = totloops + 1; + + varray[fmap_offset++] = totloops + 3; + varray[fmap_offset++] = totloops + 1; + varray[fmap_offset++] = totloops; + + totloops += 4; + } + } + } + } + + MEM_freeN(facemap_offset); +} /* Only used by non-editmesh types */ static void ccgDM_buffer_copy_vertex( @@ -2529,6 +2596,9 @@ static void ccgDM_copy_gpu_data( case GPU_BUFFER_TRIANGLES: ccgDM_buffer_copy_triangles(dm, (unsigned int *)varray_p, mat_orig_to_new); break; + case GPU_BUFFER_FACEMAP: + ccgDM_buffer_copy_facemaps(dm, (unsigned int *)varray_p); + break; default: break; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [9ac0884] master: Fix T46701: Sampled FCurve looks jagged when FModifiers (doing nothing) are present
Commit: 9ac08840ae7e9bd802329e9443da87d4e0dbe5a0 Author: Joshua Leung Date: Sat Nov 14 18:08:36 2015 +1300 Branches: master https://developer.blender.org/rB9ac08840ae7e9bd802329e9443da87d4e0dbe5a0 Fix T46701: Sampled FCurve looks jagged when FModifiers (doing nothing) are present This was caused by interpolation between samples being performed incorrectly (i.e. wrong order of arguments) when sampling more than once per frame. === M source/blender/blenkernel/intern/fcurve.c === diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 02b95c8..abf8472 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -2436,11 +2436,11 @@ static float fcurve_eval_samples(FCurve *fcu, FPoint *fpts, float evaltime) float t = fabsf(evaltime - floorf(evaltime)); /* find the one on the right frame (assume that these are spaced on 1-frame intervals) */ - fpt = prevfpt + (int)(evaltime - prevfpt->vec[0]); + fpt = prevfpt + ((int)evaltime - (int)prevfpt->vec[0]); /* if not exactly on the frame, perform linear interpolation with the next one */ - if (t != 0.0f) - cvalue = interpf(fpt->vec[1], (fpt + 1)->vec[1], t); + if ((t != 0.0f) && (t < 1.0f)) + cvalue = interpf(fpt->vec[1], (fpt + 1)->vec[1], 1.0f - t); else cvalue = fpt->vec[1]; } ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs
[Bf-blender-cvs] [400e8c6] master: Cleanup: readfile: cleanup a bit error messages.
Commit: 400e8c6449c88d11187fda6ea880d0126bc7c26b Author: Bastien Montagne Date: Fri Nov 13 15:26:22 2015 +0100 Branches: master https://developer.blender.org/rB400e8c6449c88d11187fda6ea880d0126bc7c26b Cleanup: readfile: cleanup a bit error messages. Printing those twice is already not so nice, but at least let's try to print same thing, and avoid repetition of 'ERROR' in it. === M source/blender/blenkernel/BKE_report.h M source/blender/blenkernel/intern/report.c M source/blender/blenloader/intern/readfile.c === diff --git a/source/blender/blenkernel/BKE_report.h b/source/blender/blenkernel/BKE_report.h index 2acfeca..70feff1 100644 --- a/source/blender/blenkernel/BKE_report.h +++ b/source/blender/blenkernel/BKE_report.h @@ -66,6 +66,8 @@ Report *BKE_reports_last_displayable(ReportList *reports); bool BKE_reports_contain(ReportList *reports, ReportType level); +const char *BKE_report_type_str(ReportType type); + bool BKE_report_write_file_fp(FILE *fp, ReportList *reports, const char *header); bool BKE_report_write_file(const char *filepath, ReportList *reports, const char *header); diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c index 3b371ce..67b076c 100644 --- a/source/blender/blenkernel/intern/report.c +++ b/source/blender/blenkernel/intern/report.c @@ -43,7 +43,7 @@ #include "BKE_report.h" #include "BKE_global.h" /* G.background only */ -static const char *report_type_str(int type) +const char *BKE_report_type_str(ReportType type) { switch (type) { case RPT_DEBUG: @@ -109,7 +109,7 @@ void BKE_report(ReportList *reports, ReportType type, const char *_message) /* in background mode always print otherwise there are cases the errors wont be displayed, * but still add to the report list since this is used for python exception handling */ if (G.background || !reports || ((reports->flag & RPT_PRINT) && (type >= reports->printlevel))) { - printf("%s: %s\n", report_type_str(type), message); + printf("%s: %s\n", BKE_report_type_str(type), message); fflush(stdout); /* this ensures the message is printed before a crash */ } @@ -117,7 +117,7 @@ void BKE_report(ReportList *reports, ReportType type, const char *_message) char *message_alloc; report = MEM_callocN(sizeof(Report), "Report"); report->type = type; - report->typestr = report_type_str(type); + report->typestr = BKE_report_type_str(type); len = strlen(message); message_alloc = MEM_callocN(sizeof(char) * (len + 1), "ReportMessage"); @@ -136,7 +136,7 @@ void BKE_reportf(ReportList *reports, ReportType type, const char *_format, ...) const char *format = TIP_(_format); if (G.background || !reports || ((reports->flag & RPT_PRINT) && (type >= reports->printlevel))) { - printf("%s: ", report_type_str(type)); + printf("%s: ", BKE_report_type_str(type)); va_start(args, _format); vprintf(format, args); va_end(args); @@ -157,7 +157,7 @@ void BKE_reportf(ReportList *reports, ReportType type, const char *_format, ...) BLI_dynstr_free(ds); report->type = type; - report->typestr = report_type_str(type); + report->typestr = BKE_report_type_str(type); BLI_addtail(>list, report); } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 4198568..1b79a6f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -255,7 +255,7 @@ void blo_reportf_wrap(ReportList *reports, ReportType type, const char *format, BKE_report(reports, type, fixed_buf); if (G.background == 0) { - printf("%s\n", fixed_buf); + printf("%s: %s\n", BKE_report_type_str(type), fixed_buf); } } @@ -5578,7 +5578,7 @@ static void lib_link_scene(FileData *fd, Main *main) base->object = newlibadr_us(fd, sce->id.lib, base->object); if (base->object == NULL) { - blo_reportf_wrap(fd->reports, RPT_WARNING, TIP_("LIB ERROR: object lost from scene: '%s'"), + blo_reportf_wrap(fd->reports, RPT_WARNING, TIP_("LIB: object lost from scene: '%s'"), sce->id.name + 2); BLI_remlink(>base, base); if (base == sce->basact) sce->basact =
[Bf-blender-cvs] [8ad2808] master: Tighten checks around unlinkable datablocks becoming LIB_EXTERN.
Commit: 8ad2808fd74b4d74218deeb7e41e9d45e8fd5571 Author: Bastien Montagne Date: Fri Nov 13 15:34:07 2015 +0100 Branches: master https://developer.blender.org/rB8ad2808fd74b4d74218deeb7e41e9d45e8fd5571 Tighten checks around unlinkable datablocks becoming LIB_EXTERN. We have currently a gooseberry file (scenes/01_island/01_meet_franck/01_01_01_A/01_01_01_A.anim.blend) that links against two -pre repo libs, which are hence not available for common mortals, and generate warnings and placeholders during load step. Issue is, among those missing (directly) linked datablocks, we have two shapekeys! This should never happen nor be possible at all. I tried understanding how this could happen, with no luck at all, best bet would be some wild/bad call to `id_us_plus()` over those skeys at some point... Anyway, this commit: - Handles a bit better those 'cases that should never happen' at load time. - Adds several checks in ID handling code (and save/load code) to try to detect where/when a non-linkable datablock becomes LIB_EXTERN (i.e. directly linked). === M source/blender/blenkernel/intern/library.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/writefile.c === diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index f7f4f1c..a315a1f 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -89,6 +89,7 @@ #include "BKE_global.h" #include "BKE_group.h" #include "BKE_gpencil.h" +#include "BKE_idcode.h" #include "BKE_idprop.h" #include "BKE_image.h" #include "BKE_ipo.h" @@ -152,6 +153,7 @@ void BKE_id_lib_local_paths(Main *bmain, Library *lib, ID *id) void id_lib_extern(ID *id) { if (id) { + BLI_assert(BKE_idcode_is_linkable(GS(id->name))); if (id->flag & LIB_INDIRECT) { id->flag -= LIB_INDIRECT; id->flag |= LIB_EXTERN; @@ -179,10 +181,7 @@ void id_us_plus(ID *id) if (id) { BLI_assert(id->us >= 0); id->us++; - if (id->flag & LIB_INDIRECT) { - id->flag -= LIB_INDIRECT; - id->flag |= LIB_EXTERN; - } + id_lib_extern(id); } } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 1b79a6f..a7585a5 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3382,6 +3382,8 @@ static void lib_link_key(FileData *fd, Main *main) blo_do_versions_key_uidgen(key); } + BLI_assert((key->id.flag & LIB_EXTERN) == 0); + if (key->id.flag & LIB_NEED_LINK) { lib_link_animdata(fd, >id, key->adt); @@ -9623,6 +9625,8 @@ static ID *link_named_part(Main *mainl, FileData *fd, const short idcode, const BHead *bhead = find_bhead_from_code_name(fd, idcode, name); ID *id; + BLI_assert(BKE_idcode_is_linkable(idcode) && BKE_idcode_is_valid(idcode)); + if (bhead) { id = is_yet_read(fd, mainl, bhead); if (id == NULL) { @@ -9762,6 +9766,7 @@ ID *BLO_library_link_named_part_ex( static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *id, ID **r_id) { BHead *bhead = NULL; + const bool is_valid = BKE_idcode_is_linkable(GS(id->name)) || ((id->flag & LIB_EXTERN) == 0); if (fd) { bhead = find_bhead_from_idname(fd, id->name); @@ -9769,6 +9774,16 @@ static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *i id->flag &= ~LIB_READ; + if (!is_valid) { + blo_reportf_wrap( + reports, RPT_ERROR, + TIP_("LIB: %s: '%s' is directly linked from '%s' (parent '%s'), but is a non-linkable datatype"), + BKE_idcode_to_name(GS(id->name)), + id->name + 2, + mainvar->curlib->filepath, + library_parent_filepath(mainvar->curlib)); + } + if (bhead) { id->flag |= LIB_NEED_EXPAND; // printf("read lib block %s\n", id->name); @@ -9785,7 +9800,7 @@ static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *i /* Generate a placeholder for this ID (simplified version of read_libblock actually...). */ if (r_id) { - *r_id = create_placeholder(mainvar, id->name, id->flag); + *r_id = is_valid ? create_placeholder(mainvar, id->name, id->flag) : NULL; }
[Bf-blender-cvs] [6d497d4] master: Cleanup: readfile: avoid some verbose if() checks which are already done in called code.
Commit: 6d497d4f3b874b29d61db63c27bfa252da00e388 Author: Bastien Montagne Date: Thu Nov 12 12:25:17 2015 +0100 Branches: master https://developer.blender.org/rB6d497d4f3b874b29d61db63c27bfa252da00e388 Cleanup: readfile: avoid some verbose if() checks which are already done in called code. === M source/blender/blenloader/intern/readfile.c === diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index e52db00..4198568 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2098,6 +2098,7 @@ static void _IDP_DirectLinkGroup_OrFree(IDProperty **prop, int switch_endian, Fi /* stub function */ static void IDP_LibLinkProperty(IDProperty *UNUSED(prop), int UNUSED(switch_endian), FileData *UNUSED(fd)) { + /* Should we do something here, prop should be ensured to be non-NULL first... */ } /* READ IMAGE PREVIEW *** */ @@ -2678,8 +2679,7 @@ static void lib_link_node_socket(FileData *fd, ID *UNUSED(id), bNodeSocket *sock { /* Link ID Properties -- and copy this comment EXACTLY for easy finding * of library blocks that implement this.*/ - if (sock->prop) - IDP_LibLinkProperty(sock->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + IDP_LibLinkProperty(sock->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); } /* singe node tree (also used for material/scene trees), ntree is not NULL */ @@ -2688,15 +2688,14 @@ static void lib_link_ntree(FileData *fd, ID *id, bNodeTree *ntree) bNode *node; bNodeSocket *sock; - if (ntree->adt) lib_link_animdata(fd, >id, ntree->adt); + lib_link_animdata(fd, >id, ntree->adt); ntree->gpd = newlibadr_us(fd, id->lib, ntree->gpd); for (node = ntree->nodes.first; node; node = node->next) { /* Link ID Properties -- and copy this comment EXACTLY for easy finding * of library blocks that implement this.*/ - if (node->prop) - IDP_LibLinkProperty(node->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + IDP_LibLinkProperty(node->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); node->id= newlibadr_us(fd, id->lib, node->id); @@ -3238,7 +3237,7 @@ static void lib_link_armature(FileData *fd, Main *main) for (arm = main->armature.first; arm; arm = arm->id.next) { if (arm->id.flag & LIB_NEED_LINK) { - if (arm->adt) lib_link_animdata(fd, >id, arm->adt); + lib_link_animdata(fd, >id, arm->adt); arm->id.flag -= LIB_NEED_LINK; } } @@ -3287,7 +3286,7 @@ static void lib_link_camera(FileData *fd, Main *main) for (ca = main->camera.first; ca; ca = ca->id.next) { if (ca->id.flag & LIB_NEED_LINK) { - if (ca->adt) lib_link_animdata(fd, >id, ca->adt); + lib_link_animdata(fd, >id, ca->adt); ca->ipo = newlibadr_us(fd, ca->id.lib, ca->ipo); // XXX deprecated - old animation system @@ -3315,7 +3314,7 @@ static void lib_link_lamp(FileData *fd, Main *main) for (la = main->lamp.first; la; la = la->id.next) { if (la->id.flag & LIB_NEED_LINK) { - if (la->adt) lib_link_animdata(fd, >id, la->adt); + lib_link_animdata(fd, >id, la->adt); for (a = 0; a < MAX_MTEX; a++) { mtex = la->mtex[a]; @@ -3384,7 +3383,7 @@ static void lib_link_key(FileData *fd, Main *main) } if (key->id.flag & LIB_NEED_LINK) { - if (key->adt) lib_link_animdata(fd, >id, key->adt); + lib_link_animdata(fd, >id, key->adt); key->ipo = newlibadr_us(fd, key->id.lib, key->ipo); // XXX deprecated - old animation system key->from = newlibadr(fd, key->id.lib, key->from); @@ -3451,7 +3450,7 @@ static void lib_link_mball(FileData *fd, Main *main) for (mb = main->mball.first; mb; mb = mb->id.next) { if (mb->id.flag & LIB_NEED_LINK) { - if (mb->adt) lib_link_animdata(fd, >id, mb->adt); + lib_link_animdata(fd, >id, mb->adt); for (a = 0; a < mb->totcol; a++) mb->mat[a] = newlibadr_us(fd, mb->id.lib, mb->mat[a]); @@ -3489,7 +3488,7 @@ static void lib_link_world(FileData *fd, Main *main) for
[Bf-blender-cvs] [f9b7ae7] GPencil_Editing_Stage3: Fix small compile error noted by Sybren
Commit: f9b7ae71ff39abc4d185a06cc126062ca01df384 Author: Joshua Leung Date: Sat Nov 14 01:20:19 2015 +1300 Branches: GPencil_Editing_Stage3 https://developer.blender.org/rBf9b7ae71ff39abc4d185a06cc126062ca01df384 Fix small compile error noted by Sybren === M source/blender/editors/gpencil/gpencil_select.c === diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c index 08975f0..83a1f24 100644 --- a/source/blender/editors/gpencil/gpencil_select.c +++ b/source/blender/editors/gpencil/gpencil_select.c @@ -74,6 +74,8 @@ static int gpencil_select_poll(bContext *C) if (gpd->layers.first) return true; } + + return false; } /* ** */ ___ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs