Merge branch 'master' into blender2.8
This commit is contained in:
commit
7f36fb458c
|
@ -184,4 +184,4 @@ set(PCRE_LIBRARY "${LIBDIR}/opencollada/lib/libpcre.a" CACHE STRING
|
|||
endif()
|
||||
|
||||
# Additional linking libraries
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-lrt -static-libstdc++" CACHE STRING "" FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-lrt -static-libstdc++ -no-pie" CACHE STRING "" FORCE)
|
||||
|
|
|
@ -75,7 +75,6 @@ void BKE_pbvh_build_grids(PBVH *bvh, struct CCGElem **grid_elems,
|
|||
struct CCGKey *key, void **gridfaces, struct DMFlagMat *flagmats,
|
||||
unsigned int **grid_hidden);
|
||||
void BKE_pbvh_build_bmesh(PBVH *bvh, struct BMesh *bm, bool smooth_shading, struct BMLog *log, const int cd_vert_node_offset, const int cd_face_node_offset);
|
||||
void BKE_pbvh_set_ccgdm(PBVH *bvh, struct CCGDerivedMesh *ccgdm);
|
||||
void BKE_pbvh_free(PBVH *bvh);
|
||||
void BKE_pbvh_free_layer_disp(PBVH *bvh);
|
||||
|
||||
|
@ -155,7 +154,6 @@ int BKE_pbvh_count_grid_quads(BLI_bitmap **grid_hidden,
|
|||
|
||||
/* multires level, only valid for type == PBVH_GRIDS */
|
||||
void BKE_pbvh_get_grid_key(const PBVH *pbvh, struct CCGKey *key);
|
||||
struct CCGDerivedMesh *BKE_pbvh_get_ccgdm(const PBVH *bvh);
|
||||
|
||||
/* Only valid for type == PBVH_BMESH */
|
||||
struct BMesh *BKE_pbvh_get_bmesh(PBVH *pbvh);
|
||||
|
|
|
@ -608,11 +608,6 @@ void BKE_pbvh_build_grids(PBVH *bvh, CCGElem **grids,
|
|||
MEM_freeN(prim_bbc);
|
||||
}
|
||||
|
||||
void BKE_pbvh_set_ccgdm(PBVH *bvh, CCGDerivedMesh *ccgdm)
|
||||
{
|
||||
bvh->ccgdm = ccgdm;
|
||||
}
|
||||
|
||||
PBVH *BKE_pbvh_new(void)
|
||||
{
|
||||
PBVH *bvh = MEM_callocN(sizeof(PBVH), "pbvh");
|
||||
|
@ -1345,11 +1340,6 @@ void BKE_pbvh_get_grid_key(const PBVH *bvh, CCGKey *key)
|
|||
*key = bvh->gridkey;
|
||||
}
|
||||
|
||||
CCGDerivedMesh *BKE_pbvh_get_ccgdm(const PBVH *bvh)
|
||||
{
|
||||
return bvh->ccgdm;
|
||||
}
|
||||
|
||||
|
||||
BMesh *BKE_pbvh_get_bmesh(PBVH *bvh)
|
||||
{
|
||||
|
|
|
@ -149,8 +149,6 @@ struct PBVH {
|
|||
* objects in sculpt mode with different sizes at the same time, so now storing that common gpu buffer
|
||||
* in an opaque pointer per pbvh. See T47637. */
|
||||
struct GridCommonGPUBuffer *grid_common_gpu_buffer;
|
||||
/* The ccgdm is required for CD_ORIGINDEX lookup in vertex paint + multires */
|
||||
struct CCGDerivedMesh *ccgdm;
|
||||
|
||||
/* Only used during BVH build and update,
|
||||
* don't need to remain valid after */
|
||||
|
|
|
@ -2274,8 +2274,9 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
|
|||
if (ob->sculpt->pbvh) {
|
||||
/* Note that we have to clean up exisitng pbvh instead of updating it in case it does not match current
|
||||
* grid_pbvh status. */
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ob->sculpt->pbvh);
|
||||
if (grid_pbvh) {
|
||||
if (BKE_pbvh_get_ccgdm(ob->sculpt->pbvh) != NULL) {
|
||||
if (pbvh_type == PBVH_GRIDS) {
|
||||
/* pbvh's grids, gridadj and gridfaces points to data inside ccgdm
|
||||
* but this can be freed on ccgdm release, this updates the pointers
|
||||
* when the ccgdm gets remade, the assumption is that the topology
|
||||
|
@ -2289,7 +2290,7 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
|
|||
ob->sculpt->pbvh = NULL;
|
||||
}
|
||||
}
|
||||
else if (BKE_pbvh_get_ccgdm(ob->sculpt->pbvh) != NULL) {
|
||||
else if (pbvh_type == PBVH_GRIDS) {
|
||||
BKE_pbvh_free(ob->sculpt->pbvh);
|
||||
ob->sculpt->pbvh = NULL;
|
||||
}
|
||||
|
@ -2298,10 +2299,6 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
|
|||
}
|
||||
|
||||
if (ccgdm->pbvh) {
|
||||
/* For grid pbvh, keep track of ccgdm */
|
||||
if (grid_pbvh) {
|
||||
BKE_pbvh_set_ccgdm(ccgdm->pbvh, ccgdm);
|
||||
}
|
||||
return ccgdm->pbvh;
|
||||
}
|
||||
|
||||
|
@ -2353,10 +2350,6 @@ static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
|
|||
pbvh_show_mask_set(ccgdm->pbvh, ob->sculpt->show_mask);
|
||||
}
|
||||
|
||||
/* For grid pbvh, keep track of ccgdm. */
|
||||
if (grid_pbvh && ccgdm->pbvh) {
|
||||
BKE_pbvh_set_ccgdm(ccgdm->pbvh, ccgdm);
|
||||
}
|
||||
return ccgdm->pbvh;
|
||||
}
|
||||
|
||||
|
|
|
@ -1651,7 +1651,8 @@ static void do_wpaint_brush_blur_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.wpaint.gmap;
|
||||
|
||||
const Brush *brush = data->brush;
|
||||
|
@ -1678,8 +1679,8 @@ static void do_wpaint_brush_blur_task_cb_ex(
|
|||
if (sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
/* For grid based pbvh, take the vert whose loop coopresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const char v_flag = data->me->mvert[v_index].flag;
|
||||
/* If the vertex is selected */
|
||||
if (!(use_face_sel || use_vert_sel) || v_flag & SELECT) {
|
||||
|
@ -1742,7 +1743,8 @@ static void do_wpaint_brush_smear_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.wpaint.gmap;
|
||||
|
||||
const Brush *brush = data->brush;
|
||||
|
@ -1774,8 +1776,8 @@ static void do_wpaint_brush_smear_task_cb_ex(
|
|||
if (sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
/* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const MVert *mv_curr = &data->me->mvert[v_index];
|
||||
|
||||
/* If the vertex is selected */
|
||||
|
@ -1851,7 +1853,8 @@ static void do_wpaint_brush_draw_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
const Scene *scene = CTX_data_scene(data->C);
|
||||
|
||||
const Brush *brush = data->brush;
|
||||
|
@ -1880,8 +1883,8 @@ static void do_wpaint_brush_draw_task_cb_ex(
|
|||
/* Note: grids are 1:1 with corners (aka loops).
|
||||
* For multires, take the vert whose loop cooresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
|
||||
const char v_flag = data->me->mvert[v_index].flag;
|
||||
/* If the vertex is selected */
|
||||
|
@ -1924,7 +1927,8 @@ static void do_wpaint_brush_calc_average_weight_cb_ex(
|
|||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
StrokeCache *cache = ss->cache;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
|
||||
const bool use_normal = vwpaint_use_normal(data->vp);
|
||||
const bool use_face_sel = (data->me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
|
||||
|
@ -1949,8 +1953,8 @@ static void do_wpaint_brush_calc_average_weight_cb_ex(
|
|||
const float angle_cos = (use_normal && vd.no) ?
|
||||
dot_vf3vs3(sculpt_normal_frontface, vd.no) : 1.0f;
|
||||
if (angle_cos > 0.0 && BKE_brush_curve_strength(data->brush, sqrtf(test.dist), cache->radius) > 0.0) {
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
// const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
// const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const char v_flag = data->me->mvert[v_index].flag;
|
||||
|
||||
/* If the vertex is selected. */
|
||||
|
@ -2569,7 +2573,8 @@ static void do_vpaint_brush_calc_average_color_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.vpaint.gmap;
|
||||
|
||||
StrokeCache *cache = ss->cache;
|
||||
|
@ -2591,7 +2596,7 @@ static void do_vpaint_brush_calc_average_color_cb_ex(
|
|||
{
|
||||
/* Test to see if the vertex coordinates are within the spherical brush region. */
|
||||
if (sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
if (BKE_brush_curve_strength(data->brush, 0.0, cache->radius) > 0.0) {
|
||||
/* If the vertex is selected for painting. */
|
||||
const MVert *mv = &data->me->mvert[v_index];
|
||||
|
@ -2633,7 +2638,8 @@ static void do_vpaint_brush_draw_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.vpaint.gmap;
|
||||
|
||||
const Brush *brush = data->brush;
|
||||
|
@ -2661,8 +2667,8 @@ static void do_vpaint_brush_draw_task_cb_ex(
|
|||
/* Note: Grids are 1:1 with corners (aka loops).
|
||||
* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const MVert *mv = &data->me->mvert[v_index];
|
||||
|
||||
/* If the vertex is selected for painting. */
|
||||
|
@ -2727,7 +2733,8 @@ static void do_vpaint_brush_blur_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
|
||||
Scene *scene = CTX_data_scene(data->C);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.vpaint.gmap;
|
||||
|
@ -2754,8 +2761,8 @@ static void do_vpaint_brush_blur_task_cb_ex(
|
|||
if (sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
/* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const MVert *mv = &data->me->mvert[v_index];
|
||||
|
||||
/* If the vertex is selected for painting. */
|
||||
|
@ -2838,7 +2845,8 @@ static void do_vpaint_brush_smear_task_cb_ex(
|
|||
{
|
||||
SculptThreadedTaskData *data = userdata;
|
||||
SculptSession *ss = data->ob->sculpt;
|
||||
CCGDerivedMesh *ccgdm = BKE_pbvh_get_ccgdm(ss->pbvh);
|
||||
const PBVHType pbvh_type = BKE_pbvh_type(ss->pbvh);
|
||||
const bool has_grids = (pbvh_type == PBVH_GRIDS);
|
||||
|
||||
Scene *scene = CTX_data_scene(data->C);
|
||||
const struct SculptVertexPaintGeomMap *gmap = &ss->mode.vpaint.gmap;
|
||||
|
@ -2871,8 +2879,8 @@ static void do_vpaint_brush_smear_task_cb_ex(
|
|||
if (sculpt_brush_test_sq_fn(&test, vd.co)) {
|
||||
/* For grid based pbvh, take the vert whose loop cooresponds to the current grid.
|
||||
* Otherwise, take the current vert. */
|
||||
const int v_index = ccgdm ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize : 1.0f;
|
||||
const int v_index = has_grids ? data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
|
||||
const float grid_alpha = has_grids ? 1.0f / vd.gridsize : 1.0f;
|
||||
const MVert *mv_curr = &data->me->mvert[v_index];
|
||||
|
||||
/* if the vertex is selected for painting. */
|
||||
|
|
|
@ -121,6 +121,7 @@ const EnumPropertyItem rna_enum_property_unit_items[] = {
|
|||
{PROP_UNIT_TIME, "TIME", 0, "Time", ""},
|
||||
{PROP_UNIT_VELOCITY, "VELOCITY", 0, "Velocity", ""},
|
||||
{PROP_UNIT_ACCELERATION, "ACCELERATION", 0, "Acceleration", ""},
|
||||
{PROP_UNIT_MASS, "MASS", 0, "Mass", ""},
|
||||
{PROP_UNIT_CAMERA, "CAMERA", 0, "Camera", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
|
|
@ -1904,7 +1904,7 @@ static void bpy_prop_callback_assign_enum(struct PropertyRNA *prop, PyObject *ge
|
|||
" :type description: string\n" \
|
||||
|
||||
#define BPY_PROPDEF_UNIT_DOC \
|
||||
" :arg unit: Enumerator in ['NONE', 'LENGTH', 'AREA', 'VOLUME', 'ROTATION', 'TIME', 'VELOCITY', 'ACCELERATION'].\n" \
|
||||
" :arg unit: Enumerator in ['NONE', 'LENGTH', 'AREA', 'VOLUME', 'ROTATION', 'TIME', 'VELOCITY', 'ACCELERATION', 'MASS', 'CAMERA'].\n" \
|
||||
" :type unit: string\n" \
|
||||
|
||||
#define BPY_PROPDEF_NUM_MIN_DOC \
|
||||
|
|
Loading…
Reference in New Issue